Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Using Ruby in a Non-Ruby World
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Samuel E. Giddins
March 04, 2015
Technology
84
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Using Ruby in a Non-Ruby World
Samuel E. Giddins
March 04, 2015
More Decks by Samuel E. Giddins
See All by Samuel E. Giddins
Funding Ruby Infrastructure as a Non-Profit
segiddins
0
46
Evolution of Rails within RubyGems.org
segiddins
0
46
The Challenges of Building a Sigstore Client from Scratch
segiddins
0
150
Keeping the Gems Sparkling
segiddins
0
99
A Survey of RubyGems CVEs
segiddins
0
93
Handling 225k requests per second to RubyGems.org
segiddins
0
120
State of the RubyGems 2023
segiddins
0
140
Building Broken Gems
segiddins
0
110
Switching Disciplines as a Tech Lead
segiddins
0
64
Other Decks in Technology
See All in Technology
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
590
Why is RC4 still being used?
tamaiyutaro
0
110
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
200
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
620
AI時代における最適なQA組織の作り方
ymty
3
160
初めてのDatabricks勉強会
taka_aki
2
190
Fabricをフル活用する AI Agent Hub -製造業特化AIエージェントの設計
iotcomjpadmin
0
160
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
220
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
0
360
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
440
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
110
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
280
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
For a Future-Friendly Web
brad_frost
183
10k
Navigating Team Friction
lara
192
16k
How STYLIGHT went responsive
nonsquared
100
6.2k
Leo the Paperboy
mayatellez
7
1.9k
GitHub's CSS Performance
jonrohan
1033
470k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Transcript
Using Ruby in a Non-Ruby World
Samuel Giddins Realm CocoaPods Bundler
Show of hands: Who writes Ruby for a living?
Show of hands: Who uses something built in Ruby every
day?
Let’s name some
Those are some great tools! Do you think their utility
is limited to Ruby developers?
No
I write Ruby every day
I write Ruby every day => I am a Rubyist
Let’s look at some of the tools we use: —
rvm/rbenv/chruby — Bundler — Native extensions
Version Managers
For me: $ rbenv versions | wc -l 13 $
ruby -v 2.2.0p0
For others: $ which ruby /usr/bin/ruby $ ruby -v 2.0.0p353
# And be thankful it's not 1.8.7
Can’t you just update to 2.1.5? Not particularly helpful.
Bundler
Bundler Is wonderful.
But most people want to install a tool once and
forget about it.
Yeah, they should use a Gemfile. But they won’t.
So your gem will be polluting their global namespace.
Native Extensions
They’re such a pain.
Compilation as part of the CocoaPods gem install process is
dead. Long live precompiled gems! — CocoaPods 0.27 and improved installation UX
Not everyone needs to have a compiler installed. Or the
Ruby headers. Or a proper build setup.
Not everyone needs to have a compiler installed. Or the
Ruby headers. Or a proper build setup. And they shouldn't need to
In this ‘developer bubble’ there is no sane Ruby environment
unless you at least build your own Ruby, but preferably including one or more of the following tools: homebrew, RVM, rbenv, and many other alternatives.
And Now For The Fun Part
Let’s get positive.
DSLs
Ruby is awesome for building DSLs.
source 'https://github.com/CocoaPods/Specs.git' target 'iOS' do pod 'Realm' pod 'RestKit', git:
'https://github.com/RestKit/RestKit.git' end
It barely even looks like code!
Pod::Specification.new do |s| s.name = 'Realm' s.version = `sh build.sh
get-version`.chomp end
That definitely is starting to seem more like code.
The difference?
BasicObject.instance_eval # the first # vs Kernel.eval # the second
If someone doesn’t realize they’re writing Ruby, you’ve done a
! job.
— Ruby 1.9 hash syntax - ! — Curly brace
procs & lambdas - " — do...end blocks - ! — Symbol parameters - " — def f(*args); end - !
Hide the Ruby out back.
NoMethodError - undefined method `[]' for #<Xcodeproj::Project::Object::PBXFileReference:0x007fcf522734a8> /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/project.rb:186:in `block in
add_file_reference' /usr/local/Cellar/ruby/2.1.3_1/lib/ruby/2.1.0/pathname.rb:266:in `block in each_filename' /usr/local/Cellar/ruby/2.1.3_1/lib/ruby/2.1.0/pathname.rb:266:in `each' /usr/local/Cellar/ruby/2.1.3_1/lib/ruby/2.1.0/pathname.rb:266:in `each_filename' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/project.rb:184:in `add_file_reference' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:168:in `block (2 levels) in add_file_accessors_paths_to_pods_group' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:166:in `each' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:166:in `block in add_file_accessors_paths_to_pods_group' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:162:in `each' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:162:in `add_file_accessors_paths_to_pods_group' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:103:in `block in add_resources' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/user_interface.rb:110:in `message' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:102:in `add_resources' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer/file_references_installer.rb:38:in `install!' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer.rb:486:in `install_file_references' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer.rb:130:in `block in generate_pods_project' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/user_interface.rb:49:in `section' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer.rb:128:in `generate_pods_project' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/installer.rb:96:in `install!' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/command/project.rb:71:in `run_install_with_update' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/command/project.rb:101:in `run' /usr/local/lib/ruby/gems/2.1.0/gems/claide-0.8.1/lib/claide/command.rb:312:in `run' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/lib/cocoapods/command.rb:46:in `run' /usr/local/lib/ruby/gems/2.1.0/gems/cocoapods-0.36.0.rc.1/bin/pod:44:in `<top (required)>' /usr/local/bin/pod:23:in `load' /usr/local/bin/pod:23:in `<main>'
[!] Installation could not proceed because an unexpected object was
found in your project file.
Be Friendly
Sure, these tips are designed to keeps Ruby newcomers happy.
Sure, these tips are designed to keeps Ruby newcomers happy.
But they also make your software much friendlier.
Available now on Speaker Deck. https://speakerdeck.com/segiddins/using-ruby-in-a- non-ruby-world
puts Question.all.map(&:ask?).map(&:answer!)
Samuel Giddins Realm @segiddins