This gives us a very fancy web notebook interface for Ruby. It's a very good tool for programming presentations. It's basically an in-browser REPL loop, with some extra goodies.
Install IRuby with:
gem install iruby
Start the IRuby notebook with:
iruby notebook
$stdout
and $stderr
are redirected to the notebook
In [1]:
puts 'Hello, world!'
In [2]:
$stderr.puts 'Error!'
The last computed result is returned.
In [3]:
Math.sqrt(2)
Out[3]:
This works even for images.
In [4]:
File.open('IRuby Examples/ruby.svg')
In [5]:
File.open('IRuby Examples/ruby.png')
IRuby provides a method to display objects IRuby.display
and methods to create $\LaTeX$ and HTML representations.
In [6]:
IRuby.display '<b style="color:green">Hello, world!</b>', mime: 'text/html'
In [7]:
IRuby.html '<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>'
Out[7]:
$\LaTeX$ is rendered using MathJax.
In [8]:
IRuby.display IRuby.latex <<-'TEX'
\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{eqnarray}
TEX
IRuby.math('F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')
Out[8]:
Arrays and Hashes can be printed as HTML tables.
In [9]:
IRuby.display IRuby.table([1,2,[],3])
IRuby.display IRuby.table({a:1,b:2,c:3})
IRuby.display IRuby.table([[11,12,13,14],[21,22,23],'not an Array',[31,32,33,34]])
IRuby.display IRuby.table({a:[11,12,13,14],b:[21,22,23],c:[31,32,33,34]})
IRuby.display IRuby.table([{a:1,b:2,c:3},'not an Array',{a:2,b:3,c:4,e:5}])
IRuby.display IRuby.table([{a:1,b:2,c:3},{a:2,b:3,c:4,d:5},{0=>:x,1=>:y},[:a,:b,:c]])
Pry is an enhanced Ruby REPL. It will be automatically used by IRuby if available. You can use the code browsing utilities for example.
In [10]:
ls Array
Gnuplot::Plot
objects are automatically displayed inline as SVG.
In [11]:
require 'gnuplot'
Gnuplot::Plot.new do |plot|
plot.xrange '[-0.5:0.5]'
plot.title 'Example plot'
plot.ylabel 'x'
plot.xlabel 'sin(1/x)'
plot.samples 10000
plot.data << Gnuplot::DataSet.new('sin(1/x)') do |ds|
ds.with = 'lines'
ds.linewidth = 2
end
end
Out[11]:
You can also create nice 3D plots
In [12]:
Gnuplot::SPlot.new do |plot|
plot.title 'Spiral'
plot.nokey
plot.parametric
plot.hidden3d
plot.view '80,50'
plot.isosamples '60,15'
plot.xrange '[-8:8]'
plot.yrange '[-8:8]'
plot.zrange '[-8:8]'
plot.urange '[-2*pi:2*pi]'
plot.vrange '[-pi:pi]'
plot.data << Gnuplot::DataSet.new('cos(u)*(cos(v)+3), sin(u)*(cos(v)+3), sin(v)+u') do |ds|
ds.with = 'lines'
end
end
Out[12]:
Rubyvis
objects are automatically displayed inline as SVG.
In [13]:
require 'rubyvis'
Rubyvis::Panel.new do
width 150
height 150
bar do
data [1, 1.2, 1.7, 1.5, 0.7, 0.3]
width 20
height {|d| d * 80}
bottom(0)
left {index * 25}
end
end
Out[13]:
Matrix
and GSL::Matrix
objects are automatically displayed as $\LaTeX$.
In [14]:
require 'matrix'
Matrix[[1,2,3],[1,2,3]]
Out[14]:
Nyaplot
In [15]:
require 'nyaplot'
x = []; y = []; theta = 0.6; a=1
while theta < 14*Math::PI do
x.push(a*Math::cos(theta)/theta)
y.push(a*Math::sin(theta)/theta)
theta += 0.1
end
plot1 = Nyaplot::Plot.new
plot1.add(:line, x, y)
plot1.show
In [ ]: