SlideShare a Scribd company logo
1 of 135
Download to read offline
The Basis of Making DSL
                      with Ruby




2010   8   28
Who I am


                •   Yasuko Ohba
                •   Ruby Programmer
                •   Developing rails applications
                    and iPhone applications
                •   Everyleaf Corporation
2010   8   28
Housekeeping Book on Web
                             Kozuchi

                • http://www.kozuchi.net
                • http://github.com/everyleaf/kozuchi


2010   8   28
•   @nay3 (twitter)
                •   http://github.com/nay
                •   y.ohba@everyleaf.com


2010   8   28
2010   8   28
2010   8   28
2010   8   28
2010   8   28
2010   8   28
2010   8   28
2010   8   28
Ruby is good for
                      DSL




2010   8   28
Domain Specific
                  Language



2010   8   28
DSL

2010   8   28
DSL
                Hospitals




2010   8   28
Libraries




                                   DSL
                Hospitals




2010   8   28
Libraries         Game




                                   DSL
                Hospitals




2010   8   28
Libraries         Game




                                   DSL
                Hospitals                       EC




2010   8   28
It looks like a
                language rather than a
                        program



2010   8   28
DSL



2010   8   28
internal
                           DSL



2010   8   28
external


                internal
                              DSL



2010   8   28
internal DSL
                   in Ruby




2010   8   28
DSL examples


                •   Rails
                 • routes.rb
                 • migrations
                 • RJS
                • RSpec
                • Rake
2010   8   28
DSL-like codes : Rails


                class NotesController
                  before_filter :find_group
                  ...
                end
2010   8   28
before_filter :find_group




2010   8   28
It doesn’t
                look like DSL ?




2010   8   28
it can be less DSL like



                self.add_before_filter_methods(
                   :find_group)


2010   8   28
much more DSL like


                self.add_before_filter_methods(
                   :find_group)

                before_filter :find_group
2010   8   28
My talk is simple




2010   8   28
I’ll talk about
                readable codes




2010   8   28
DSL-like codes : migrations


                create_table :users do |t|
                 t.string :name
                 t.timestamps
                end
2010   8   28
DSL-like codes : RSpec


                describe Group do
                 it “name                 ” do
                  g = Group.new
                  g.should_not be_valid
                 end

2010   8   28
Easy to read




2010   8   28
Easy to write




2010   8   28
Brief




2010   8   28
Easy to maintain




2010   8   28
OK, but...




2010   8   28
Do we just use
                existing great DSLs ?



                             Photo by Lawrence OP
2010   8   28
NO
2010   8   28
Write your ruby
                codes like DSL
                   everyday



2010   8   28
That’s just a skill of
                programming in Ruby




2010   8   28
I’m going to talk
                     about




2010   8   28
..how to make your
                   codes like DSL




2010   8   28
Our goal




2010   8   28
DSL-likeness




2010   8   28
What decides
                whether it is DSL
                    or not ?



2010   8   28
No Solid Boundary




2010   8   28
But we can feel it




2010   8   28
to make the
                difference clear




2010   8   28
Compare normal
                Ruby codes and DSLs




2010   8   28
Normal Ruby Style



                “Hey receiver, do/return THIS !”




2010   8   28
Hey receiver do THIS!

                array.clear
                array[1]
                array.collect!{...}
                hash.delete(key)
                string.empty?
2010   8   28
Because it’s OOP




2010   8   28
DSLs have
                another styles




2010   8   28
3 typical forms




2010   8   28
1.Declarative Programming

                2.Using Blocks

                3.Methods Represent Special
                  Concepts


2010   8   28
1. Declarative
                Programming



2010   8   28
“I am a rubyist”




2010   8   28
examples : declarative expression



                validates_presence_of :name
                before_filter ...
                has_many :children




2010   8   28
typical features


                • describe status or nature
                • receivers are not always important
                • no brackets
2010   8   28
No money


                self.money = 0




2010   8   28
No money


                self.money = 0

                poor

2010   8   28
Mostly in Class
                 Definitions




2010   8   28
No money


                class Boy
                  poor
                  ...
                end
2010   8   28
Try to express your
                request as a nature
                    of the class



