Ruby

シグモイド関数をグラフ表示

Ubuntu 16.04 で試した % sudo apt-get install gnuplot % gem install gnuplotrequire 'gnuplot' def sigmod( x ) 1.0 / (1.0 + Math.exp( -x ) ) end Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.title 'sample' plot.ylabel 'ylabel' plo…

UDPで送受信を行う

単純に2つのポートを開いて Server->Client ... port:10000 Client->Server ... port:10001 として双方向の通信を行ってみます。UDPのため送信されたデータが届くことは保証されないですが、TCPより手続きが簡単かと思います。 サーバ側のプログラム require…

Ruby実装のTclインタプリタを作ってみた

Ruby実装のTclインタプリタを探していたのですが、 libtclのバインディングしか見つからなくって、しかたなく自分でつくってみました。 いろいろと手抜きはありますが、それなりに実装できたっぽいので以下に公開します。https://github.com/zuk74/pico-tcl…

optparseを使わずにオプション引数をパースしてみる

optparseは使いやすいです。引数は"-X"のショートタイプと"--xxxx"のロングタイプが使用できますし、すっきりとした記述で書けます。ふと、"-test "のようなオプションはパースできないかと考えました。既に"-X"と"--xxxx"が処理できるのに"-xxxx"を処理する…

Rubyでtar.gzを解凍する方法

OSに依存することなく、Ruby上で圧縮データを解凍できるといいなと思うのは私だけでしょうか。 https://github.com/rapodaca/minitar gem install archive-tar-minitarrequire 'zlib' require 'archive/tar/minitar' include Archive::Tar tgz = Zlib::GzipR…

Rubyでunzipする方法

サイトをいろいろあさって、よさそうなものを手直してメモさせていただきました。 require 'fileutils' require 'zip/zipfilesystem' def unzip(src, dest) Zip::ZipInputStream.open(src) do |rf| src = src.encode("UTF-8").gsub("\\", "/") while entry =…

rakeを使ってテストを実行してみる

初心者もいいところで、テストのやり方も満足に知らないもので、ここでテストの方法を勉強です。 とりあえず、RakefileとTestUnitの組み合わせで作るのが簡単そうで触りとしてはよさそうです。 準備するもの Rakefile task :default => [:test] require 'rak…

sinatraでcoffee-scriptをはじめてみる

準備 あらかじめ、Node.jsをインストールしておいてください。 % gem install sinatra coffee-script ソースコード 必要最小限のコード量になっています。 hello.rb require 'sinatra' require 'coffee-script' get '/hello.js' do coffee :hello end get '/…

RVMインストール覚書

Vine6.1環境にRVMをインストールした時の覚書です。 % echo insecure >> ~/.curlrc % \curl -L https://get.rvm.io | bash -s stable --ruby通常のユーザで実行すると、~/.rvm へインストールされます。 root(su -)で実行すると、デフォルトで /usr/local/rv…

Rakefileでg++コンパイルするとき、.oファイルを別ディレクトリにする

g++コンパイルするとき、".o"ファイルがソースと同じディレクトリにあるのがあまり好きではありません。 そこで、.objdirというディレクトリを作成し、そこに".o"や".mf"を置くようにしたいと思います。 CXX = "g++" CFLAGS = "-O2 -Wall" LIBS = "-lm" TARG…

Rakefileでg++コンパイルするとき、ヘッダファイルの依存関係をインポートしてみる

Rakefileは便利なのでg++コンパイルでMakefileの代替になればと思い、いろいろ模索中です。 ひとまず、簡単なメイクは作れるようになってきたところです。 で、問題が1つ浮上。 これまでMakefileでヘッダファイルの依存関係を定義(-MM)していましたが、それ…

Vine6.1でrmagickがインストールできない時

Vineをメインで使っているわけではないのですが、どうしてもVineじゃないとインストール出来ないエンベPCがあって、そこにRedmineサーバをたてようと思ったんだけど、rmagickがうまく入らなかったんです。 でも、なんとかインストールできたので、その対処方…

Rakefileでg++コンパイルするとき、ヘッダファイルの依存関係をインポートしてみる

Rakefileは便利なのでg++コンパイルでMakefileの代替になればと思い、いろいろ模索中です。 ひとまず、簡単なメイクは作れるようになってきたところです。 で、問題が1つ浮上。 これまでMakefileでやっていたヘッダファイルの依存関係を定義していましたが…

Vine6.1でrmagickがインストールできない時

Vineをメインで使っているわけではないのですが、どうしてもVineじゃないとインストール出来ないエンベPCがあって、そこにRedmineサーバをたてようと思ったんだけど、rmagickがうまく入らなかったんです。 でも、なんとかインストールできたので、その対処方…

Ruby-FFIでODEを動かす実験4

