トップページ⇒tech
1002コメント364KB

Ruby 初心者スレッド Part 58 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/03/23(水) 21:16:44.36ID:6HedlyzC
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 57
http://peace.2ch.net/test/read.cgi/tech/1426165733/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0476デフォルトの名無しさん2016/07/03(日) 17:25:59.34ID:T6bq1Tjn
>>475
RubyでGUIでしかもWindowsでってのは鬼門でしかないからね
どうしてもWindowsでGUIってことなら素直にC#使うべきだよ
0477デフォルトの名無しさん2016/07/03(日) 17:27:02.20ID:KkvVurgp
>>474は勘違い 無視して
0478uy ◆e6.oHu1j.o 2016/07/03(日) 17:28:05.70ID:VJyaYSRj
>>470
http://www.osk.3web.ne.jp/~nyasu/vruby/core.html
こっから該当ファイル探して自分でパス通せ
0479デフォルトの名無しさん2016/07/03(日) 17:29:16.56ID:l9Pdm4ZB
>>474
今、rbファイルをruby.exeと同じフォルダにぶっこんでみましたが、状況は変化しないようです。
以前、このスレでどなたかが書いていたんですが、情報が常に古くなってしまって初学者が
勉強するには難しい言語なんでしょうか…もう心が折れてきました
0480デフォルトの名無しさん2016/07/03(日) 17:32:02.55ID:KkvVurgp
requireを書き換えてもうまくいかないっていうのは具体的にどういうことなの?
LoadErrorにはなるの?
0481デフォルトの名無しさん2016/07/03(日) 17:34:05.18ID:LjwuNqiA
そもそも64bitに対応しているだろうか
0482デフォルトの名無しさん2016/07/03(日) 17:34:32.24ID:l9Pdm4ZB
>>478
ありがとうございます。すでにこの場所には来ていたんですが、上書きすればいいんでしょうか?
って、聞く前にとあえずやってみます
0483uy ◆e6.oHu1j.o 2016/07/03(日) 17:35:50.97ID:VJyaYSRj
ちょっと入れてみようとしたけど
パス通しても動かない

swin.soが既に配布されてなくてソースコードでの配布になってるから
パス通した後さらにコンパイルしないと無理だよ
0484デフォルトの名無しさん2016/07/03(日) 17:40:59.61ID:l9Pdm4ZB
>>480
そうですね、書き換えてもLoadErrorになります。また、書き換えても書き換えなくてもエラーの内容は同じようです。

>>481
自分もなんか嫌な予感がするんですが、もしかして64じゃうまく動かないなんてことは…今まで投入した時間はなんだったんだ
0485デフォルトの名無しさん2016/07/03(日) 17:44:06.57ID:KkvVurgp
requireのままじゃないといけないところもrequire_relativeにしてない?
そうじゃなくて、特定の行がどちらの場合もエラーになるってこと?
0486デフォルトの名無しさん2016/07/03(日) 17:49:45.60ID:LjwuNqiA
素直にruby1.8.7を入れればいいわけだけど、今更vrubyを勉強する意味はないよ
0487デフォルトの名無しさん2016/07/03(日) 17:52:44.03ID:l9Pdm4ZB
>>485
全ての組み合わせを試しました。つまり、以下の3つです。
1:require 'vr/vruby'のvrの前に./をつける
2:require 'vr/vruby'のrequireをrequire_relativeとする
3:require 'vr/vruby'のvrの前に./をつけ、なおかつrequireをrequire_relativeとする
すべてLoadErrorになっています。
0488デフォルトの名無しさん2016/07/03(日) 17:54:55.25ID:l9Pdm4ZB
>>486
そっか!そういえばそうですよね、思いつかなかった。素直に古いバージョンでやれば済む話だった。本がそうなっているのだから。
とりあえず、それで行きます。ありがとうございました。
0489デフォルトの名無しさん2016/07/03(日) 18:01:50.01ID:KkvVurgp
まあ学習目的なら古いバージョンでやるのが一番かもね
ただ誤解があったようなのでそこだけ説明させてもらう
例えば
require "mathn"
require "vr/vruby"
ってあった時にmathnとかもrequire_relativeって書いてないかってこと
もし
require "mathn"
require_relative "vr/vruby"
ってやってもLoadErrorになるならそれはファイルがないってことだからバージョン変えてもエラーになると思うけど
何行目でLoadErrorになってるのかちゃんと確認してたのかな
0490デフォルトの名無しさん2016/07/03(日) 18:43:02.70ID:l9Pdm4ZB
>>489
ありがとうございます。今試してみましたが、エラーの内容が少し変わりました。

require_relative "vr/vruby"
require 'vr/vrcontrol'

これで試したところ、
G:Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in'require':cannot load such file -- vr/vruby(LoadError)
   ↓
