• Partagez
  • E-mail
  • Intégrer
  • J'aime
  • Télécharger
  • Contenu privé
Presentation technico-commercial-ruby-on-rails
 

Presentation technico-commercial-ruby-on-rails

on

  • 1,181 vues

 

Statistiques

Vues

Total des vues
1,181
Vues sur SlideShare
934
Vues externes
247

Actions

J'aime
1
Téléchargements
10
Commentaires
4

2 Ajouts 247

http://news.humancoders.com 223
https://twitter.com 24

Accessibilité

Catégories

Détails de l'import

Uploaded via as Adobe PDF

Droits d'utilisation

© Tous droits réservés

Report content

Signalé comme inapproprié Signaler comme inapproprié
Signaler comme inapproprié

Indiquez la raison pour laquelle vous avez signalé cette présentation comme n'étant pas appropriée.

Annuler

14 sur 4 précédent suivant Publier un commentaire

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
  • @rchampourlier je pense que la communauté Ruby/Rails a été la première à introduire très tôt tout un tas de bonnes pratiques, et a été la première à tester et mettre en place des technos connexes (MongoDB, Redis, AWS, Heroku, Chef, etc). Ce n'est pas un hasard si Github, Heroku ou Chef viennent du monde Ruby. Globalement, le rubyiste a plus tendance à avoir une bonne veille techno, indispensable à l'ingéniosité (attention, il y a aussi des rubyistes vieux dans leur tête ;)
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
  • @novelys Merci pour ta réponse !

    [attention:troll-risky]Dois-je comprendre de ta dernière phrase que la communauté RoR est très en avance sur l'ingéniosité ?[/attention] ;)

    Je comprends bien ta réponse en effet et je m'y attendais. Je tentais le coup quand même pour voir si quelqu'un avec de l'expérience dans le domaine pouvait avancer quelques pions sur le sujet, mais c'est clair que c'est beaucoup trop complexe pour être réduit à un comparatif de chiffrages !
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
  • @rchampourlier le problème du coût c'est qu'il englobe bien plus que la technologie : le mindset, les bonnes pratiques réellement appliquées, l'expérience de l'équipe, l'ingéniosité de l'équipe (et dans le cas d'une startup, c'est extrêmement important), la cohésion de l'équipe (le graph/intégrateur sait-il produire un combo haml/sass ?). Le seul truc que je peux dire, c'est que la communauté Ruby et Rails est plutôt très en avance sur ces sujets.
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
  • Merci d'avoir partagé cette présentation ! C'est intéressant de voir présenté Ruby On Rails dans ce contexte ('public cible était les chefs de projet ou les développeurs qui se demandent si Ruby on Rails peut répondre à leurs problématiques'), et c'est utile de voir ce que tu mets en avant.

    J'aurai aussi aimé trouver un retour d'expérience / une comparaison de Rails avec d'autres frameworks du point de vue des coûts de développement initial et de maintenance sur des 'projets types', si tu as des idées à ce sujet je serai ravi de t'écouter ;)
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

    Presentation technico-commercial-ruby-on-rails Presentation technico-commercial-ruby-on-rails Presentation Transcript

    • Présentationtechnico-commercialedeRubyonRailsYann Klis, juin 2013
    • RubyonRails
    • RubyonRails
    • interprété> 1 + 1=> 2
    • gestiondelamémoireGarbageCollector
    • orientéobjetpur> 1 + 1=> 2> 1.send(:+, 1)=> 2
    • orientéobjetpur> nil.nil ?=> true
    • orientéobjetpur> true.class=> TrueClass
    • dynamique> ary = []=> []> ary.class.class_eval {attr_accessor :total_entries}=> nil> ary.total_entries = 42=> 42> ary.total_entries=> 42
    • class Printingdef method_missing(m, *args)if (name = /^test_(.+)$/.match(m.id2name))print name[1]endendEnd> printing = Printing.new> printing.test_hello=> "hello"> printing.test_pipo=> "pipo"dynamique
    • blocklambda, fonction anonyme, etc.> ["a","b","c"].each_with_index{|element,i|puts i}012
    • blocklambda, fonction anonyme, etc.> ["a", "b", "c"].map{|element|element.upcase}=> ["A", "B", "C"]
    • lisibilité> 5.times { print "Odelay!" }> Exit unless "restaurant".include?("aura")> [toast, cheese, wine].each{|food|print food.capitalize}
    • Ruby ?QuelRuby ?1.8.71.9.32.0.0
    • Ruby ?QuelRuby ?1.8.7 MRI1.9.3 MRI2.0.0 MRIrbx 2.0.0JRuby 1.7.4
    • rbenvrvm# rbenv list1.8.7-p3581.9.3-p3922.0.0-p0* 2.0.0-p195 (set by /home/yannski/.rbenv/version)
    • rbenv# rbenv install jruby-1.7.4# rbenv local jruby-1.7.4
    • bundler&Gemfilesource https://rubygems.orggem rails, 4.0.0gem rails-i18ngem sass-rails, ~> 4.0.0gem haml-rails, >= 4.0.0gem mongoid, github: mongoid/mongoid
    • RubyonRails
    • ModelViewController
    • ModelViewController
    • ConventionoverConfiguration
    • ConventionoverConfiguration
    • environments# ls -l config/environments/development.rbproduction.rbtest.rb
    • DRY
    • DRYDont Repeat Yourself
    • ActiveRecordM in MVC
    • class Product < ActiveRecord::BaseendActiveRecord / migrationsclass CreateProducts < ActiveRecord::Migrationdef changecreate_table :products do |t|t.string :namet.text :descriptiont.timestampsendendenddb/migrate/20130626120509_create_products.rbapp/models/product.rb
    • ActiveRecord / migrationsmysql> show tables;+---------------------------------+| Tables_in_monapppli_development |+---------------------------------+| products || schema_migrations |+---------------------------------+2 rows in set (0.00 sec)mysql> describe schema_migrations;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| version | varchar(255) | NO | PRI | NULL | |+---------+--------------+------+-----+---------+-------+1 row in set (0.00 sec)mysql> select * from schema_migrations;+----------------+| version |+----------------+| 20130626120509 |+----------------+1 row in set (0.00 sec)
    • irb(main):001:0> product = Product.new=> #<Product id: nil, name: nil, description: nil, created_at: nil, updated_at: nil>irb(main):002:0> product.name = "Macbook"=> "Macbook"irb(main):003:0> product.save(0.4ms) BEGINSQL (0.3ms) INSERT INTO `products` (`created_at`, `name`, `updated_at`) VALUES(2013-06-26 12:08:17, Macbook, 2013-06-26 12:08:17)(4.7ms) COMMIT=> trueActiveRecord / migrations
    • irb(main):004:0> Product.count(0.5ms) SELECT COUNT(*) FROM `products`=> 1irb(main):005:0> Product.firstProduct Load (0.5ms) SELECT `products`.* FROM `products` ORDER BY`products`.`id` ASC LIMIT 1=> #<Product id: 1, name: "Macbook", description: nil, created_at: "2013-06-2612:08:17", updated_at: "2013-06-26 12:08:17">irb(main):006:0> Product.where(name: "Macbook")Product Load (0.8ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook=> #<ActiveRecord::Relation [#<Product id: 1, name: "Macbook", description: nil,created_at: "2013-06-26 12:08:17", updated_at: "2013-06-26 12:08:17">]>irb(main):008:0> Product.where(name: "Macbook").firstProduct Load (0.7ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook ORDER BY `products`.`id` ASC LIMIT 1=> #<Product id: 1, name: "Macbook", description: nil, created_at: "2013-06-2612:08:17", updated_at: "2013-06-26 12:08:17">ActiveRecord / query
    • > Product.where(name: "Macbook")Product Load (0.8ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook=> #<ActiveRecord::Relation [#<Product id: 1, name: "Macbook", description: nil,created_at: "2013-06-26 12:08:17", updated_at: "2013-06-26 12:08:17">]>> Product.where(name: "Macbook").to_aProduct Load (0.4ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook=> [#<Product id: 1, name: "Macbook", description: nil, created_at: "2013-06-2612:08:17", updated_at: "2013-06-26 12:08:17">]ActiveRecord / query
    • class Productvalidates_presence_of :nameendActiveRecord / validationsclass CreateProducts < ActiveRecord::Migrationdef changecreate_table :products do |t|t.string :namet.text :descriptiont.timestampsendendenddb/migrate/20130626120509_create_products.rbapp/models/product.rb
    • > product = Product.new=> #<Product id: nil, name: nil, description: nil, created_at: nil, updated_at: nil>> product.save(0.3ms) BEGIN(0.2ms) ROLLBACK=> false> product.errors=> #<ActiveModel::Errors:0x007f2f9fb1bec8 @base=#<Product id: nil, name: nil,description: nil, created_at: nil, updated_at: nil>, @messages={:name=>["cant beblank"]}>ActiveRecord / validations
    • class Productvalidates_presence_of :namebelongs_to :categoryendActiveRecord / associationsapp/models/product.rbclass Categoryhas_many :productsendapp/models/category.rb
    • class Productbefore_validate :reformatbefore_save :check_nameafter_save :rebuild_categoryafter_destroy :destroy_category_if_emptyendActiveRecord / life cycleapp/models/product.rb
    • ActiveModelActiveModel::ModelActiveModel::CallbacksActiveModel::ValidationsActiveModel::DirtyActiveModel::AttributeMethodsActiveModel::SerializationActiveModel::Translation
    • Routing
    • Restful
    • assetpipeline
    • //= require jquery//= require jquery_ujs//= require jquery-ui//= require bootstrap//= require bootstrap-datepicker//= require jquery_nested_form//= require ckeditor/init//= require_tree .app/assets/javascripts/application.jsasset pipeline
    • *= require "custombootstrap"*= require "fontawesome"*= require "datepicker"*= require_selfapp/assets/stylesheets/application.css.scssasset pipeline
    • ActiveSupport
    • > "Je suis à la gare".blank ?=> falseActiveSupport
    • > "".present?=> falseActiveSupport
    • > "Je suis à la gare".parameterize=> "je-suis-a-la-gare"ActiveSupport
    • > "John était allongé à la table duncafé quand soudain le loupapparu.".truncate(22)=> "John était allongé …"ActiveSupport
    • ActionView
    • products.html.erbproducts.html.hamlmovies.json.erbmovies.xml.builderActionView
    • TestTests unitaires des models, des controllers, des helpersTests fonctionnels (rspec, capybara, etc.)
    • railsconsole
    • > Product.where(name: "Macbook")Product Load (0.8ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook=> #<ActiveRecord::Relation [#<Product id: 1, name: "Macbook", description: nil,created_at: "2013-06-26 12:08:17", updated_at: "2013-06-26 12:08:17">]>> Product.where(name: "Macbook").to_aProduct Load (0.4ms) SELECT `products`.* FROM `products` WHERE`products`.`name` = Macbook=> [#<Product id: 1, name: "Macbook", description: nil, created_at: "2013-06-2612:08:17", updated_at: "2013-06-26 12:08:17">]ActiveRecord / query
    • railsserver
    • railsgenerate
    • debugger
    • i18n
    • CommunautéRubyUnecertainementalité,certes...
    • rakemake en ruby
    • capistranodéploiement
    • rubygems.orgrepository centralisé des gems
    • deviseauthentification
    • omniauthomniauth-facebook, omniauth-twitter,omniauth-dailymotion, omniauth-github, ...
    • paperclipupload de fichiers, stockage, thumbnails, etc.
    • will_paginatepagination
    • state_machinemachine à états...
    • airbrakegestion des exceptions
    • resquegestion des jobs asynchrones(backend Redis)
    • ApprendreRailshttp://railsforzombies.org/http://guides.rubyonrails.org/Formation (chez Novelys!)