Quelle place pour le framework Rails dans le développement d'application web
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,007 views

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 ...

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).

Statistics

Views

Total Views
1,007
Views on SlideShare
1,006
Embed Views
1

Actions

Likes
0
Downloads
10
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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    
  • Quelle place pour le framework Ruby On Railsdans le développement d’applications web ?    
  • RubyMulti-paradigme Orienté objet Libre Interprété Multi-plateforme    
  • 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 # ["%", "&", "*", "**", "+", "-", ...]    
  • 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!";}    
  • 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!"    
  • 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=    
  • 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    
  • Rails RESTful Convention over Configuration LibreDont Repeat Yourself MVC    
  • 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>    
  • 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>    
  • 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"    
  • MVC Requête Post.find(:all) Contrôleur Modèle [Post1, Post2, ...] Affichage Réponse Vue   
  • 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    
  • Rails poursuit son évolution   
  • 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    
  • 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 !    
  • 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>    
  • 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>    
  • Léco-système   
  • 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    
  • 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    
  • 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 !    
  • New Relic (2/2)   
  • 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    
  • 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 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    
  • 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    
  • 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    
  • 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    
  • Des questions ?   
  • 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