Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Using Ruby in a Non-Ruby World
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Samuel E. Giddins
March 04, 2015
Technology
87
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
70
Evolution of Rails within RubyGems.org
segiddins
0
64
The Challenges of Building a Sigstore Client from Scratch
segiddins
0
180
Keeping the Gems Sparkling
segiddins
0
110
A Survey of RubyGems CVEs
segiddins
0
120
Handling 225k requests per second to RubyGems.org
segiddins
0
130
State of the RubyGems 2023
segiddins
0
170
Building Broken Gems
segiddins
0
130
Switching Disciplines as a Tech Lead
segiddins
0
74
Other Decks in Technology
See All in Technology
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
190
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
280
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
180
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
210
AI時代のPRレビューにどう向き合うか?
kairim0
1
220
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
330
Loop Engineering これくらいでいい
mikanichinose
0
230
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
310
FOSS4Gを活用した自治体業務DXの試み
470715
0
150
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
350
その Valkey 使いこなしていますか?
onk
PRO
3
350
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
200
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
First, design no harm
axbom
PRO
2
1.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Code Review Best Practice
trishagee
74
20k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
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