2010   8   28
Object          task

                                 task
                         task




2010   8   28
the class has this nature




                Object          task

                                 task
                         task




2010   8   28
Modules are good
                to express natures


                Class         Object




2010   8   28
Modules are good
                     to express natures


                         Class     Object




                Module

2010   8   28
Modules are good
                     to express natures


                         Class       Object




                Module      Module

2010   8   28
implementation




2010   8   28
Example 1

                Declare the class to have
                some nature implemented as
                a module



2010   8   28
Book
                (Class)
                          class Book
                            include "Product"
                            ...
                          end
                Product

2010   8   28
class Book
                  include "Product"
                  ...
                end


                class Book
                  acts_as_product
                  ...
                end
2010   8   28
class Book
                   acts_as_product
                   ...
                 end

                 NameError: undefined local variable or
                method `acts_as_product' for Book:Class


2010   8   28
You need
                acts_as_product
                     method



2010   8   28
in the super class




2010   8   28
Book       Object
                (Class)     (Class)
                          acts_as_product




2010   8   28
Book       Object
                (Class)     (Class)
                          acts_as_product




2010   8   28
Book       Object
                (Class)     (Class)
                          acts_as_product



                Product



2010   8   28
the easier way

                       class Object
                         def self.acts_as_product
                          include Product
                         end
                       end
                the caller (Book) will be self here


2010   8   28
Book
                (Class)
                          class Book
                            acts_as_product
                            ...
                          end
                Product

2010   8   28
class Object
                          def self.acts_as_product
                           include Product
                          end
                        end

                Execute this before acts_as_product is invoked


                Rails       config/initializer/acts_as_product.rb


2010   8   28
the softer way

                module ActsAsProduct
                 module ClassMethods
                  def acts_as_product
                    include Product
                  end
                 end
                 def self.included(base)
                  base.extend(ClassMethods)
                 end
                end
                Object.instance_eval { include ActsAsProduct }

2010   8   28
Object
                 (Class)


                ActsAsProduct




2010   8   28
Object
                  (Class)

                                    add
                ActsAsProduct acts_as_product
                 ClassMethods




2010   8   28
Book       Object
                (Class)     (Class)

                                              add
                          ActsAsProduct acts_as_product
                           ClassMethods




2010   8   28
Book            Object
                (Class)          (Class)
                          call
                    acts_as_product
                                                  add
                              ActsAsProduct acts_as_product
                                ClassMethods




2010   8   28
Book             Object
                (Class)           (Class)
                           call
                     acts_as_product
                                                   add
                               ActsAsProduct acts_as_product
                Product
                                 ClassMethods




2010   8   28
Example 2

                set @title for a layout in some
                actions in Rails controllers




2010   8   28
Request
                          Controller
                index      show            new     edit




                                  @title
                        layout
2010   8   28
want to write like this


                class BooksController < ApplicationController
                  title "        ", :only => [:edit, :update]
                 ....
                end



2010   8   28
Same Strategy




2010   8   28
add a class method
                 in the super class




2010   8   28
ApplicationController

                title

                  BooksController

2010   8   28
ApplicationController

                class ApplicationController < ...
                  def self.title
                    ...
                  end
                end

2010   8   28
title "            ",
                     :only => [:edit, :update]



2010   8   28
ApplicationController
                class ApplicationController < ...
                  attr_accessor :title


                 def self.title(name, options={})
                    before_filter(options) {|controller|
                                   controller.title = name}
                 end
                 .....
2010   8   28
English naming
                  problems

                validate ?
                validates ?
2010   8   28
2. Using Blocks




2010   8   28
examples : rake


                namespace :myapp do
                 task :my_rake_task do
                   # rake
                 end
                end

2010   8   28
Example : Rails Form
                       Helper

                form_for :book do |f|
                  f.text_field :name
                  f.submit
                end


2010   8   28
Usages of block for DSL


                •   describe complex structure

                • get some tasks into a scope
2010   8   28
describe structure




2010   8   28
Example 3


                Write a game rule
                using playing cards



2010   8   28
Sevens


                game 'sevens' do |g|
                 g.use 53
                 g.deal 53, :to => :each_player
                 ...
                end


2010   8   28
Top
                You   Level
                              Game

                      game    use
                              deal


2010   8   28
class Game
                  def use (card_size, options ={})
                   ...
                  end
                  def deal (card_size, options ={})
                   ...
                  end
                end

2010   8   28
def game
                 g = Game.new
                 yield g
                end

2010   8   28
Top    Game
                You   Level




2010   8   28
Top        Game
                You      Level
                      game

                             Block


2010   8   28
Top        Game
                You      Level
                      game           new

                             Block


2010   8   28
Top        Game
                You      Level
                      game           new

                             Block


2010   8   28
Top        Game
                You      Level
                                           use
                      game           new
                                           deal

                             Block


2010   8   28
want the block
                parameter removed?




2010   8   28
without parameter g


                game 'sevens' do
                 use 53
                 deal 53, :to => :each_player
                 ...
                end


2010   8   28
use instance_exec



                def game(&block)
                 g = Game.new
                 g.instance_exec(&block)
                end


2010   8   28
can be changed slightly


                game 'sevens' do
                 uses 53
                 deals 53, :to => :each_player
                 ...
                end


2010   8   28
3. methods represent
                   special concepts




2010   8   28
methods
                that work as noun




2010   8   28
methods that represent
                     vocabularies
                 in another language




2010   8   28
books_url
                f.submit page.assert
                session   request
                current_user
2010   8   28
an extra DSL style




2010   8   28
4. Methods to make
                 codes like English




2010   8   28
should
                  it    years_since
                bytes
                    from_now
2010   8   28
Balance
                REALLY       Cosmos
                Useful ?     of OOP




2010   8   28
General Tips




2010   8   28
General Tips
                • provide default values for parameters
                • use a hash parameter
                • use symbols
                • naming methods nicely
2010   8   28
Summary




2010   8   28
DSL is
                not very special




2010   8   28
Implementation will
                improve with DSL ideas




2010   8   28
Have a try !




2010   8   28
The best way to learn
                  is reading codes




2010   8   28
Thank you !




2010   8   28

More Related Content

Viewers also liked

کنترل اشیا با مغز
کنترل اشیا با مغزکنترل اشیا با مغز
کنترل اشیا با مغزAmir Ghorbanali
 
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاء
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاءپلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاء
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاءstartupIoT
 
اینترنت اشیا در 10 دقیقه
اینترنت اشیا در 10 دقیقهاینترنت اشیا در 10 دقیقه
اینترنت اشیا در 10 دقیقهMahmood Neshati (PhD)
 
Terms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedTerms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedclintongormley
 
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاء
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاءمروی بر استارترکیتها و پلتفرمهای اینترنت اشیاء
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاءstartupIoT
 
داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد Farzad Khandan
 
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت startupIoT
 
طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)
 طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)  طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)
طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT) Behnaz Motavali
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginDaniel Spilker
 
Internet of Things Security Challlenges
Internet of Things Security ChalllengesInternet of Things Security Challlenges
Internet of Things Security Challlengesquickheal_co_ir
 
DSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional testsDSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional testsMikalai Alimenkou
 
Global In-house Site contribution and value analysis
Global In-house Site contribution and value analysisGlobal In-house Site contribution and value analysis
Global In-house Site contribution and value analysisZinnov
 
Zinnov Zones for IoT Services 2017
Zinnov Zones for IoT Services 2017Zinnov Zones for IoT Services 2017
Zinnov Zones for IoT Services 2017Zinnov
 

Viewers also liked (19)

کنترل اشیا با مغز
کنترل اشیا با مغزکنترل اشیا با مغز
کنترل اشیا با مغز
 
DSL in Clojure
DSL in ClojureDSL in Clojure
DSL in Clojure
 
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاء
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاءپلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاء
پلتفرمهای نرم افزاری و سخت افزاری پیاده سازی راهکارهای اینترنت اشیاء
 
Cloud ofthings
Cloud ofthingsCloud ofthings
Cloud ofthings
 
اینترنت اشیا در 10 دقیقه
اینترنت اشیا در 10 دقیقهاینترنت اشیا در 10 دقیقه
اینترنت اشیا در 10 دقیقه
 
Terms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedTerms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explained
 
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاء
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاءمروی بر استارترکیتها و پلتفرمهای اینترنت اشیاء
مروی بر استارترکیتها و پلتفرمهای اینترنت اشیاء
 
داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد
 
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت
کاربردهای اینترنت اشیاء در حوزه سازمانی و صنعت
 
Practical Groovy DSL
Practical Groovy DSLPractical Groovy DSL
Practical Groovy DSL
 
طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)
 طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)  طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)
طراحی و پیاده سازی سیستم کنترل هوشمند آبیاری گیاهان و باغچه (IoT)
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL Plugin
 
Internet of Things Security Challlenges
Internet of Things Security ChalllengesInternet of Things Security Challlenges
Internet of Things Security Challlenges
 
IOT security
IOT securityIOT security
IOT security
 
ISDN & DSL
ISDN & DSLISDN & DSL
ISDN & DSL
 
DSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional testsDSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional tests
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 
Global In-house Site contribution and value analysis
Global In-house Site contribution and value analysisGlobal In-house Site contribution and value analysis
Global In-house Site contribution and value analysis
 
Zinnov Zones for IoT Services 2017
Zinnov Zones for IoT Services 2017Zinnov Zones for IoT Services 2017
Zinnov Zones for IoT Services 2017
 

More from Yasuko Ohba

Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Yasuko Ohba
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Yasuko Ohba
 
TECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentTECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentYasuko Ohba
 
女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77Yasuko Ohba
 
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Yasuko Ohba
 
世界を描く Drawing the world
世界を描く Drawing the world世界を描く Drawing the world
世界を描く Drawing the worldYasuko Ohba
 
Good Names in Right Places on Rails
Good Names in Right Places on RailsGood Names in Right Places on Rails
Good Names in Right Places on RailsYasuko Ohba
 
ごきげんRails
ごきげんRailsごきげんRails
ごきげんRailsYasuko Ohba
 
名前のつけ方
名前のつけ方名前のつけ方
名前のつけ方Yasuko Ohba
 
Smell in Rails Apps (in Sapporo RubyKaigi03)
Smell in Rails Apps (in Sapporo RubyKaigi03)Smell in Rails Apps (in Sapporo RubyKaigi03)
Smell in Rails Apps (in Sapporo RubyKaigi03)Yasuko Ohba
 
Sub Resources Rails Plug-in
Sub Resources Rails Plug-inSub Resources Rails Plug-in
Sub Resources Rails Plug-inYasuko Ohba
 
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02Yasuko Ohba
 
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Yasuko Ohba
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場Yasuko Ohba
 
テスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecテスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecYasuko Ohba
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 

More from Yasuko Ohba (20)

Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)
 
TECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentTECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team Development
 
女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77
 
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
 
世界を描く Drawing the world
世界を描く Drawing the world世界を描く Drawing the world
世界を描く Drawing the world
 
Sendai ruby-02
Sendai ruby-02Sendai ruby-02
Sendai ruby-02
 
Good Names in Right Places on Rails
Good Names in Right Places on RailsGood Names in Right Places on Rails
Good Names in Right Places on Rails
 
ごきげんRails
ごきげんRailsごきげんRails
ごきげんRails
 
名前のつけ方
名前のつけ方名前のつけ方
名前のつけ方
 
Shimane2010
Shimane2010Shimane2010
Shimane2010
 
Smell in Rails Apps (in Sapporo RubyKaigi03)
Smell in Rails Apps (in Sapporo RubyKaigi03)Smell in Rails Apps (in Sapporo RubyKaigi03)
Smell in Rails Apps (in Sapporo RubyKaigi03)
 
Sub Resources Rails Plug-in
Sub Resources Rails Plug-inSub Resources Rails Plug-in
Sub Resources Rails Plug-in
 
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
 
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
 
Raspbilly
RaspbillyRaspbilly
Raspbilly
 
テスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecテスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpec
 
Shimane2008
Shimane2008Shimane2008
Shimane2008
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 

Recently uploaded

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 

The Basis of Making DSL with Ruby