G:Ruby23-x64/chatbot/gui_vruby_sample.rb:1in'require_relative'':cannot load such file -- G:Ruby23-x64/chatbot/vr/vruby(LoadError)

と変化しました。どういうことだかさっぱりわかりませんが、動かないのは以前の通りです。とにかく古いバージョンで試してみます。感謝。
0491デフォルトの名無しさん2016/07/03(日) 18:51:12.47ID:2FNA+IvI
Cloud9でmysqlデータベース使うときの設定って
どれが正しいんですかね、検索していろいろ出るんですが悉くエラーはいてしまって開発にうつれないっす
だれかやり方を教えていただけませんか…
0492デフォルトの名無しさん2016/07/03(日) 20:00:46.85ID:+diucK3B
>>475
本の内容をそのままそっくり
なぞることにこだわらなくていいよ

慣れるにつれて自力でできる部分は
自分で書いた方が早くなる

部分的にでも未知の情報を吸収できればよし
0493デフォルトの名無しさん2016/07/04(月) 03:09:10.05ID:24pN0A7m
Ruby1.9から、仮想マシン(RubyVM)になったから、
それより前のバージョンは、推奨しない。
vrubyというのも初耳

定番の本は、「たのしいRuby 第5版」2016

paiza.IO, codepad などのサイトで、ブラウザを使って、プログラミングするのが簡単。
ログインもいらない
0494uy ◆e6.oHu1j.o 2016/07/04(月) 15:13:47.56ID:RKNLnwF6
>>493
RubyのGUIが今よりもさらにgmks of gmksだった頃に
頑張って何かを作ろうとして挫折した人の作ったライブラリ
0495uy ◆e6.oHu1j.o 2016/07/04(月) 15:21:46.40ID:RKNLnwF6
rubyはアルゴリズムの記述には適してるものの、宣言・代入がメインとなるソースコードでは冗長
GUIは厳しかったね
多分ハードのほうも無理
宣言・代入メインならもっとマシな言語はある
0496デフォルトの名無しさん2016/07/04(月) 20:11:11.28ID:1TFm36GL
ウインドウズ10の初期設定で、

デフォルトで、パソコンの中身が会社に送られるとか、頭おかしいんじゃないの?

アメリカは、プライバシーの問題が、狂ってるんじゃねえの、モラルがないどころの話しじゃない
0497デフォルトの名無しさん2016/07/04(月) 20:17:48.27ID:A9h+6tfb
そうだな、まずは落ち着いてスレタイ読んでから書き込もうぜ
0498デフォルトの名無しさん2016/07/04(月) 22:05:27.13ID:3uqHV0dH
>>492 >>493
ありがとうございます。泣き入れていてもしょうがないので、気持ちを切り替えて「楽しいRuby」はじめました。
『今のところは』楽しいです。もうちょっとがんばってみます。以前挫折したときに比べて何かが見えてきた…気がします。
0499デフォルトの名無しさん2016/07/04(月) 22:08:28.55ID:yHpo7u0t
>>498
『たのしいRuby』からで正解

プログラムをいきなり思い通りには書けないよ
英語をいきなりペラペラしゃべれないのと同じ

