Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
   [VB] [VB6] [C#] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [CE] [LTSA] [自動化] [Qt] [OCaml] [TOOLS]
   [3Dプリンタ] [RAA] [Forge]   [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [Java] [EA] [マクロ]

2014-08-22

コマンドラインのエラーメッセージをファイルに出力する方法

コマンドラインのエラーメッセージをファイルに出力する方法 - Rubyの魔神 を含むブックマーク はてなブックマーク - コマンドラインのエラーメッセージをファイルに出力する方法 - Rubyの魔神 コマンドラインのエラーメッセージをファイルに出力する方法 - Rubyの魔神 のブックマークコメント

rescueの部分でファイルに出力するといいそうです。


http://okwave.jp/qa/q8270092.html

  begin
    VRLocalScreen.start(MyForm) ……※Formを実行している記述(一例です)
  rescue
    File.open("error.txt","w") do |f|
    f.puts $!.message
    f.puts $!.backtrace
  end
end


$!は「最後に例外が発生したときの Exception オブジェクト」だそうです。

http://docs.ruby-lang.org/ja/1.9.3/method/Kernel/v/=21.html

Ruby GUI

Ruby GUI - Rubyの魔神 を含むブックマーク はてなブックマーク - Ruby GUI - Rubyの魔神 Ruby GUI - Rubyの魔神 のブックマークコメント

こちらのサイトを参考にしました。OSはWindows7 Ruby2.1です。

http://www3.ocn.ne.jp/~igus/starthp/ruby_memo.html

  1. msgbox
#! ruby
require 'win32ole'
 
wsh = WIN32OLE.new('WScript.Shell')
wsh.Popup("hellow",0, "title")
  1. inputbox
require'win32ole' 

sc=WIN32OLE.new("ScriptControl")
sc.language="VBScript"
a=sc.eval('InputBox("hellow"&vbcrlf&"","title")')
sc.eval(%Q! MsgBox("#{a}",0,"title") !)
  1. ファイル選択ダイアログ
#! ruby

require 'win32ole'

obj=WIN32OLE.new("MSComDlg.CommonDialog")
obj.MaxFileSize =255    
obj.Filter = "all (*.*)|*.*|"
obj.InitDir ="C:\\" 
obj.ShowOpen 
file=obj.FileName

wsh = WIN32OLE.new('WScript.Shell')
if file==""
  wsh.Popup("cansel",0, "error:")
else
  wsh.Popup(file,0, "selected")
end
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20140822

2013-12-20

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20131220

2013-10-04

Runnable

Runnable - Rubyの魔神 を含むブックマーク はてなブックマーク - Runnable - Rubyの魔神 Runnable - Rubyの魔神 のブックマークコメント

「プログラムコードのYouTube」を目指すRunnable。サンプルはサイト内で編集・実行可

「プログラムコードのYouTube」を目指すRunnable。サンプルはサイト内で編集・実行可 | TechCrunch Japan

http://runnable.com/

RORのサンプルがある。Ruby単体のもあるといいのに。

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20131004

2013-09-27

Ruby-2.0.0-p195 gemが動かない場合の対策方法

Ruby-2.0.0-p195 gemが動かない場合の対策方法 - Rubyの魔神 を含むブックマーク はてなブックマーク - Ruby-2.0.0-p195 gemが動かない場合の対策方法 - Rubyの魔神 Ruby-2.0.0-p195 gemが動かない場合の対策方法 - Rubyの魔神 のブックマークコメント

http://www.artonx.org/data/asr/

上記で公開されているRuby-2.0.0-p195をWindows7で動かしている時

gem updateやgem installを使おうとすると

Building native extensions. This could take a while...

と表示が出てそのまま動かなくなるのでその対策方法です。

1.Visual Studio 2010をインストールする

2.「Ruby-2.0 (Administrator) console」を実行してDOS窓を開く

3.「"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"」を実行する

または以下。(上が32bitOSで下が64bitOSかな?)

「"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"」

この状態で「gem update」や gem install ○○ を実行するとちゃんとコンパイル出来るようになります。



追記

家の環境だとpathを設定しても上手くいかなかったので一度「Ruby-2.0 (Administrator) console」を起動して

path =""

path=C:/Program Files/It's Freetime Software/Ruby-2.0.0-x64/bin

を実行した後

「"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"」

を実行するとコンパイルするようになった。複数の開発環境(VS6.0~VS2012,各種マイコン用コンパイラ)が入っているのが原因かも知れない。

Updating installed gems

Updating bigdecimal

Building native extensions. This could take a while...

ERROR: Error installing bigdecimal:

ERROR: Failed to build gem native extension.

"C:/Program Files/It's Freetime Software/Ruby-2.0.0-x64/bin/ruby.exe" extcon

f.rb

C:/Program Files/It's Freetime Software/Ruby-2.0.0-x64/bin/ruby.exe: invalid swi

tch in RUBYOPT: -F (RuntimeError)


Gem files will remain installed in C:/Program Files/It's Freetime Software/Ruby-

2.0.0-x64/lib/ruby/gems/2.0.0/gems/bigdecimal-1.2.1 for inspection.

Results logged to C:/Program Files/It's Freetime Software/Ruby-2.0.0-x64/lib/rub

y/gems/2.0.0/gems/bigdecimal-1.2.1/./gem_make.out

それでもやっぱり一部エラーが出る。

http://d.hatena.ne.jp/kk_Ataka/comment/20111129/1322569582

こちらの記事を読むとパス名にスペースがあると起こる可能性があるらしい。

とりあえず一度Ruby2.0.0をアンインストールして「C:/Program Files/It's Freetime Software/Ruby-

2.0.0-x64

とは別なパスにインストールしてみる。

インストールパスを「c:\Ruby-2.0.0-x64」に変えると予想通りエラー内容が変わったが、やはりbigdecimalでこける。

C:\Users\garyo>gem update

Updating installed gems

Updating bigdecimal

Building native extensions. This could take a while...

ERROR: Error installing bigdecimal:

ERROR: Failed to build gem native extension.

C:/RUBY-2~1.0-X/bin/ruby.exe extconf.rb

checking for labs() in stdlib.h... *** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of necessary

libraries and/or headers. Check the mkmf.log file for more details. You may

need configuration options.

Provided configuration options:

--with-opt-dir

--without-opt-dir

--with-opt-include

--without-opt-include=${opt-dir}/include

--with-opt-lib

--without-opt-lib=${opt-dir}/lib

--with-make-prog

--srcdir=.

--curdir

--ruby=C:/RUBY-2~1.0-X/bin/ruby

C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:431:in `try_do': The compiler failed to g

enerate an executable file. (RuntimeError)

You have to install development tools first.

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:516:in `try_link0'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:531:in `try_link'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:717:in `try_func'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:1001:in `block in have_func'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:892:in `block in checking_fo

r'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:337:in `block (2 levels) in

postpone'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:307:in `open'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:337:in `block in postpone'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:307:in `open'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:333:in `postpone'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:891:in `checking_for'

from C:/RUBY-2~1.0-X/lib/ruby/2.0.0/mkmf.rb:1000:in `have_func'

from extconf.rb:3:in `<main>'


Gem files will remain installed in C:/RUBY-2~1.0-X/lib/ruby/gems/2.0.0/gems/bigd

ecimal-1.2.1 for inspection.

Results logged to C:/RUBY-2~1.0-X/lib/ruby/gems/2.0.0/gems/bigdecimal-1.2.1/./ge

m_make.out

コンパイルできないと言っているので、もう一度パスを

path=C:/Ruby-2.0.0-x64/bin

を実行した後

「"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"」

を実行する。

C:\Users\garyo>"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvar

s32.bat"

Setting environment for using Microsoft Visual Studio 2010 x86 tools.

ERROR: Cannot determine the location of the VS Common Tools folder.

と言ってくるので

path = %SystemRoot%\system32;%SystemRoot%;C:/Ruby-2.0.0-x64/bin

を実行して

「"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"」

を実行。今度は上手くいった。

しかし「gem update」を行うとやはりコンパイルエラーがでる。

VS2010に対応していないとかそういう話の気がしてきた。

C:\Users\garyo>gem update

Updating installed gems

Updating bigdecimal

Building native extensions. This could take a while...

ERROR: Error installing bigdecimal:

ERROR: Failed to build gem native extension.

C:/Ruby-2.0.0-x64/bin/ruby.exe extconf.rb

checking for labs() in stdlib.h... *** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of necessary

libraries and/or headers. Check the mkmf.log file for more details. You may

need configuration options.

Provided configuration options:

--with-opt-dir

--without-opt-dir

--with-opt-include

--without-opt-include=${opt-dir}/include

--with-opt-lib

--without-opt-lib=${opt-dir}/lib

--with-make-prog

--srcdir=.

--curdir

--ruby=C:/Ruby-2.0.0-x64/bin/ruby

C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:431:in `try_do': The compiler failed to

generate an executable file. (RuntimeError)

You have to install development tools first.

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:516:in `try_link0'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:531:in `try_link'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:717:in `try_func'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:1001:in `block in have_fun

c'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:892:in `block in checking_

for'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:337:in `block (2 levels) i

n postpone'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:307:in `open'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:337:in `block in postpone'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:307:in `open'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:333:in `postpone'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:891:in `checking_for'

from C:/Ruby-2.0.0-x64/lib/ruby/2.0.0/mkmf.rb:1000:in `have_func'

from extconf.rb:3:in `<main>'


Gem files will remain installed in C:/Ruby-2.0.0-x64/lib/ruby/gems/2.0.0/gems/bi

gdecimal-1.2.1 for inspection.

Results logged to C:/Ruby-2.0.0-x64/lib/ruby/gems/2.0.0/gems/bigdecimal-1.2.1/./

gem_make.out

Crystal

Crystal - Rubyの魔神 を含むブックマーク はてなブックマーク - Crystal - Rubyの魔神 Crystal - Rubyの魔神 のブックマークコメント

Crystal - Ruby風文法を持ったコンパイル型言語

Crystal - Ruby風文法を持ったコンパイル型言語

実行速度が必要な所で使えそう。cを呼びやすいらしいのがいいな。

CUI版のTwitter client tw

CUI版のTwitter client tw - Rubyの魔神 を含むブックマーク はてなブックマーク - CUI版のTwitter client tw - Rubyの魔神 CUI版のTwitter client tw - Rubyの魔神 のブックマークコメント

Tw

Twitter client on Ruby.

Tw: Twitter client on Ruby.

gem install twは上手く行ったけど

tw

を実行すると

>tw

C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs':

Could not find 'yajl-ruby' (~> 1.1.0) - did find: [yajl-ruby-1.1.0-x86-mswin32-6

0] (Gem::LoadError)

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:119

6:in `block in activate_dependencies'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:118

5:in `each'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:118

5:in `activate_dependencies'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:116

7:in `activate'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:119

9:in `block in activate_dependencies'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:118

5:in `each'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:118

5:in `activate_dependencies'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/specification.rb:116

7:in `activate'

from C:/PROGRA~1/RUBY-2~1.0/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.

rb:48:in `gem'

from C:/PROGRA~1/RUBY-2~1.0/bin/tw:22:in `<main>'

エラーが出て動かない。

環境はWindows7 ruby 2.0.0p195 (2013-05-14) [i386-mswin32_100]

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20130927

2013-09-25

遅延評価lazy

遅延評価lazy - Rubyの魔神 を含むブックマーク はてなブックマーク - 遅延評価lazy - Rubyの魔神 遅延評価lazy - Rubyの魔神 のブックマークコメント

Ruby2.0ではlazyというメソッドがEnumerableモジュールに追加されるらしいよ。

怠惰で短気で傲慢な君に贈るRubyの遅延評価

面白いですね。

(1..1.0/0).lazy.map{|n|n**2+1}.take(10).to_a

本当だったら1から無限の配列に対してmapを行ったら永遠の時間がかかるけど、必要になった時だけ処理するから有限時間で扱える。

配列の先頭からn個取り出すtake()というのも便利そう。

与えられた数字よりも小さい素数の数

与えられた数字よりも小さい素数の数 - Rubyの魔神 を含むブックマーク はてなブックマーク - 与えられた数字よりも小さい素数の数 - Rubyの魔神 与えられた数字よりも小さい素数の数 - Rubyの魔神 のブックマークコメント

JS:素数の数を数えてください

与えられた数字よりも小さい数字の中で素数がいくつあるかを調べるプログラムを作ってください

挑戦者求む!【ウチに来ない?】JS:素数の数を数えてください by CodeIQ運営事務局 アプリケーションエンジニアを募集する企業│CodeIQ

JSはわからないけどRubyだと

require "prime"
puts Prime.each(10000).to_a.size

n番目の完全数を求める関数

n番目の完全数を求める関数 - Rubyの魔神 を含むブックマーク はてなブックマーク - n番目の完全数を求める関数 - Rubyの魔神 n番目の完全数を求める関数 - Rubyの魔神 のブックマークコメント

4個まで計算するのが限界かな。

perfect_number = ->m{(1..1.0/0).lazy.select{|n|(1..(n-1)).select{|x|n % x == 0}.inject(&:+) == n}.take(m).to_a}
perfect_number[4]#=> [6, 28, 496, 8128]

再帰バージョンも作ってみたけど、4つ目を計算したらirbが吹っ飛んだ。

sod = ->n,m{m == 0 ? 0 :(n % m == 0 ? m + sod[n,m - 1]:sod[n,m- 1])}
pn =->n{sod[n,n-1] == n}
p (1..1.0/0).lazy.select{|x|pn[x]}.take(3).to_a #=> [6, 28, 496]
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20130925