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
Samuel E. Giddins
March 04, 2015
Technology
86
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
61
Evolution of Rails within RubyGems.org
segiddins
0
53
The Challenges of Building a Sigstore Client from Scratch
segiddins
0
160
Keeping the Gems Sparkling
segiddins
0
110
A Survey of RubyGems CVEs
segiddins
0
110
Handling 225k requests per second to RubyGems.org
segiddins
0
130
State of the RubyGems 2023
segiddins
0
160
Building Broken Gems
segiddins
0
120
Switching Disciplines as a Tech Lead
segiddins
0
70
Other Decks in Technology
See All in Technology
module Synths; end
asonas
1
130
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
190
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
330
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
190
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
250
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
530
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
230
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
150
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
920
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
HDC tutorial
michielstock
2
860
Docker and Python
trallard
47
4.2k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Prompt Engineering for Job Search
mfonobong
0
450
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Spectacular Lies of Maps
axbom
PRO
1
990
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