慣れればスラスラ読み書きできるから
急がば回れで基礎を積み重ねることが肝要
0500デフォルトの名無しさん2016/07/05(火) 06:38:44.92ID:j6ObOS3k
「Rubyによるクローラー開発技法」P65にあるselenium-webdriverをインストールしており、
読み込みをさせようとすると下記のエラーが出て困っています。
cannot load such file -- ffi_c (LoadError)
gem listコマンドからはffi (1.9.10 x86-mingw32)の確認が取れています。
rubyのバージョンは、 2.3.0p0 (2015-12-25 revision 53290) [i386-mingw32]です。
PCスペックは、WIN7 32bitです。
PATHの指定が間違っているのかと思い、require先にフォルダ毎移動させたりしたのですが
エラーの改善には至りませんでした。
考えられる原因は、rubyとffiの整合性が取れてないのかとも思いrubyのバージョンも
変更してみたのですが、これもエラーの改善には至りませんでした。
ググっても特にヒントになりそうなのを見つけられなかったため、
何か解決方法があれば、ご教授頂きたいと思い書き込みさせて頂きました。
何卒、よろしくお願い致しますm(_ _)m
0501デフォルトの名無しさん2016/07/05(火) 07:28:57.81ID:JLNuGFh4
>>500
gem uninstall ffi
gem install ffi --platform ruby
0502デフォルトの名無しさん2016/07/05(火) 09:02:24.93ID:j6ObOS3k
>>501
コメントありがとうございます!
ffiの再インストールまでは成功したのですが、selenium-webdriverを起動すると
再び下記エラーが出てきました。。
C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `r
equire': cannot load such file -- ffi_c (LoadError)
エラーに書いてあるkanel_require.rbを見てみると
133 return gem_original_require(path) if require_again
と記述されていました。
パスの指定がうまく行ってないんですかねぇ・・・
0503デフォルトの名無しさん2016/07/05(火) 09:18:02.59ID:LGOaFQLh
「gem ffi_c」でググったら一番上に出てくるじゃねえかよ
ttp://github.com/ffi/ffi/issues/432
0504デフォルトの名無しさん2016/07/05(火) 09:20:02.52ID:j6ObOS3k
500です。
現在、RUBYライブラリのロードパスは以下のようになっています。
irb(main):006:0* puts $LOAD_PATH
C:/Ruby23/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib
C:/Ruby23/lib/ruby/site_ruby/2.3.0
C:/Ruby23/lib/ruby/site_ruby/2.3.0/i386-msvcrt
C:/Ruby23/lib/ruby/site_ruby
C:/Ruby23/lib/ruby/vendor_ruby/2.3.0
C:/Ruby23/lib/ruby/vendor_ruby/2.3.0/i386-msvcrt
C:/Ruby23/lib/ruby/vendor_ruby
C:/Ruby23/lib/ruby/2.3.0
C:/Ruby23/lib/ruby/2.3.0/i386-mingw32
=> nil
0505デフォルトの名無しさん2016/07/05(火) 09:47:55.30ID:j6ObOS3k
>>503
ありがとうございます。解決しました。
インストール手順がまずかったようです。
gem uninstall ffi
→-x86-mingw32を選択して削除。
ruby dk.rb init
ruby dk.rb install

上記の手順でやったら無事にSeleniumWebDriverが動作しました。
ありがとうございます!
0506uy ◆e6.oHu1j.o 2016/07/05(火) 18:35:12.75ID:1uRQlpDk
ffi_cは、パスが通ってないというより、
現段階では普通にインストールしただけだと、2.3用のファイルが無かったな

>require': cannot load such file -- ffi_c (LoadError)
このLoadErrorになっていた原因はここ↓
C:\Ruby\lib\ruby\gems\2.3.0\gems\ffi-1.9.10-x86-mingw32\lib\\
0507デフォルトの名無しさん2016/07/05(火) 23:15:15.87ID:ZQWdXgH1
今日1週間のブートキャンプ3日目、いつになったらみんなが話してる内容がわかるのかなぁ、、、初心者ですが、よろしくお願いいたします。(≧∇≦)
0508デフォルトの名無しさん2016/07/05(火) 23:25:54.80ID:94G9IfNv
Rubyの女神・女優の池澤あやかは、慶応大学のプログラム研究会に入ったり、

島根県のRuby合宿へ、行ったみたい
0509デフォルトの名無しさん2016/07/06(水) 00:29:15.16ID:ziud5nB+
RWBYは百合アニメって話だろ
男消えろ
0510uy ◆e6.oHu1j.o 2016/07/06(水) 19:01:28.90ID:4XXkMTdx
質問です
selenium-webdriverでIE起動する時にvisibleオプションの設定って出来ませんか?
ライブラリのソースコードを追ってみましたが、
もしかしたらIEDriverServer.exeの中でそういうのやってる可能性もあって
rubyのソースコード上でvisibleを設定している箇所が特定できませんでした
0511uy ◆e6.oHu1j.o 2016/07/08(金) 14:18:11.61ID:ReeCCMlZ
質問です
ある日付からの残り日数を求めたく引き算をしてみましたが
t = Time.new
a = Time.local(2016, 7, 9)
b = a - t

bに返ってくる値がFloatで、これをどう整形したら良いのか分かりません
スマートに書く方法はありますか?
0512デフォルトの名無しさん2016/07/08(金) 14:21:47.06ID:4qgBf6xV
b/(60*60*24)
0513デフォルトの名無しさん2016/07/08(金) 14:31:15.37ID:4qgBf6xV
ミス
(b/(60*60*24)).ceil
0514uy ◆e6.oHu1j.o 2016/07/08(金) 14:34:46.90ID:ReeCCMlZ
>>512
こうなりました

t = Time.new
a = Time.local(2016, 7, 9)
b = a - t
p b / (60*60*24)

# => 0.3943060819212963
0515uy ◆e6.oHu1j.o 2016/07/08(金) 14:36:27.94ID:ReeCCMlZ
>>513
t = Time.new
a = Time.local(2016, 7, 9)
b = a - t
p (b/(60*60*24)).ceil

# => 1
です
0516デフォルトの名無しさん2016/07/08(金) 14:41:36.56ID:4qgBf6xV
>>515
へ?? これで何か問題なの?
0517uy ◆e6.oHu1j.o 2016/07/08(金) 14:47:45.41ID:ReeCCMlZ
>>516
失礼しました問題ないです
条件反射で書き込んでしまいました

ありがとうございます
0518デフォルトの名無しさん2016/07/08(金) 15:38:17.55ID:wR56VJym
Time#strftime 使ったほうが良くない?
0519デフォルトの名無しさん2016/07/08(金) 16:06:49.18ID:k4oWZhGm
>511
これでいい気がする。
require 'date'
t = Date.today
a = Date.new(2016, 7, 9)
p b = (a - t).to_i
0520デフォルトの名無しさん2016/07/09(土) 07:29:20.44ID:OPT8/HRF
ruby2.3ってsqlite3に対応してないんですかね
ちなみに、環境はwin7です。
0521デフォルトの名無しさん2016/07/09(土) 09:29:37.94ID:70tfGxUK
>>520
gem あるぞ?
0522デフォルトの名無しさん2016/07/09(土) 20:12:52.56ID:pnlJS2Wt
gemを使ってgtk3をインストールしようとしたのですができませんでした
解決策をご教授願えませんか? 出力は以下の通りです
少々長いのでレス分けます

C:/Ruby21-x64/bin/ruby.exe extconf.rb
checking for --enable-debug-build option... no
checking for -Wall option to compiler... yes
checking for -Waggregate-return option to compiler... yes
checking for -Wcast-align option to compiler... yes
checking for -Wextra option to compiler... yes
checking for -Wformat=2 option to compiler... yes
checking for -Winit-self option to compiler... yes
checking for -Wlarger-than-65500 option to compiler... yes
checking for -Wmissing-declarations option to compiler... yes
checking for -Wmissing-format-attribute option to compiler... yes
checking for -Wmissing-include-dirs option to compiler... yes
checking for -Wmissing-noreturn option to compiler... yes
checking for -Wmissing-prototypes option to compiler... yes
checking for -Wnested-externs option to compiler... yes
checking for -Wold-style-definition option to compiler... yes
checking for -Wpacked option to compiler... yes
checking for -Wp,-D_FORTIFY_SOURCE=2 option to compiler... yes
checking for -Wpointer-arith option to compiler... yes
checking for -Wswitch-default option to compiler... yes
checking for -Wswitch-enum option to compiler... yes
checking for -Wundef option to compiler... yes
checking for -Wout-of-line-declaration option to compiler... no
checking for -Wunsafe-loop-optimizations option to compiler... yes
checking for -Wwrite-strings option to compiler... yes
checking for rb_define_alloc_func() in ruby.h... no
checking for rb_block_proc() in ruby.h... no
checking for new allocation framework... yes
0523デフォルトの名無しさん2016/07/09(土) 20:13:15.27ID:pnlJS2Wt
checking for attribute assignment... no
checking for cairo... yes
checking for rb_cairo.h... no
*** 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
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby21-x64/bin/ruby
--enable-debug-build
--disable-debug-build
--with-pkg-config
--without-pkg-config
--with-override-variables
--without-override-variables

extconf failed, exit code 1
0524デフォルトの名無しさん2016/07/09(土) 21:17:36.39ID:70tfGxUK
>>522
http://stackoverflow.com/questions/31552590/error-when-try-to-install-ruby-gtk3-gem
これじゃね?
0525デフォルトの名無しさん2016/07/09(土) 21:41:42.30ID:pnlJS2Wt
>>524
ありがとうございます!
おかげさまでgtk3をインストールすることができました!

しかしgtk3を使ったテストプログラムを実行する段階で次のようなエラーが起こってしまいました
cannot load such file -- cairo.so (LoadError)
調べたのですがどうやら実際にcairo.soがないのではなく
なにか別の要因が作用してこのようなエラーを吐いているのだということは分かったのですが
具体的にどう対処すべきかということについての情報が見つからず困っています
お助けいただけると幸いです
0526デフォルトの名無しさん2016/07/09(土) 21:45:25.80ID:LUkvWe2U
まずはcairo.soがどこにあるのか調べよう
0527デフォルトの名無しさん2016/07/09(土) 21:51:34.71ID:pnlJS2Wt
>>526
c:Ruby21-x64\lib\ruby\gems\2.1.0\gems\cario-1.15.2~~\lib内の
2.2フォルダと2.3フォルダ内にありました!
これをどうすればいいのですか?
0528デフォルトの名無しさん2016/07/10(日) 01:01:33.24ID:FaCg4BOi
>>527です
自己解決しました
ありがとうございました
0529デフォルトの名無しさん2016/07/10(日) 22:28:19.60ID:7ZpGAM9O
自己解決したときでも後進のために何をやったか書くのが礼儀だチンカス
クレクレだけでなく
0530デフォルトの名無しさん2016/07/12(火) 19:22:25.10ID:gIrYEA97
>>529
あまりにもあれなので書く必要もないかと思いまして……
>>527に書いてある通り使っていたRubyのバージョンが2.1で
gtk3の現在のバージョンが対応しているのは2.2と2.3だったのです

というところでもう一つ質問させてください
gtk3を使ってサンプルプログラムの写経をしているのですが
その中でkey, mod = Gtk::Accelerate.parse "N"という行がありました
しかし実行してみるとGtkクラスには定数Acceleratorはありませんという旨のエラーが出てしまいます
仕様が変わったのかもしれないのですが調べても出てきません
どなたかご存知の方がいたら教えていただけませんでしょうか?
0531デフォルトの名無しさん2016/07/12(火) 20:10:31.38ID:Eu9k9lZN
Ruby 2.1でデバイスファイルを開いた時にサイズなどの情報を取得することは出来ないのでしょうか?
seek(0, IO::SEEK_END)、size、statは全て通りません
>type test.rb
open("\\\\.\\PHYSICALDRIVE0", "rb"){|f|
f.seek(0, IO::SEEK_END)
p f.stat
p f.size
p f.pos
}
>ruby test.rb
test.rb:2:in `seek': Invalid argument @ rb_io_seek - \\.\PHYSICALDRIVE0 (Errno::EINVAL)
from test.rb:2:in `block in <main>'
from test.rb:1:in `open'
from test.rb:1:in `<main>'
プラットフォーム固有の手段(WindowsならWMI、PC UNIXならlsblkなど)を使えば取得できますが
出来ればそれは避けたいので・・・
0532デフォルトの名無しさん2016/07/12(火) 23:16:54.90ID:O9LM8Fab
>>531
Rubyに限定されない一般論として:

 デバイスファイル(物理ドライブ)から取得できるサイズとして、
 いったいぜんたい何を期待しているの?
 ディスク容量?パーティション容量?利用容量?空き容量?

 デバイスファイルをシークして、いったいぜんたい何をしたいの?
 UNIXファイスシステムでセクタ単位にアクセスしたいのなら、
 特殊なRAW(生)デバイスをオープンするけど、それはUNIX固有の手段になる

なんだか無邪気な子供が無い物ねだりしているようにしか聞こえないね
あなたは最終的に何をしたいの?
0533デフォルトの名無しさん2016/07/13(水) 00:06:53.28ID:iqeWAEZd
いけあやちゃんのDVD借りてきたよ
昔は水着DVDとか売ってたんだなぁ
0534デフォルトの名無しさん2016/07/13(水) 00:11:36.68ID:vjGvgzcz
そもそも、デバイスファイルって、Unix系だけだろ?
Windowsでは使えないのでは?

そもそも、そんな特殊ファイルに、Rubyが対応しているのかな?

とにかく、seek の引数が間違っているから、正しくすれば?

>>530
>Gtk::Accelerate.parse "N"
>Gtkクラスには定数Acceleratorはありません

Accelerate, Accelerator はつづりが異なる。
そもそも、定数.parse(定数.メソッド) という表記は可能なのか?
05355312016/07/13(水) 21:08:36.13ID:9IGkZ4N6
Windowsでディスクをダイレクトに開くコードを貼ったのに、調べも試しもせずに思い込みだけでWindowsでは
デバイスファイルが使えないと返されても自分はなんて答えればいいのだろう
Windowsのデバイスファイルの取り扱いについてゼロから解説しないと話がかみ合わないとかどうすればいいの
ggrksって書かなきゃダメなの?
seekの引数もリファレンスマニュアルからコピペして数字を変えただけなのにそれを間違っていると言われても
どう直せば良いんだ
0536デフォルトの名無しさん2016/07/13(水) 21:41:01.10ID:O2/Udv7T
>>535
> Windowsのデバイスファイルの取り扱いについてゼロから解説しないと話がかみ合わないとかどうすればいいの
だってWIndowsにはデバイスファイル(と一般に呼ばれるもの)はないんだもの
しょうがないじゃん
0537デフォルトの名無しさん2016/07/13(水) 22:04:05.33ID:7QL1TPM6
そのコードをどんなプラットフォームで動かそうとしてるんだ?
プラットフォームに依存せずにとか考えてる?
Windowsでは動かんし、Linuxなら別の理由でそっちも動かんぞ
0538デフォルトの名無しさん2016/07/13(水) 22:20:27.32ID:zSyoSNoY
スルーでよくね?
0539デフォルトの名無しさん2016/07/13(水) 22:49:33.67ID:zLt10+AI
いやよくない
05405312016/07/14(木) 00:32:41.64ID:VP5bmt0B
Windows上からストレージのLBA:0を読み最後の2ByteをHexで表示する例
ttp://uploader.purinka.work/src/0068.png ←MBRのシグネチャである0x55 0xAAが表示されている
少なくともread、write、seek(n, IO::SEEK_SET)は機能して開いたストレージの任意のセクタを読み書き出来た

>>537
今のところWindowsとLinuxやFreeBSDあたりで動かしたいです
Linuxだと↑の"\\\\.\\PHYSICALDRIVE0"を"/dev/sdc1"とかにしても動かないのかな?
0541デフォルトの名無しさん2016/07/14(木) 03:02:03.84ID:tcxRZQBL
なんかおかしいなと思ったら元スレの方に反映されていなかったので、もう一度書きます

ruby1.9.3p551
centos6.7(x86)
GNOME 端末 2.31.3

test.rb------------
STDOUT.sync = true
STDIN.each_line do |line|
p line
end
------------------
上のコードで、文字列入力中に全角文字入れると
バックスペースキーで文字削除したとき半角分しか削除されない
これって環境依存によっておこる問題?それとも仕様?
解決方法じゃなくてどういう仕組みで起こってるのか知りたい
0542デフォルトの名無しさん2016/07/14(木) 05:13:27.03ID:5Jg64+hU
>>540
ソースコードをコピーして実行できないから、画像を使わないで。
paiza.IO, codepad などを使えば、ログイン無しでも書き込める。
そりゃ、実行すればエラーになるけど、ひとまず書き込める

デバイスファイルって、Linuxの特殊ファイルのことかと思っていた。
物理ディスクに、直接アクセスしたいのか

Errno::EINVAL
不正な引数。関数の引数のいずれかに無効な値が指定されています。
たとえば、fseek 呼び出しでファイル ポインターを移動するとき、
指定した元の位置が、ファイルの先頭より前にある場合です。

>>541
全角の多くは、3byteだけど、バックスペースで、1byteしか戻らないのか。
普通のエディタなら、バックスペースで1byteじゃなく、全角1文字分戻る。
その端末が、日本語に対応していないのだろう

コマンドプロンプト・端末などは、大昔に外人が作ったものだから、
日本語には対応していない。
一方、エディタは対応しているものが多い
0543デフォルトの名無しさん2016/07/14(木) 05:33:08.45ID:5Jg64+hU
>>540
IO::SEEK_SET: ファイルの先頭から (デフォルト)
IO::SEEK_CUR: 現在のファイルポインタから
IO::SEEK_END: ファイルの末尾から

たぶん、SEEK_ENDがダメなんだろう
0544デフォルトの名無しさん2016/07/14(木) 05:53:08.52ID:tcxRZQBL
ターミナルの設定はこんな感じです

[centos@localhost Reudy19]$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
0545デフォルトの名無しさん2016/07/14(木) 06:23:56.25ID:5Jg64+hU
端末は、単なるアプリだから、日本語に対応させるかどうかは、アプリの作者次第

日本語が使える、エディタとは違う。
英語でコマンドを書く、アプリ

作者も外人だから、日本語のことは知らない
0546デフォルトの名無しさん2016/07/14(木) 06:52:30.33ID:5Jg64+hU
文字コードを、UTF-8 に設定できないの?
0547デフォルトの名無しさん2016/07/14(木) 07:10:22.27ID:xuDKBge/
全員ハズレ
居残り学習な

>>541
普通にターミナル上で日本語入力したときにBackSpace押してもきちんと全角1文字消えるのに
STDINを直接開いたときにはBackSpaceで半角1文字しか戻らないのはなんでか
bash$ cat
にゃんこ■ ← BS1回
にゃんニ■
日本語環境ではシェル、普通はbash、が「日本語だと思われる文字があったら1文字ぶんだと思われるバイト数だけ戻る」というように特別に数えて処理してるからだ
ncursesとか介してないプレーンな環境では半角1文字戻るのが「素直な正しい」挙動
だからコマンドラインスクリプトで端末から直接日本語を入力してもらう可能性がある場合はRubyならcursesライブラリを使うと親切
これならbash上や他のターミナルアプリで日本語入力したときと同様にきちんと全角1文字ぶん消える
0548デフォルトの名無しさん2016/07/14(木) 20:43:36.00ID:tcxRZQBL
Readlineつかって入力してみた結果、backspace1回でしっかり全角文字一文字消せました
てっきり環境設定のLANGをja-JP.UTF-8にする他に、ロケール関連の設定でなんとかなるものだと思ってました
なるほど、そういう事だったのか
ありがとうございます

それと、readlineで意図的に\n等のエスケープシーケンス文字を入力すると、\\nのようにエスケープされます
入力終えた文字列をgsub使ってちまちま置換する以外に、dequoteとかunescapeとかそんな感じのいい手はありませんか?
0549デフォルトの名無しさん2016/07/15(金) 07:48:04.68ID:0wyvmUyV
各OSで使えるmruby用の基本的なI/Oのライブラリとか無いんか?
Lua的に使いたいけど素のままではファイルの読み書きすら出来ない
0550デフォルトの名無しさん2016/07/17(日) 11:51:33.23ID:5n5jkqHt
各OSそれぞれにCで書いた低級IO操作用バッチファイル用意してrubyのバッククォート文で呼び出して扱うとか
OSの差異をバッチファイルで吸収すれば良いからなんとかなると思う
思いつくのはこんぐらい
0551デフォルトの名無しさん2016/07/17(日) 12:14:33.52ID:EX8s0wCA
>>550
わざわざシェルを介する意味が無いだろ
それなら普通にCでAPI書けばいい
0552デフォルトの名無しさん2016/07/17(日) 16:00:16.75ID:tztufySG
>>549
mruby-ioで取り敢えずファイル操作出来るけど、
低レベルは殆ど無いな。
mrbgemを自分で作るのが基本スタンスだし
0553デフォルトの名無しさん2016/07/17(日) 16:04:26.02ID:tztufySG
そもそもmrubyはOSもない環境でも動かせるように
色々外してあるから標準Rubyと同じ様に考えちゃ駄目
05545492016/07/18(月) 01:50:25.67ID:IKQ2dxNQ
タイミングが良いんだか悪いんだか判らんけどレスthx
mruby-ioを見つけて試すも大きなファイルを操作できない
Fixnumの壁が原因とわかりCコードとにらめっこすること数日
sysseekをFloatも受け付けるように改造してようやく目的を達成
Bignumが無い影響がもろに出てしまっていますな
0555デフォルトの名無しさん2016/07/20(水) 03:31:47.01ID:GlTBqNkC
Ruby1.9以降は、rubyコードをJITコンパイルで変換してから実行してるんだよね?
Rubyのソースコード読んでるんだけど、Ruby1.8までならWebにころがってる情報で構造をなんとなくレベルまで理解できる
でもRuby1.9からはさっぱり理解不能で、何処がVMの部分なのかさえ読めない

どこかにRuby1.9以降のソースを解説しているサイトない?
なければソース全部じゃなくて、おおまかに構造を解説しているサイトでも構わない
0556デフォルトの名無しさん2016/07/20(水) 11:13:49.96ID:WyhLRx8l
ruby/doc/extension.ja.rdoc じゃダメなん?

Appendix A. Rubyのソースコードの分類
https://github.com/ruby/ruby/blob/trunk/doc/extension.ja.rdoc#appendix-a-ruby%E3%81%AE%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%88%86%E9%A1%9E
0557デフォルトの名無しさん2016/07/20(水) 18:43:26.64ID:KOGDxcQR
>>555
>Ruby1.9以降は、rubyコードをJITコンパイルで変換してから実行してるんだよね?

どこのソースから、そんな嘘情報を仕入れてきたの?
1.8迄はAST(抽象構文木)を直接的に評価していたのが、
1.9以降ではVM(正確にはYARV)へコンパイルするよう改善されただけの話だよ
いわゆるJavaScriptのV8エンジンみたいな本格的なJIT(Just In Time)コンパイル技術は、
今のところRubyには導入されちゃいない

>Rubyのソースコード読んでるんだけど、Ruby1.8までならWebにころがってる情報で構造をなんとなくレベルまで理解できる

1.8までならWeb公開されてるRHGが(言語処理系に興味がある人にとっては)バイブルだったね
  http://i.loveruby.net/ja/rhg/book/
1.9以降なら、以下の書籍が必読本になった(RubyのVMであるYARVの解説書でもある)
  Rubyのしくみ -Ruby Under a Microscope-
  https://www.amazon.co.jp/dp/4274050653/

Ruby処理系高速化の未来に関しては、"HPC(Hight Performance Computing) Ruby"が鍵になると予測する
・HPC Ruby Compiler(プレゼン)
 https://www.cps-jp.org/~mosir/pub/2012/2012-03-05/03_nakamura/pub-web/HPC_Ruby_Compiler.pdf
・HPC Ruby: 静的解析に基づく Ruby の高度最適化コンパイラ
 http://ci.nii.ac.jp/naid/110008583419 
 
さらに、その基礎となる "Soft Typing"(動的型付け言語における型推論) をキーワードで調べるのがいいと思う
もし英語が読めるなら、たとえば以下の論文を:
・SOFT TYPING 1991
 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.24.9333&;rep=rep1&type=pdf
・A Scheme-to-Java Translator with Soft Typing 2002
 www.kb.ecei.tohoku.ac.jp/~sumii/pub/scm2java.ps.gz
 
  
0558デフォルトの名無しさん2016/07/21(木) 03:34:57.24ID:jgTQj/gW
JITを使うのは、JavaVMを使う、JRubyだろ。
10万回以上ループすると、もう一段階、最適化する

500万回(0.5秒)以上では、CRuby(MRI)よりも速くなる

「Rubyのしくみ」2014、に書いてある。
コンパイラ・インタープリターを作るなら、読んだ方がいい
0559デフォルトの名無しさん2016/07/21(木) 04:24:33.02ID:WJGproPC
YARVちょっとググってみたけど、
バイトコードインタプリタって書かれとる
逐次変換して処理してるわけか

1.9以降はバイトコードに変換して処理してるって聞いてたから
てっきりJIT技術使ってるんだと思ってた
さんくす
0560デフォルトの名無しさん2016/07/21(木) 19:25:21.64ID:9nmG0K7V
実行時に変換してるんだからJITでOK
0561デフォルトの名無しさん2016/07/21(木) 22:00:48.00ID:MOZT2+1A
RangeってRubyの組み込みクラスにしては貧弱というか
ある数値が範囲より大きいか小さいかカバーされてるかを調べるUFO演算子とか
2つのRangeオブジェクトが被ってる部分があるかどうかを判定する機能とか
あれば便利な気がするんだがなぁ
0562デフォルトの名無しさん2016/07/22(金) 05:24:42.73ID:8LVOaO/m
Range#===, Range#include?, Range#member?, Range#cover?
Enumerable#grep
じゃダメなの?
0563デフォルトの名無しさん2016/07/22(金) 07:27:36.63ID:y4ZiHYE1
前者についてはそれじゃ機能が足りないんだ
範囲内最小の値よりなお小さいか
最大の値よりなお大きいかまで判定してほしい

後者については機能的にはそれでいいんだけど
Rangeのサイズが1000万までありうるので速度的に(´・ω・`)