それっぽくなってきました。 細かいところでおかしなところありますが、当初イメージしていた形に近づいてきています。 とりあえず動いています。 require 'ffi-ode' require 'ffi-draw_stuff' ODE.dInitODE @world = ODE::World.new do |w| w.gravity = [0,…

Ruby-FFIでODEを動かす実験4

それっぽくなってきました。 細かいところでおかしなところありますが、当初イメージしていた形に近づいてきています。 とりあえず動いています。 require 'ffi-ode' require 'ffi-draw_stuff' ODE.dInitODE @world = ODE::World.new do |w| w.gravity = [0,…

Ruby-FFIでODEを動かす実験3

drawstuffについてメモします。 まだ、構想中ですが、drawstuffを以下のように書ければ記述がすっきりすると思っています。 #構想中 require 'ffi-draw_stuff' DrawStuff.simulation do |fn| fn.size = "600x400" fn.path_to_textures = "../textures" fn.st…

FFIにてRuby引数をC引数に変換してみる

ODEのdsSimulationLoopの引数に渡すため、文字列のArrayをC引数として扱うためには変換が必要です。 色々試して、とりあえず以下の方法なら渡せそうなのでメモします。 require 'ffi' @args = [$0, "-notex"] @argv = FFI::MemoryPointer.new :pointer, @arg…

Ruby-FFIでODEを動かす実験

Ruby-FFIでODE(Open Dynamics Engine)を試してみました。 最近、ODEの話題がめっきり減っている感じですが、ODEのサイトをのぞいてみるといつの間にかバージョンがode-0.12に上がっていました。 メンテナンスされているのは嬉しく思います。 さて、久しぶり…

Ruby-FFIでODEを動かす実験2

ODE付属のdrawstuffもFFIで動かしてみました。試した環境は、 ruby 1.9.3p194 @ CentOS on VMWare) jruby 1.7.0 @ Windows linuxでのコンパイルの場合、drawstuffの動的ライブラリは通常は生成されないので、工夫が必要です。 require 'ffi' module DrawStuf…

Ruby/DLでWindowsのMessageBoxを呼び出す

Ruby/DLは標準ライブラリに含まれます。以下のバージョンで動作を確認しました。 Ruby-1.9.3p286 JRuby-1.7.0.RC2 # for 1.9.x require 'dl/import' module Win32 extend DL::Importer dlload 'User32' extern 'int MessageBoxA(int, char*, char*, int)' en…

RSSを読み込んでみる

Rubyの標準ライブラリの'RSS'を使ってみました。 require 'rss' #$stdout.set_encoding('cp932') url = 'http://d.hatena.ne.jp/diarylist?mode=rss' result = RSS::Parser.parse(url) p result.feed_info puts "Channel: " + result.channel.title result.i…

RSSを読み込んでみる

Rubyの標準ライブラリの'RSS'を使ってみました。 require 'rss' #$stdout.set_encoding('cp932') url = 'http://d.hatena.ne.jp/diarylist?mode=rss' result = RSS::Parser.parse(url) p result.feed_info puts "Channel: " + result.channel.title result.i…

ライブラリ中にテストコードを書く"if __FILE__ == $0"

自分で書いたライブラリを簡単にテストしたいなぁと思った時に使える方法です。 if __FILE__ == $0 #テストコード end ライブラリ中にこのように記載した箇所は、直接実行した場合には呼ばれるが、requireした時にはよばれません。 覚えておくと便利かもしれ…

スクリプト上でirbを起動する

irbはコマンドですが、スクリプトからも起動することができます。 require 'irb' IRB.start これで、irbと打った時と同じ動作になります。 JRubyのswing上で動作させるとjirb_swingのようなことができるはず。とりあえず下調べまで。

多重配列のdeep copy

Rubyの配列をそのまま代入"="するだけだとメモリの参照先が同じなので同じ値しか返ってきません。 また、.dupや.cloneを使っても多重配列はダメみたいです。浅いコピーなので。。。 そこで配列の深いコピー(deep copy)する方法をメモします。 配列のdeep cop…

RVMの使い方メモ

RVM管理下で使えるRuby(バージョン)をリストする: rvm list known % rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-p370] [ruby-]1.9.1[-p431] ・・・ インストールしたRuby(バージョン)をリストする: rvm list % rvm list rvm rubies jru…

複数の異なるバージョンのRubyを入れる

複数の異なるRubyを管理する方法をメモします。 RVM(Ruby Version Manager)を使うことでできます。 https://rvm.io RVMのダウンロードとインストール 通常のユーザで入れると$(HOME)/.rvmにインストールされます。 root(su -)だと、/usr/local/rvm にインス…

Rubyでlinuxのtree似のプログラムを作ってみる

Rubyのお勉強として、linuxコマンドの「tree」を題材にスクリプトを作ってみました。 def tree(path="./", pre=nil) unless pre puts path pre = " " end dir = Dir::entries path dir.delete_if {|d| d == "." or d == ".." } dir.each do |d| last = d == …

RubyでWindowsのtree似のスクリプトを作る

今度は、Windowsの「tree /F」を実行した時の表示と同じようになるようスクリプトを作ってみました。 # coding: cp932 def tree(path="./", pre="") puts path if pre == "" list = Dir::entries path list.delete_if {|d| d =~ /^\./ } dir = list.select {…