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
Scientific Computing in Ruby at Ruby World Conf...
Search
Sameer Deshmukh
November 03, 2016
Programming
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scientific Computing in Ruby at Ruby World Conference 2016.
Talk on Scientific Computing in Ruby at Ruby World Conference, Matsue City, Shimane, Japan.
Sameer Deshmukh
November 03, 2016
More Decks by Sameer Deshmukh
See All by Sameer Deshmukh
XND and rubyplot - typed arrays and visualization in Ruby
v0dro
0
240
Ferrari Driven Development: superfast Ruby with Rubex
v0dro
0
2.2k
Ruby Kaigi 2017 - C how to supercharge your Ruby with Rubex
v0dro
1
490
Deccan Ruby Conf 2017 Rubex intro
v0dro
0
120
Rubex: A new way of writing C extensions for CRuby
v0dro
1
600
Scientific Computing in Ruby at Ruby World Conference 2016
v0dro
0
160
Data Analysis in RUby with daru
v0dro
3
3.8k
Introduction benchmark-plot at PRUG
v0dro
0
140
Webinar - Scientific Computing and Data Visualization
v0dro
0
120
Other Decks in Programming
See All in Programming
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
630
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
450
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
contenteditable と日本語入力に向き合う
colorful12
0
170
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
190
残高管理から台帳サービスへの進化
artoy
0
170
パーソナライズPodcastを作った話
repunit11
0
130
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
120
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
240
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
7.8k
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.3k
We Are The Robots
honzajavorek
0
390
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
860
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
Raft: Consensus for Rubyists
vanstee
142
7.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
GitHub's CSS Performance
jonrohan
1033
470k
Transcript
namaste
Incredible India
None
None
None
India must master Western science and yet preserve its Culture
and Heritage. What India Dreams
None
City of Pune. Population: 6 million. Oxford of the East.
Sameer Deshmukh github.com/v0dro @v0dro
None
Dr. Gopal Deshmukh Sameer Desmukh Dr. Hemchandra Deshmukh Dr. Satish
Deshmukh
www.soundcloud.com/catkamikazee Sameer
None
None
Pune Ruby Users Group www.punerb.org @punerb @punerb @deccanrubyconf www.deccanrubyconf.org
Ruby Science Foundation www.sciruby.com @sciruby @sciruby
None
Scientific Computing In Ruby
iruby notebook
Browser based Ruby REPL for interactive computing.
Runs in your browser Input cell – accepts Ruby code
Output cell – can render HTML/CSS/JS
None
nmatrix
ndimensional array object. Interface Ruby with high speed C libraries.
require 'nmatrix' n = NMatrix.new( [2,2], [1,2,3,4], dtype: :float32, stype:
:dense ) n[0,1] # => 2.0
Data Types :int8 :float32 :int16 :float64 :int32 :complex64 :int64 :complex128
Storage types Dense Dense matrix. List Sparse matrix type storing
data as a linked list. Yale Sparse type storing data in the 'New Yale' format.
NMatrix C API
nmatrix nmatrix atlas nmatrix lapacke nmatrix fftw gsl
nyaplot
Interactive plotting tool for Rubyists.
interactive HTML and JavaScript plots that can be displayed in
your browser.
None
Mapnya Nyaplot3D Bionya Map visualizations with inbuilt country charts. Three
Dimensional interactive plots. Biology plots for visualizing relationships of genes.
daru (Data Analysis in RUby)
daru == (Hindi) ददार sake alcohol
library for analysis, cleaning, manipulation and visualization of data.
Read/write many data sources Ephemeral statistics functions Works well with
'wild' data Data indexing
Acts as glue between other SciRuby libraries.
Daru::Vector Heterogenous Array that can be indexed on any Ruby
object. Name Label(0) Label(1) Label(2) ... Label(n-1)
Daru::DataFrame 2D spreadsheet like data structure indexed by rows or
columns. Col0 Label(0) Label(1) Label(2) ... Label(n-1) Col1 Col2 Col(n-1) ....
New Ideas for better Ruby
“Any sufficiently advanced technology is indistinguishable from magic.” Arthur
C. Clarke
Writing C extensions • FFI gem. • Rice. • SWIG.
• Writing C bindings manually.
Rubyist! Write me a C extension!
def factorial n n > 1 ? n*factorial(n-1) : 1
end
unsigned long long int calc_factorial(unsigned long long int n) {
return (n > 1 ? n*calc_factorial(n-1) : 1); } static VALUE cfactorial(VALUE self, VALUE n) { return ULL2FIX( calc_factorial(NUM2ULL(n))); }
void Init_factorial() { VALUE cFact = rb_define_class("Fact", rb_cObject); rb_define_method(cFact, "factorial",
cfactorial, 1); }
a = Fact.new a.factorial(8000)
Big Problems • Difficult and irritating to write. • Time
consuming to debug. • Tough to trace memory leaks. • Change mindset from high level to low level language. • Need to care about small things.™* *Matz – Keynote at Red Dot Ruby Conf 2016, Singapore.
Rubex
Rubex is a Crystalinspired superset of Ruby that compiles to
C.
class Fact def factorial(unsigned long long int n) n >
1 ? n*factorial(n-1) : 1 end end
# Create a C static array and return a Ruby
Array def adder(n) a = StaticArray(i32, n) i32 i = 0 i32 sum = 0 a.each(n) { a[i] = i*5 } for 0 <= i < n do sum += a[i] end sum end
Received the Ruby Association Grant 2016 for development of Rubex
https://github.com/v0dro/rubex
Scientific Computing on JRuby
NMatrix and NArray are a linear algebra libraries for Ruby
similar to numpy.
NMatrix C/C++ core CRuby interpreter Numo::NArray C core CRuby interpreter
JRuby backend for the NMatrix Ruby API – Sci. Computing
on JVM.
Allows interfacing JRuby libraries with jBLAS for performance. Uses Apache
Commons Math library for storage and operations on internal Java arrays.
https://github.com/prasunanand/ nmatrix/tree/jruby_port
Symbolic Computation in Ruby with symengine.rb
(x – y) * (x ** y / z)
require 'symengine' x = SymEngine::Symbol.new("x") y = SymEngine::Symbol.new("y") z =
SymEngine::Symbol.new("z") f = (x – y) * (x ** y / z) f.expand.to_s # x**(1 + y)/z – x**y*y/z f == - (x**y*y/z) + (x**y*x/z) # true
https://github.com/symengine/ symengine.rb
Ruby in Space
NASA SPICE Ruby wrapper spice_rub
require 'spice_rub' k_pool = SpiceRub::KernelPool.instance k_pool.load_folder("spec/data/kernels") epoch = SpiceRub::Time.now moon
= SpiceRub::Body.new(:moon) earth = SpiceRub::Body.now(:earth) earth.position_at(epoch) moon.distance_from(:earth, epoch) # 395791.1464913574 (Km)
https://github.com/gau27/spice_rub
Cool SciRuby Stickers
Thank You Ruby World Conf!
Any questions?