自分で実装してみると
class Range
def <=> obj
(((min <=> obj) + (max <=> obj)) / 2.0).truncate
end
def & other
[min, other.min].max..[max,other.max].min
end
end
0564デフォルトの名無しさん2016/07/22(金) 07:39:58.12ID:y4ZiHYE1
セルフツッコミしとくと
前者はobjが<=>演算子非対応でnil返した場合を考慮してない
後者はotherがRange以外の場合を考慮してない上に範囲外の場合変なRangeを返すので気持ち悪い
0565デフォルトの名無しさん2016/07/22(金) 07:53:03.72ID:ot11jjQx
UnityのMathf.Clampみたいに、

Clamp(value, min, max)
最大値と最小値の間で、収めるような関数もあればいいね

10 = Clamp(20, 1, 10)
0566デフォルトの名無しさん2016/07/22(金) 07:55:55.89ID:8LVOaO/m
どうせIntegerなんだから
(min <=> obj) + (max <=> obj) >> 1
でよくね?
あと
(1..2) & (3..4) # => (3..2)
だから
(3..2).max # => nil
になって気持ち悪い
0567デフォルトの名無しさん2016/07/22(金) 07:58:36.16ID:8LVOaO/m
ごめん、リロってなかったorz
0568デフォルトの名無しさん2016/07/22(金) 08:06:48.82ID:y4ZiHYE1
>>566
Rubyでは負数の除算がアレなんだ
-1 >> 1 = -1
0569デフォルトの名無しさん2016/07/22(金) 08:19:38.53ID:8LVOaO/m
-1 >> 1 = -1
って普通じゃないの?
rangeのfirstもlastもIntegerならこれでいいか
class Range
def &(other)
[first, other.first].max..[exclude_end? ? last - 1 : last, other.exclude_end? ? other.last - 1: other.last].min
end
end
0570デフォルトの名無しさん2016/07/22(金) 08:39:44.79ID:DR9XI0EI
>>563
<=> はそういうものじゃない。お前さんの言うような機能はあっても良いが、それが <=> と名付けられることは未来永劫ない。
0571デフォルトの名無しさん2016/07/22(金) 08:49:54.31ID:cUWclNnj
Array#<=>なんてものもあるし未来永劫無いとは言い切れなくもなくない
0572デフォルトの名無しさん2016/07/22(金) 21:13:35.89ID:DR9XI0EI
>>571
Range#<=> が追加されないなんて一言も言ってないよ。
>>563 の期待するものにはならないってだけ。
0573デフォルトの名無しさん2016/07/22(金) 21:16:28.21ID:cUWclNnj
>>572
ああ、本当だ。早とちりすまん
0574デフォルトの名無しさん2016/07/23(土) 23:49:44.32ID:l6bIVOK+
ruby初心者です。
変数の中に入った文字列の置換ができません。
例えばhtmlという変数の中に入った(http://○○-1.jpg)の中の-1を無くしたい場合
subかgsubを使うかと思います。
試しにp html.gsub(/-1.jpg/,
0575デフォルトの名無しさん2016/07/23(土) 23:52:24.68ID:l6bIVOK+
ruby初心者です。
途中で書き込みが消えてしましました(汗)
変数の中に入った置換の方法を教えていただけますでしょうか。
よろしくお願いします。
0576デフォルトの名無しさん2016/07/23(土) 23:55:26.99ID:3089LaeD
>>574-575
html.gsub!(
か
html = html.gsub(
■ このスレッドは過去ログ倉庫に格納されています