• J'aime
Presentation technico-commercial-ruby-on-rails
Prochain SlideShare
Chargement dans... 5
×

Presentation technico-commercial-ruby-on-rails

  • 1,007 vues
Transféré le

 

Plus dans : Technologies
  • Full Name Full Name Comment goes here.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
  • @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 ;)
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
  • @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 !
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
  • @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.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
  • 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 ;)
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
Aucun téléchargement

Vues

Total des vues
1,007
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
2

Actions

Partages
Téléchargements
11
Commentaires
4
J'aime
1

Ajouts 0

No embeds

Signaler un contenu

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
    No notes for slide

Transcript

  • 1. Présentationtechnico-commercialedeRubyonRailsYann Klis, juin 2013
  • 2. RubyonRails
  • 3. RubyonRails
  • 4. interprété> 1 + 1=> 2
  • 5. gestiondelamémoireGarbageCollector
  • 6. orientéobjetpur> 1 + 1=> 2> 1.send(:+, 1)=> 2
  • 7. orientéobjetpur> nil.nil ?=> true
  • 8. orientéobjetpur> true.class=> TrueClass
  • 9. dynamique> ary = []=> []> ary.class.class_eval {attr_accessor :total_entries}=> nil> ary.total_entries = 42=> 42> ary.total_entries=> 42
  • 10. 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
  • 11. blocklambda, fonction anonyme, etc.> ["a","b","c"].each_with_index{|element,i|puts i}012
  • 12. blocklambda, fonction anonyme, etc.> ["a", "b", "c"].map{|element|element.upcase}=> ["A", "B", "C"]
  • 13. lisibilité> 5.times { print "Odelay!" }> Exit unless "restaurant".include?("aura")> [toast, cheese, wine].each{|food|print food.capitalize}
  • 14. Ruby ?QuelRuby ?1.8.71.9.32.0.0
  • 15. Ruby ?QuelRuby ?1.8.7 MRI1.9.3 MRI2.0.0 MRIrbx 2.0.0JRuby 1.7.4
  • 16. rbenvrvm# rbenv list1.8.7-p3581.9.3-p3922.0.0-p0* 2.0.0-p195 (set by /home/yannski/.rbenv/version)
  • 17. rbenv# rbenv install jruby-1.7.4# rbenv local jruby-1.7.4
  • 18. 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
  • 19. RubyonRails
  • 20. ModelViewController
  • 21. ModelViewController
  • 22. ConventionoverConfiguration
  • 23. ConventionoverConfiguration
  • 24. environments# ls -l config/environments/development.rbproduction.rbtest.rb
  • 25. DRY
  • 26. DRYDont Repeat Yourself
  • 27. ActiveRecordM in MVC
  • 28. 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
  • 29. 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)
  • 30. 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
  • 31. 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
  • 32. > 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
  • 33. 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
  • 34. > 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
  • 35. class Productvalidates_presence_of :namebelongs_to :categoryendActiveRecord / associationsapp/models/product.rbclass Categoryhas_many :productsendapp/models/category.rb
  • 36. class Productbefore_validate :reformatbefore_save :check_nameafter_save :rebuild_categoryafter_destroy :destroy_category_if_emptyendActiveRecord / life cycleapp/models/product.rb
  • 37. ActiveModelActiveModel::ModelActiveModel::CallbacksActiveModel::ValidationsActiveModel::DirtyActiveModel::AttributeMethodsActiveModel::SerializationActiveModel::Translation
  • 38. Routing
  • 39. Restful
  • 40. assetpipeline
  • 41. //= 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
  • 42. *= require "custombootstrap"*= require "fontawesome"*= require "datepicker"*= require_selfapp/assets/stylesheets/application.css.scssasset pipeline
  • 43. ActiveSupport
  • 44. > "Je suis à la gare".blank ?=> falseActiveSupport
  • 45. > "".present?=> falseActiveSupport
  • 46. > "Je suis à la gare".parameterize=> "je-suis-a-la-gare"ActiveSupport
  • 47. > "John était allongé à la table duncafé quand soudain le loupapparu.".truncate(22)=> "John était allongé …"ActiveSupport
  • 48. ActionView
  • 49. products.html.erbproducts.html.hamlmovies.json.erbmovies.xml.builderActionView
  • 50. TestTests unitaires des models, des controllers, des helpersTests fonctionnels (rspec, capybara, etc.)
  • 51. railsconsole
  • 52. > 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
  • 53. railsserver
  • 54. railsgenerate
  • 55. debugger
  • 56. i18n
  • 57. CommunautéRubyUnecertainementalité,certes...
  • 58. rakemake en ruby
  • 59. capistranodéploiement
  • 60. rubygems.orgrepository centralisé des gems
  • 61. deviseauthentification
  • 62. omniauthomniauth-facebook, omniauth-twitter,omniauth-dailymotion, omniauth-github, ...
  • 63. paperclipupload de fichiers, stockage, thumbnails, etc.
  • 64. will_paginatepagination
  • 65. state_machinemachine à états...
  • 66. airbrakegestion des exceptions
  • 67. resquegestion des jobs asynchrones(backend Redis)
  • 68. ApprendreRailshttp://railsforzombies.org/http://guides.rubyonrails.org/Formation (chez Novelys!)