Ruby 初心者スレッド Part 42

このエントリーをはてなブックマークに追加
1 忍法帖【Lv=21,xxxPT】
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2デフォルトの名無しさん:2011/04/21(木) 17:14:27.44
1乙
3デフォルトの名無しさん:2011/04/21(木) 17:46:13.30
オツ
4デフォルトの名無しさん:2011/04/23(土) 01:26:18.19
何度も出ていそうな話題ですが…

'10' + 1 => '101'
10 + '1' => 11

こういう仕様じゃ何で駄目なの?
5デフォルトの名無しさん:2011/04/23(土) 01:30:27.98
10 + 1.1 => TypeErrorでいいならいいんじゃね
6デフォルトの名無しさん:2011/04/23(土) 01:35:27.45
Rubyだから
7デフォルトの名無しさん:2011/04/23(土) 01:50:28.05
初心者のくせに仕様にケチ付けるなんてなまいきだぞ。
8デフォルトの名無しさん:2011/04/23(土) 01:51:41.17
>>4
Rubyの整数や文字列は型(Type)じゃなくてクラスだから
9デフォルトの名無しさん:2011/04/23(土) 02:15:52.63
class String
def coerce(other)
case other
when Integer then [other,to_i]
when Float then [other,to_f]
else super
end
end
end
class Fixnum;
alias :to_str :to_s
end
p "10" + 1 # => "101"
p 10 + "1" # => 11
自分の足を打たないように気をつけて使いましょう

つい出来心で書いてみた
もしRubyが標準でこんなだったら使いたくなくなる
10デフォルトの名無しさん:2011/04/23(土) 02:18:25.96
>>4
文字列と整数は違うものだから

整数文字列と整数を同一視するのはWebくらいだ
(あと演算記号があったらとりあえず数値とみなすawk)
$ awk 'BEGIN {print "10" + "2";}'
12
マジキチ

ぶっちゃけエラーにしてもらったほうがよい
文字列として連結したい場合は、プログラマが明示的に文字列にする
irb> '10' + 1.to_s
"101"
文字列にする意図が演算記号より明確な場合(リテラル埋め込みなど)は String#to_s を呼ぶ
irb> "10#{1}"
"101"

とか納得してもらったこと悪いんだが、Rubyの標準クラスでこの原則を土足で踏みにじってたりもする
歴史的経緯を反映したメソッドではあるんだけれど
irb> '10' * 3
"101010"

なお、「自分は文字列互換である」という宣言があればいいので、
to_str を定義すればいいだけだったりもする
irb> "10" + 1
TypeError: can't convert Fixnum into String
from (irb):1:in `+'
from (irb):1
irb> class Fixnum; alias to_str to_s; end
irb> "10" + 1
=> "101"
とか書いてたら>>9にあった
11デフォルトの名無しさん:2011/04/23(土) 02:29:53.85
文字列として動作しないオブジェクトに to_str 定義しちゃだめ
あれは String を継承してないけど String のメソッドが(委譲とかで)使えますみたいな印
12デフォルトの名無しさん:2011/04/23(土) 09:51:59.70
debianでRuby1.9.2をコンパイルするのに必要なパッケージの一覧というのを昔教えてもらったような気がするのだが
残念なことに昔のことだったので忘れてしまった
ぐぐってみたけど見つけられなかったので、だれか教えて
13デフォルトの名無しさん:2011/04/23(土) 10:24:40.34
>>10
まあawkの場合、連結には別の記法があるから
連結なら始めからそっち使えってことだろう
14デフォルトの名無しさん:2011/04/23(土) 11:00:56.82
>>12
自分で列挙してみたあとで既存公式パッケージを見てみたが、
たぶんここでdepとなってるもの (の、もちろん -dev のほう)

http://packages.debian.org/squeeze/libruby1.9.1
http://packages.debian.org/squeeze/libtcltk-ruby1.9.1

iconvも必要だった、ような…

15デフォルトの名無しさん:2011/04/23(土) 12:10:45.48
>>14
ありがとう。
それらに加えて、たとえばmakeだとかbisonだとかautoconfだとかあるじゃないですか。
そういう開発ツールも列挙してもらえるとうれしい。
#昔どっかに書かれてたのをコピーしとけばよかったんだけど、
#当時はRedHat使ってたから関係ないやって思ってコピーしなかったんだよね。
#失策だ。
16デフォルトの名無しさん:2011/04/23(土) 13:02:43.97
>>15
↓デビアンパッケージを作るのに必要なものが芋づる式にインストールされるが、ruby-1.9.1-fullパッケージはインストールされない。
  sudo apt-get build-dep ruby1.9.1-full
17デフォルトの名無しさん:2011/04/23(土) 13:22:02.46
>>16
なにその便利Tips
試してみる。さんくす
18デフォルトの名無しさん:2011/04/23(土) 17:52:57.12
>>11
すまんかった
じゃ、これで

class String
alias :orig_plus :+
def +(x)
if x.respond_to? :to_str
orig_plus x.to_str
elsif x.respond_to? :to_s
orig_plus x.to_s
else
orig_plus x
end
end
end
p "10" + 1 #=> "101"
p "10" + :symbol #=> "10symbol"
p "10" + [9,8] #=> "10[9,8]" #ruby 1.8では "1098"

Refinementが導入されると
局所的に組み込みクラスの挙動を変化させられるので
上のような書き方ができるDSLとかつくりやすくなるかも
Mathnライブラリなんてワンライナーとかでしか使ったこと無いし
19デフォルトの名無しさん:2011/04/24(日) 11:29:35.96
>>16
実行してみたけど、インストールするものが多すぎるし、
あきらかに必要なさそうなものが含まれている。これじゃあだめだ。

$ sudo apt-get build-dep ruby1.9.1-full
Reading package lists... Done
Building dependency tree
Reading state information... Done
Picking 'ruby1.9.1' as source package instead of 'ruby1.9.1-full'

(つづく)
20デフォルトの名無しさん:2011/04/24(日) 11:35:33.17
(つづき)
The following NEW packages will be installed:
autoconf automake autotools-dev bison build-essential cdbs debhelper dpatch
dpkg-dev fakeroot fdupes g++ g++-4.4 html2text intltool intltool-debian
libfont-afm-perl libfontenc1 libgdbm-dev libgl1-mesa-dri libgl1-mesa-glx
libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl
libhtml-tree-perl libice-dev libice6 liblzma1 libmail-sendmail-perl
libmailtools-perl libncurses5-dev libpthread-stubs0 libpthread-stubs0-dev
libreadline5-dev libsm-dev libsm6 libssl-dev libstdc++6-4.4-dev
libsys-hostname-long-perl libtimedate-perl liburi-perl libwww-perl libx11-6
libx11-data libx11-dev libxau-dev libxau6 libxaw7 libxcb1 libxcb1-dev
(つづく)
21デフォルトの名無しさん:2011/04/24(日) 11:39:04.70
>>19
そりゃ、debパッケージ作るための開発パッケージが含まれてるからな
22デフォルトの名無しさん:2011/04/24(日) 11:41:44.97
(つづき)
libxdamage1 libxdmcp-dev libxdmcp6 libxext6 libxfixes3 libxft2 libxi6
libxinerama1 libxml-parser-perl libxmu6 libxmuu1 libxpm4 libxrender1
libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 patchutils
po-debconf tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev x11-common x11-utils
x11proto-core-dev x11proto-input-dev x11proto-kb-dev xbitmaps xterm
xtrans-dev xz-utils zlib1g-dev
0 upgraded, 85 newly installed, 0 to remove and 4 not upgraded.
Need to get 31.3MB of archives.
After this operation, 122MB of additional disk space will be used.
Do you want to continue [Y/n]? n
Abort.
23デフォルトの名無しさん:2011/04/24(日) 14:29:08.89
C言語を、既にベテランのように使える者が
Rubyを学習するのにいい本はありますでしょうか?
24デフォルトの名無しさん:2011/04/24(日) 15:36:54.13
具体的に何が「明らかに不要」なのか言ってくれれば
>>21の言うように、build-dep は deb パッケージを作るためのパッケージ群が未インストールであれば要求する
ので、動作としては正しい

$ apt-cache showsrc ruby1.9.1-full
...
Build-Depends: debhelper (>= 5), cdbs, dpatch, patch, autoconf, m4, bison,
binutils (>= 2.14.90.0.7), libgdbm-dev, libncurses5-dev, libreadline5-dev,
tcl8.4-dev, tk8.4-dev, zlib1g-dev, libssl-dev (>= 0.9.6b), procps, file

お探しの条件はおそらくこれだろう
Ruby スレではなく Debian スレで聞くべきだったな
25デフォルトの名無しさん:2011/04/24(日) 15:45:50.93
>>24
debhelper をインストールしてしまうといろいろくっついてくると思う
deb パッケージが要らないならインストールしなくてもいいはず
tcl と tk も依存関係多いから、不要ならコンパイルオプションごと外したほうがいい
autoconf は perl5 を呼んだはず
26デフォルトの名無しさん:2011/04/24(日) 18:35:10.22
configureスクリプトは単独で動作するので、実行にautoconfやautomakeは不要。
リポジトリからさきっちょを取ってきてコンパイルするなら必要だけど、tarballなら
不要。
27デフォルトの名無しさん:2011/04/24(日) 18:55:38.95
>>23
他言語の既修者なら、とりあえず『初めてのRuby』を勧めておく
しいて言えば、オブジェクト指向について基礎的な知識があると
より理解度が上がると思う
28デフォルトの名無しさん:2011/04/24(日) 19:09:22.87
>>27
探してみます。たのしいRubyの方を読むと、
プログラミング言語を初めて学習するような感じなので、
悩んでいました。
29デフォルトの名無しさん:2011/04/24(日) 19:22:28.80
>>24-26
こんなかんじでいけた。開発ツールはgccとmakeだけでいいみたい。trunkじゃなくてruby-1.9.2-p180.tar.bz2ならこれでコンパイルできる。
sudo apt-get update
sudo apt-get install gcc make
sudo apt-get install libc6-dev zlib1g-dev libssl-dev libncurses5-dev libreadline-dev libgdbm-dev libyaml-dev libffi-dev
30デフォルトの名無しさん:2011/04/25(月) 19:36:19.65
if @m == (7 or 11)
と書けないのは理解できているんですが
if @m == 7 or @m == 11
と書くのがなんだか冗長に思えてしかたないんです
力技でなく一行目みたいな書き方をする方法ありませんか?
31デフォルトの名無しさん:2011/04/25(月) 20:27:24.67
>>30
基本的にありません
構造的問題
一応

if [7,11].include?(@m)

という表現があるんだけど、配列要素をすべて確定しないといけないのであんまり人気がない

def a; puts "\ta is made"; return "a"; end
def b; puts "\tb is made"; return "b"; end
str = "a"

puts "str == a || str == b:"
puts "\tyes!" if (str == a || str == b)

puts "[a, b].include?(str):"
puts "\tyes!" if [a, b].include?(str)

結果

str == a || str == b:
 a is made
 yes!
[a, b].include?(str):
 a is made
 b is made
 yes!

32デフォルトの名無しさん:2011/04/25(月) 20:37:31.64
irb> puts "\tyes!" if [:a, :b].any?{|m| __send__(m) == str}
  a is made
  yes!

やったーできたよーすごい長いよー
3330:2011/04/25(月) 20:45:46.03
基本的にない、ということなら納得することにします
ありがとうございました
34デフォルトの名無しさん:2011/04/25(月) 20:51:11.96
■Twitterで指定ユーザの最近のつぶやきを表示するRubyスクリプト
ttp://d.hatena.ne.jp/rubyco/20090824/twitter

gemのインストールはできたのですが、スクリプトを実行すると

ubuntu@ubuntu-virtual-machine:~$ ruby twitter.rb
./twitter.rb:4: uninitialized constant Twitter (NameError)
from twitter.rb:1:in `require'
from twitter.rb:1

と表示されます。
何が悪いんでしょう?
35デフォルトの名無しさん:2011/04/25(月) 21:05:40.44
./twitter.rb の中に require 'twitter' と書いたら自分自身で条件満たしちゃうじゃん
36デフォルトの名無しさん:2011/04/25(月) 21:11:55.61
>>34
gem install でインストールしたライブラリは require 'rubygems' が必要

前に「require 'rubygems' と書かなくてもいい方法」というのが流行ったことがあるので、
その記事の人はその古い慣習を引きずってるのだろう
37デフォルトの名無しさん:2011/04/25(月) 21:16:57.47
・ gem ライブラリを利用するときには最初に require 'rubygems' と書いとく
 (スクリプト内で被って複数回呼ぶことになっても負荷はほぼゼロなので一応書くとよい)
・ require する文字列と同じ名前の rb ファイルをカレントディレクトリに作ってはいけない(Ruby1.8.x、Ruby1.9.1)

たぶん後者だな
38デフォルトの名無しさん:2011/04/25(月) 21:36:57.65
>>37
サンクス。

リンク先のスクリプトを
require 'rubygems'
require 'twitter'
require 'kconv'
にかえて、スクリプトのファイル名をtwtest.rbに変えました。
で実行すると

ubuntu@ubuntu-virtual-machine:~$ ruby twtest.rb
/var/lib/gems/1.8/gems/multi_json-0.0.5/lib/multi_json.rb:66:in `decode': #<RuntimeError: Did not
recognize your engine specification. Please specify either a symbol or a class.> (MultiJson::DecodeError)
from /var/lib/gems/1.8/gems/faraday_middleware-0.6.3/lib/faraday/response/parse_json.rb:16:in `parse'

以下ずらずらと表示されます。
インストールしたgemのバージョンとかの問題でしょうか?
たびたびすみません。
39デフォルトの名無しさん:2011/04/25(月) 21:54:49.62
>>38
やってみた。環境は、ruby1.9.2、CentOS5.6
gem install twitter やって、以下をp1.rbに保存
#!/usr/local/bin/ruby
require 'twitter'
Twitter::Search.new().from('hyuki').each do |r|
puts r["text"]
end
require 'rubygems'、require 'kconv'、.sjisは書かずに実行したら、
すんなり動きました。
40デフォルトの名無しさん:2011/04/25(月) 22:36:37.90
JSONエンジンの指定がないのだろう
適当なJSONライブラリ入れて MultiJson.engine = :json_gem とか指定
41デフォルトの名無しさん:2011/04/25(月) 23:11:58.45
multi_json (0.0.5)をインストールしてみました。これだけではダメですよね(エラーになります)。

>適当なJSONライブラリ入れて MultiJson.engine = :json_gem とか指定

ってスクリプトに記述するという意味でしょうか?

42デフォルトの名無しさん:2011/04/25(月) 23:46:20.26
sprintf("%04d",10) と format("%04d",10) に違いはあるんでしょうか?

"sprintf format 違い" でググッたんですが
sprintfフォーマット がひっかかちゃって探してる情報が見つかりませんでした。
43デフォルトの名無しさん:2011/04/26(火) 00:02:27.05
>>39
CentOSってgemのパッケージは用意されてないのでしょうか?
gemを使えるようにするには、という意味です。
44デフォルトの名無しさん:2011/04/26(火) 00:12:42.65
>>42
"フォーマット文字列" % [引数リスト]
も含めて一緒なのでお好きなのをどうぞ
45デフォルトの名無しさん:2011/04/26(火) 00:37:21.53
>>43
gemは、ver. 1.7.2、rubyは、1.9.2
require 'rubygems'は書いても書かなくても動いた
gem install twitterしただけ。README.mkdに、こんなこと書いてあるけど、
JSON?インストールしてないなぁ。なんで動くんだろ
If you're using the JSON request format (i.e., the default),
you'll need to explicitly require a JSON library.
We recommend [yajl-ruby](http://github.com/brianmario/yajl-ruby).
46デフォルトの名無しさん:2011/04/26(火) 00:41:19.30
>>44
ありがとうございます。 それじゃ書きやすい format を使うことにします。
47デフォルトの名無しさん:2011/04/26(火) 01:02:55.30
>>45
サンクス。
CentOSの環境もあるので、試してみようと思ったのですが、こっちはGemのシステム自体がインストール
できなくてはまっています。

Ubuntsuで文字コードの問題を解決した方が早いのかなあ。
48デフォルトの名無しさん:2011/04/26(火) 01:31:25.71
>>33
orだけだけど、==と===がおなじになるオブジェクトならば

case @m
when 7,11
puts @m
end

って書くことができるかも
49デフォルトの名無しさん:2011/04/26(火) 01:39:38.19
>>47
CentOSにRubyをインストールした時に参考にした↓
ttp://yktweb.sakura.ne.jp/blog/home-server/207.html
Ubuntsuのことはサパーリわかりませぬ
50デフォルトの名無しさん:2011/04/26(火) 01:50:23.55
>>49
ぬう、結構めんどくさいですね。
VMWareのCentOS環境は作ったのですが、今日は力尽きたのでまた明日以降やってみます。
重ね重ねありがとう。

というか、初めてGemとか使って簡単なプログラム動かしてみようと思ったけど、Twitterは結構
地雷だったのかな。

重ね重ねありがとう。
51デフォルトの名無しさん:2011/04/26(火) 05:50:38.86
README読めない人には無理
「全く何も見ずに感性だけで」プログラミングできるようなものではない
52デフォルトの名無しさん:2011/04/26(火) 06:40:31.72
README読んでもよくわからんことも多いけどな
rdocのヒット率の悪さと言ったらないぞ
gencutterはそろそろ登録時にマニュアル記述の審査やったほうがいいw

で、README読む限り、gem install yajl-ruby して

require 'rubygems'
require 'twitter'
require 'kconv'

Twitter::Search.new().from('hyuki').each do |r|
puts r["text"].tosjis
end

でいいはず
ていうか3年近く前の記述なんてあてにするほうが悪いと言えなくもなく

>>45
require 'json' か require 'yajl' か require 'json/pure' か require 'ok_json' が動作すれば
何も言わずそれを使う
どれもできない場合はmulti_jsonが知らないライブラリなので
MultiJson.engine = encodeとdecodeの動作するJSONパーサクラス
と指定する
53デフォルトの名無しさん:2011/04/26(火) 07:48:31.47
GUIアプリ作るならJRubyでSwing使うのが良い選択なのかな?
Ruby/Tkってなんか動かない環境多そうですよね。
54デフォルトの名無しさん:2011/04/26(火) 08:28:17.41
rubyでgui自体鬼門な気が。教祖はデビアン使いなんだし。
漏れは素直にswing使ってjavaで組んでるよ。rubyの出番は無いw



初心者のくせにケチ付けるなって。ケツの穴小さ過ぎ。拡張しなきゃw
初心者と言うか、入門者視点で直感的に使えたほうが使いやすいと思うけどねえ。まあやりすぎはruby使い総白雉化(idoit)に繋がるのかもだがw

Time使ってみたが、人間様思考だとyyyymmdd表記も直感的に処理出来るけど、
Time.utc("20110426")
なんてyyyymmddは喰ってくれないのねw
自分で
Time.utc("20110426"[0,4], "20110426"[4,2], "20110426"[6,2])
なんて咀嚼して食べさせてあげないとごっくんしてくれないのは、手間が掛かると言うかめんどいw
みんなはparsedate呼んでたりするの?
馬鹿除け的にArgumentErrorなんて返す前に、catchしてparseしなおしてtryしてくれよって気がw 会社とかでこんな機転の利かない新人が入って来たらストレスだなw
55デフォルトの名無しさん:2011/04/26(火) 10:51:11.86
毎日に更新される複数のファイルを1つづつダウンロードしていきたいのですが、
1つのファイルをダウンロードし終わってから1秒待機して次のファイルをダウンロードするにはこれで対応できてますでしょうか?
サーバ側で複数ダウンロードすると規制される仕組みなので困っております


require 'open-uri'
require "kconv"

i = 0;
while(i < 3)
open(Kconv::tosjis("C:\hozon"), "wb") do |output|
open("ダウンロード元URL") do |data|
output.write(data.read)
end
end
i = i + 1
sleep(1)
end
56デフォルトの名無しさん:2011/04/26(火) 11:03:36.77
同じファイルの取得を三回繰り返しているように見えるが
57デフォルトの名無しさん:2011/04/26(火) 11:12:18.36
open-uri は擬似的なもので、read が呼ばれた瞬間全部ダウンロードする
なので、 body = open(uri).read でよい
ブロックが込み入っているから見てもわかりにくいのだな

require 'open-uri'

save_dir = 'C:\hozon'
Dir.mkdir(save_dir) unless File.directory?(save_dir)
urls = ["http://www.yomiuri.co.jp/zoomup/img/zo_090413_01_s.jpg",
"http://www.yomiuri.co.jp/zoomup/img/zo_100125_01_s.jpg"]

urls.each do |url|
uri = URI.parse(url)
body = open(uri).read
save_path = File.join(save_dir, File.basename(uri.path))
open(save_path, "wb"){|f| f.write(body)}
sleep(1)
end
58デフォルトの名無しさん:2011/04/26(火) 11:16:20.80
そこはwhileループじゃないだろう
59デフォルトの名無しさん:2011/04/26(火) 14:28:16.47
禁止されてなければ、素直にライブラリ呼べばいいんじゃないの?

require 'time'
Time.parse("20110426") #=> 2011-04-26 00:00:00 +0900
ローカルタイムになるけど
60デフォルトの名無しさん:2011/04/26(火) 14:50:59.14
date/format.rb を見る限り、「標準」で読み込まずに別途にしたのは正解
61デフォルトの名無しさん:2011/04/26(火) 20:14:49.84
class Hoge
def self.meth
共通処理

共通処理
end
end

こんな感じで、クラスメソッドの中で同じような処理が複数箇所で発生したため、
共通処理をメソッドの外に抽出したいのですが、クラスメソッドからインスタンスメソッドは呼べません。
そうすると、共通処理をクラスメソッドとして抜き出すことになるのですが、
プライベートクラスメソッドというのはあまり見たことがありません。
ネットで調べるとprivate_class_methodとうものがあるので、以下のように実現は出来るのですが、
なんだか見た目も可読性も酷いし設計が間違っているような気がします。

class Hoge
def self.meth2
共通処理
end
private_class_method :meth2

def self.meth
meth2

meth2
end
end

クラスメソッドの中にある複数の共通処理を外に抜き出す方法は他には無いでしょうか。
62デフォルトの名無しさん:2011/04/26(火) 20:24:56.23
クラスメソッドというのは本質的には存在しない
クラスとメソッドという文脈においては、Rubyにはインスタンスメソッドしかない
クラスメソッドは、self が Class クラスのオブジェクトであるインスタンスメソッドだ
なので、アクセス制限法も public か private(かprotected)しかない

ということで、それでいいよ
ほんのり遅くなってもいいのなら、メソッド内で proc オブジェクト作って 2回 call してもいい
63デフォルトの名無しさん:2011/04/26(火) 20:29:27.80
lambdaが楽しくていつの間にかlambdaだけのソースコードになってしまいましたがどうしたらいいでしょうか?
6461:2011/04/26(火) 20:32:44.14
<<62
ありがとうございます。上のソースでいくことにします。
65デフォルトの名無しさん:2011/04/26(火) 20:44:26.74
>>63
とりあえずソラでYコンビネータが作れるようになるまで習熟してから
Haskelに体当たりだ。
66デフォルトの名無しさん:2011/04/26(火) 20:57:01.97
>>63
関数型言語行って存分にλってこいw
その病気はしばらく続くと思うが(実体験)、
手続き型言語でやるのはほどほどにしとけよ?
6734:2011/04/26(火) 21:49:00.25
34のツイッターのライブラリのインストールで苦労したものです。
yajlなどいろいろインストールしたのですがダメで、結局twitterのversionを0.7.4に下げることで解決しました。
いろいろやってみてエラーが表示されましたが何が悪いのかよくわからず、最新のtwitterのライブラリで
動かす場合はどうすれば正しいのかはわからずじまいです。
以上完全解決ではないですが、ご報告まで。

twitter (0.7.4)
multi_json (0..0.5)


スクリプト
require 'rubygems'
require 'twitter'

Twitter::Search.new().from('hyuki').each do |r|
puts r["text"]
end
68デフォルトの名無しさん:2011/04/28(木) 15:04:59.24
1.9.2です

class Cs

def a()
p "aメソッド"
end
private :a

def b()
a()
end

end


cs = Cs.new()
cs.b()

bからaが呼べちゃうんですがこういうものなんでしょうか?
phpのように$this->a()みたいな表記は必要なく、ただメソッドだけ書けば動かせる仕組みなのですか?
また、メソッドだけで動かせるのが違和感があるので$this->a()みたいにthisに当たる書き方ってありますでしょうか?
69デフォルトの名無しさん:2011/04/28(木) 15:18:32.92
privateはレシーバつきで記述しても動作しないようにする効果(だけ)を持つ
ので、その動作は正当だ
「公開APIってほどじゃないのでなんとなく隠したい」以上の意図は示せないし、
ユーザーの操作を縛ることもできない

レシーバという概念について勉強するといろいろはかどるかと思う
あと、後者は「やらないほうがよい」ので勧めない
70デフォルトの名無しさん:2011/04/28(木) 15:55:06.24
Rubyではオブジェクトに対して外からできることは公開メソッドの呼び出しだけなのに、
publicメソッドからprivateメソッドを呼ばないとしたらいったいいつどこでprivateメソッドを呼ぶというのだ……。
71デフォルトの名無しさん:2011/04/28(木) 16:06:57.49
誰も知らない所でひそかに呼ばれてるんだよきっと
72デフォルトの名無しさん:2011/04/28(木) 16:14:53.44
でもrubyの場合動的にメソッド追加したりできるから
privateとかする意味あんまないんじゃね? とか思う今日このごろ
73デフォルトの名無しさん:2011/04/28(木) 18:29:00.09
普通は呼べないから、「これ勝手に呼ぶなよ!」と警告するぐらいの効果はあるかもしれない。
74デフォルトの名無しさん:2011/04/28(木) 18:42:47.17
呼ばれたら嫌なメソッドなんてはなから定義しなければいいだけじゃん。
アクセス制御とか無用。
ダチョウ倶楽部が「おすなよ?おすなよ?」と言ってるようなもん。
75デフォルトの名無しさん:2011/04/28(木) 19:30:30.91
まさか基地外と一緒にコード書いてるわけじゃあるまいし、プライベートにしとけば普通はevalとかしてまでは呼ばないと思うよ。
76デフォルトの名無しさん:2011/04/28(木) 19:31:01.58
質問の内容が伝わってなくてすみません
privateとかpublicなどはとりあえず置いといてください
PHPで呼び出すときに$this->a()限りませんがC#やjavaでもこのような感じで呼び出しています
Rubyはこのthis->メソッドのような概念がないということでしょうか?
77デフォルトの名無しさん:2011/04/28(木) 19:34:25.10
>>76
いつもの発作なので気にしないでください
Rubyでthisに相当するのはselfです
78デフォルトの名無しさん:2011/04/28(木) 19:36:21.86
>>76
レシーバってご存じですか?
79デフォルトの名無しさん:2011/04/28(木) 19:44:29.05
>>76
PHPの$this->method()に相当するのは、Rubyではself.method()
そんで、Rubyでは「self.」は省略できる。それだけ。
80デフォルトの名無しさん:2011/04/28(木) 19:46:53.31
>PHPで呼び出すときに$this->a()限りませんがC#やjavaでもこのような感じで呼び出しています
そうですか
これはRubyなのでそれは忘れてください
Rubyではレシーバを省略しメッセージだけを書くのが普通で、
それ以外の記法を見たときは普通ではない何らかの意図があるものとみなします
81デフォルトの名無しさん:2011/04/28(木) 19:50:58.37
>>77 >>78
thisに相当するのはselfだけど、 self.method ではプライベート呼べないよ。
>>68のケースでは、"self."は「書いてはならない」
82デフォルトの名無しさん:2011/04/28(木) 20:13:14.78
>>76
1.メソッド呼び出しはすべてなんらかのレシーバに対する呼び出しである
2.このレシーバは通常は記述される(誰に対する呼び出しかわからないのであたりまえ)
3.例外として、そのコンテキストにおけるself(PHPでいう$thisに相当)に対する呼び出しである場合は省略できる
4.selfと記述してしまう場合は、一旦そのオブジェクト自身を外から見たような形で評価することになるので、self.で呼び出す場合の呼び出し制限はpublicに従う。
5.とあるprivateメソッドを呼べる状況ではもともとレシーバを省略してそいつを呼び出せるので、4の仕様のためにself.でprivateメソッドが呼べなくても不都合は生じない
83デフォルトの名無しさん:2011/04/28(木) 20:18:41.08
>>76
PHPはともかく、Javaを知っているなら、レシーバがthisなら省略できることを知っているはずだけどな。

ついでながら、Rubyのprivateメソッドは「thisを省略した形でしか普通には呼べない」の意。
8483:2011/04/28(木) 20:19:18.63
thisやないRubyではselfや。
85デフォルトの名無しさん:2011/04/28(木) 20:37:40.43
Ruby1.9.2のスクリプトエンコーディングについて質問です。
RUBYOPTに-Kuと設定しておけばマジックコメントを記述せずutf-8で書けますが
-Kは1.8互換のため残されているだけで推奨されていません。
マジックコメントを書かずにすむ方法は他にありますか?

もうひとつWindows上での実行について質問
標準入力からutf-16leのテキストデータを読み込んで
スクリプトとして実行することはできませんか?
86デフォルトの名無しさん:2011/04/28(木) 20:40:20.81
あのさー、Rakefileって、
cp "*.html", "dir"
はだめで、
cp Dir.glob("*.html"), "dir"
と書かないとだめなの?ちょーめんどくさいんだけど。
あと cp はあるけど cp_p とか cp_pr とかなかったっけ?
87デフォルトの名無しさん:2011/04/28(木) 20:42:00.85
>>86
sh メソッドとかFileUtilsとか。
88デフォルトの名無しさん:2011/04/28(木) 20:42:53.10
>>85
マジックコメント書いとけ。必須だ。
89デフォルトの名無しさん:2011/04/28(木) 20:49:19.25
マジックコメントは「エディタでの新規作成時に自動で挿入する」みたいなのがないと微妙に面倒なのよね
90デフォルトの名無しさん:2011/04/28(木) 20:53:01.19
環境変数とかに依存してると、よそに持っていたときギャッとなるので
ファイル内で完結させるのが正しいんだろうとは思う。
91デフォルトの名無しさん:2011/04/28(木) 20:53:12.44
>>85
(文字コード)
ttp://d.hatena.ne.jp/Gimite/20080101/1199199332

(下)
よく意味がわからん
(rubyスクリプトの中で)標準入力からutf-16leのテキストデータを読み込んで
(読み込んだテキストの内容をRuby)スクリプトとして(読み込みをしたプロセスの中で)実行することはできませんか
ってことか?

具体的になにがしたいのか書いたほうがはやいんじゃね?
92デフォルトの名無しさん:2011/04/28(木) 21:10:47.88
Rubyでメジャーな開発環境ってありますか?OSは問いません
93デフォルトの名無しさん:2011/04/28(木) 21:13:43.71
Vim Emacs TextMate
94デフォルトの名無しさん:2011/04/28(木) 21:15:10.40
gedit
95デフォルトの名無しさん:2011/04/28(木) 21:16:22.27
>>92
notepad
vi
Emacs
サクラエディタ
Eclipse
NetBeans
紙と鉛筆
脳内

これで6割方はいってるような気がする
96デフォルトの名無しさん:2011/04/28(木) 21:18:31.35
>>95
Windowsのxyzzyが抜けてる
3パーセントくらい増えるはず
97デフォルトの名無しさん:2011/04/28(木) 21:23:18.05
Geanyもわりと使える
98デフォルトの名無しさん:2011/04/28(木) 21:24:03.20
>>92
とりあえずnetbeansのrubyバージョンでも使ってみては
99デフォルトの名無しさん:2011/04/28(木) 21:32:51.15
netbeansですか。。。
実はちょっと前に入れたのですがスペックが足りないのか単語補完のときに動作が遅いですみたいな警告が表示されてしまったのでそれ以来使ってないです
やっぱeclipseやnetbeansのように高機能なIDEが使えないとなるとテキストエディタしかありませんね
ありがとうございます
10085:2011/04/28(木) 21:50:32.78
やりたいこと(下)
私が愛用するサクラエディタは編集中のテキストを外部コマンドの標準入力に流し込むことができる。
これを使って、編集中のテキストを保存すること無しにスクリプトとして実行したい。
外部プログラムへの出力はShift-JISかUNICODEが選択でき、Shift-JISで用が足りる場合は外部コマンドを ruby - と
指定すれば良いがUNICODEを含むときはうまくいかず解決策を知りたい。
(上)はそのときのタイピング量を減らしたいため
101デフォルトの名無しさん:2011/04/28(木) 21:55:30.84
外部コマンド実行にこういれてる
ruby -EWindows-31J:UTF-8 "$F"
102デフォルトの名無しさん:2011/04/28(木) 21:56:21.53
サクラエディタ保存はしないと実行できないと思ったけど出来たのか
103デフォルトの名無しさん:2011/04/29(金) 03:06:17.61
複数のファイルを一つの配列に読み込むにはどのようにすればよいでしょうか。
例えば、

$files = Array.new
fileNames = ["a","b","c"]

(0..2).each{|i|
$files[i] = File.new(fileNames[i])
}

var = "hogehoge"

(0..2).each{|i|
files[i].write var
}

とすると、
undefined method `write' for nil:NilClass (NoMethodError)
となってしまいます。
104デフォルトの名無しさん:2011/04/29(金) 03:20:27.67
>>103
色々とツッコミどころはあるのだが、致命的なのは$
105デフォルトの名無しさん:2011/04/29(金) 03:24:53.28
>>103
読み込みたいの書き込みたいの?
書き込みたいならwモードでファイルオープンしないといかんのでは
モード省略するとrモードやでー
106デフォルトの名無しさん:2011/04/29(金) 03:26:03.93
って…待てよ?
そのコードでは違うエラーになると思うのだが…
実際にはちょっと違うコードじゃないのか?それ
107デフォルトの名無しさん:2011/04/29(金) 03:41:26.11
なんかしら反応がないとモヤモヤして眠れない流れだなw
108デフォルトの名無しさん:2011/04/29(金) 07:42:51.81
・ グローバル変数は使うな、せめてインスタンス変数使え
 (ただし、インスタンス変数乱用もあまりよくない)
・ ローワーキャメルケース(lowerCamelCase)は使わずにアンダースコアで区切る
 (fileNames ではなく file_names または filenames)
・ each による繰り返しの主体は「番地」や「順番札」ではなくコレクションのデータそのものにする
 (ファイル名の配列があるのなら、それそのものを each する)
・ Rubyユーザーの実に98%が、File.new がどういう動作をするか覚えてないというアンケート結果
 (オリジナルではなく、イディオムを使いまわしたほうが結局は近道)

ということで、たぶんこんな感じ

file_paths = ['0000.txt', '1111.txt', '2222.txt']
str = 'hogehoge'

file_paths.each do |path|
File.open(path, 'wb'){|f| f.puts(str)}
end
109デフォルトの名無しさん:2011/04/29(金) 07:50:08.75
質問ではファイルを読み込みたいと言ってるのに、コードでは書込してるから
どう答えればいいのか混乱してくる

まあいいや、書き込みは答えが出たから俺は読み込みで

filenames = ["a","b","c"]
files = filenames.map {|fn| File.read(fn) }
110デフォルトの名無しさん:2011/04/29(金) 07:56:58.55
>>109
File.read(path) は使ってはいけない
File.open(path){|f| f.read} と呪いながら必ず書く
111デフォルトの名無しさん:2011/04/29(金) 08:00:08.28
1.8.7 で直ってないんだっけ?
112デフォルトの名無しさん:2011/04/29(金) 09:17:53.95
>>110
何故File.readを使ってはいかないの?
113デフォルトの名無しさん:2011/04/29(金) 10:28:56.23
わかりやすい例がないなあ

require 'open-uri'

raise 'valid File#read. abort.' if RUBY_DESCRIPTION !~ / 1.8.+(mswin|mingw)/

uri = URI.parse("http://www.ruby-lang.org/images/logo.gif")
path = './rubylogo.gif'
File.open(path, 'wb'){|f| f.write(uri.read)}

img_text = File.read(path) # text mode
File.open('text_rubylogo.gif','wb'){|f| f.write(img_text)}
img_bin = File.open(path, 'rb'){|f| f.read} #binary mode
File.open('bin_rubylogo.gif','wb'){|f| f.write(img_bin)}

text_rubylogo.gif だけ画像として開けないはず
114デフォルトの名無しさん:2011/04/29(金) 10:46:51.36
1.9.2で利用してます
マニュアルのlibrary net/httpにwebサイトからページを取得するサンプルがあります
この通り利用したら安全でしょうか?
何か手を付け加える箇所はありますでしょうか?

require 'net/http'

url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
puts res.body
115デフォルトの名無しさん:2011/04/29(金) 10:58:16.01
>>114
安全の意味がわからん
ブラウザもどきとしての安全性なら、Cookieの流出は気にしなくてよいし、
勝手なJavaScriptやFlashが走ることはないのでその意味では安全

コードとしての安全なら、urlが正しくない場合の考慮とか、
異常系の強化の余地はある
116デフォルトの名無しさん:2011/04/29(金) 10:59:52.54
>>114
安全じゃないってたとえばイメージ的になんじゃらほ

とりあえず、連続アクセスされるとサーバ管理してる人が困る
10秒間に人間がやるくらいの量のアクセスを10秒間の間にやる程度が妥当
(1アクセスごとに絶対に1秒スリープしろとかいう意味ではない、
サムネイル20個の「表示」に20秒かけられたらそっちのほうが持続的接続上超迷惑)

スクリプト的には可もなく不可もないと思う
URL にクエリ文字列がくっついてたら取得できないけど、たぶんそれは今回目的ではないんだろう
URL にマルチバイト文字とかの URL に不適な文字列が入ってた場合もエラーだけど、それもないな
ユーザーエージェントを送ってないので、普通のブラウザ用の HTML を送ってもらえない可能性はある
クッキーも処理してないので同様だが、まあいじわるサーバでない限り滅多なことはない
コンテントネゴシエーションとかAccept-Languageにも対応してないけど、これもたぶん大丈夫だろう
サーバが 200 OK 以外を返してきたときは例外出して止まってしまうので、今のままだと自動処理には向かない
Ruby 1.9.x の場合は res が ASCII_8BIT のままなので、もしかしたら適切に文字エンコーディングを設定する必要があるかもしれない

普通の Web ブラウザで見たときの HTML と違う HTML が返ってきても泣かないこと
117デフォルトの名無しさん:2011/04/29(金) 11:10:16.86
require 'net/http'
i=0

urls = [
'http://www.example.com/index1.html',
'http://www.example.com/index2.html',
'http://www.example.com/index3.html',
'http://www.example.com/index4.html',
'http://www.example.com/index5.html',
'http://www.example.com/index6.html',
'http://www.example.com/index7.html
'http://www.example.com/index8.html',
'http://www.example.com/index9.html',
'http://www.example.com/index10.html',
]

while (i< 10)
url = URI.parse(urls[i])
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
puts res.body
i = i + 1
end

こうした場合はコードを実行したら一気に取得しにいってしまうのですか?
getして文字列が帰ってくるまで同期されてますか?非同期の場合、sleepを入れたいと思います
118デフォルトの名無しさん:2011/04/29(金) 11:17:35.40
>>116
> 1アクセスごとに絶対に1秒スリープしろ
まだその信仰残ってるよね…
「1ページ分」は人間の操作するブラウザっぽく一瞬で取得して速攻で接続切ってもらったほうが嬉しかったりもする
君の後ろにもサーバ取得待ちのユーザーさんの列はあるのよ、見えないけどw

でっかい静的ファイルやサーバで生成する動的 HTML を連続取得されるのは辛い
別途サーバ立てるような細かい静的ファイルをだらだら時間かけて取得されるのも辛い

>>117
書いてある通りにしか動作しないよ
つまり、Get するためのオブジェクト作って、アクセスして、返り値取得して、それを表示する、までが1回のループ内容
スレッドを使う必要があるが、あんまり速くもならないので素直にループ

あと、>>108も言ってるけど、イテレーションはデータ配列自体を each するのが普通
urls.each do |url|
uri = URI.parse(url)
...
end
と書く
while も i も使用しない
119デフォルトの名無しさん:2011/04/29(金) 11:32:41.74
ということはつまり

require 'net/http'

urls = [
'http://www.example.com/index1.html',
'http://www.example.com/index2.html',
'http://www.example.com/index3.html',
'http://www.example.com/index4.html',
'http://www.example.com/index5.html',
'http://www.example.com/index6.html',
'http://www.example.com/index7.html
'http://www.example.com/index8.html',
'http://www.example.com/index9.html',
'http://www.example.com/index10.html',
]

urls.each{{u|
url = URI.parse(u)
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
puts res.body
end

取得するページが500ページ文あるからsleepはしないでおいたほうがよさそうですね
120デフォルトの名無しさん:2011/04/29(金) 11:33:49.05
121デフォルトの名無しさん:2011/04/29(金) 11:44:42.38
その500個のファイルを一人のユーザーによって間断なしに取得することが
そのサーバにとって通常範囲内であると想像されるなら、sleep はいらない

ふつうはそんなこと想定してないので、sleep で間隔あけるべき
俺なら特定可能なユーザーエージェントを設定した上で、
2ファイルにつき3秒 sleep させて、1時間に100ファイルずつ取得する
122デフォルトの名無しさん:2011/04/29(金) 11:51:14.78
(1..10).each do |i|
Net::HTTP.start('www.example.com') do |http|
puts http.get('/index%d.html'%i).body
end
end
123デフォルトの名無しさん:2011/04/29(金) 12:12:16.65
結局、IO.writeはいつ実装されるんだろう・・・

>>112
>>113でも例を挙げてもらってるが、1.8系列だとバイナリモードで読み込めないから
(1.9系列であれば、バイナリモードで読み込むようにオプション指定できる)
124デフォルトの名無しさん:2011/04/29(金) 12:12:49.66
ブラウザっぽくってのは、keep-alive使って、コネクション切らずに
ページ本体と画像その他リソースを取得したほうがサーバの負荷に
ならないってことかしらー。
125デフォルトの名無しさん:2011/04/29(金) 12:13:29.76
ヘッダーを送信するのはサーバに負荷が掛かりますか?
126デフォルトの名無しさん:2011/04/29(金) 12:33:33.04
アクセス自体がわりと負荷だ
本当に負荷を気にするなら、不要不急なアクセスはお控えください
ホントに欲しいページだけダイレクトに見てください
収集はシアワセ産むのかどうか、よく考えて行ってください

で、ヘッダくらいは別にいいよ
HTTP の勉強は結局は避けて通れないんだけども
127デフォルトの名無しさん:2011/04/29(金) 12:39:23.98
ヘッダを1分に60回送信してこれを1時間やる場合もOKですか?
専用サーバかVPSでやりたいのです
128デフォルトの名無しさん:2011/04/29(金) 13:23:17.75
>>120
とりにいく鯖が全て同じであれば
require 'net/http'

urls = [
'http://www.example.com/index1.html',
'http://www.example.com/index2.html',
'http://www.example.com/index3.html',
'http://www.example.com/index4.html',
'http://www.example.com/index5.html',
'http://www.example.com/index6.html',
'http://www.example.com/index7.html
'http://www.example.com/index8.html',
'http://www.example.com/index9.html',
'http://www.example.com/index10.html',
]

uri = URI.parse(urls[0])
session = Net::HTTP.new(uri.host, 80)
list = []
session.start {
 urls.each {|url|
uri = URI.parse(urls[0])

   list << session.get()
 }
}

129デフォルトの名無しさん:2011/04/29(金) 13:24:39.42
ぎゃー途中送信してしまった

まあ、途中だけどなんとなくわかるしょ
これならkeep-aliveでいけるらしい
130デフォルトの名無しさん:2011/04/29(金) 13:26:43.04
>>127
一般的には(技術者の間では)1リクエスト/秒なら許容範囲とされているが、
自分の意図とは別に訴えられる可能性があるので、OKかどうかの保証は誰にもできない
あとは自己判断

http://librahack.jp/
この人はたまたまサーバの不具合で低負荷でもサーバダウンしてしまったため約1リクエスト/秒で逮捕されてる
最終的に起訴猶予で釈放はされたけど
131デフォルトの名無しさん:2011/04/29(金) 13:27:19.43
>>127
具体的になにがしたいのかよくわからんが
1秒間に1アクセスごときで負荷になるようなサーバは管理人がおかしい

ただアクセスログを見る奴がかわいそうかもなw
132デフォルトの名無しさん:2011/04/29(金) 13:29:37.12
(Rubyと関係ねぇ…!)
133デフォルトの名無しさん:2011/04/29(金) 13:36:21.65
>>132
このスレ見てつくりましたー、って人がタイーホされて
言語はRubyでしたー、なんてイヤやん?

裏でDB見に行くとか動的なページは
アクセス間隔あけるなり、1リクエストが完結してから次を送るなり
工夫したほうがいいね
134デフォルトの名無しさん:2011/04/29(金) 13:38:34.18
ちょっとよく分かってないんだが、
サーバ側がダメな場合は503を投げ返すのがHTTP的な作法?
んでクライアントはそれを受けたら自重するような動作で
135デフォルトの名無しさん:2011/04/29(金) 13:53:05.16
136デフォルトの名無しさん:2011/04/29(金) 14:45:56.72
>>130
それ最近知った事件だ
最終的にサバ管理会社のMDISが岡崎市から契約解除されたと
で、それを受けてMDISが調査して非を認めて謝罪文だしたと
財閥系の天下り官僚癒着企業が如何に糞かという見本みたいな事件
137デフォルトの名無しさん:2011/04/29(金) 16:29:11.44
>>113>>123
そういうことですか。
d
138デフォルトの名無しさん:2011/04/30(土) 11:43:34.09
>>30
if @m.to_s=~/(7|11)/
139138:2011/04/30(土) 11:54:45.57
間違った
>if @m.to_s=~/(7|11)/
これだと77とかに引っかかるから
if @m.to_s=~/^(7|11)$/
140デフォルトの名無しさん:2011/04/30(土) 11:57:29.03
今回は数値であろうモノから文字列化しているから関係ないと思うけど
真の意味で文字列頭・末を表したい時には^$は使わないように心がけた方がいい。
141デフォルトの名無しさん:2011/04/30(土) 11:59:42.34
>>138
mの内容が限定されてればいいがいろいろ問題があるな
70もかかるし"7"もかかるし
142デフォルトの名無しさん:2011/04/30(土) 12:02:43.88
>>140
どういうこと?
^$を使うと問題あるの?
143デフォルトの名無しさん:2011/04/30(土) 12:16:36.47
>>142
@m = "mild\n7\nsuper light"
でもマッチするとかその辺じゃね
144デフォルトの名無しさん:2011/04/30(土) 12:31:47.15
>>143
なるほど、改行の前後にもマッチするのか、知らなかった
145デフォルトの名無しさん:2011/04/30(土) 13:06:10.80
きちんとした意味で ^ や $ を使う機会は少ないと思う
それの7割くらいは \A と \Z で表現されるべきシロモノ
純粋スペース(U+0020)を \s で書くのと同様、「観測範囲内でたまたま動く」に過ぎない
146デフォルトの名無しさん:2011/04/30(土) 13:18:27.45
ここ初心者スレなんで‥な?
147デフォルトの名無しさん:2011/04/30(土) 13:24:18.19
文字列先頭で充分な場合は今は \A だろ

大昔、sed と perl くらいしかなかった頃は
「vi のカーソル操作にちなんで ^ と $ だ!すごいわかりやすい!」
とか言えたけど、今は記号の由来がわからん人のほうが多いだろう

おまけに改行文字を扱う場合は思ったとおりの動作にならないことがある
書く文字数を1文字削減するのに見合う苦労だとはあんまり思えん
素直に先頭表すのは \A で最後表すのは \Z にしとけ
148デフォルトの名無しさん:2011/04/30(土) 16:40:51.28
EmacsとViがいつ滅びるのか楽しみでならない。
149デフォルトの名無しさん:2011/04/30(土) 16:48:40.55
[Emacs AND 滅びる             ] [検索]
約 160,000 件 (0.31 秒)


[Ruby AND 滅びる              ] [検索]
約 464,000 件 (0.24 秒)
150デフォルトの名無しさん:2011/04/30(土) 16:54:31.23
Rubyスクリプトが動く高機能エディタを作成すればいいよ。
151デフォルトの名無しさん:2011/04/30(土) 17:16:34.68
sopa_hっていうクソガキのせいでRubyの寿命がのびやがったまじしねこいつ
まじしね
うぜぜええええええええええええええええええええ
うぜえええええええええええええええええええええええええええええええ
まじきめぇこいつw まじマツゲロもきめぇんだけど宣伝しててひっしにw

日本産っていうのをおおいに利用しててきめぇw
はやくしなないかなこいつら
152デフォルトの名無しさん:2011/04/30(土) 17:26:23.69
マツゲロの金策ってなに?
Ruby技術者検定とか?Rubyラーメンとかクソガキ使ってRubyの宣伝?
マツゲロきめぇ やることがきめぇwswwwwwwwwww
情弱商売wwwwwwwいかくせぇっていうかあたまのおつむがへぼいwww

クソガキをとりあえずコミッタとかそういうのに使ってまじ宣伝しようと必死
きめえんだけど?まつげろ死ねよまじほほほほおほほほい!!!!!!!!!
ほほほほほほおほほほほおおおおおおおおい!!!!!!!!
やることがせけえぇwwwwwwwてかきめぇえwwwwwwww
速く死ねマゲロ!!
きめえからお前の金策Rubyとかまじ宣伝しないで片隅でやっててくれねえ?
まじでお前ら糞鼻毛のカスの目糞耳糞鼻糞カスの雑魚はマジで日本からきえてくれねえかな?
韓国いけよまじでチョンどもまじでしんでくれお願いしますマツゲロ
Perl業界の足元にも及ばないくそRubywww
金を生み出すしまくっているのはPerlwwwwwwwwwwwwwww
GoogleでもPerlは使われていて
フェイスブックでもライブドアでもDEnaでもいろいろな場所で使われてるPerlにくらべて
まじきもい国内身内ネタでもやっておりょッッッッッッッw速くしね
死んでくれないかな?Rubyっていう単語みるだけでむかついてくるんだがww
Perlの時価総額にもかてねえクズみたいなハナクソみたいなバカみたいな雑魚みたいなクソなことやってねえで
とっとと言語終了して速く消えろマツゲロ
153デフォルトの名無しさん:2011/04/30(土) 17:29:13.17
俺はRubyが滅びるまで戦う
さっさと死ね雑魚ども

テロにあってしねRubyども
154デフォルトの名無しさん:2011/04/30(土) 18:29:39.29
viは○nix系で最低限必要なツールだからなくならないんじゃ
emacsはしらん、秀丸エディタのほうが先になくなったりしてな
155デフォルトの名無しさん:2011/04/30(土) 19:15:42.41
補助金がなかったらRubyなんて使おうとも思わない
156デフォルトの名無しさん:2011/04/30(土) 19:28:30.51
>>155
kwsk 補助金なんてあるのか
157デフォルトの名無しさん:2011/04/30(土) 21:55:04.06
ニコ生やユーストなどのようにwebカメラで配信するのはRubyだけでは出来ませんか?
158デフォルトの名無しさん:2011/04/30(土) 22:29:41.93
無理
159デフォルトの名無しさん:2011/04/30(土) 22:46:55.39
>>157
Perlだとできるよ
WEB::Cameraっていうモジュール使うと
WEBカメラ認識してくれる
160157:2011/04/30(土) 23:33:51.44
>>159
ありがとうございます
ちょっとPerlやってみようかと思います。
161デフォルトの名無しさん:2011/04/30(土) 23:41:40.23
>>157の偽者さん代理レスありがとうございます
Perlをこれから覚えても周りのプログラマーには勝てないので他にも検討してみたいと思います
162157:2011/04/30(土) 23:43:43.24
偽はあなたでしょw
163デフォルトの名無しさん:2011/04/30(土) 23:50:44.44
ユーザーがゴミしかいない
まじむかつく
消えろよクソゴミども!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
死ね!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!いちいち逆鱗に触るようなわめき
ユーザーがクソみてええなクソガキと喧嘩腰みたいな きもちわりいんだけど!!!!!!
!!!!!!!!速く死ね!!!!!!!
そんなに金が欲しいか?!!!!!!!!!金が欲しいんだろ
Ruby情報技術者とかRubyラーメンとかまじ死ね!!!!!!!
速くRubyは潰れろ!!!!!!!憎い!!!!憎い!!!!!!
暗黒パワー!!!!憎い!!!!!憎い!!!!!!!!!憎い!!!!!
164デフォルトの名無しさん:2011/04/30(土) 23:51:30.63
落ち着いてください
時代遅れなPerlさん
165デフォルトの名無しさん:2011/04/30(土) 23:52:20.31
↑こういうのがうぜえんだよ
いちいちしゃくに触る言い方
Perlみるたびに目くじらたてて来るわめき
ぶっとばされてこいよまじで
速く死ね
166greyia:2011/04/30(土) 23:53:43.96
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
167デフォルトの名無しさん:2011/04/30(土) 23:59:46.58
アクセス制限のprotectedは具体的にはどういう時に使いますか?

privateはよく使うのですが、protectedを使う機会が全くありません。
Javaで開発していた頃は、設計も細かく考えていたのですがRubyだとどうしても大雑把になってしまいます。
極端に言えばprivate指定したところでsendで呼び出せてしまうわけですし。

こういうケースではprotectedを使うべき、みたいな使いどころがあれば教えてください。
よろしくおねがいします。
168デフォルトの名無しさん:2011/05/01(日) 00:23:06.20
>>167
デザインパターンの本を読んでみるとか
169デフォルトの名無しさん:2011/05/01(日) 00:54:56.49
>>167
まあ、無理して使わなくていいよ
巷のユーザーの90%くらいはこの1年ほどprotectedなんて使ったことないし、
巷で使用されてるprotectedの96%くらいは使用法間違ってるわけだし
170デフォルトの名無しさん:2011/05/01(日) 00:56:31.47
>>167
Rubyのprotectedは言語仕様のミス疑惑が出てたと思うw
非常に微妙な可視性なので、あまり深く考えないほうがいい
privateとpublicの二本立てで
171デフォルトの名無しさん:2011/05/01(日) 01:01:59.81
数少ないprotectedの利用ケースは、同値比較の実装で同クラス(とサブクラス)の
他のインスタンスに対して呼びたいメソッドがある場合くらい。

もちろんsendでいくらでも回避可能。
172デフォルトの名無しさん:2011/05/01(日) 01:19:02.23
クラスシステムってもう
* メソッドは全てパブリック
* フィールドは全てプライベート
これで良いと思うんだ。
んで継承は無くす。
そんかわり委譲を簡単に書く機能を用意。
これでええんちゃうん。
173デフォルトの名無しさん:2011/05/01(日) 01:20:50.31
イテレータについて質問です。
{1,2,3,4}.each{|i|print i, "\n"}
上の命令だと、以下のように出力されます。
12
34
(1..4).each{|n|print n,"\n"}
上の命令だと、以下のように出力されます。
1
2
3
4
前者の出力においても、後者の出力を期待しているのですが、
前者のような出力になるのはなぜでしょうか。
ruby 1.8.5での動作です。
よろしくお願いいたします。
174デフォルトの名無しさん:2011/05/01(日) 01:21:30.07
>>167
sendは最終手段と考えてる
protectedで済むならprotectedでやる…んだが
Rubyの場合、privateがJavaでいうprotected並の制限なので
わざわざprotected使う意義は薄いかな

一応、俺は後で読み返したときに分かりやすいよう
「引き継がせたいprivate」はprotectedにしてる
175デフォルトの名無しさん:2011/05/01(日) 01:24:32.96
>>173
{}はハッシュ(他言語では連想配列、辞書とも呼ばれる)のリテラルなので
1がキー、2がその値、3がキー、4がその値に
なっちゃってる
配列リテラルの[]を使えば想定通りになるかと
176デフォルトの名無しさん:2011/05/01(日) 01:25:43.61
>>175
なるほど。
空目してました。
ありがとうございます!
177デフォルトの名無しさん:2011/05/01(日) 01:42:23.15
動作を調べたりするときには、printとかputsよりも
pを使うのがおすすめ。

{1,2,3,4}.each{|i|p i}だと
[1, 2]
[3, 4]
と表示されるので、どんなデータなのか分かりやすい。
さらに複雑なデータを扱うときにはpretty printというのもあるよ。
178デフォルトの名無しさん:2011/05/01(日) 01:49:49.04
>>177
ご親切にありがとうございます。
p、ppも使って勉強したいと思います。
いろいろとありがとうございます。
179デフォルトの名無しさん:2011/05/01(日) 02:55:56.15
WindowsでActiveruby使用中なのですが、narrayとbitsetが使いたいんです。
gemでインストールしようとするとCコンパイラが要求され、VC++2010を
入れたのですが、nmakeのバージョンが違うと怒られます。
Webを調べるとRuby本体をコンパイルしたのと同じコンパイラじゃないと
いけないそうで、どうしてもnarray使いたかったのでRuby本体をソースコード
からコンパイル。これで万事。。あ、gemが入ってない。gemのインストールで色々
DLLが無いと言われ、落としてもzlibを見つけてくれない。。。
本題です。どなたかあっさりWIN上でnarray,bitsetが動いて、ActiveRubyに近い
パッケージがあったら御教示くださいませ。


180デフォルトの名無しさん:2011/05/01(日) 03:37:17.65
全く試してないが、RubyInstaller で devkit をインストールした上で gem 入れたらどう
181デフォルトの名無しさん:2011/05/01(日) 07:02:47.52
正規表現で、否定はどうやって表現しますか。
指定した正規表現に一致しない箇所を抜きだしたいのですが、やり方がわかりません。
str.scan(/AAA.*?BBB/m) do ... end
この場合なら AAAから始まってBBBで終わる最短一致にマッチしますが、
今回はそれ以外の箇所にマッチさせたいです。
awkだと
! /正規表現/ { print ... }
とか書けたので、同じようなことがRubyでもできるだろうと期待してます。
182デフォルトの名無しさん:2011/05/01(日) 07:48:27.54
>>181
今週のruby-listのやりとり見てみれば良い
183デフォルトの名無しさん:2011/05/01(日) 09:38:53.40
>>179
コンパイルまでできてるなら
zlibが見つけられない原因を探した方が早いかも

1. どこからzlibを落としたか
2.落としたzlibの何というファイルをどこにコピーしたか

を詳しく
184デフォルトの名無しさん:2011/05/01(日) 10:03:18.09
179です。一部自己解決しました。RubyInstaller(旧one-click-ruby)がdevkitというものを提供しており、
これを入れるとmingwというCコンパイラがついてきます。しかもgemが自動的にコンパイル
してくれるという、今の私にとってはまさにうってつけのものだと判明しました。有難うございました。
でもまだ問題が。。。それは次に書きます。
185デフォルトの名無しさん:2011/05/01(日) 10:05:31.78
でも肝心のNArrayで、require 'narray'ではエラーをはかないのに、
なぜかオブジェクト生成しようとすると、undefined local variable or method `nArray'
と言われてしまいます。コードは
require 'rubygems'
require 'narray'
ary1 = nArray.byte(3,4)
なんですが、、、何か間違ってますでしょうか?
186デフォルトの名無しさん:2011/05/01(日) 10:10:48.73
しらんけどNArrayじゃないの?
187デフォルトの名無しさん:2011/05/01(日) 10:11:00.06
ああっ!!、今見たら180さんが正解を書いてくれていました。見落としてました。orz
有難う御座いました。m(__)m あとはNArrayのオブジェクト生成ができればウマー。
188デフォルトの名無しさん:2011/05/01(日) 10:13:52.31
省略しすぎた
nArray.byteじゃなくてNArray.byteじゃない?
189デフォルトの名無しさん:2011/05/01(日) 10:52:28.33
186さん、有難うございます。試行錯誤中のコードを貼ってしまいましたが、
実はNArray.byteでもダメだったのです。でも原因わかりました。
なんと、「テストをnarray.rbというファイルでしていたから!!」
なのでした。http://www.devheads.net/development/ruby/talk/uninitialized-constant-narray-name-error.htm
トホホ。。。
190デフォルトの名無しさん:2011/05/01(日) 17:31:59.10
>>189
テスト用のファイル名は test_hoge.rb とかにすると良いよ
ライブラリの名前そのものや、単に test だけの名前も避けとけ
191デフォルトの名無しさん:2011/05/01(日) 19:27:07.17
オリジナルのソースコードと、オリジナルを日本語向けに修正した日本語版のソースコードがあるとします
オリジナルを基準にどの部分を修正したのか知りたいのですが
あるフォルダ内のファイル一覧(サブフォルダを取得)して比較をしたいのですが
比較の部分をどのように実装したらよいのかがわかりません
192デフォルトの名無しさん:2011/05/01(日) 19:44:37.37
>>191
ruby -e 'puts `diff -r #{ARGV.join(" ")}`' orig/ ja/
193デフォルトの名無しさん:2011/05/01(日) 19:50:01.63
>>191
ruby -v;diff -r org/ ja/
194デフォルトの名無しさん:2011/05/01(日) 19:53:26.89
>>191
WinMarge.exe /r org ja
195デフォルトの名無しさん:2011/05/01(日) 20:08:28.77
diffの動作そのものは独自研究しないほうが幸せになると思う
むしろ既存のプログラムの操作と出力をRubyに寄せたものを作ったほうが喜ばれる
196デフォルトの名無しさん:2011/05/02(月) 08:06:35.27
先日はnarrayとbitsetの件、色々御解答頂き有難う御座いました。
外部ルーチン使いたい時はRubyInstaller + devkitで決まりですね。
早速色々bitsetの実験してますがドキュメントが殆ど無くて困っております。
rdocにも何も書いてないし。複雑なサンプルはいくつかあったのですが、
基本的なものがなくて。。。
197デフォルトの名無しさん:2011/05/02(月) 15:25:37.30
    /_____
    |/⌒ヽ ⌒ヽヽ | ヽ  Rubyコミッターになったよ
    |  / | ヽ  |─|  l 
   / ー ヘ ー ′ ´^V  ママ、Z会でもぼくがんばるよ
    l \    U/  _丿
.   \ ` ー ´  /   .
      >ー── く    
    / |/\/ \    
    l  l        |  l       
    ヽ、|        | ノ    
       |ー───j     
        \            /
              _____
             /        ヽ  /^ \
      _    /________  ヽ  (_/  ヽ
           |ノ─ 、/─ 、ヽ |  ヽ (_\/
              ,|  \ |・   |  |   j   ヽ `−ノ
.            ||  二 |     | ̄ ⌒ヽ′ /   /    学校で今日はちょっと別のところに自転車で移動したんだけど
       /   /ー C ` ─ \)   _ノ  /    / そこで学校に戻るときに豚同級生がカギをなくして、30分位まってた後に
           ! ⊂──´⌒ヽ   ノ/(    / ノノ結局ポケットにあったとか言って皆キレる
             \ \_(⌒⌒_) /!  ヽ、/俺は「ヴァカだろ死ねよ!!」って言っておいた。同級生いじめはストレス解消。
              ` ,┬─_− ´/ ヽ /
               / |/ \/   く
           ((  /\ \        ヽ
             /, ─ 、/ \       /\
.             (  l l j  \ ___ /   ヽ
198デフォルトの名無しさん:2011/05/02(月) 15:25:55.54
      /!/{  / ヾ--r
   _  /     ̄    <_
 _>`´    >>1  ___<_
  >    r‐'" ̄ ̄ ノ ̄ ̄`ヽ、―ニ 二
/ ,    |  `ヽ/ ´`ヽ _  三,:三ー二 豚とかいうな sopa_h!!!!!!!!
 ̄/    |   ノヽ--/ ̄ ,    ` ̄ ̄ ̄
 / /⌒ヽ,|  ミ }  ...|  /!
 レ l d     _}`ー‐し'ゝL _
  | ヽ、_,   _,:ヘr--‐‐'´}    ;ー------
  |/|  \   ノ`ヾ:::-‐'ーr‐'"==-
    ヽ/l/|` ー------r‐'"    ̄ ̄
      |└-- 、__/`\-:、
     __,ゝ,,_____/ \_」 \
199デフォルトの名無しさん:2011/05/02(月) 15:36:22.44
   (     )
    (、 ,    ,)
      || |‘                         ,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,;;;;;;,,,
              ∧∧∧∧∧∧∧    ______;;;;;;''''"              ''';;;;;;;;,,,
   / ̄ ̄ ̄ ̄\ < 石破天驚拳 >   / _ノ_ノ:^)                ''';;;;;;;;;,,,
   l ∨∨∨∨∨ l <         >  / _ノ_ノ_ノ /)             ''';;;;;;;;;;;;;;;;;;;;;;
   |   \()/   |   ∨∨∨∨∨∨   / ノ ノノ//
   (| ((・) (<) |)           __  / ______ ノ
   |    ⊂⊃   |       _.. r("  `ー" 、    ノ
  | .| ⌒ \.l/ ⌒ | |  _. - '"´    "-、   ゙   ノ
  |. l + + + + ノ | ' "        _.. `ー''"ー'"
  r\_____/"´     __ '"´ -" ̄ "- ̄ヽ
/      ----,,,   ,,_.- ' "  /"   _   ----ヽゞ;;;,,                ,,,,:;;;;;;;;;;;;;;;;;;
           '''''─ "    (___-"  ヾ ヽヽヽヽ'';;;;;,,,.              ,,,;;;;‐″
|                          _..ヾ ヽヽヽヽ '';;;;,.           .,;;;;;;'
|                   ,,,-‐ '"´   ヾ__)__)__)_) ''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,,.,;;;;‐'''
│         "─r'--,,,,,--''''''''
200デフォルトの名無しさん:2011/05/02(月) 16:06:06.21
*は可変長引数で使う記号だとぼんやりと思っています。

*を理解していないからだと思いますが、
alist.flattenと*alist.flattenで出力に違いが生じる理由がよくわかりません。
どうして違いが出るのでしょうか?

irb(main):001:0> alist = [[1,"a"],[2,"b"]]
=> [[1, "a"], [2, "b"]]
irb(main):002:0> p alist.flatten
[1, "a", 2, "b"]
=> nil
irb(main):003:0> p *alist.flatten
1
"a"
2
"b"
=> nil
201デフォルトの名無しさん:2011/05/02(月) 16:14:33.13
その例で、
alist.flatten の結果は、[1, "a", 2, "b"]

p *alist.flatten ではそれがバラバラにされてpの引数になってるので、
p 1, "a", 2, "b" になってる。
202デフォルトの名無しさん:2011/05/02(月) 16:28:17.36
>>200
alist.flattenの結果は [1, "a", 2, "b"] だから
p alist.flatten は p(alist.flatten) でありこれは p([1, "a", 2, "b"]) と同じ
p *alist.flatten は p(*alist.flatten) でありこれは p(1, "a", 2, "b") と同じ

>>201
初心者スレなんだから、もっとわかりやすく書こうぜ
203デフォルトの名無しさん:2011/05/02(月) 17:04:16.38
>>202
横からだが、お前の説明の方がずっとわかりにくかった
204デフォルトの名無しさん:2011/05/02(月) 18:28:47.02
カッコを省略しないことは重要、という見解はあるかな。
205デフォルトの名無しさん:2011/05/02(月) 20:18:59.73
カッコの省略ただ単にコーディング規約に従えばいいだけで重要な部分ではない。

つけないとパースがおかしくなるような部分以外はスタイルさえ統一してりゃ好きにしていいと思うよ。
206デフォルトの名無しさん:2011/05/02(月) 20:24:11.05
rubyでは
begin
 なにか
rescue Exception
end

なにか rescue Exception
と書けるそうですが、両者はまったくの同一なのでしょうか。
たとえば前者は速いけど後者は遅いとか、そういう落とし穴はありますか。
後者を使ううえでのデメリットがないのか知りたいです。
207デフォルトの名無しさん:2011/05/02(月) 20:57:44.50
なにか rescue Exception じゃなくて、なにか rescue なんか
208デフォルトの名無しさん:2011/05/02(月) 21:03:17.58
パフォーマンスはおいといて、

修飾子(後置)rescueには例外クラスを指定できず、
StandardError(とサブクラス)しか捕まえられない。
209デフォルトの名無しさん:2011/05/02(月) 21:14:01.22
結城浩がRubyの入門書書かないかな?
210デフォルトの名無しさん:2011/05/02(月) 21:22:31.68
>>206
経験上、後置rescueを書いた箇所はあとあと必ず揉めるし、必ず書き変える羽目になる
なので、最初から素直にbegin構造で書いたほうが見通しがいいと思うの
211デフォルトの名無しさん:2011/05/02(月) 21:29:26.84
>>207-208
そ、そうだったんですか。おしえていただきありがとう。

>>210
そうなんですか。
eruby中で使おうと思ったんですが、erubyだと
<%begin%>
<%rescue%>
<%end%>
をかくのがめんどくさかったので、rescueをくっけるほうが簡単でいいやと
思ったんですけど、やめたほうがいいですか。
212デフォルトの名無しさん:2011/05/02(月) 21:32:53.23
やりたいようにやるのが一番やで
213デフォルトの名無しさん:2011/05/02(月) 21:47:22.14
trimモードならちっとはましかも。
% now = Time.now
<%= now %>
% if now.sec % 2 == 0
even sec
% else
odd sec
% end
214デフォルトの名無しさん:2011/05/03(火) 10:02:24.47
正規表現の先読みが理解できない。
>>> /(?=foo)bar/ =~ "foobar"
=> nil
なんでこれがマッチしないん?
215デフォルトの名無しさん:2011/05/03(火) 10:24:00.49
この手の記法は基本的に、幅がなく、位置(文字と文字の境界)にマッチする。
(?=foo) の場合は、「直後にfooのある位置」("foobar" の場合、fの左)にマッチする。
その位置から bar にマッチせよ、ということ。
216デフォルトの名無しさん:2011/05/03(火) 10:25:03.24
「幅を持たない」って書いてあるじゃん

/(?=foo)/ で "foo" までマッチはするんだけど、位置は動いてないんだ
動いてないってことは、直後の正規表現 /bar/ はまた "foo" の先頭からマッチを試される
もちろんマッチしない
結果は nil

/(?=foo)bar/ は
「文字列fooと文字列barが同じ開始位置から存在する」という必ず失敗する正規表現
先読みはマッチ記号入れないと思い通りには動作しない
217デフォルトの名無しさん:2011/05/03(火) 10:26:26.20
それは(foo)かつb,a,rと続く文字
/(?<=foo)bar/
218デフォルトの名無しさん:2011/05/03(火) 10:35:40.71
>>215-217
あーわかった、
/(?=foo)bar/ =~ 'foobar'
だと、いったん先頭から foo にマッチしたあと、開始場所がまた先頭に戻るわけね。
それが「幅を持たない」って言う意味か。なるほど。ありがと。

「ruby 正規表現 先読み」でぐぐったら
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html
のページがでてくるんだけど、このページを見てもさっぱりわからかったんだよね。
「幅を持たない」というのがどういう意味か、まるで書いていないし。マッチング開始場所が戻ると書いてほしいな。

あとこれも。
> (?=re1)re2
> という表現は、re1 と re2 両方にマッチするものにマッチする正規表現で す。
こうじゃなくて、「re1とre2の両方に、同時にマッチする正規表現」と書いてくれればいいのに。
「マッチするものにマッチする」ってなんだよ。
219デフォルトの名無しさん:2011/05/03(火) 10:37:12.27
先読みとか戻り読み駆使した正規表現読み書きしてるとだんだん脳みそ溶けてくるよね。
220デフォルトの名無しさん:2011/05/03(火) 10:44:14.31
93%くらいの用途は正規表現のマッチメソッドを && や || で繋げて処理すれば済むんだが
人はなぜか正規表現の先読み戻り読みを使って一発で表現しようとする
正規表現オブジェクトいっこでマッチさせたい需要は理解はするがw
221デフォルトの名無しさん:2011/05/03(火) 10:44:13.83
正規表現をマスターするには1つの言語を習得するぐらいの時間が必要だよね
222デフォルトの名無しさん:2011/05/03(火) 11:04:13.59
正規表現の先読みって、どんなときに必要なの?
用途がさっぱりわからない。
223デフォルトの名無しさん:2011/05/03(火) 11:11:37.28
>>222
if /re1/ =~ str && /re2/ =~ str then
のかわりに
@re = /(=?re1)re2/
if @re =~ str then
と書けるようになる
224デフォルトの名無しさん:2011/05/03(火) 11:16:39.97
ぶっちゃけ、どこに条件を押し込むかという問題に過ぎない

スクリプト構造を単純にするかわりに、正規表現に条件を押し込む
正規表現を単純にするかわりに、スクリプト構造側で条件を増やす
225デフォルトの名無しさん:2011/05/03(火) 12:00:23.82
>>223
if /re1|re2? =~ str
でよくね?
226デフォルトの名無しさん:2011/05/03(火) 12:01:04.30
まちがえた
if /re1|re2/ =~ str
でよくね?
それとも速度に違いがあるんかな
227デフォルトの名無しさん:2011/05/03(火) 12:04:19.90
>>223
ん、
/(?=re1)re2/ =~ str

/re1/ =~ str && /re2/=~str
は全然違うぞ。勘違いしてない?

str = 're1re2'
p (/(?=re1)re2/ =~ str) #=> nil
p (/re1/ =~ str && /re2/=~str) #=> 3
228デフォルトの名無しさん:2011/05/03(火) 12:28:18.73
>>226
/re1|re2/ =~ str
どこかにre1かre2の少なくとも一方あればマッチ、どっちでもいいから最初のマッチ位置が返る

/re1/ =~ str && /re2/ =~ str
どこかにre1があって、かつre2もどこかにあればマッチ。re2のマッチ位置が返る

/(?=re1)re2/ =~ str
re1でマッチするか確かめ、そのマッチ位置(≠re1のうしろ)でre2にマッチすればre2の位置が返る。

全部違うお
229デフォルトの名無しさん:2011/05/03(火) 12:52:15.79
/(?=re1)re2/ がマッチする例ってあるの?
230デフォルトの名無しさん:2011/05/03(火) 12:58:20.26
>>229
そっくりそのまま/(?=re1)re2/なら絶対に失敗。

[]とか.とか?とか+とか*とか|とか、なんでもいいけど、
複数の状態にマッチする先読みならマッチすることもある。
231デフォルトの名無しさん:2011/05/03(火) 13:08:13.57
無理やり考えた。

文字列中、年月日を表す数値だけ漢数字表記にする。

kansuuji = {
"0"=>"〇", "1"=>"一", "2"=>"二", "3"=>"三", "4"=>"四",
"5"=>"五", "6"=>"六", "7"=>"七", "8"=>"八", "9"=>"九"
}

text = '1989年4月1日に3%の消費税が導入された'.
text.gsub!(/(¥d+)(?=[年月日])/) { $1.chars.map {|c| kansuuji[c] }.join }

まぁこの程度だと先読みを使わなくても後続パターンを記憶すれば出来るか。
text.gsub!(/(¥d+)([年月日])/) { $1.chars.map {|c| kansuuji[c] }.join + $2 }
232デフォルトの名無しさん:2011/05/03(火) 13:16:23.73
subとかgsubみたいに「マッチした部分」を取り扱うメソッドだと先読み使うこともある。
233デフォルトの名無しさん:2011/05/03(火) 14:55:31.97
Rubyでデスクトップ座標のx 100 y 200の位置をダブルクリックするというのは書けますか?
普段はAutoItを使っているのですがRubyではどこまでできるのか知りたくて
234デフォルトの名無しさん:2011/05/03(火) 15:26:32.25
Rubyにはそんな機能はない

ので、デスクトップの座標のどこそこをOSがダブルクリックだとみなす間隔で2回クリックしたことにできるAPI
というのを直接なんらかの手段で呼べばいい
235デフォルトの名無しさん:2011/05/03(火) 17:20:16.83
テキストファイルから内容を読み込んで処理するプログラムを書くときコンソールでファイル名を指定しても、リダイレクタで標準入力を選んでもいいようなプログラムとしたい時、ARGVの引数をみてgetかfileopenか切り替えるような条件で分岐するしかないのでしょうか?
それとももっとスマートな方法がありますか?
236デフォルトの名無しさん:2011/05/03(火) 17:31:23.72
>>235
ARGF
http://www.ruby-lang.org/ja/man/html/ARGF.html

というのがある。
ってかそれくらいの単純な分岐にスマートも何もあるわけない。
237デフォルトの名無しさん:2011/05/03(火) 17:48:27.63
>>235
標準入力がリダイレクトされてるかを判定して、
リダイレクトされていればされていれば標準入力からの読み込み
そうでなければARGV解釈(orARGF)でいいと思う

FileTest.chardev?($stdin) # 偽ならリダイレクトされてる
238デフォルトの名無しさん:2011/05/03(火) 18:06:58.27
>>237
$stdtin.tty? ではダメなのかな。
239237:2011/05/03(火) 18:21:49.86
>>238
指摘ありがとうございます
tty? が普通みたいですね
何年も前に1度使ったきりでメソッドが思い出せなかったので
適当に検索して引っかかったものを書いてしまいました
240デフォルトの名無しさん:2011/05/03(火) 18:34:29.84
暗号化と復号化で出来るコードを書きたいのですが文字列をランダムに並べ替えたものはどのくらいの強度がございますか?
241デフォルトの名無しさん:2011/05/03(火) 18:41:17.86
本当にいわゆるランダムで並べ替えたのなら、復号不可能だから最強レベルだと思う
復号可能なら、それはそもそもランダムではない

公開鍵暗号とかそのへん調べるといいぞ
自分で実装してもあんまり勉強にならない
242デフォルトの名無しさん:2011/05/03(火) 18:50:53.17
鍵配送問題とか気にしないでいいならワンタイムパッドで
243デフォルトの名無しさん:2011/05/03(火) 19:04:15.42
>>236
サンクス
それためしてみる。
244デフォルトの名無しさん:2011/05/03(火) 19:05:51.51
復号不可能な暗号ってなんだよ
揚げ足取らないで質問の意味が分からないと返してやれば良いのに
245デフォルトの名無しさん:2011/05/03(火) 19:28:15.33
暗号化してみました
l%20P.%21r%21%20hewoeHllI%20i%20kdPlo

これ解読できますでしょうか?
246デフォルトの名無しさん:2011/05/03(火) 19:31:29.87
>>244
復号不可能な暗号は実在するよ
247デフォルトの名無しさん:2011/05/03(火) 19:34:07.40
>>241
DH共有鍵とか勉強する価値はあると思うけどね。
実際使うときはopensslを使うわけだが。
248デフォルトの名無しさん:2011/05/03(火) 20:24:48.58
md5とsha1は復号できないよね一方通行だから
249デフォルトの名無しさん:2011/05/03(火) 20:38:05.91
もともとハッシュの場合は情報が落ちるので
普通は一対一対応ではなくなってしまう
それに加えて一方向ハッシュの場合は、原像計算困難という特性がある
250デフォルトの名無しさん:2011/05/03(火) 20:41:34.68
md5とかは暗号ではないんじゃ?暗号学的ハッシュ関数とは言うけど
まず暗号ってのは特定の人物にだけ読めるようにしたいってものだし
その特定の人物が複合化して読めなきゃ暗号としての存在意義がねぇ
251デフォルトの名無しさん:2011/05/03(火) 20:44:35.15
ファイルにしてパスワードつきzipにするのがいちばん簡易で広範に機能するということが判明している
パスワードは別途電話とかで伝えとけw
252デフォルトの名無しさん:2011/05/03(火) 21:25:24.42
LinuxとかWindowsじゃないの使ってる人、Ruby本体なんかのマニュアル閲覧どうしてる?
Windowsだとchmでえいやーと検索して表示だったんだけど、もっと安楽なのない?
253デフォルトの名無しさん:2011/05/03(火) 21:50:58.66
>>252
るりま入れてPath通ったところにシェルスクリプト置いてrefe2で検索。
検索して調べたいんじゃなくてマニュアルを眺めたいときはserver.rb立ててブラウザからローカルホスト
254デフォルトの名無しさん:2011/05/03(火) 22:37:33.16
>>252
初心者には、Windowsじゃなくてもchmがいちばん手軽だとおもう。
refe2とかコマンドライン型は中級者以上の道具。個人的意見だけど。
255デフォルトの名無しさん:2011/05/03(火) 23:10:31.22
>>252
chmをアンパック読めるようにするツールがある。
名前は忘れた。
256デフォルトの名無しさん:2011/05/03(火) 23:27:16.29
Ubuntuではchmseeというそのままのアプリケーションが存在する
Rubyマニュアル読み込んだだけで1万5千個のファイルがキャッシュディレクトリに展開された
容量90MB
これから全文検索するのでもちろん検索は遅い
257デフォルトの名無しさん:2011/05/03(火) 23:30:35.18
refe2ぐらいは使えてもいいんじゃないかな。便利だし。
そんな手間でもないし、難しいこともないから。
258デフォルトの名無しさん:2011/05/03(火) 23:32:59.83
#=>

実行結果にみたいなのをつけてくれるライブラリなんだっけ?
259デフォルトの名無しさん:2011/05/03(火) 23:45:00.84
xmpfilter
260デフォルトの名無しさん:2011/05/03(火) 23:57:02.22
irb の結果を rocket output にしたい(だけの)場合は fancy_irb
最初の3行を .irbrc に書いておく

irb > require 'rubygems'
irb > require 'fancy_irb'
irb > FancyIrb.start
=> "Enjoy your FancyIrb :)"
irb > 1+2 #=> 3
irb > "long"*4 #=> "longlonglonglong"
irb > "long"*10
=> "longlonglonglonglonglonglonglonglonglong"
irb >
261デフォルトの名無しさん:2011/05/03(火) 23:58:40.65
=>ってロケットっていうのか…
262デフォルトの名無しさん:2011/05/04(水) 00:01:14.36
<=>を宇宙船って言うのは聞いたことがあるが
ロケットは初耳だなあ
263デフォルトの名無しさん:2011/05/04(水) 00:01:40.26
単にプロンプトの:RETURNを弄ればいいんじゃぁ。
264デフォルトの名無しさん:2011/05/04(水) 00:03:17.11
SFの見すぎだろ。
<=>はどう見てもどら焼きにしか見えない。
265デフォルトの名無しさん:2011/05/04(水) 00:04:18.25
たすけてtkが動きません
サンプルどおりにやってるのに
266デフォルトの名無しさん:2011/05/04(水) 00:08:58.85
rubyのマニュアルといえばWebのマニュアルというかリファレンスはやたら読みずらいな
JavaとかPHPでweb上のAPI見る癖がついてると「ありがたいけど、みづらい‥」と思ってしまう
267デフォルトの名無しさん:2011/05/04(水) 00:23:48.63
=>でhash rocketって言うよ
268デフォルトの名無しさん:2011/05/04(水) 00:23:49.41
旧マニュアルは読みやすいと思うが
最新のは俺も読みにくいと思う
269デフォルトの名無しさん:2011/05/04(水) 00:24:11.11
>>265
「なにもしなくても」Ruby/Tkが動作するのはActiveScriptRubyだけ
それ以外は別途Tcl/TKのインストールが必要
270デフォルトの名無しさん:2011/05/04(水) 01:42:01.82
rubyどころかプログラミング初心者なんだが
ちょっと楽しそうかもと思って手を出そうとしたら、

RadRailsのインスコでつまずいたわ・・・
なんで起動しねーんだよ・・・
日本語化どころかエディタが起動しねーって何だよ
271デフォルトの名無しさん:2011/05/04(水) 01:48:23.72
テキストエディタ+ターミナル(コマンドプロンプト)でいいじゃない
272デフォルトの名無しさん:2011/05/04(水) 01:49:17.88
最初はそういう事に丸一日かかったりするけど、
あちこち寄り道してるうちに色々とできるようになってくるもん。
273デフォルトの名無しさん:2011/05/04(水) 01:53:55.22
このスレでもすすめられてる「楽しいRuby」買ったら、
ある程度Rubyに特化したエディタがいいってあってさ、
テキストエディタはあるんだけど、まぁその方がいいのか、と思ったら、これだよ・・・

一日かけて出来ればいい気がしてきたわw
AptanaのWEB見て、Studioって何?2?3?え?なに?
って状態だもん
274デフォルトの名無しさん:2011/05/04(水) 02:23:35.76
Rubyに特化っていうのはそういうことじゃないと思うw
Ruby用にキーワード強調表示や自動字下げしてくれるエディタってこと
たのしいRubyの範囲なら無くてもどうってことないよ

あとRadRailsみたいな統合開発環境はこのスレでは人気が無いので
質問してもレスがつかないかもしれない
275デフォルトの名無しさん:2011/05/04(水) 02:23:54.78
>>273
まったくの初心者なら、だれか知ってる人が近くにいないと、どんな言語でも
きついと思うよ。
ときどきカンのいいやつがいて、独習できちゃう人もいるけど、多くの人は
そんなことないと思う。
初めて自転車にのるときのようなもので、一人で練習してできる人もいるけど
ふつうは親が補助してやって乗れるようになるでしょ。
まあ頑張ってこのスレでもいいから気長に勉強してくれ。
276デフォルトの名無しさん:2011/05/04(水) 06:51:49.04
事前に期待される、概念的に必要なもの(Windows版)
 キーボードから文字を入力してファイルをどうにかする黒い画面があるらしいこと
 ディレクトリパスを元にした(エクスプローラ上での)移動と操作の概念
 Wordではないテキストファイルというモノがあり、メモ帳で編集するということ
 文字化けの原因は英語とシフトジスとユーティーエフはちとかいう日本語の記述法があるから

最低限あると便利なエディタの機能
 「Rubyの予約語に対応」した着色機能(シンタックスハイライト)
 改行支援(オートインデント、スマートインデント)
 行番号表示
277デフォルトの名無しさん:2011/05/04(水) 10:17:19.93
Rubyマニュアル、HTML固めたのってないんだな
読むだけなのにWEBrickが起動するのがイヤだったので、
「localhost:10080 を wget -r でリンクまるごと保存すればメインの部分は読めんじゃね?」
と思って現在処理中

うん、終わらないw
現在32MB
クエリ文字列つきのリクエストどうしよう
278デフォルトの名無しさん:2011/05/04(水) 10:26:21.29
無いわけ無いだろうw

http://www.ruby-lang.org/ja/documentation/
279デフォルトの名無しさん:2011/05/04(水) 11:02:06.75

webサイトはPHPで作り、携帯アプリはJavaで作る場合、Rubyを覚える場合メリットはありますか?
280デフォルトの名無しさん:2011/05/04(水) 11:03:27.09
メモリとスワップ使い切った
キャンセル

よく考えたら半分くらいは月に1回くらいしか読まないし、
もう半分くらいは年に1回読むか怪しいし、
よく読むものでもクラス全体眺めて探すなんて1日数回あるかどうかなので、
必要なときに動的生成させたほうがマシだった
見積りは実行前に行ないましょう

>>278
それHTMLじゃないぞ
281デフォルトの名無しさん:2011/05/04(水) 11:09:03.15
>>279
webサイトを作成したり携帯アプリを作成したりするのではないときに役立ちます
282デフォルトの名無しさん:2011/05/04(水) 11:16:03.19
>>280
旧リファレンスマニュアル 20051029版
ってとこをミロ。htmlのがある。

version 1.6 〜 1.9 対応
原著:まつもとゆきひろ

だからまだまだ使える。
283デフォルトの名無しさん:2011/05/04(水) 11:36:30.70
その「1.9」 は 1.9.0 のことのような気がしてならない
284デフォルトの名無しさん:2011/05/04(水) 11:45:23.18
公式適当だからな
285デフォルトの名無しさん:2011/05/04(水) 12:06:07.86
旧マニュアルは固めてあるやつは古すぎるからアレ使うぐらいなら
http://www.ruby-lang.org/ja/man/html/ 以下を
巡回ソフトかなんかでローカルにおとした方がいいかも。

まあそこまでするぐらいならるりまでいいけどね
286デフォルトの名無しさん:2011/05/04(水) 12:35:24.89
最近はwebサイトのるりま検索使ってるわ
ブラウザの検索バーから検索できるようにしてる
287デフォルトの名無しさん:2011/05/04(水) 13:03:29.52
これ便利だな &:symbol
File.open('text', &:readlines)
288デフォルトの名無しさん:2011/05/04(水) 13:54:13.10
>>287
なにこれ
289デフォルトの名無しさん:2011/05/04(水) 13:58:32.20
RubyでGuiを作る場合にメジャーなのって何ですか?
Pythonならtkです
290デフォルトの名無しさん:2011/05/04(水) 13:59:38.62
>>289
マジレスするとHTMLじゃないかな。
291デフォルトの名無しさん:2011/05/04(水) 14:19:19.20
>>288
:sym.to_proc

Proc.new {|arg| arg.__send__(:sym)}
こういうものを返すらしい。

それからメソッド呼び出しの&objによるブロック渡しは
obj.to_procしてからブロックとして渡すらしい。

つまり
File.open('a', &:read) は
File.open('a', &(:read.to_proc)) であり
File.open('a'){|f| f.__send__(:read)} で
File.open('a'){|f| f.read } ということ。

collectとかsort_byみたいなのにも便利かも。
292デフォルトの名無しさん:2011/05/04(水) 14:47:32.06
>>289
とりあえずtk使っとけばいんじゃね

まんま、GUIの記事がるびまにあった
ttp://jp.rubyist.net/magazine/?0001-RubyGUI

あとJRuby経由でJavaからって手もあることはあるな
293デフォルトの名無しさん:2011/05/04(水) 14:58:31.77
>>291
なんか直感的じゃなくてヤな書き方だなぁ。
ストリームがちゃんと閉じられてますよ感が無い。
294デフォルトの名無しさん:2011/05/04(水) 15:00:32.95
tkとかgnome2とか
でもrubyのGUIライブラリはどれもドキュメント不足で結構めんどい。
もともとCUI文化な上にドキュメント少ないからGUI作る人が増えないし、
GUI作る人が増えないからドキュメントも増えないみたいな袋小路。
295デフォルトの名無しさん:2011/05/04(水) 15:02:27.66
>>293
File.openだと微妙だけど
array.sort_by(&:length) とかだと個人的にはこっちの方が直感的に読める。
296デフォルトの名無しさん:2011/05/04(水) 15:12:06.08
>>295
array.sort_by{|e|-e.length}の場合はどう書くのっと。
やめようよ、こんなの絶対おかしいよ。
297デフォルトの名無しさん:2011/05/04(水) 15:14:33.53
Redmine+SQLite3 Windows Ruby1.9.2です

ttp://misty-sphere.at.webry.info/200901/article_3.htmlをみながらやったんですが
ruby script/server -e productionでサーバが立ち上がりません
原因は何故でしょうか?

C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:861:in `report_activate
_error': RubyGem version error: rack(1.2.2 not ~> 1.0.1) (Gem::LoadError)
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:255:in `ac
tivate'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:1204:in `g
em'
from D:/redmine/vendor/rails/actionpack/lib/action_controller.rb:
34:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dep
endencies.rb:156:in `block in require'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dep
endencies.rb:521:in `new_constants_in'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dep
endencies.rb:156:in `require'
from D:/redmine/vendor/rails/railties/lib/commands/server.rb:2:in
`<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from script/server:3:in `<main>'
298デフォルトの名無しさん:2011/05/04(水) 15:28:33.08
array.map(&:length).sort_by(&:-)
:-)
299デフォルトの名無しさん:2011/05/04(水) 15:29:18.69
>>297
> RubyGem version error: rack(1.2.2 not ~> 1.0.1)
rackのバージョンが新しすぎるから。
rackの1.0.1かそれ以上だけど1.0.x系を入れる。

'not ~>'の意味は↓でも嫁。
http://blog.s21g.com/articles/1504
300デフォルトの名無しさん:2011/05/04(水) 15:41:02.22
gem -version rackをやったら1.5ぐらいのが出てきたので早速gem install rack -v=1.0.1でインストールしまし
そしたら違うエラーが出てきてましたhttp://0.0.0.0:3000にアクセスしてみましたがアクセスできませんでした
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
D:/redmine/vendor/rails/railties/lib/rails/gem_dependency.rb:119:in `requ
irement': undefined local variable or method `version_requirements' for #<Rails:
:GemDependency:0x34a7c30> (NameError)
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:254:in `activate'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:1204:in `gem'
from D:/redmine/vendor/rails/railties/lib/rails/gem_dependency.rb:73:in `add_load_paths'
from D:/redmine/vendor/rails/railties/lib/initializer.rb:301:in `block in add_gem_load_paths'
from D:/redmine/vendor/rails/railties/lib/initializer.rb:301:in `each'
from D:/redmine/vendor/rails/railties/lib/initializer.rb:301:in `add_gem_load_paths'
from D:/redmine/vendor/rails/railties/lib/initializer.rb:132:in `process'
from D:/redmine/vendor/rails/railties/lib/initializer.rb:113:in `run'
from D:/redmine/config/environment.rb:20:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `block in require'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in `new_constants_in'
from D:/redmine/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
from D:/redmine/vendor/rails/railties/lib/commands/server.rb:84:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from script/server:3:in `<main>'
301デフォルトの名無しさん:2011/05/04(水) 15:48:55.99
>>300
わからん。
↓な気がする。
http://www.oiax.jp/rails/zakkan/rubygems_1_5.html

ってかエラーメッセージでググったほうが早いぞ。
302デフォルトの名無しさん:2011/05/04(水) 16:15:18.38
>>274
違うのか・・・(´・ω・`)
統合開発環境ではないエディタ、RDEだな!
よし、入れてみる!

>>275
HTML、CSSまでは独学で来たんだが
プログラミング言語は次元が違うというか、読めないw
いままでは英語で何となく読めてたのが、急にアラビア語になった感じ
気長に勉強してみるわ。
303デフォルトの名無しさん:2011/05/04(水) 16:25:21.44
検索してみたのですがどうやらRubu1.9.2でredmineをエラーなしで動かせている記事がありませんでした
には不可能です
世の中の偉人方に出来ないものを私のような小生には不可能なので諦めたいと思います
304デフォルトの名無しさん:2011/05/04(水) 16:31:13.29
>>296
個人的にはマイナスでソートするの嫌いだから
array.sort_by(&:length).reverse
305デフォルトの名無しさん:2011/05/04(水) 16:34:56.34
RDEはRDEでいろいろトラップまみれだから
サクラとかApsaryとかXyzzyとかその他もろもろ高機能テキストエディタの
Rubyモードで書いて「コマンドプロンプトに送る」あたりで実行するのがいいかも。
306デフォルトの名無しさん:2011/05/04(水) 16:53:42.17
VMにUnix系のOS入れてVimなりEmacsなり
307デフォルトの名無しさん:2011/05/04(水) 16:54:27.65
>>303
RedmineってたしかRails2.xだよね。
そしてRails2.xはRuby1.9.xをサポートしてないはず。
308デフォルトの名無しさん:2011/05/04(水) 17:04:57.50
>>305
トラップとかあるのかよ
サイト見る限りよさそうに書いてあったのに

サクラでいきます。
ほんと助かります。ありがとうございます。
309デフォルトの名無しさん:2011/05/04(水) 17:11:06.79
Redmine は Xubuntu 10.10 の Ruby 1.8.7 で動作させてるよ
Ruby1.9 で動作させる意義を見いだせない

あとたった今、自分用 Redmine のチケットに長文で投稿したはずの文章が「eucJP-ms」の1語だけになった
今日はもう何もやる気が起きない

たぶん投稿文中のHTMLのタグや<pre>とかの複合のなにかだと思うのだが、原因究明する気すら起きない
Firefoxからit's all Text!経由だったので、もしかしたらそれ絡みかもしれないがもうやだ
外部エディタに別ディレクトリバックアップ保存機能があればよかったんだが、軽さ優先で選定に手を抜いた
310デフォルトの名無しさん:2011/05/04(水) 18:15:10.29
>>304
ぐぬぬ…
311デフォルトの名無しさん:2011/05/04(水) 18:59:35.01
>>302
Rubyのスレでこんなこと言うのも難だが
HTML、CSSと来たなら
最初のプログラミング言語はJavaScriptのが良くないか…
312デフォルトの名無しさん:2011/05/04(水) 20:03:28.43
Ruby1.9への移行っていつぐらいなの?
313デフォルトの名無しさん:2011/05/04(水) 20:04:08.61
>>312
え・・・?
まだ移行してないの?
314デフォルトの名無しさん:2011/05/04(水) 20:14:01.00
redmineの他にも良いものがあればそれを利用したいと思います
webにインストールして利用するプロジェクト管理についての話題はどこの板のどのスレで伺えばよいでしょうか?
315デフォルトの名無しさん:2011/05/04(水) 20:16:40.74
>>312
Ruby1.8に慣れてるのなら今すぐが最適
ただ、文字列を使用するライブラリは遅いので注意

Rails が移行すればいいんだろうけど、たぶん絶対しないと思う
316デフォルトの名無しさん:2011/05/04(水) 20:20:37.76
>>314
この板かマ板
こことか
【バグ管理】 BTS使ってる?【追跡】 3
ttp://hibari.2ch.net/test/read.cgi/tech/1244347242/
317デフォルトの名無しさん:2011/05/04(水) 20:20:44.63
UTF-8しか使わない場合はRuby1.9から初めてもいいですか?
初心者です
318デフォルトの名無しさん:2011/05/04(水) 20:22:34.19
2038年移行の日時を扱いたいのですが、Ruby1.9.2でこの2038年問題は解決されたのですよね?
319デフォルトの名無しさん:2011/05/04(水) 20:25:44.08
これは1.9.3だけど、まぁ、1.9.2でも解決済み。
> Time.now + 1000 * 365 * 24 * 60 * 60
=> 3010-09-04 20:24:58 +0900
320デフォルトの名無しさん:2011/05/04(水) 20:40:46.95
>>317
Shift_JISとEUC-JPとUTF-8が違うものという認識があり、
エディタとかでファイルの文字エンコーディングを書き換えたり意識したことがあって、
なにかわからないことがあってぐぐった結果がRuby1.8専用の書き方だったとしても
めげない程度のリテラシがあるのなら、最初からRuby1.9.2を使ってもいいよ
321デフォルトの名無しさん:2011/05/04(水) 21:05:47.39
1.9の本も出てるし
いまさら1.8から身につける必要はあんまり感じないな
322デフォルトの名無しさん:2011/05/04(水) 21:20:50.07
Railsって何?
323デフォルトの名無しさん:2011/05/04(水) 21:23:36.23
>>322
偉大なる設定ファイル集
324デフォルトの名無しさん:2011/05/04(水) 21:38:08.50
Ruby1.9が流行らない最大の問題はRedmineとRailsの対応の遅れである
325デフォルトの名無しさん:2011/05/04(水) 21:38:40.45
>>323
設定ファイル集というとStrutsのほうがイメージ強いな
Railsは「設定の前に規定」がポリシーだし
326デフォルトの名無しさん:2011/05/04(水) 22:03:53.80
        ___                _
       / ____ヽ           /  ̄   ̄  ̄ \
       |  | /, −、, -、l           /、            ヽ
       | _| -|  ・|< ||           |・ |―-、         |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ        |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |       |
    | ̄ ̄|/ (_ ∧ ̄ / 、 \        \. ̄`  |        /
    ヽ  ` ,.|     ̄  |  |        O=======|
      `− ´ |       | _|        /           |
         |       (t  )       /    /        |
 「Rubyコミッタに選ばれちゃった!」       「まじかよすごくねーなwww」
327デフォルトの名無しさん:2011/05/04(水) 22:16:05.07
>>320
前にもあったが、2つ目の言語としてなら1.9.2で一発なんだよね

なんで今の面倒な時期を狙い済ましたように
初めてのプログラミング言語としてRubyやろうとするんだ
説明めんどくせえ、とかちょっと思う
328デフォルトの名無しさん:2011/05/04(水) 22:22:02.97
>>327
Python3も似たような広報的問題抱えてる

まあ、よく考えたら他の言語も大体似たようなもんだったりもしたんだけどw
バージョンがひとつしかなくて非互換的新機能もない、という状態の方が稀

酷い言い方だが、混乱する初心者は切り捨てでもいいと思う
非商用でノンサポートな言語はこれまでもそうだったし、これからもそうだろう
329デフォルトの名無しさん:2011/05/04(水) 23:04:36.40
gemでインストールしたやつを全てアンインストールする方法ってありませんか?
パッケージがたくさんありすぎてひとつひとつ入力するのがきついので
もし存在しない場合はrubyinstallerでインストールしなおします
330デフォルトの名無しさん:2011/05/04(水) 23:08:17.02
>>329
gemのインストールディレクトリの下の
binとdocとgemsとspecificationsの下のディレクトリを全部消す。
331デフォルトの名無しさん:2011/05/04(水) 23:08:48.37
おっともちろんディレクトリだけじゃなくファイルもね。
332デフォルトの名無しさん:2011/05/04(水) 23:19:30.72
レジストリは修正しなくていいの?
333デフォルトの名無しさん:2011/05/04(水) 23:33:31.41
>>332
レジストリは使っていない。
334デフォルトの名無しさん:2011/05/05(木) 02:02:40.09
>>311
なん・・・だと・・・
いや、イメージの問題なんだけど、
JavaScriptって古い&重いってあって、
プログラミングやろうかなってときに頭になかった
335デフォルトの名無しさん:2011/05/05(木) 02:03:42.64
refe2もるりまサーチも刷新版も芋すぎて使う気になれん!
findしてソースコード読んだ方が早いがな!
336デフォルトの名無しさん:2011/05/05(木) 02:11:16.01
>>334
古いか新しいかと言えばJavaScriptはRubyと同い年くらい。
速度は改善されてて処理系も現在進行形で進化中。
むしろRubyよりホットな言語だろう。

ただ動作環境が事実上Webブラウザだけなので、
(サーバーサイドJSも昔からあるが声のでかい奴が叫んでるだけ)
ファイルを処理するとかなら使いづらいだろう。
337デフォルトの名無しさん:2011/05/05(木) 02:21:16.48
今はRubyでゆんゆんしてるけど、
もし入出力がサポートされててコマンドラインから叩けるV8がでたらそっちに移行するかもしれないな。
338デフォルトの名無しさん:2011/05/05(木) 02:30:47.69
ブラウザから離れたJavaScriptなんて高が知れてると思うなあ
もし離れてもやってけるなら今頃みんなRhinoでも使ってる
339デフォルトの名無しさん:2011/05/05(木) 04:45:23.36
>>337
まさにnode.jsのことだな。今すぐ移行しろ。

>>336
node.jsは基本的なファイル処理も十分できる。
ただバージョンアップが激しいのでライブラリの仕様が安定してないのが弱み。

>>338
Rhinoは遅いけどnode.jsは爆速。Rubyがどう頑張ってもこの速度にはとうてい追いつけない。
340デフォルトの名無しさん:2011/05/05(木) 06:31:12.68
イベントループモデル流行りだしてんな
といっても同時接続数が多いサイトじゃないと効果実感できんと思うが

JavaScriptは保守性に難がありすぎると思う
つーかいきなりnode.jsの話がでてきたがWebProg板向きの話だと思うが
少なくとも初心者スレ向きの話題ではないわな
341デフォルトの名無しさん:2011/05/05(木) 06:38:59.81
node.jsが人気あるのは尖がってるからで、だからその筋の人に人気
一般プログラミング従事者や初心者には若干荷が重い
JavaScriptで作られたnode.jsで作られた何か、というのが流行した頃合いなら、
適度にわかりやすく適度に便利で適度に遅いはず
Rubyで作られたRailsで作られた何か、と同様に
342デフォルトの名無しさん:2011/05/05(木) 07:44:11.12
>>340
>JavaScriptは保守性に難がありすぎると思う
これってJavaScriptそのものに難があるってことじゃなくて、
HTMLやらAjaxやらが絡んでくるからしっちゃかめっちゃかになるって話だよね…?
343デフォルトの名無しさん:2011/05/05(木) 10:04:35.15
Rubyinstallerで入れたらまずやること

gem updateでgemを最新版にする
他にやることありますか?
344デフォルトの名無しさん:2011/05/05(木) 10:09:06.57
環境変数をいじくるとか‥かな
ttp://www.ruby-lang.org/ja/man/html/_B4C4B6ADCAD1BFF4.html
345デフォルトの名無しさん:2011/05/05(木) 10:17:26.00
>>343
HDD容量に余裕があるなら、devkitをあらかじめ入れて保険をかけておく
ttp://d.hatena.ne.jp/kitamomonga/20110208/ruby_gem_install_requires_make_on_windows
346デフォルトの名無しさん:2011/05/05(木) 11:29:12.78
pikを入れる
347デフォルトの名無しさん:2011/05/05(木) 12:26:45.95
Rubyの次に学習すべき言語は何がおすすめですか?
やはりHaskellでしょうか。
348デフォルトの名無しさん:2011/05/05(木) 12:40:32.66
英語がいいと思うよ
349デフォルトの名無しさん:2011/05/05(木) 12:41:05.44
Haskellにこだわるのが意味わからんw
350デフォルトの名無しさん:2011/05/05(木) 12:42:47.72
JavaやC++など変数が型を持つオブジェクト指向言語もおすすめ
351デフォルトの名無しさん:2011/05/05(木) 13:28:08.93
rubyが最初の言語だと、次はどの言語選んでもキツいだろうね。
352デフォルトの名無しさん:2011/05/05(木) 13:31:30.35
Rubyがカバーしていない部分を新たに覚えるだけ。
353デフォルトの名無しさん:2011/05/05(木) 13:57:10.96
ほおお、上に出てきてた奴

ary.sort_by{|i| -i.length }
より
ary.sort_by(&:length).reverse
の方が微妙に速いんだね。上の方がメソッド呼ぶ回数多いからかな。
まあほとんど差はないんだけど。

user system total real
-: 9.200000 0.010000 9.210000 ( 9.208521)
rev: 8.940000 0.010000 8.950000 ( 8.925170)

require 'benchmark'
STR = '*'
ARY = Array.new(40000){|i| STR * i}.shuffle
Benchmark.bm(6) do |x|
x.report(' -:'){ 100.times{ARY.sort_by{|i| -i.length}} }
x.report('rev:'){ 100.times{ARY.sort_by(&:length).reverse} }
end
354デフォルトの名無しさん:2011/05/05(木) 15:22:22.63
>>336
同い年なのか。
単に自分が知っているJavaScriptは昔からあって
Rubyは最近って意識だったんだと思う
むしろホットか・・・orz

>>337の書き込み内容とかnode.jsとか、意味が全然わかんないw
徐々にわかっていくものと信じたいわ

ウェブサイト作りの一環でプログラミングを使いたくなったときの勉強と
例えばJaneを作るときのプログラミングの勉強って全く違うの?
355デフォルトの名無しさん:2011/05/05(木) 15:47:04.94
デスクトップアプリケーションと
ケータイアプリと
Webアプリケーションと
自分のパソコンの中でシェルから起動してなんかやらせるスクリプトは
勉強の方向性というか追加で覚えることがまったく違う

日常的にいちばん便利なのが4、
いまのところ趣味で充実感を得やすいのが3、
初期投資に見合った収入になる可能性が一番高いのが2、
どっかの企業に就職して手がけないと今後割に合わなそうなのが1
356デフォルトの名無しさん:2011/05/05(木) 17:09:32.47
その中で >>302 が習得しやすそうなのはWebアプリケーションだな
JSとRubyは担当するところが全く違う
(JSはブラウザ側、Rubyなどはサーバ側がメイン)

んでHTML、CSSとWebアプリ界のブラウザ側での記述を学んで来たなら
取っつきやすいのはJSじゃないかな?って思った
まあ、いきなりサーバ側やるのもダメじゃないけどね?
357デフォルトの名無しさん:2011/05/05(木) 17:15:47.09
Rubyはどうしてもちょっとしたツール作成言語って感じになるなぁ。
所詮趣味レベルなんだよね。
仕事で使う機会は無いし(あったとしてもRails使ったWebサイトぐらいか?)
何より、あえて潰しの利かないRubyを選ぶ理由が無い。
358デフォルトの名無しさん:2011/05/05(木) 17:23:28.80
>>302がひと月でもふた月でもプログラミングを学んで
幾多の妄言に惑わされなくなることをお祈りしときます
359デフォルトの名無しさん:2011/05/05(木) 17:33:23.30
ここのRubyコードの例で、

【Perl,PHP】LLバトルロワイヤル16【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1302692765/583

以下の記述があるのですが、

File.open('a.mp3') do | f |
x = f.read;

バイナリーモードでopenしなくてもいいのでしょうか?

File.open('a.mp3', "rb") do | f |
x = f.read;
360デフォルトの名無しさん:2011/05/05(木) 17:45:35.68
>>359
Windows環境ならバイナリモード必須だね
Linux環境でもやっておいたほうが無難だろう
361デフォルトの名無しさん:2011/05/05(木) 17:56:42.41
>>360
やはりそうですよね。
ありがとうございました。
362デフォルトの名無しさん:2011/05/05(木) 18:44:10.00
これa.mp3は1回読んだら使ってないからさっさと閉じちゃえばいいのに。
x = File.open('a.mp3', 'rb') {|file| file.read }
363デフォルトの名無しさん:2011/05/05(木) 19:37:31.37
Web系でRubyを選択する意味はないと思う
364デフォルトの名無しさん:2011/05/05(木) 19:45:34.84
Railsはまだ需要あるだろ。
PHPでいいじゃん、ってなることが多いけど。
365デフォルトの名無しさん:2011/05/05(木) 19:59:49.14
Ruby1.9.2でテキストファイル(tsv形式)を読み込んで表示させたいのですが動きません

CSV.open("tsv.txt", "r", "\t", "Lf") do |row|
print row[1] + "\n"
end

a[tab]100
b[tab]200
c[tab]300
366デフォルトの名無しさん:2011/05/05(木) 20:03:24.08
>>365
もっとわかりやすく詳しく情報を
367デフォルトの名無しさん:2011/05/05(木) 20:06:53.36
>>365
ああ、あと、CSVライブラリは1.9でインターフェースが大きく変わったようだよ。
古い灰色背景のリファレンス見てるならるりまにかえたまへ。
368デフォルトの名無しさん:2011/05/05(木) 20:14:50.56
>>365
ファイル開くモード以外のオプションはハッシュで指定するようになった。
それからCSV.openは row じゃなくてCSVオブジェクトを吐くようになった。

CSV.open('tsv.txt', 'r', {:col_sep => "\t", :row_sep = "\n"}) do |tsv|
 tsv.each {|row| puts row[1] }
end



CSV.foreach('tsv.txt', 'r', {:col_sep => "\t", :row_sep = "\n"}) do |row|
 puts row[1]
end
369デフォルトの名無しさん:2011/05/05(木) 20:18:49.96
>>368
syntax error, unexpected '=', expecting tASSOC
370デフォルトの名無しさん:2011/05/05(木) 20:38:37.02
そのくらいわかれ、と言いたいところだが、 => にしておけ。
371デフォルトの名無しさん:2011/05/05(木) 21:03:07.21
失礼します、るりまってなんですか?
372デフォルトの名無しさん:2011/05/05(木) 21:08:34.00
>>355
わかりやすい解説ありがとうございます。
追加で覚えることが違うと。
趣味の範囲だしWebアプリケーションが楽しそうだ

>>356
なるほど、そういうことだったんですね。

>>358
ありがとうございます。
がんがります。

まぁでも早速>>357>>363-364あたりを見て、
Rubyってそんなによくないの?なんて惑わされたり。
惑わされるというよりは、ここにいるRuby好きの方が
日常的にどういったときにRubyを使ってるのか気になったって方が正しいですが
373デフォルトの名無しさん:2011/05/05(木) 21:10:56.17
>>371
これかな。「Rubyリファレンスマニュアル刷新計画 (通称るりま) ・・」
http://redmine.ruby-lang.org/projects/rurema/wiki
374デフォルトの名無しさん:2011/05/05(木) 21:22:49.37
>>373
どもです
公式サイトのRubyリファレンスマニュアル刷新計画 chm版 1.9.2用使ってますが公式サイトで見れるものとはこれとは違うのですか?
375デフォルトの名無しさん:2011/05/05(木) 21:28:55.44
>>374
知らない。スマソ
376365:2011/05/05(木) 21:32:53.86
>>366
情報が少なくてすいませんでした
Ruby1.9.2でテキストファイルにtsv形式でデータを記録してあります(tsv.txt)

tsv.txtの中身 [tab]はタブです。入力できないので[tab]で表記してます。
a[tab]100
b[tab]200
c[tab]300

このtsvファイルを読み込んで表示させたいのですが>>365に書いたのでは動きませんでした。
>>368ー370さんのコードも試してみたのですが、
require "csv"
CSV.foreach('list.txt', 'r', {:col_sep => "\t", :row_sep => "\n"}) do |row|
 puts row[1]
end
を実行すると
c:/Ruby192/lib/ruby/1.9.1/csv.rb:1197:in `foreach': wrong number of arg
uments (3 for 2) (ArgumentError)
from C:/puroguram/ruby/sannpuru/tsvwoyomikomu1.rb:2:in `<main>'
続行するには何かキーを押してください . . .
ってエラーが出ました

377デフォルトの名無しさん:2011/05/05(木) 21:45:25.34
>>374
それは基本的に新しいので、古過ぎるのかもしれないと考える必要はない
古すぎてよくないのは灰色のやつ

>>372
 ・ とりあえずどんなものでも全部オブジェクトにする
 ・ スクリプト言語なのでその場でコンパイル
 ・ 誰も止めない誰も読めない自分の足を撃ちたいはいどうぞ(1ダースの銃(歌って光る変形ギミック付き)
 ・ 1クラス1ファイル志向なので最終的に実行するまでファイル読み込みいっぱいおっぱい
というRubyのポリシーが、
 ・ 作成言語は利用者数が多いほうがプログラマが安く買えて良い
 ・ ユーザーは待ってくれないのでとにかく速く動けばそれで良い
 ・ サーバにインストールされてないとかマジ問題外
 ・ ソフトウェア工学のお勉強は大学でやれカス
という商用サイト作成ポリシーとあんまり合致しない
378デフォルトの名無しさん:2011/05/05(木) 21:54:25.65
>>376
だからエラーメッセージをちゃんと読んでマニュアルを調べろ、と。
標準添付ライブラリ(All libraries) > csv > class CSV
379デフォルトの名無しさん:2011/05/05(木) 22:24:46.47
>>368
CSV.foreachに'r'なんて指定できないぞ
380365:2011/05/05(木) 22:39:17.01
すみません何とか読み込めたのですが、tsvに"が含まれているとエラーになります
文字列に"が入った場合は取れないのでしょうか?

a 100 aは"apple"
b 200 bは"banana"
c 300 cは"chokoreeto"
381デフォルトの名無しさん:2011/05/05(木) 22:45:24.39
a\t1\t"foo"
b\t2\t"bar"
というTSVデータでちょっと試したら
CSV.foreach('list.txt', col_sep: "\t", row_sep: "\n") do |row|

Unclosed quoted field on line 1. (CSV::MalformedCSVError)
ってエラーが出た
ファイルをバイナリで読んでるのかな?とおもって
CSV.foreach('list.txt', col_sep: "\t", row_sep: "\r\n") do |row|
にしたらちゃんと読めた
CSV.foreach('list.txt', col_sep: "\t") do |row|
でも読めた
382デフォルトの名無しさん:2011/05/05(木) 22:46:55.69
書き忘れました
>>381 はWindowsでのことです
TSVの改行が\r\nになってます
383デフォルトの名無しさん:2011/05/05(木) 22:50:35.92
>>380
CSV.foreach('test.tsv', col_sep: "\t", quote_char: "'") do |row|
とかにするとどうだろうか
384365:2011/05/05(木) 22:51:38.82
>>381さんありがとうございます
a\t1\t"foo"のように文字列を"で囲った場合は読めたのですが
a\t100\taは"apple"
のような"で文字列を囲わない感じのでは読めませんでした
385デフォルトの名無しさん:2011/05/05(木) 22:52:39.02
>>380
quote_charはデフォルトで"になってるから、:quote_char => "'"とか違うのを設定
386デフォルトの名無しさん:2011/05/05(木) 22:54:15.45
RubyのマニュアルもPHPのマニュアル並みに全てのページにサンプルをついてればなぁ
387365:2011/05/05(木) 22:59:15.05
出来ました!ありがとうございます
>>366ー386さんありがとうございます
388365:2011/05/05(木) 23:15:29.58
実はソフトウェアの更新確認ツールを作りたかったのですが、
変数listの内容を外部ファイルにtsvで保存したかったのですが
何とか先輩方のお力のお陰でtsvを読み込めるまでにいたったのですが
tsvに書いた正規表現パターンがうまく動かないので、外部tsv化は挫折しました
また勉強して外部tsv化にチャレンジしてみたいと思いますが1年ぐらいかかりそうです
途中ですがコード張っておきます
http://codepad.org/H3RSUoLn
389デフォルトの名無しさん:2011/05/05(木) 23:16:58.02
390デフォルトの名無しさん:2011/05/06(金) 02:19:05.91
HTML解析しようと思っていてどの言語使おうか迷ってます。
RubyでHTML解析って簡単にできますか?
391デフォルトの名無しさん:2011/05/06(金) 03:41:56.73
HTMLの解析そのものが目的なのか、HTMLを解析してデータを抜いたりすることが目的なのか。
392デフォルトの名無しさん:2011/05/06(金) 05:07:35.34
解析出来るとは思うが、他に良い言語/ツールがありそうな気もする
393デフォルトの名無しさん:2011/05/06(金) 06:10:45.92
>>390
「ruby nokogiri」でぐぐれ
394デフォルトの名無しさん:2011/05/06(金) 06:13:45.46
>>393
ただのパーサじゃねーか
395デフォルトの名無しさん:2011/05/06(金) 07:26:23.95
>>390
慣れてる言語でやったらいいよ
どの言語にあるHTMLパーサも一癖あって一長一短

Rubyは比較的やりやすい部類に入るかと
396デフォルトの名無しさん:2011/05/06(金) 08:14:31.52
まあおれならyaccで一から作るね
397デフォルトの名無しさん:2011/05/06(金) 08:54:06.41
hpricotとか使ってみたら?
398デフォルトの名無しさん:2011/05/06(金) 09:12:26.13
テキストから読み込んだ文字列を正規表現として扱うとか
Regexp.new(str)で普通にできそうだけどなあ。

エスケープ周りで失敗してるのかね。
399デフォルトの名無しさん:2011/05/06(金) 10:49:16.85
>>388
if /test/ =~ "aaatestaaa"
print 'match!!'
else
print 'none'
end
はマッチするけど、ファイルから読み込んだ正規表現パターンは文字列だから↓のケースのようにエラーになるでしょうね
if "/test/" =~ "aaatestaaa"
print 'match!!'
else
print 'none'
end
Rubyでパターンの外部ファイル化は無理です
仕様で出来ません
400デフォルトの名無しさん:2011/05/06(金) 10:56:29.98
eval...
401デフォルトの名無しさん:2011/05/06(金) 11:00:32.84
本当にド素人なんですがお願いします
とりあえずruby覚えるためにRubylifeってサイトのRuby入門を
上からやってたのですが、日本語の文字入力のところで
さっそくつまってしまいました

print("日本語の表示");を実行すると
文字化け以前にエラーが出てしまいます

バージョンが違うせいで上手くいってないのか、
何か必要なものインストール出来てないから上手くいってないのか
わかりません

ちなみにバージョンはruby 1.9.2p180のようです
プログラムは大学在学中にCを授業でやった程度です
402デフォルトの名無しさん:2011/05/06(金) 11:09:49.89
>>401
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
403デフォルトの名無しさん:2011/05/06(金) 11:11:55.48
>>399
適当なこと言うな禿げ。

Regexp.new(またはRegexp.compile)をリファレンスで引いてみましょう。
evalもあるよ。
404デフォルトの名無しさん:2011/05/06(金) 11:15:50.27
>>394
お前にとって「パーサー」はどう訳されてるんだ?
405デフォルトの名無しさん:2011/05/06(金) 11:15:54.24
>>401
スクリプトの先頭に
# encoding: shift-jis

文字コードは適当に指定してね。
1.9は結構1.8とは勝手が違うから、1.9に対応した書籍/サイト(書籍はいっぱいあるけどサイトは知らない)で勉強した方がいいと思うけど、
どうしてもそこで勉強したいならまた詰まったところで質問にいらっしゃい。
406デフォルトの名無しさん:2011/05/06(金) 11:17:08.23
RubyのCGIスクリプト配布してるサイトってありませんか?
そういうリンク集みたいなの探してます
407デフォルトの名無しさん:2011/05/06(金) 11:38:14.89
>>402 >>405
ありがとうございます

今度はtest1-1.rb:1: unknown encoding name: shift-jis (ArgumentError)
とエラーが表示されました・・・

こんなに早くつまづくとはダメぽかもしれんorz
408デフォルトの名無しさん:2011/05/06(金) 11:48:17.28
>>407
それはぼくがわるいですごめんなさいShift-JISとか普段使わないんですまじごめんなさい吊ってきます

shift-jisをsjisにしてくだしあ
409デフォルトの名無しさん:2011/05/06(金) 11:53:17.43
おりょ?
inspectの結果もoptionsもencodingも一緒なのに
==でfalseになるってどういう状況?
410デフォルトの名無しさん:2011/05/06(金) 11:58:19.16
>>408
Windowsならsjisよりcp932のほうがいいと思う
411デフォルトの名無しさん:2011/05/06(金) 12:10:11.28
>>408 >>409
ありがとうございます。無事表示されました
環境等書いてなかったですね。すいません。一応windowsXPを使ってます

参照HP
ttp://www.rubylife.jp/ini/japan/index1.html
1.9.1でダウンロードしろって書いてあったんですが、
1.9.2しかダウンロードできなかったので1.9.2で進めています
412デフォルトの名無しさん:2011/05/06(金) 12:11:31.57
>>404
パースしただけで解析完了とか言ったらグーで殴られるぞグーで
413デフォルトの名無しさん:2011/05/06(金) 12:21:07.28
HTMLの解析でnokogiri勧めたら恫喝されるなんてすごいスレだな
414デフォルトの名無しさん:2011/05/06(金) 12:22:37.33
rubylife.jpは有名な一連のアフィサイトのひとつなのであんまり内容の正しさ信用したらダメよ
ttp://www.rubylife.jp/ini/
ttp://www.pythonweb.jp/tutorial/
ttp://www.phpbook.jp/tutorial/
ttp://www.javadrive.jp/start/
ttp://www.ajaxtower.jp/ecs/
ttp://www.adminweb.jp/apache/
ttp://www.officepro.jp/excelvba/
ttp://www.officepro.jp/word/

ネット初心者さんがぽろっと引っかかるのを頼りに作成してるので、
プログラミングやネットにある一定以上慣れた人は実情に全く気づいてないのだけれど
415401:2011/05/06(金) 12:24:49.07
print("KCODE=", $KCODE);を実行したところ

test1-1.rb:1: warning: variable $KCODE is no longer effective
と出て例題どおりに実行されません・・・

文字列の基本的な扱いを分かっていないためこんなことになってる
とおもうのですが・・・
良かったらその辺の基本を網羅できそうなオススメ書籍も
教えてもらえると助かります

在学中にmatlab使った数値計算してたんで、数値とか変数使うのは
まだ少しはマシかと思うのですが、文字の扱いが分からない・・・

大学でもっと勉強しとくんだったorz
416デフォルトの名無しさん:2011/05/06(金) 12:33:45.54
>>414
あれは一応、情報収集と維持の手間に対してのアフィ報酬的なものは払ってもいいような気はするのだが
アレ以下の古い曖昧なページなんて特にRubyではゴロゴロしてるわけだし(更新2005年とかありえん)、
一定の情報を以てそれ未満を駆逐してもらうのは、べつに悪いことでもなかんべ
ttp://www.google.com/search?ie=utf-8&oe=utf-8&q=Ruby+%E5%85%A5%E9%96%80

問題があるならマトモな情報源を作ってGoogleさんに認めてもらおう
初心者スレに変な情報持った人が来る割合は、このへんの古くまずい検索結果の割合にほぼ比例する(PHPが好例)
417デフォルトの名無しさん:2011/05/06(金) 12:42:52.53
>>415
no longer effective って言うぐらいなんだから
1.9ではもう$KCODEを使ってないんだろう
なのでその例題が1.9には対応していない可能性が大

万人向けの入門書はないけど
寄らば大樹の陰ならたのしいRuby
418デフォルトの名無しさん:2011/05/06(金) 12:46:45.95
>>415
で、 Windows の Ruby 1.9.x で日本語を扱うには、まず

 ・ スクリプトファイルの記述の文字エンコーディングを自分で決めるor認識する

いわゆる「書いたスクリプトファイルをエディタで保存するときの文字コード」
昔の Windows なら Shift_JIS 名義(実際はWindows-31J)、ナウでヤングなフレッシャーズなら素直に UTF-8
時々優秀なエディタが UTF-8 によく似た選択肢をファイル保存時にずらっと提供してくれることがあるが、
その場合は「BOM なし」「リトルエンディアン」「UTF-8n」のようなものを選ぶ
つぎ
419デフォルトの名無しさん:2011/05/06(金) 12:47:17.24
>>388
そのlistって配列を外部ファイルtsvから再現できればいいんだよね?
ほい。

http://thuploader.orz.hm/1mup/upload.php?id=01714

>>415
エラーが出たらちゃんとエラーを読もう。

variable $KCODE is no longer effective
変数$KCODEはもう無効になっています。

ってあるでしょ。もう$KCODEでは文字コード管理してないんだ。
ソースファイルの文字コードはマジックコメント(# encoding: のことね)で管理してる。

書籍ならたのしいRuby第3版でいいんじゃないかなあ。
420デフォルトの名無しさん:2011/05/06(金) 12:51:04.04
k = "3+(2+5)*5"
この変数の中身を計算式として評価する方法ってありますか?
421デフォルトの名無しさん:2011/05/06(金) 12:57:10.12
つぎ

 ・ スクリプトファイルの文字エンコーディングを、スクリプトファイルの1行目くらいに書く

# coding: Shift_JIS
とか
# coding: UTF-8
とかいうもので、ファイル保存時の文字エンコーディングと絶対に一致していなければならない

これは「マジックコメント」と呼ばれ(略称マジコメ)、記述法にはバリエーションがありまくる
「coding:」か「conding=」のあとに文字エンコーディング名が書いてさえあれば、前後に何が書いてあってもOK
よくある別例:
# encoding: CP932
# vim:set fileencoding=utf-8:
# -*- coding: Windows-31J -*-
Ruby はどれも全く同じように解釈するので、Windowsの人は好きな書き方でいい
(本来Unix系のEmacsやvimの設定)
422401:2011/05/06(金) 12:57:21.43
みなさんありがとうございます。すごい説明が分かりやすいです
1.9.1ダウンロードさせて1.9.1では使えない例題とはワナだった

なんか教えてちゃんになっててすいません
とりあえずご飯がてら本屋寄ってたのしいRuby第3版見てきます
423デフォルトの名無しさん:2011/05/06(金) 13:05:38.60
>>420
文字列の中身をRubyスクリプトとして処理させたいならeval
424デフォルトの名無しさん:2011/05/06(金) 13:10:06.67
せっかく書いたのでその3、やっとスクリプトの記述に入れる

# encoding: UTF-8
puts '日本語'

これを hoge.rb として UTF-8 で保存し、コマンドプロンプトから ruby hoge.rb のように実行!

うむ化けた

puts は受け取った文字列を、なにもなければそのままのエンコーディングで画面(とか)に表示する
Windowsのコマンドプロンプトは UTF-8 を解釈しないので、UTF-8 文字列をそのまま表示させてもいわゆる化ける
425デフォルトの名無しさん:2011/05/06(金) 13:14:21.95
その4、本が売れる理由がわかった気がする

>>424 の対処法の一つは、コマンドプロンプトが表示できる文字エンコーディングの文字列に変換してputsすること
String クラスの encode というメソッドを使う(各種マニュアルでは String#encode と表記)
コマンドプロンプトが表示できる文字エンコーディング名は Windows-31J だ(CP932でも可、Shift_JISは後々困るので忘れよう)

# encoding: UTF-8
puts '日本語'.encode('Windows-31J')

これはあまりに面倒なので、「画面出力するメソッドは全員、UTF-8からWindows-31Jに変換しろ」と全体設定させることもできる
それが>>402で、puts するより前(普通はスクリプトの最初のほう)に書いておく
ただし、これを書いてしまうと画面出力がWindows-31J固定になるので、使い道は限定される(Linux等では表示できない)
426デフォルトの名無しさん:2011/05/06(金) 13:24:00.72
PHPでいうprint_rとvar_dumpみたいなのってRubyではどういうのでできるのですか?
427デフォルトの名無しさん:2011/05/06(金) 13:26:39.45
まったく同じかは知らないがpでたぶん事足りる
428デフォルトの名無しさん:2011/05/06(金) 13:36:39.18
おわり、>>418 >>421 >>424 >>425

「ファイルを UTF-8 で書くと変換が必要なのなら、ファイル自体を変換不要なエンコーディングで書けば?」
鋭い、アメちゃんあげよう
Windows 限定な Ruby スクリプトは、結構な割合で Windows-31J で作成されている(実際上、配布も問題はない)
ファイル保存時に Windows-31J にしておけば、puts '日本語' の日本語は Windows-31J のまま表示できるはず

…でも、エディタの保存エンコーディング欄に Windows-31J なんて項目ないよ?

うん、Shift_JIS を選んでくれ
現在の Windows が言う Shift_JIS は、Windows 以外では Windows-31J と正式名で呼ばれている(昔いろいろあった)
「Windowsの中ではShift_JISとしか呼ばれないけど、それは本当はWindows-31Jだ」と思っておいてくれ
Windows-31J は CP932 と呼ばれることもあって、実はレアな文字の含まれ方がちょっと違うんだがとりあえず忘れよう
429デフォルトの名無しさん:2011/05/06(金) 13:38:58.23
phpのvar_dumpは例えば
$a = 123;
var_dump($a);
で変数の型と値をチェックできるんだよね
Rubyでもvar_dumpと同じような機能使ってデバッグしたいんだけど
430デフォルトの名無しさん:2011/05/06(金) 13:45:28.82
>>429
php と Ruby はあまりに違いすぎるので
あまりRubyでphpではphpではと呪文を唱えない方がいい。

Rubyには変数に型なんてものはないっす。
中身が見たければp
431デフォルトの名無しさん:2011/05/06(金) 13:53:53.52
出来ないんですね、了解しました
432デフォルトの名無しさん:2011/05/06(金) 13:56:47.39
>php と Ruby はあまりに違いすぎるので
>あまりRubyでphpではphpではと呪文を唱えない方がいい。

こういう野次飛ばす奴たまに見るけどいらないね
433デフォルトの名無しさん:2011/05/06(金) 13:57:20.91
p hoge で hoge と名付けられたオブジェクト(通称「変数hogeに入っているオブジェクト」)の概略が表示される
どの程度概略にするかはクラス設計者の一存なので(実際は hoge.inspect を puts している)、
クラス名などは表示されないこともある
オブジェクトのクラス名を得たい場合は自力でインスタンスメソッド class を使う

p "@を先頭につけるとエラーが出なくなりますwwwwwww".class
#=> String

まあ、めんどくさいっちゃめんどくさいのだが
434デフォルトの名無しさん:2011/05/06(金) 14:06:30.33
>>414
ぐぐった
この量は確かに若干ひどい
まあ、若干だが
全部どっかにすっ飛ばすタイプじゃないので、良心的な部類

>>422
アフィサイトが正確で満足いく説明を自前で提供してしまったら本を買ってもらえないじゃないかw
不満足不十分なんかよくわからんけど動かんやっぱ本買うかこれがいいの?、みたいな説明がベスト
435401:2011/05/06(金) 14:07:42.98
王将うます

>>428 
ほんとありがとうございますorz
すごい勉強になりたました。自分ひとりでは絶対分からなかったですw

本屋2件寄ったのにRubyの本ないんだが!クソがぁぁぁ
アマゾンぽちるかな・・・

最終的に
@Ruby使ってHP上から必要なとこもってきて
 データをPCに保存する
AHPにアクセスして、プログラムで色々な操作をやってもらう

みたいなことしたいんですが

この本も一緒に買っとけってのありますか?
436デフォルトの名無しさん:2011/05/06(金) 14:15:44.43
>>435
いろいろな「操作」の内容にもよるけど、
入門本のあとはレシピブック系を読むが吉。
そのあとはリファレンスでも眺めましょう。
437デフォルトの名無しさん:2011/05/06(金) 14:19:22.02
>>430>>432>>433
この質問者自体がただ煽りに来ただけに見える
438デフォルトの名無しさん:2011/05/06(金) 14:20:28.56
>>435
たのしいRubyのような入門書ひとつで踏み出せる範囲に見える
HTTPやHTMLの知識は必要かもしれないが、罠はないしネットの解説サイトで充分
439デフォルトの名無しさん:2011/05/06(金) 14:25:18.46
>>435
レシピブック(逆引き本)に+1
Rubyレシピブックはカバーがぼろぼろになるまで使った
440デフォルトの名無しさん:2011/05/06(金) 14:25:37.11
>>437
それでも別にいいんだよ
質問のやりとりが生むものは個人教示だけではないのだし
回答を読んだ別の人の役に立てばそれで何も問題はない
441デフォルトの名無しさん:2011/05/06(金) 14:31:31.06
「〜しない方がいい」
横からだが上から目線な人は消えてくれ
442デフォルトの名無しさん:2011/05/06(金) 14:32:43.33
レシピブックは検索すればだいたい同じような内容がいつかどこかに出てくるので、本質的には買う必要はない


が、その時間を金で買うぜブルジョワだぜ賢い消費者だぜベイベーという人にこそお勧め
いろんなクラスやメソッドの使用法がおおむねいわゆるイディオムのような書き方に沿ってるので、
メソッドの使い方が色々できるのはわかったがどれをどう書くのが一般的なんだ、とか悩むときにも役立つ
大雑把に2種類あるのだが、立ち読みでもしてピンと来るほう(で、1.9対応を謳った版)を買うといい
443デフォルトの名無しさん:2011/05/06(金) 14:38:02.38
〜しない方がいい
とか
〜 いらない
とか
〜 消えろ
系発言は階層が深くなればなるほどなるほどいらない度がアップしますね。
444デフォルトの名無しさん:2011/05/06(金) 14:41:05.56
phpが話題に出てくると決まって荒れますなあ。
445デフォルトの名無しさん:2011/05/06(金) 14:44:58.74
お互い見下すようなレスは慎めでFA
446デフォルトの名無しさん:2011/05/06(金) 14:50:03.91
>>444
「彼」はプログラミングの知識がまったくなく、
ム板の新着レスが技術的な話題で埋まっているとストレス解消できずに悪態をついて逃げ出す
逆に「自分でもレスできる、専門性の全くない話題」には涎を垂らして飛びつく
ム板を利用するなら、「彼」の習性は頭に入れておいたほうがいい
447デフォルトの名無しさん:2011/05/06(金) 14:53:06.91
railsで、という質問なら(ビューで)debug(obj.class)とかdebug(obj)が回答になるんだろうか。
如何せんrubyで、という質問だものな。

448デフォルトの名無しさん:2011/05/06(金) 14:59:49.73
どうして >>426>>427 で終了しなかったのか理解に苦しむ。

添付のcgiライブラリが微妙に使いにくいんだけどなんかいいのない?
449デフォルトの名無しさん:2011/05/06(金) 15:06:57.53
>>448
p はクラス名を必ずしも表示しない
Object#inspect そのままを使ってるならいいんだけど

CGIライブラリに望むものが各人全く違う、というのがcgi.rb刷新計画の唯一のプラス収穫
どんな機能が欲しいのか言ってくれれば当たりがあるかもないかも
450デフォルトの名無しさん:2011/05/06(金) 15:09:31.02
Perlの多次元の連想配列 $array{$w1}{$w2}みたいなのってRubyでもできますか?
451デフォルトの名無しさん:2011/05/06(金) 15:12:35.21
Perl と Ruby はあまりに違いすぎるので
あまりRubyでPerlではPerlではと呪文を唱えない方がいい。
452デフォルトの名無しさん:2011/05/06(金) 15:14:24.05
>>449
少なくとも組み込みとか標準添付のものはクラスわかるようになってなかったっけ?
リテラルがあるものは「表示の仕方見てお察しください」だけどさ。

>>450
全く同じかは知らないが配列の中に配列/ハッシュ、ハッシュの中に配列/ハッシュ、
全部いくらでも入れ子にできるよ。
453デフォルトの名無しさん:2011/05/06(金) 15:19:10.97
>>450
残念ながらできない
多次元配列や多次元Hashをリテラル形式で取得することはできない
単なるネストした配列やハッシュのメソッドチェーン呼び出しにしかならない
ものすごく慎重に作成すれば似たように動作するものを作ることは可能だが、大変効率が悪い
454デフォルトの名無しさん:2011/05/06(金) 15:23:17.67
http://hibari.2ch.net/test/read.cgi/tech/1200175247/
Rubyの宿題教えてください。2限目
455デフォルトの名無しさん:2011/05/06(金) 15:29:21.26
>>450
ハッシュの中にそのままハッシュを突っ込んで入れ子のハッシュにすればおk
456デフォルトの名無しさん:2011/05/06(金) 15:34:17.93
Perl の $array{$w1}{$w2} は Ruby では

arr.locate(w1, w2)

のような動作をしてる(locateは適当)
arr に対して、引数を2個使って2次元な位置を問い合わせている
Ruby での arr[w1][w2] は残念ながら

v1 = arr[w1]
v2 = v1[w2]
p v2

のような動作にしかならない
[w2] の部分の動作はオブジェクト v1 のクラスのインスタンスメソッド [] 依存であって、 arr とはもはや無関係
まああらかじめ全部に空のHashなりArrayなり入れておけばいいんだけど
(Hashの場合は若干の小手先テクニックがある)

Matrix ライブラリ使って数学的行列で格納すれば同じ動作になるはず
でも、おそらく、望んだものではないと思うw
457デフォルトの名無しさん:2011/05/06(金) 15:36:19.34
Perlの多次元連想配列は特殊な区切り文字を使った1次元連想配列じゃなかった?
458デフォルトの名無しさん:2011/05/06(金) 15:39:31.85
そもそもやりたいことは2次元ハッシュなんだろ?
だったらそれはRubyでは何で代用すべきかっつーたらハッシュのハッシュじゃね?
459デフォルトの名無しさん:2011/05/06(金) 15:41:25.48
>>456
それで、引数が2個の多次元配列/連想配列と、
ネストした配列/連想配列のチェーン呼び出しの違いが
初心者スレに質問に来る人に対してどういった問題を引き起こすのですか?
460デフォルトの名無しさん:2011/05/06(金) 15:47:39.70
hash = Hash.new {|h, k| h[k] }
461デフォルトの名無しさん:2011/05/06(金) 15:47:57.89
多次元配列のように扱えればそれは多次元配列である

デイブ
462デフォルトの名無しさん:2011/05/06(金) 15:54:47.04
>>456
arr = [[0,1,2],[3,4,5]]
arr[1][2]

の[2]がarrと直接関係あって欲しい状態って例えばどういうときですか><
463デフォルトの名無しさん:2011/05/06(金) 15:58:02.98
>>457
2次元「的」な位置だから実際にどう格納されてるかは問題ないんじゃねw
$arrayが引数を全部受けとってるということが重要だと思う

この「多次元配列っぽく見えて実は単なるメソッドチェーン」というのは
個人的にRubyのいちばん良くないとこだと思う
シンタックスシュガーにもほどがある

>>459
存在しない第1キーを指定するとNoMethodErrorとか
[] メソッドさえ動作すればデータ構造ミスってても動くとか?
完全に妥当な構造である場合には問題はないんじゃないかね

というか言語比較的な質問には「いや同じではないです」という重箱角つつきな回答が来るのは必然かと
464デフォルトの名無しさん:2011/05/06(金) 16:00:44.18
>>463
でもここ初心者スレだからなあ
そもそも質問者 >>450 は「同じもの」ではなく「みたいなの」を求めてるんだ
つまり「Rubyではこういうことするとき、何を使えばいいの?」と質問してる
だったら回答は「入れ子のハッシュ」で何も間違ってないだろ?
465デフォルトの名無しさん:2011/05/06(金) 16:04:36.25
擬似で動作するなら擬似でもいいじゃんと思う
確かに、擬似の範囲からこぼれたときは初心者的には悲惨なんだが

ホントはメソッド呼出の連続であるという知識は必要ではある
言語として多次元配列をサポートしているわけではなく、
そう見えるようにそう動作するように自前で全データをネストさせなければならない
466デフォルトの名無しさん:2011/05/06(金) 16:06:48.87
本当他の言語が絡むとこういう風になるよねwwwwwwwwwwww
467デフォルトの名無しさん:2011/05/06(金) 16:07:56.55
多次元配列とはなんぞやってことが完全にスルーされてるからなあ
そりゃ話がまとまるわけがない
荒れる代表例の値渡しと参照渡しの議論とおなじ
468デフォルトの名無しさん:2011/05/06(金) 16:11:39.59
>そう見えるようにそう動作するように自前で全データをネストさせなければならない
飼い慣らされてるから当然だと思ってるのかもしれないが、世間的にはこれは異常なのでそのへんよろしく
内部配列が丸見えな時点で何かがおかしいと思えよ
469デフォルトの名無しさん:2011/05/06(金) 16:18:29.47
てか、Perlのハッシュも確か1次元だったような…
$h{$k1}{$k2}ってやった場合、暗黙に「ハッシュのリファレンスを要素とするハッシュ」が作られるだけだろ?

それってRubyのハッシュのハッシュと何が違うんだい
470デフォルトの名無しさん:2011/05/06(金) 17:04:51.83
んーと、(特に初心者レベルの場合は)多次元の配列/連想配列の大半が、
ただのネストで代替可能な用途で使われていることを考えれば、
別にネストのメソッドチェーンでも何の問題もないような。

内部配列が見えて困ることもそうそうない。
471デフォルトの名無しさん:2011/05/06(金) 17:13:04.46
方針として

大半の用途は配列やハッシュのネストで十分だべ、
本質的な多次元配列が欲しければ自分でクラス作れや

というだけじゃね。 探せばライブラリもありそう。
472デフォルトの名無しさん:2011/05/06(金) 17:20:58.69
これはこれで問題が山積みだけど、
メソッドチェーンじゃない多次元配列というと、

ary = Hash.new
ary[[0,0]] = 1

みたいな方法もなくはない。
473デフォルトの名無しさん:2011/05/06(金) 17:21:00.35
まあ、nilに対するNoMethodErrorが出る理由だけは理解してたほうがいいかも
「多次元配列」を作っても碁盤の目のように全要素が初期化されるわけじゃないので
474デフォルトの名無しさん:2011/05/06(金) 17:22:50.03
$h{$k1}{$k2}は、$h{$k1}->{$k2}のシンタックスシュガー。
Rubyと同じだね。
475デフォルトの名無しさん:2011/05/06(金) 17:31:54.35
しまった。
Perlで正体が一次元配列なのは $h{$k1}{$k2} じゃなくて $h{$k1,$k2} のほうだったか。
(区切り文字は $; (デフォルト 034))
476デフォルトの名無しさん:2011/05/06(金) 17:34:54.29
narrayェ……。
477450:2011/05/06(金) 18:23:38.61
なんか荒れちゃって申し訳ない。
カーニハンの『プログラミング作法』にあったマルコフ連鎖のプログラムのPerl版
をRubyで書くのに、多次元の連想配列にリストで単語をくっつけていくやり方が
簡単にできる方法がないかなあ、と思って質問しました。

こういうやつ
# markov.pl : markov chain algorithm for 2-word prefixes
$MAXGEN = 10000;
$NONWORD = "\n";
$w1 = $w2 = $NONWORD; #initial state
while (<>) { # read each line of input
foreach (split) {
push(@{$statetab{$w1}{$w2}}, $_);
($w1, $w2) = ($w2, $_); #multiple assignment
}
}
push(@{$statetab{$w1}{$w2}}, $NONWORD); # add tail
$w1 = $w2 = $NONWORD;
for ($i = 0; $i < $MAXGEN; $i++) {
$suf = $statetab{$w1}{$w2}; #array reference
$r = int(rand @$suf); # @$suf is number of elems
exit if(($t = $suf->[$r]) eq $NONWORD);
print "$t ";
($w1, $w2) = ($w2, $t); # advance chain
}
478デフォルトの名無しさん:2011/05/06(金) 18:41:18.42
>>477
MAXGEN = 10000
NONWORD = "\n"
w1 = w2 = NONWORD
statetab = Hash.new{|hash, key| hash[key] = {}}
while line = gets
line.split.each do |w|

end
end
479デフォルトの名無しさん:2011/05/06(金) 18:42:12.79
ごめん誤送信
480デフォルトの名無しさん:2011/05/06(金) 19:00:24.87
Perl よく知らないし動作テストもしてないけど
MAXGEN = 10000
NONWORD = "\n"
w1 = w2 = NONWORD
statetab = Hash.new{|h, k| hash[key] = Hash.new{|h2,k2| h2[k2]= []}}
while line = gets
  line.chomp!
  line.split(/\s+/).each do |word|
    statetab[w1][w2].push(word)
    w1, w2 = w2, word
  end
end
statetab[w1][w2].push = NONWORD
w1 = w2 = NONWORD
MAXGEN.times do
  suf = statetab[w1][w2]
  break if (t = suf.sample) == NONWORD
  print t, ' '
  w1, w2 = w2, t
end

こういうこと?
481デフォルトの名無しさん:2011/05/06(金) 19:19:36.61
>>480
4連投ごめんw
statetab = Hash.new{|h, k| hash[key] = Hash.new{|h2,k2| h2[k2]= []}}

statetab = Hash.new{|h, k| hash[k] = Hash.new{|h2,k2| h2[k2]= []}}
の間違いです。他にもなんかあるかも。
482デフォルトの名無しさん:2011/05/06(金) 19:20:13.46
.push=
483デフォルトの名無しさん:2011/05/06(金) 19:25:58.40
ごめんね、動作テストしてから書けばよかったや。
手直ししてまた投稿します。
484デフォルトの名無しさん:2011/05/06(金) 19:26:47.97
Rubyのフレーム枠はRORしかないのですか?
485デフォルトの名無しさん:2011/05/06(金) 19:34:24.44
sinatraとかpadrinoとかcampingとかmerbとかramezとか
486デフォルトの名無しさん:2011/05/06(金) 19:37:54.53
動作テスト済み
>>477 こういうことでしょうかw

MAXGEN = 10000
NONWORD = "\n"
w1 = w2 = NONWORD
statetab = Hash.new{|h, k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
while line = gets
  line.chomp!
  line.split(/\s+/).each do |word|
    statetab[w1][w2].push(word)
    w1, w2 = w2, word
  end
end
statetab[w1][w2].push(NONWORD)
w1 = w2 = NONWORD
MAXGEN.times do
  suf = statetab[w1][w2]
  break if (t = suf.sample) == NONWORD
  print t, ' '
  w1, w2 = w2, t
end
487デフォルトの名無しさん:2011/05/06(金) 19:47:51.05
>>477
テキスト処理をするプログラムっぽいがいったい何をしたいのものかさっぱりわからん。
標準入力で英文食わせたが、同じのがでてくるだけじゃね?
488デフォルトの名無しさん:2011/05/06(金) 19:58:53.84
>>487
マルコフ連鎖。
短い文じゃなくて長い文いれた方がいいよ、
俺は聖書のGenesisまるまるで動作テストした。
489デフォルトの名無しさん:2011/05/06(金) 20:04:25.46
これ読んだんだけど、難しくてわけわかめ
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%80%A3%E9%8E%96
490デフォルトの名無しさん:2011/05/06(金) 20:09:34.67
>>487
これはめんどくさいのでとりあえず単語1つ版ので説明すると、

1.文頭に来た単語を全て記録する
2.とある単語の次に来た単語を全て記録する

1.ランダムに文頭に来た単語を出力する
2.1で出力した単語の次に来たことのある単語のうちいずれかを出力する
3.2で出力した単語の次に来たことのある単語のうちいずれかを出力する
4.3で出力した(ry
...
n.(n-1)で出力した(ry

という手法で文章を自動でランダム生成するやり方があって、

ここで出てきてるのは「2つの単語の並びの次に来た単語」を記録して、
最新の2出力の並びの次に来たことのある単語のいずれかを出力して文章を生成する
というもの。
491デフォルトの名無しさん:2011/05/06(金) 20:14:12.94
Rubyのソートアルゴリズムってクイックですか?バブルですか?
492デフォルトの名無しさん:2011/05/06(金) 20:18:05.15
>>491
クイックソートらしいよ
493デフォルトの名無しさん:2011/05/06(金) 20:23:22.45
sort と sort_by でも何か違ったはず
494デフォルトの名無しさん:2011/05/06(金) 20:28:47.40
class Array
def sort
flg = true
while flg
self.shuffle!
1.upto(self.size-1) do | i |
flg = false
flg = true if self[i] < self[i-1]
end
end
end
end
495デフォルトの名無しさん:2011/05/06(金) 20:33:22.92
何でクイックソートを実装したんだろう
安定性ないのに
496デフォルトの名無しさん:2011/05/06(金) 20:44:05.47
速いからじゃない?
安定ソートが欲しければ

i = 0
ary.sort_by{|e| [e, i += 1]}

「安定じゃなくてもいいから速い方がいい」ってパターンの方が多いだろう、きっと。
497デフォルトの名無しさん:2011/05/06(金) 20:46:41.68
qsort
msort
の二つを用意してくれてたらよかったのにね。
マージソートが大好きさ。
498デフォルトの名無しさん:2011/05/06(金) 21:41:02.14
クイックソートだと余計なメモリを食わないからってのもあるかと

普通の安定なソートだと余計にメモリを使う
メモリを使わないin place merge sortってのを調べたらなかなか面白かったが
メモリ領域とひきかえに実行時間が増える
499デフォルトの名無しさん:2011/05/06(金) 22:09:07.11
>>496
>i = 0
>ary.sort_by{|e| [e, i += 1]}
安定ソートはこんなふうに書けるんだ。知らなかった。さんくす。
500デフォルトの名無しさん:2011/05/06(金) 22:12:36.06
>メモリ領域とひきかえに実行時間が増える
まあ、そりゃ、そうだろうな…
削る部分がないようなアルゴリズムにおいてメモリとCPU時間はトレードオフ
501デフォルトの名無しさん:2011/05/06(金) 22:23:51.99
>>499
ではもうひとつ
1.8.7以降で
ary.sort_by.with_index{|e,i| [e,i]}
502デフォルトの名無しさん:2011/05/06(金) 22:43:55.12
i+=1が元の要素と、元の登場順にペアリングされる必要があるけど、
sort_byの実装はSchwartzian Transformだから問題ないんだな。
503デフォルトの名無しさん:2011/05/06(金) 23:18:32.59
>>486
> 動作テスト済み


> statetab[w1][w2].push(NONWORD)
> w1 = w2 = NONWORD
> MAXGEN.times do
> suf = statetab[w1][w2]
> break if (t = suf.sample) == NONWORD
> print t, ' '
> w1, w2 = w2, t
> end

後半おかしくない?
w1, w2の同じ組み合わせのうち乱数で一つ選ぶプロセスがないし、
sampleメソッドってない(これはケアレスだと思うけど)。
504デフォルトの名無しさん:2011/05/06(金) 23:35:12.28
>>503
Array#sampleはRuby 1.9系で追加されたメソッド
配列の要素をランダムに1つ取得する
505デフォルトの名無しさん:2011/05/06(金) 23:40:33.78
>>504
そうですか。
すみません1.8系で考えてました。
506デフォルトの名無しさん:2011/05/07(土) 00:08:50.77
Perl
push(@{$statetab{$w1}{$w2}}, $_);

Ruby
statetab = Hash.new{|h, k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
statetab[w1][w2].push(word)

これはPerlの方が直感的でだいぶわかりやすいなあ。
まああんまり使わないけど。Pythonだとどうなんだろうか?
507デフォルトの名無しさん:2011/05/07(土) 00:12:14.52
結局1.9の方がソート早いの?検証した人いる?
508デフォルトの名無しさん:2011/05/07(土) 07:11:20.11
流石にソートの速さとかは初心者スレでやる話じゃない気がするが
509デフォルトの名無しさん:2011/05/07(土) 09:20:19.63
require 'benchmark'

ary = (1..1000000).to_a
arys = Array.new(10){ary.shuffle}

Benchmark.bm(8) do |x|
x.report('1.8.7:'){ arys.each{|a| a.sort} }
end

user system total real
1.8.7: 4.830000 0.070000 4.900000 ( 4.918986)
1.9.2: 5.290000 0.030000 5.320000 ( 5.326245)

...
510デフォルトの名無しさん:2011/05/07(土) 09:52:59.27
$ rvm ruby s.rb
    user   system   total   real
1.8.7: 7.670000 0.080000 7.750000 ( 8.058061)
    user   system   total   real
1.9.2: 8.800000 0.100000 8.900000 ( 9.303178)

うむ、「若干遅い」と言っていいと思う
文字列絡んでないのに…
511デフォルトの名無しさん:2011/05/07(土) 12:03:41.58
メルセンヌツイスタってRubyでどうやくのでそうか?
512デフォルトの名無しさん:2011/05/07(土) 12:20:51.48
どうやくって?
513デフォルトの名無しさん:2011/05/07(土) 12:22:56.74
組み込みのRandomクラスがMT19937だけどあえて実装したいの?
514デフォルトの名無しさん:2011/05/07(土) 16:36:23.77
アルゴリズムの勉強したいんですがwikiのコードをRubyに移植したいんだけどよく分からなくて
515デフォルトの名無しさん:2011/05/07(土) 16:41:44.16
自分で考えないと意味がない部分を人に聞いて丸写ししたら勉強にならないじゃないか
516デフォルトの名無しさん:2011/05/07(土) 16:42:59.36
>>514
もっと基礎的なアルゴリズムは実装してみた?
517デフォルトの名無しさん:2011/05/07(土) 16:48:44.90
バブル、クイック、ヒープ、マージ、コム、イントロこれらは実装出来ましたがメルセンスがよくわからない
518デフォルトの名無しさん:2011/05/07(土) 16:51:22.33
写経でなんとかなる勉強と写経ではどうにもならん勉強というのが大雑把に2種類あって、
アルゴリズムは全部後者だ
しかも必要に迫られてないと全く頭に入らず退屈に過ぎる
大学の黒板授業でアルゴリズム説明とか狂気の沙汰

というわけで、必要になってから実際のプログラム内で勉強するといいぞ
アルゴリズムだけ動作させるコードは何も教えてくれない何も聞かせてくれない
519デフォルトの名無しさん:2011/05/07(土) 16:53:15.25
中学校でソートアルゴリズムの授業やったけど好評だったぞ。
トランプを短い手数で並べ替えるゲームさせただけだけど。
520デフォルトの名無しさん:2011/05/07(土) 16:59:29.18
「実際はライブラリが提供するsortを使ってください」とか注釈がある謎授業だった

アルゴリズムの認知は大事なのだが、なんかもっとこー、
生活が便利になるようなのから教えていったほうがいいかもしれん
521デフォルトの名無しさん:2011/05/07(土) 17:08:04.51
なんかすげえ質問者がはぐらかされてる悪寒
522デフォルトの名無しさん:2011/05/07(土) 17:15:50.63
はぐらかすというか、何をどう説明して欲しいのか全くわからないからな。
Rubyに移植したコードをこっちで作って投稿しろと言ってるんじゃあるまいし。
523デフォルトの名無しさん:2011/05/07(土) 17:21:45.65
>>517
何を教えて欲しいの?

このスレに「メルセンヌツイスタがよくわからない」とだけ投げられても、
「そうですか、資料をよく読んで勉強してください」としか。

たとえば、
「こういう処理をしたいんだけどRubyではどうやるの?」
みたいな質問なら回答がつくと思うよ。

メルセンヌ・ツイスタのアルゴリズムがどういう仕組みになってるのか自体がわからないなら、
このスレよりもっと適切なスレがあるんじゃないかな。
524デフォルトの名無しさん:2011/05/07(土) 17:37:02.07
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
ここまで俺の自演
525デフォルトの名無しさん:2011/05/07(土) 17:39:45.35
疑似乱数生成は理論背景が分かるのが前提だから、
「アルゴリズムというもの全般」の勉強の題材としては不適。
526デフォルトの名無しさん:2011/05/07(土) 19:04:45.85
メルセンヌツイスタでぐぐってみたら
まともに説明されてるのが英wikipediaぐらいしかないな
ttp://en.wikipedia.org/wiki/Mersenne_twister

本家は
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/math.html
とか読んでもさっぱりわからん
mt19937のcコードを読んだほうが早いような気がする‥

もうちょいググってみたら‥rubyコードを見つけてしまった
勉強にならんなw
527デフォルトの名無しさん:2011/05/07(土) 19:15:22.85
このスレでwiki読んでRubyで書けるやつなんて居ると思えない
528デフォルトの名無しさん:2011/05/07(土) 19:18:58.74
>mt19937のcコードを読んだほうが早いような気がする‥
泣けるw
529デフォルトの名無しさん:2011/05/07(土) 19:23:48.82
ぶーめらん
530デフォルトの名無しさん:2011/05/07(土) 20:57:50.44
tk使いたいんですけどダウンロードするところのurlを教えていただけませんか?
531デフォルトの名無しさん:2011/05/07(土) 22:01:11.75
>>530
使ってるpcのosと
使ってるrubyのバージョンと
使いたいtkのバージョンを教えれ
532デフォルトの名無しさん:2011/05/07(土) 22:47:39.07
Windows Vista
Ruby1.9.2
最新版のtkが使いたいです
533デフォルトの名無しさん:2011/05/08(日) 00:23:23.09
>>532
すぐ使えるやつならActiveTclがある、ライセンスとかは自分で確認してね
ttp://www.activestate.com/compare-editions
ただmswinの最新版1.9.2-p136だとtkの最新版は使えないみたい
tk84.dllを要求される
RubyForgeの1.9.2-p180だとtkが組み込まれてない

ってことで最新版のtcl/tk8.5.9を使うには
自分でコンパイルするしかないんでは
ttp://www.dumbo.ai.kyutech.ac.jp/nagai/RubyTk/?%BA%C7%BF%B7%C8%C7%A4%CERuby%2FTk%A4%F2%BB%C8%A4%A6%A4%CB%A4%CF
534デフォルトの名無しさん:2011/05/08(日) 00:30:58.12
1.9になったことでRubyはGUIを標準でサポートしないってこと?
535デフォルトの名無しさん:2011/05/08(日) 00:35:42.93
もともとのアレとして、サポートしてるとは言えないと思う

や、Readlineと同レベルではあるのか、一応
誰も有効にしないだけで
536デフォルトの名無しさん:2011/05/08(日) 00:40:17.63
>>534
基本的にRubyでGUIとかゲームは茨道だお
537デフォルトの名無しさん:2011/05/08(日) 00:42:43.08
JRubyいっとく?
538デフォルトの名無しさん:2011/05/08(日) 00:44:00.79
>>535
誰も使ってないから、何かがあっても気づけないんだよね
初心者の人からの報告待ち状態
そういうライブラリは普通標準から外すもんなんだけど

というか、何もなかった昔ならともかく、今はrubygemsにぶん投げたほうがいいと思うの
使う人がメンテして、使う人が最新版に追従して公開するはず
Ruby本体の更新に引っ張られてる現状はあんまりよくない
539デフォルトの名無しさん:2011/05/08(日) 00:48:43.05
IronRubyいっとく?
540デフォルトの名無しさん:2011/05/08(日) 01:06:27.32
ttp://doc.okkez.net/static/191/library/tk.html
あまりのスカスカっぶりに泣いた
標準添付ライブラリのドキュメントがこれって‥

gemごそってたら "tk-win" という面妖なものがあったが
installできんかった‥
541デフォルトの名無しさん:2011/05/08(日) 01:09:18.26
>>540
Ruby/TkのライブラリはTcl/Tkを叩いてるだけだから、
Tcl/TKの畑を見ればよいということじゃないかな。
542デフォルトの名無しさん:2011/05/08(日) 01:30:45.38
逆に遊んでみたくなった
明日ちょいといじってみるかな‥
543デフォルトの名無しさん:2011/05/08(日) 01:36:03.91
普通にTk使えるよ
ただ、普通のWindowsにはTcl/Tkが入ってないから
何もせずに使えるわけじゃないけど

自分はMingwでRubyとTcl/Tkをコンパイルして使ってるのだけど
ASRの1.9.2からでもMingwでコンパイルしたTcl/Tk使えるみたい
ちょっと試したら、ASRとTcl/Tkの 8.4.16と8.5.6と8.5.9はちゃんと使えた
長時間動かせるのかどうかはわからんけど

Rubyコンパイル時にオプションを指定しないと
コンパイル時に見つけたバージョンのTcl/Tkしか使えないので
mswinのはコンパイル環境がTcl/Tk 8.4なんだろう
ASRのは--enable-tcltk-stubオプションつきでコンパイルされているみたいで
Tcl/Tk 8.4 8.5の両対応みたいだ
544デフォルトの名無しさん:2011/05/08(日) 06:53:20.58
Tkを呼んでるだけなんだよねよくも悪くも

最新版が無理な場合はひとつ前インストールすれば問題はない
「WindowsのActive Tcl/Tkの更新に合わせて新しいパッチレベルのrubyを公開しました」とかできん
ActiveTclは事実上の標準ではあるが、WindowsにおけるTcl/Tkの勝手な実装のひとつに過ぎない

>>542
やたら普通にウィンドウテキストやらボタンやら画像やら貼れるぞ(リアルタイムな動作は例によって苦手)
Tkの知識が必須になってしまうが、あちらさんもスクリプト言語だし一旦覚えればどうということはない

昔は独特のUIを提供しててTkだと一発でわかったんだけど、最近はすこし垢抜けた
545 忍法帖【Lv=6,xxxP】 :2011/05/08(日) 09:43:20.86
RubyやってるとだんだんWindowsがめんどくさくなってきますね。
546デフォルトの名無しさん:2011/05/08(日) 10:17:42.37
でもWindowsでRubyやってるとだんだんコマンドプロンプトが便利になってくる
標準のコマンドプロンプトに不足してる機能を
おおよそRubyでこなせるからな…
547デフォルトの名無しさん:2011/05/08(日) 10:18:38.85
tk使えないのに公式マニュアルに使い方載せるのは初心者の俺としては嫌がらせ行為に値する
548デフォルトの名無しさん:2011/05/08(日) 10:22:37.52
それはパッケージングの問題のような。
549デフォルトの名無しさん:2011/05/08(日) 10:47:55.20
そろそろ標準添付のGUIは
WxRubyとかそういう、外部のライブラリを必要としないものに
差し替えるべきじゃないかと思う
550デフォルトの名無しさん:2011/05/08(日) 10:50:36.59
外部のライブラリを必要としないGUI・・・すげーな
551デフォルトの名無しさん:2011/05/08(日) 10:50:58.45
>>549
おまえはなにをいっているんだ。
552デフォルトの名無しさん:2011/05/08(日) 10:57:25.71
まあ、言いたいことはわかる

大昔はTk本体を含んでたのよ
無駄に大きいのでやめちゃっただけ
553549:2011/05/08(日) 11:08:09.40
すまん、言い方が悪かった。>>552がフォローしてくれてる通り
「Rubyの他に何かのソフトウェアをインストールする必要がないGUIライブラリ」
がいいんじゃないか、ってことです

>>552
サイズの都合があるのか
とすると、ライブラリ本体が10MBくらいあるWxRubyも微妙だな……
554デフォルトの名無しさん:2011/05/08(日) 11:13:29.87
Ruby自体としては何でもパッケージに含めるって方針が無いからな
555デフォルトの名無しさん:2011/05/08(日) 11:17:58.15
開発前期に、GUI関連にリソース割けそうな人が確保できなかったので分離されたのだ
で、そのまま今まで来てる

結果的には正解だったと思うがぬ
ウィンドウウィジェットも標準公式サポートするにはPython並の人員が必要で、Rubyにはそれがない
ないものねだるのはやめよう
556デフォルトの名無しさん:2011/05/08(日) 11:49:10.39
RubyでGUIは作るな!って事でいいですか?
557デフォルトの名無しさん:2011/05/08(日) 11:52:58.91
いいです
558デフォルトの名無しさん:2011/05/08(日) 11:53:44.17
RubyでGUIを扱いたいなら選択肢くらいは複数あるが、
GUIなプログラムを作りたいのならRubyは選択肢に入れてはならない
559デフォルトの名無しさん:2011/05/08(日) 11:54:20.71
RubyでGUIは作るな!
→それでも作りたい!
→勝手にやってろ!

っていう対応でもやっていける人だけやればいい
560デフォルトの名無しさん:2011/05/08(日) 11:57:26.73
>>556
RubyでGUI作るのは別にいいけど、
GUI作るのにRuby使うのはやめた方がいい。
561デフォルトの名無しさん:2011/05/08(日) 11:58:44.67
Rubyスクリプトから制御できるウィンドウインタフェースであることに意味がある人向け
学習効率糞くらえ、実行効率糞くらえ、とにかくRubyであることにこそ価値があるという場合にのみ有効

普通の人はそんなところに価値を置かないので、RubyでGUIなんてやらなくてよろしい
GUIやりたいなら他の言語使え
562デフォルトの名無しさん:2011/05/08(日) 12:01:05.45
コンソールはRuby
GUIはHSP
563デフォルトの名無しさん:2011/05/08(日) 12:15:42.96
zenityみたいなのWindowsにはないんだっけ
564デフォルトの名無しさん:2011/05/08(日) 12:38:06.47
RubyCocoaとかダメなの?
565デフォルトの名無しさん:2011/05/08(日) 12:47:15.03
Windows なら HTA という選択肢もある
簡単なダイアログレベルなら十分
566デフォルトの名無しさん:2011/05/08(日) 13:30:23.87
>>564
Macならどっちかというと今はMacRubyじゃないかね。
OSXの機能は全部呼べるわけだし。
567デフォルトの名無しさん:2011/05/08(日) 14:05:50.86
よく考えたらウハウハだよな。
OSXでRuby使っていろいろできるなんて。
568デフォルトの名無しさん:2011/05/08(日) 14:10:28.15
>>567
ちょっとわかりません
569デフォルトの名無しさん:2011/05/08(日) 14:21:52.80
GUIに走りたかったら、JRubyでJavaのGUIライブラリ群を使うんじゃだめけ?
570デフォルトの名無しさん:2011/05/08(日) 14:39:02.58
GUIからRubyを叩けば良いのに、
なんでRubyからGUIを叩くんだよ。
571デフォルトの名無しさん:2011/05/08(日) 14:40:10.60
>>570
まったくわかりません。
572デフォルトの名無しさん:2011/05/08(日) 14:52:03.81
きっとどうしてもRubyだけでコードを書きたいんだよ
573デフォルトの名無しさん:2011/05/08(日) 15:05:23.82
勉強したい人はこの放送見ればいいお
Ruby
ttp://live.nicovideo.jp/watch/lv49244567?ref=mini_subscribe
574401:2011/05/08(日) 17:11:25.59
本日たのしいRubyが届き順番に進めておりますが
さっそくつまってしまいました
p.30別のファイルを取り込むの所なんですが

ファイル名 hello.rb
def hello
print "hello,Ruby.\n"
end

ファイル名 use_hello.rb
require "hello"
hello()

同じディレクトリに入れてあって、
スペルミス等も確認してみたのですが
use_hello.rbを実行すると
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
hello (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from use_hello.rb:1:in `<main>'

となり実行されません
こんな単純なところで引っかかるなんてorz
575デフォルトの名無しさん:2011/05/08(日) 17:16:33.20
$LOAD_PATH カレントディレクトリ でググッてみてね!
576401:2011/05/08(日) 17:26:20.89
>>575
require_relativeに変更で解決しました

とりあえずggってパッと読んでみたんですが、
$LOAD_PATHの下りはまだ理解できるレベルに達していないようです

とりあえずrequire_relativeに変更で先には進めるようなので
また理解出来るレベルになったら戻って確認したいと思います

ありがとうございました
577デフォルトの名無しさん:2011/05/08(日) 17:27:59.69
PHPのhtmlspecialchars($str, ENT_QUOTES)に相当する関数ってありますか?
578デフォルトの名無しさん:2011/05/08(日) 17:32:20.16
>>574
ruby1.9.2から、たしか$LOAD_PATHに「.」(カレントディレクトリ)が含まれなくなったんじゃなかったっけ?
require './hello'
とするか、
export RUBYLIB=.
とすればいいのかな。
579デフォルトの名無しさん:2011/05/08(日) 17:35:24.31
>>577
>PHPのhtmlspecialchars($str, ENT_QUOTES)に相当する関数ってありますか?

標準ライブラリにはたしかなかったと思うので、自作したほうがいいかもね。

def h(value)
 value.to_s.gsub(/&/,'&').gsub(/</,'<').gsub(/>/,'>').gsub(/"/,'"').gsub(/'/,'&39;')
end
あるいは 1.9 なら
ESCAPE={'&'=>'&', '<'=>'<', '>'=>'>', '"'=>'"', "'"=>'&39;'}
def h(value); value.to_s.gsub(/[&<>"']/, ESCAPE); end
580デフォルトの名無しさん:2011/05/08(日) 17:38:28.65
>>579
ありがとうございます
581デフォルトの名無しさん:2011/05/08(日) 17:39:57.51
>>377
下のレスうけたwww
582デフォルトの名無しさん:2011/05/08(日) 17:42:42.13
>>556
「RubyでGUIは作るな!」「GUIを扱うのに向いていない」と言っても勝手にやっちゃうような人向けです
583デフォルトの名無しさん:2011/05/08(日) 17:53:42.55
>>580
いちおうつけくわえておくと、attr='value' を使わず、すべてをattr="value"にしていればシングルクオートのエスケープは必要ないからね。
584401:2011/05/08(日) 17:59:29.27
>>578
なるほど。場所指定しろやってことですね。
次のプログラムがRubyの標準ライブラリを利用しろってことで
require "data" を使えって感じなんですが、
この場合どこに指定してやればいいんでしょうか?

もう1.8.7どっかから見つけてきて
ダウンロードした方が早い気も・・・orz

あとエディタメモ帳のままってわけにもいかないだろうしRDEっての
インストールしてみました。ググって見たらサクラエディタってのが
人気みたいですがこっちの方がいいのかな?

今までメモ帳でやってたものでrbファイルからエディタ選ぶと勝手に
メモ帳で開きやがるんですが、これ指定したエディタで毎回開くように
設定出来ませんか?
585デフォルトの名無しさん:2011/05/08(日) 18:09:37.52
いやいやシングルクォーテーションも手を加えないとXSS(ry
586デフォルトの名無しさん:2011/05/08(日) 18:15:39.56
>>584
サクラエディタみたいな普通のプログラマ用の
テキストエディタにしとくのが無難ではある

プログラムと拡張子の関連付けについては
http://support.microsoft.com/kb/307859/ja
587デフォルトの名無しさん:2011/05/08(日) 19:30:11.43
>>552
>大昔はTk本体を含んでたのよ
いつごろの話ですか?
昔はTcl/Tk本体が付属してたのでしょうか?
使ったこと無いので知りませんが
RubyInstallerにはRuby/Tkがついていたのでしょうか

1.6のころからWindowsでRubyの公式サーバーにあるmswin版やmingw版を使ってますが
Ruby/TkはついてたけどTcl/Tk本体はついてなかったような
1.8.5からmingw版バイナリが配布されなくなったので
自分でコンパイルするようになりましたが

PythonのWindowsバイナリだとTcl/Tkもついてくるんだけどなぁ
588デフォルトの名無しさん:2011/05/08(日) 19:40:18.00
>>584
標準添付のライブラリならなにもしなくても
require 'date'
でオッケー。
31p のプログラムは 'date' だよ 'data'じゃなくて。
589デフォルトの名無しさん:2011/05/08(日) 20:16:34.11
>>584
時間がない社会人なら本が対応している1.8.7でやったほうが速いかもだけど
時間がある学生さんならこのスレで聞きながらまったりやればいいと思うよ
590デフォルトの名無しさん:2011/05/08(日) 20:47:39.38
\ -> \\ に変換するために
s.gsub('\\','\\\\')
では\がひとつのままで
s.gsub('\\','\\\\\\')
で \\ になってくれました。

なぜ\ひとつに \\\ の三つが必要になるんでしょうか?
591デフォルトの名無しさん:2011/05/08(日) 20:53:34.51
String#sub と String#gsub は正規表現とブロックを「使わなければならない」と思ってくれ
バグだと罵ってくれてもいい

ということで s.gsub(/\\/){'\\\\'}
592デフォルトの名無しさん:2011/05/08(日) 21:05:58.38
まず、シングルクォートでもダブルクォートでも「\」自身をあらわすためには'\\'とする必要がある

次に、subやgsubの第二引数では
正規表現でグルーピングした部分文字列を呼び出すために\1とかをつかうので、\自身を表すには'\\'とする必要がある

さて、s.gsub('\\','\\\\\\')の第二引数は
ソース上では'\\\\\\'
Rubyの内部では「\\\」
gsubの解釈では、最初の\\が\になり、最後の\は後に続くものがないので、これは\として扱われる
よって 「\\」になる

正式にはソースにも'\\\\\\\\'と書くほうがいいと思うが
s.gsub('\\'){'\\\\'} の方がわかりやすいよね
593デフォルトの名無しさん:2011/05/08(日) 21:26:11.97
>>592
横からだけど第二引数はRubyの文字列として解釈されたあと
置換文字列としてのルールでもう一回解釈されるわけだね
勉強になりました
594デフォルトの名無しさん:2011/05/08(日) 21:29:36.23
>>591>>592
ありがとうございます。
特に>>592さんの詳しい解説で何故そうなっているかが理解できました。
おとなしく s.gsub('\\'){'\\\\'}を使うことにします。
595デフォルトの名無しさん:2011/05/08(日) 21:47:44.07
VisualRubyについての質問です

VisualRubyのGUI内で exec を呼ぶと落ちてしまうのですが、
(外部コマンド自体は実行されてるみたいです。)
vrubyを使って外部プロセスを呼び出すにはどうすればよいのでしょうか?

公式サイトのサンプルに exec("dir")を加えてみたのですが、終了してしまいます。
http://www.osk.3web.ne.jp/~nyasu/vruby/howto/2.html#buttonpush

# vrsample2b.rb
require 'vr/vruby'
require 'vr/vrcontrol'

module MyForm
def construct
self.caption="sample2b"
addControl(VRButton,"btn1","ButtonButton",10,10,250,50)
end

def btn1_clicked
@btn1.caption="PUSHED"
exec("dir")
end
end

frm=VRLocalScreen.newform
frm.extend MyForm
frm.move 100,100,300,300
frm.create.show

VRLocalScreen.messageloop
596401:2011/05/08(日) 21:57:25.45
>>586 >>588 >>589
ありがとうございます。とりあえず1.8.7見つけてきて
インストールして進めています

サクラエディタは関連付けのところで
何回やってもうまくいかなかったので
むかついてRDEで進めています

data× date○ こんな単純なとこでミスっていたとは恥ずかしい・・・orz
また、つまずいたらいたら聞きにくるのでお願いしますorz
597デフォルトの名無しさん:2011/05/08(日) 22:00:43.45
俺がこのスレ見て学ぶのをやめたGUIか・・・
598デフォルトの名無しさん:2011/05/08(日) 22:04:01.61
Windowsしか使ってないのだけど
execてUNIXの機能じゃなかった?
forkしてexecとかいう
execしちゃうと二度と帰ってこないので
systemを使ったほうがいいじゃないのかな
ただし、systemも子プロセスが終了しないと帰ってこないけど

1.9なら spawnで非同期に子プロセスを実行できるけど
599デフォルトの名無しさん:2011/05/08(日) 22:08:29.77
私は自作Ruby/Tkのランチャで
Thread.new{system('dir')}
と、してました

子プロセス数百個も起動しっぱなしってことは無いだろうから
多少のRubyスレッドが居残ってても、問題ないだろうと

本当はWin32APIでCreateProcess呼ぶほうがいいんだろうけど
600デフォルトの名無しさん:2011/05/08(日) 22:15:55.39
RDEは
File.open('file') do |f|
  f.read
end

とかやるとf.の補間でエラー吐くからムカついて使うのやめたなあ。

1.8.7いっちゃったか。。。
まあ1.8系列もまだバリバリ現役だから別にいいとは思うけど。。。
601デフォルトの名無しさん:2011/05/08(日) 22:17:28.75
Python製のEditraみたいにRubyで作られたテキストエディタってないの?
602デフォルトの名無しさん:2011/05/08(日) 22:25:37.00
>>601
redcar
603デフォルトの名無しさん:2011/05/08(日) 22:55:16.98
やべえな乗り換えようかな
秀丸より高機能なのかな
604デフォルトの名無しさん:2011/05/08(日) 23:46:11.93
>>598
リファレンスを見る限り
Open3.popen3 には「Windowsは使えないよ。」の
警告があったんですが、execにはなかったですよ。

>>599
ありがとうございます。 うまく動きました。
すぐに終わる処理なので join したので多分これで問題ないんだと思い込んどきます。
605デフォルトの名無しさん:2011/05/08(日) 23:54:06.70
>>598
execはWindowsでも使えるよ

>>604
リファレンスは、あんまり全面的に信用しない方が良い
今回のようなOS間の差異が絡む問題では特に

Windowsで使えないと書かれていない=使える、とは限らない
606デフォルトの名無しさん:2011/05/09(月) 00:16:54.37
リファレンス信用しちゃダメなんですか…。 (;´Д`)
607デフォルトの名無しさん:2011/05/09(月) 00:19:52.87
信用できるのはソースだけってどっかのだれかがいってた
608デフォルトの名無しさん:2011/05/09(月) 01:31:41.64
>>605
> Windowsで使えないと書かれていない=使える、とは限らない
いやいや、今回の場合は
マニュアルに書いてあるとおりにexecは使えてますよ
ただ、「起動に成功した場合、このメソッドからは戻りません。 」
なだけで

しかし、execだけあってもあまり使い道が無いという罠
609デフォルトの名無しさん:2011/05/09(月) 03:20:12.46
他の言語でも同じ仕様でexecあったけどいつ使うのかよくわからん
610デフォルトの名無しさん:2011/05/09(月) 06:16:26.02
まあ、「戻りません」じゃわからんよな

  exec メソッドはシステムライブラリの exec(2) か spawn などを呼ぶので、
  現在の ruby 実行のプロセスは引数プロセスで上書きされます

が正しい解説だろう
system 'notepad' はメモ帳を起動して、メモ帳が終了するまで待つが、
exec 'notepad' はメモ帳を起動するとスクリプトは終了する(ように人間の目に見えるよう振舞う)

exec(2) のシェルレベルのサポートなしに後者の動作は不可能
system で起動されるシェルでたまたま & とかがサポートされてれば system でも似た見た目にはできるが
611デフォルトの名無しさん:2011/05/09(月) 14:12:05.22
vrubyでまたわからないことが出てきてしまったので質問させてください。

http://www.osk.3web.ne.jp/~nyasu/vruby/howto/2.html#buttonpush
このサンプルの "ButtonButton" を "準備" に変えると
utf8n だと ruby -Ku vrubytest.rb で呼び出しても文字化けして表示されますし、
shift-jis だと unterminated string meets end of file のエラーになってしまいます。
"準"だけだと正常に表示されるようです。

このエラーを回避してうまいこと日本語を表示する方法はありますか?

# vrsample2a.rb
require 'vr/vruby'
require 'vr/vrcontrol'

module MyForm
def construct
addControl(VRButton,"btn1","ButtonButton",10,10,250,50)
end
end


frm=VRLocalScreen.newform
frm.extend MyForm
frm.move 100,100,300,300
frm.caption="sample2a"
frm.create.show

VRLocalScreen.messageloop
612デフォルトの名無しさん:2011/05/09(月) 15:56:14.97
普通に-Ks
613デフォルトの名無しさん:2011/05/09(月) 16:10:41.57
>>612
そんな話じゃないだろ
もっと深い理由に違いない
614デフォルトの名無しさん:2011/05/09(月) 16:35:48.62
…まあ、なんだ、Rubyに慣れないうちからGUIもやるとか従来のパターンでは正気の沙汰ではないので
GUIでなんか質問されると中級者レベルの何か深遠な理由なんだろうと考えるのはわからんでもないんだが、
でもこれからの時代においては偏見だと思う

ラーメン食いながらダブルピースで写真撮られる練習をするようなことは実生活では全くの無駄だが、
ヒマの潰し方としては別に悪いことではないだろう
615デフォルトの名無しさん:2011/05/09(月) 16:52:49.08
化けてもUTF-8出るなら文字列をいちいちUTF-8から変換して使えば……めんどくさいな。
616デフォルトの名無しさん:2011/05/09(月) 17:48:06.42
>>611
Rubyのバージョンは何ですか?
Ruby1.8以下だと VisualuRubyはSJISしか想定していなのじゃないのかな
スクリプトをSJISで書き -Ksつきで実行しておけば問題ないような

Ruby1.9だとちゃんとマジックコメントを書いておけば
SJIS(cp932)でもUTF-8でも
文字化けせずに実行できたよ
617デフォルトの名無しさん:2011/05/09(月) 20:13:04.38
漢字を含む文字列を表示幅指定で書き出すにはどうしたら良いでしょうか?
固定ピッチフォントで英数字の1文字分の表示幅を1とし、
漢字等の英数字の2文字分の幅の文字の表示幅を2として計算して表示したいのですが
ljustは文字数で計算されるため文字列に漢字が含まれるとうまく行きません。
環境はRuby 1.9.2、Windows、表示用フォントはMSゴシックです。
618デフォルトの名無しさん:2011/05/09(月) 20:15:55.50
教える側が過保護すぎる。
プログラミングをさも特別な技能かのように装うのはやめないか?
ぶっちゃけうちのオカンでもできるよ?
プログラミングなんて何度失敗してもリスク無いし。
本当に特別な技能ってのは素人がいきなりやると死ぬレベルとか、
実施できる回数が人生の間で数回とかそういうもんを言うんだよ?
619デフォルトの名無しさん:2011/05/09(月) 20:45:58.81
>>617
今は実質不可能です

が、まあ、たとえばUTF-8とかに変換しておいて
1文字幅の文字を正規表現でマッチさせて係数1と、
それ以外の文字を係数2として計算すればそれなりに動作する
あくまでそれなりだけど、問題はあまり起きないはず

irb> "abcねこハンカク".split(//).map{|s| /[0-9a-zA-Zア-ン゙゚]/ =~ s ? 1 : 2}.inject(0){|r,i| r +=i;r}
=> 11
620デフォルトの名無しさん:2011/05/09(月) 20:46:26.15
1名(だと思うけど)人を下に見る人がこのスレに生息しているのは何でですか?
621デフォルトの名無しさん:2011/05/09(月) 20:51:28.67
>>619
Unicodeなにそれなフォント固定な環境なら問題なかんべ
あと記号とかいろいろ入ってない
622デフォルトの名無しさん:2011/05/09(月) 21:37:54.59
>>620
君を加えて2名 >人を下に見る人
このレスで俺を加えて3名
623デフォルトの名無しさん:2011/05/09(月) 21:46:40.47
/[ -~ァ-ン゙゚]/
ASKII文字と半角カナだとこれでいいのかな?
624デフォルトの名無しさん:2011/05/09(月) 22:38:41.76
>>623
この正規表現はいやらしいとおもいまう
625デフォルトの名無しさん:2011/05/09(月) 22:44:42.43
文字コード表の特定範囲を指定するなら数値をそのまま書いたほうが分かりやすいかも
/[\x20-\x7e\xa1-\xdf]/
626デフォルトの名無しさん:2011/05/09(月) 22:47:57.42
指定として間違いないのだが、リテラル的にあんまりわかりやすくないのが難点
627デフォルトの名無しさん:2011/05/09(月) 23:08:18.31
FizzBuzzで綺麗なコードはどれですか?
1.upto(?d){|i|i%3<1&&x=:Fizz;puts i%5<1?"#{x}Buzz":x||i}
628デフォルトの名無しさん:2011/05/09(月) 23:19:58.45
ふつうにif elsif endするのがきれいじゃないか?
あと、 ?d #=> "d" (1.9で)

629デフォルトの名無しさん:2011/05/09(月) 23:33:10.41
>>612
ありがとうございます、できました。
>>616
1.8.6です。

1.9だとvrubyでもUTF-8が使えるんですね。
多言語表示したい時は1.9を試してみることにします。

ありがとうございました。
630デフォルトの名無しさん:2011/05/09(月) 23:42:01.76
>>627
汚いコードだなあ
631デフォルトの名無しさん:2011/05/10(火) 00:11:18.63
>>610
UNIXはよく知らんけどふつうは
fork{exec ほげほげ}
とかするんじゃないの

forkでプロセスの複製をして、execで中身を切り替える
forkとexecを別々にできると、場合によっては便利なこともあるらしいね
すくなくともOS作るのには便利なんだろう

WindowsのAPIだとfork機能とexec機能は別れておらず一体なので
Windows版Rubyのexecは二度と帰ってこない外部プロセス起動メソッドでしかない

>「現在の ruby 実行のプロセスは引数プロセスで上書きされます」
Windowsだと
「外部プロセスを起動して、起動に成功するとRubyは強制終了します。ただし、Rubyが終了するのは、その外部プロセスの終了を待った後になります。その間Rubyは停止しています。」
くらい?
632デフォルトの名無しさん:2011/05/10(火) 00:18:03.11
forkして権限を落としてからexecするなんてのが典型じゃないかな
systemみたいなのだとこうはいかない
633デフォルトの名無しさん:2011/05/10(火) 01:34:42.30
Kernel#spawn 使おうぜ。
634617:2011/05/10(火) 01:46:47.66
皆さんありがとうございました。
文字コード表を見るとUnicodeの記号は半角と全角が混沌としていて完璧を期すのは困難そう。
とりあえずASCII+カナ+αでやってみようと思います。
635デフォルトの名無しさん:2011/05/10(火) 01:52:54.47
Unicodeの文字には一応Eastern Asian Widthというプロパティがあるので、
文字データベース引っ張ってくれば計算は出来る、はず。
Ambiguousの扱いがいろいろ茨らしいが。
636デフォルトの名無しさん:2011/05/10(火) 04:58:25.27
Ruby製アプリのコード解説をしているサイトや書籍はありませんか?
637デフォルトの名無しさん:2011/05/10(火) 09:59:50.12
>>636
コードリーディングならるびまの添削記事でも読んでみたらいかがでしょうか。
638デフォルトの名無しさん:2011/05/10(火) 10:23:50.74
>>634
表示フォントが大体決まってるなら「俺らが普段半角幅だと思ってるもの」だけ幅1で計算すればOK
どうせ日本人向け環境で日本人向けフォントだろw

昨今のLinuxのターミナルエミュレータで英語圏対応するとかだと泣きたくなるほど面倒だが
Enterの上の\とEnterの下の\で入力文字と表示幅が違ったときは最新追従すぎて飛び降りたくなった
今度からはバックスラッシュは「ろ」で入力しないといかんのか
639デフォルトの名無しさん:2011/05/10(火) 20:35:48.27
>>617
>漢字を含む文字列を表示幅指定で書き出すにはどうしたら良いでしょうか?
NKFにそういう機能があったような気がする。
ttp://www.ruby-lang.org/ja/man/html/FAQ_C6FCCBDCB8ECA4CEBCE8A4EAB0B7A4A4.html#a10.2e11.20.c6.fc.cb.dc.b8.ec.a5.c6.a5.ad.a5.b9.a5.c8.a4.f2.20n.20.b7.e5.a4.c7.c0.de.a4.ea.ca.d6.a4.b7.a4.bf.a4.a4.a4.ce.a4.c7.a4.b9.a4.ac
640636:2011/05/11(水) 00:31:50.51
>>637
読んでみましたが良さそうでした。ありがとうございます。
641デフォルトの名無しさん:2011/05/11(水) 12:09:11.86
俺が書き込みしてから書き込みの勢いが30超えた!
642デフォルトの名無しさん:2011/05/12(木) 21:14:05.83
2038年以降のタイムスタンプを取得する方法ってありませんあk?
643デフォルトの名無しさん:2011/05/12(木) 21:42:23.57
>>642
% ruby -rdate -e 'p DateTime.parse("2040-01-02 03:04:05")'
#<DateTime: 2040-01-02T03:04:05+00:00 (42615169249/17280,0/1,2299161)>
% ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
644デフォルトの名無しさん:2011/05/12(木) 21:49:12.85
同じruby1.9.2p180何ですけど実行しても空でした
日付を2038年より前田とタイムスタンプが出力しました
windows 32bitだからですかね?
645デフォルトの名無しさん:2011/05/13(金) 00:33:27.64
windows XP 32bitで試したがちゃんと動く
2038年問題はRuby1.9.2で解消されてwindowsだからとか32bitだからとか関係ないと思うが
646デフォルトの名無しさん:2011/05/13(金) 00:54:29.64
>ruby -v -rdate -e 'p DateTime.parse("2040-01-02 03:04:05")'
ruby 1.9.2p180 (2011-02-18 revision 30909) [i386-mingw32]
#<DateTime: 2040-01-02T03:04:05+00:00 (42615169249/17280,0/1,2299161)>
>ruby -v -e 'p File.mtime("2061.txt")'
ruby 1.9.2p180 (2011-02-18 revision 30909) [i386-mingw32]
1970-01-01 09:00:00 +0900
>dir 2061.txt
2061/01/01 12:00 0 2061.txt

2038年以降のファイルのタイムスタンプは取れないみたいね
647デフォルトの名無しさん:2011/05/13(金) 01:21:36.56
OSXで試そうとしたがそもそもtouchコマンドが32ビットを超えた日付を扱えなかった…
648デフォルトの名無しさん:2011/05/13(金) 03:16:07.90
マカってホント情報弱者だな。
649デフォルトの名無しさん:2011/05/13(金) 03:21:46.81
今は2011年なんだから2038年の問題なんて今しなくても良いじゃんね。
27年後だよ?27年前と今を比べてみなよぉ。
Z-80でぽちぽちやってた時代だよぉ?
650デフォルトの名無しさん:2011/05/13(金) 03:23:26.05
マクって2019年問題とかもあったよな。ポンコツすぎる。
ウィンドウズだと19000101でも大丈夫だけどマクだとエラーwww
651デフォルトの名無しさん:2011/05/13(金) 03:27:00.74
1940年代にコンピュータが発展してたけど00(20000101)に成るまでには何とかなってるだろうと放置して2000年を迎えて大問題が発生した訳だが。

2000年にコボラーをかき集められた様に、2038年にルビラーをかき集められて対応させられると思うとぞっとするわwww
652デフォルトの名無しさん:2011/05/13(金) 03:36:50.55
それでも頑張ったら何とかなったんだから、そのときがきたら頑張ろうぜ。
まったりいこうよ。
653デフォルトの名無しさん:2011/05/13(金) 04:00:53.95
getsでコンソールでディレクトリを入力するようなやつを作ってるんですが
ディレクトリ名前をタブで補完するようにできるんでしょうか?
654デフォルトの名無しさん:2011/05/13(金) 05:04:18.40
関数的メソッド gets ではできない
Readline ならできる
655デフォルトの名無しさん:2011/05/13(金) 08:30:08.29
>>648
touch コマンドが何なのか理解してないだろ。
656デフォルトの名無しさん:2011/05/13(金) 10:17:07.83
威張ってないで説明すればいいのに。
657デフォルトの名無しさん:2011/05/13(金) 11:43:03.40
>>649
大企業では何十年計画でプロジェクトを立てるからそうもいかないんだな
658デフォルトの名無しさん:2011/05/13(金) 13:32:02.72
UTF-8からSJISに変換するとき、SJISにない文字は文字化けすると思いますが
SJISからUTF-8に変換するときなら機種依存文字さえ使わなければ文字化けはないと考えられますか?
659デフォルトの名無しさん:2011/05/13(金) 13:40:12.99
>UTF-8からSJISに変換するとき、SJISにない文字は文字化けすると思いますが
うん

>SJISからUTF-8に変換するときなら
UTF-8にない文字は文字化けすると思います
660デフォルトの名無しさん:2011/05/13(金) 13:45:28.40
〜とか不用意に書いて泣くといいよ
661デフォルトの名無しさん:2011/05/13(金) 13:59:44.20
まあなんだ、基本的には>>659だが、なにで変換して「変換ミス」をどれくらい許容するかにもよる
変換方法によって失われたりまとめられたり「変換ミス」されたりする文字は違う
2011年になってもNKFによるString#toutf8が無難とかありえん
662デフォルトの名無しさん:2011/05/13(金) 14:04:56.74
じゃあどうすればいいのか具体的に書けよ
663デフォルトの名無しさん:2011/05/13(金) 14:18:58.01
>>662
何も考えたくないなら tosjis と toutf8 を使って、実害が出ないように祈る

変換を制御したいなら変換テーブルについて学んだ上で Ruby 1.9 を使用し
好みの変換をするように String#encode でオプションを指定する
664デフォルトの名無しさん:2011/05/13(金) 14:29:00.45
> 変換を制御したいなら変換テーブルについて学んだ上で Ruby 1.9 を使用し
> 好みの変換をするように String#encode でオプションを指定する

何も言ってないのと同じだろw
665デフォルトの名無しさん:2011/05/13(金) 14:29:25.64
ああ忘れてた

(toutf8などの動作が好ましくなくて)NKF を使用する場合、ショートオプション s や S は普通使用してはならない
代わりに --ic=CP932 や --oc=CP932 を日常的に使用する
何かよくないことが起こった場合 --no-cp932 も有効だが使用上の注意をよく読むこと
これらは添付されている NKF のバージョンなどによってはうまく動かないかもしれない(少し古いJRubyとか)
666デフォルトの名無しさん:2011/05/13(金) 14:32:55.93
>>664
これらのレガシーエンコーディングに関しては「正しい変換方法」なんてもう存在しないんだよ
太古の人々が妥当だと思ったお着せの動作で我慢するか、それが嫌なら自分で全部やるしかない
667デフォルトの名無しさん:2011/05/13(金) 15:08:57.81
結論から言うとutf-16になれば文字コードに悩まなくなるって事でOK?
さらに言えばUTF-32なら全世界の文字を表現できるでOK?
668デフォルトの名無しさん:2011/05/13(金) 16:19:45.98
>>667
Unicode はひとつだけだよ
Uni な Code なんだから
※ 若干の語弊あり

それをコンピュータ上のバイトで表現する方法が複数あるに過ぎない
従来の ASCII 部分が同じになるように工夫した結果1バイトから4バイトまでバリエーションなのが UTF-8
基本2バイトで、入り切らない特殊な文字は4バイト(サロゲートペア、検出容易)が UTF-16
一律4バイト固定で便利だが ASCII 文字のファイルサイズも4倍でアメリカ人激怒なのが UTF-32(UCS-4)
669デフォルトの名無しさん:2011/05/13(金) 17:55:52.42
>>617 >>634
CJK widthとかambiguous widthとかでぐぐればいいと思うが文字の幅は場合によりけりなんだなこれが
わかりやすい例だと罫線は日本とASCIIで幅違うよな?
Box-drawing characters - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Box_drawing_characters
人によってはこのページのスクリーンショットと実際の表示がずれているだろうと思う
Examplesがぐちゃぐちゃになっていたり

>>638のこの扱いでOKじゃないかな
> 表示フォントが大体決まってるなら「俺らが普段半角幅だと思ってるもの」だけ幅1で計算すればOK
> どうせ日本人向け環境で日本人向けフォントだろw
670デフォルトの名無しさん:2011/05/13(金) 17:56:16.63
Eastern Asian Ambiguous Character Widthでググルといいかも
671デフォルトの名無しさん:2011/05/13(金) 18:01:33.00
Unicodeの話題をおかずにご飯三百杯はいけるよ

それはいいとして、NKFのtoutf8はもはやRubyの陥りがちな罠レベルだろw
672デフォルトの名無しさん:2011/05/13(金) 20:18:22.14
ご飯300杯奢るから語ってくれ。
673デフォルトの名無しさん:2011/05/13(金) 21:51:06.36
流石に三百杯分もUnicodeの話したらスレ違いだろw
ここは主にRubyの質問を受け付けるスレなんだぜ
674デフォルトの名無しさん:2011/05/13(金) 21:59:43.22
しっかし「〜」はとんだ失態だよなぁ。
ピコピコハンマーがあったらピコピコしまくるわ。
675uy:2011/05/14(土) 00:25:23.73
ruby1.9ではマルチバイト文字をソースコード中に入れないようにしてる
ro-majikuraiyomenndaro
676デフォルトの名無しさん:2011/05/14(土) 00:31:46.67
本気でそんなことしてるならただのキチガイだな
677デフォルトの名無しさん:2011/05/14(土) 18:45:43.44
質問です。Ruby初心者です。
ウェブ上での提出書類の簡単な管理システムを作っています。
提出期限と今日の日差が0より大きいなら「あと○日」、
提出期限と今日の日差が0より小さいなら「○日経過」、
0と等しいなら「本日が締め切り日」と表示させたいのです。
以下はその判定部分です。
※sは提出期限と今日の日差を計算した値の変数です。

if s > 0
print "あと#{s}日"
elsif s < 0
print "#{s}日経過"←(このままだと「-」符号がついてしまうので符号を変えたいのですが、方法が分かりません。)
elsif s == 0
print "本日が締め切り日"

拙文で申し訳ないですが、ご教授よろしくお願いいたします。
678デフォルトの名無しさん:2011/05/14(土) 18:53:22.42
…そういうレベルだと、なんかまとまった本なり解説サイトなり親切な人なりに頼ったほうがいいと思う
完成するより前に挫折してしまいそうな
系統だった情報をさくっと眺めるだけでも違うと思うの
679デフォルトの名無しさん:2011/05/14(土) 18:53:41.63
#{s.abs}って事じゃないよな?
680デフォルトの名無しさん:2011/05/14(土) 18:56:59.15
>>679
というか、単に「計算して負の数でなくしてしまえばいい」んだが
それを思いつかないということは、整数と文字列の違いとかリテラル埋め込みとか下手したら四則演算とか
そういうのの基礎知識がすっこんと抜けたままである恐れが高い
681デフォルトの名無しさん:2011/05/14(土) 19:03:19.12
>>677,679
#{-s}でいいでしょ

プログラミング初心者だと思うけど
まあこんな風にこことか誰かとかに聞きながらでも何か1つ作れれば
いろんなことがわかるようになるだろうね
682デフォルトの名無しさん:2011/05/14(土) 19:12:35.98
>>678-681
親切にありがとうございます。
皆さんからいただいたことを参考にさせていただきます。
ありがとうございました。
683デフォルトの名無しさん:2011/05/14(土) 19:41:14.00
○月○日〜○月○日の範囲でランダムに日付を取得したいのですが
まず範囲最小最大値の日付をタイムスタンプに変換して、その範囲の中で乱数を生成する。
生成した乱数を日付に直して出力する。
と、考えたのですが、2038年問題に対応にしたいのでタイムスタンプは使えませんね?
他に代替手段はございませんか?
684デフォルトの名無しさん:2011/05/14(土) 19:50:47.59
>>683
年月日で別々に乱数で生成すればいんじゃね
うるう年にきをつけろをょ
685デフォルトの名無しさん:2011/05/14(土) 23:43:35.49
日付だけなら
Dateクラス使えばいいかも
>ruby -v -rdate -e "d1=Date.parse('3001-05-14');d2=Date.parse('4001-05-14');p Date.jd(rand(d2.jd-d1.jd+1)+d1.jd).to_s"
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mingw32]
"3823-08-07"
686デフォルトの名無しさん:2011/05/14(土) 23:47:20.31
コード見てもサッパリ分からない僕はどこから勉強したらよいか?
687uy:2011/05/15(日) 00:15:46.98
>>676
ネタすらわからないゴミだったか さすが、プログラマはゴミだな
けど実際、ソースコード中に積極的にマルチバイト文字使う奴はアホ
いくらruby.exeが対応していても、その周辺ツールが対応してなければ意味はなし
688デフォルトの名無しさん:2011/05/15(日) 03:15:10.87
欲しい日付=範囲の最初の日 + 範囲(0から)の日数内のランダムな整数
でいいとおもうんだけど、どこに2038年問題?
689デフォルトの名無しさん:2011/05/15(日) 03:33:48.60
もう今のハードウェア上に新しい言語要らんわ
当然Rubyも
アセンブラからメジャーな言語は全て習得したけどRubyはダメだ、まどろっこしくてたまらない
Rubyって業務やプログラマーのためじゃなくてオブジェクト指向競争のためにあるっぽい
フレームワークも全然育たないし

何だかんだで、Objective-C2.0+Appleフレームワーク+xcode+instrumentsが
最速最強なんだな
690デフォルトの名無しさん:2011/05/15(日) 03:44:07.21
Appleだけだよね〜
言語やフレームワーク系で金儲けしようとしない大手は
M$はWPFなんてクソアプローチでズレまくってるし
XMLとかなめてGUI要素構成するとかプログラマが一番嫌う冗長な処理でさ〜
別に文字列とか+で連結出来なくてい〜んだよ
そんな細かいところまでオブジェクト指向しなくてさ
それよりも、完璧なエラーチェックの入った伝票入力クラスを継承してカスタマイズ出来る事のほうが100倍有意義なんだよ
よってオレもRuby卒業するわ
691デフォルトの名無しさん:2011/05/15(日) 03:54:21.29
オブジェクト指向が便利さに結びつかない言語が多過ぎて結局CとかVB。
dbMagicなんてのが昔あったけど、あれはあれでダサ過ぎて使い物にならないが、動きは事務系Ruby。
どうせRubyはモッサリインタプリタだし、インタプリタ内部に簡易DB持てば死なずに済むんじゃないか?
692デフォルトの名無しさん:2011/05/15(日) 04:03:17.73
関数型言語の他はC系とRubyしか分からない関数型言語マニアな友人が全く転職先見つからないと言ってた。
JavaとかPHP使いこなせればとりあえず仕事は無くならないんだろうな。糞つまらなそうだが。
693デフォルトの名無しさん:2011/05/15(日) 04:21:58.81
>>692
先っぽの会社は使用言語そのものをあまり問題にせず、その言語でどれだけ知識を得たかを問う
普通の(つまり、凡百の)会社は「メインの言語」が使えること以外をあまり問題にしない

どっちにしてもその人が中途半端に使えない人材なんだと思うよ
694デフォルトの名無しさん:2011/05/15(日) 04:45:51.46
最近はちょっと事情が変わってきてて、会社の経営難から年配のベテランを解雇して若いリーダーが多いんだけど、
その若いリーダーが業務に疎かったりして、それは仕方ないとしても自分より出来る人を部下にしたがらない傾向が強いね
javaしか知らないなんちゃってプログラマーのリーダーにRuby熟知してて・・なんて言ったらまず雇ってくれないだろうな
最近は案件数も少ないし、単価高くて使える人間よりも、単価低くて実力無くても言う事聞く人間が求められてる
ま、今でもXP使ってるしIT業界も終わったなって事だよ
695デフォルトの名無しさん:2011/05/15(日) 04:52:41.48
結局将来性ある仕事でもなんでもなかったな。
終わった、と言われていたレガシー重厚長大にでも入っていた方がよっぽど幸せな人生だった。
地方公務員とかと比べるだけもう無駄。

あの東京電力だって、一般社員ならはるかにましな待遇が定年まで続くのだろう。結局は。
696デフォルトの名無しさん:2011/05/15(日) 07:36:36.48
関数型言語を使う仕事はそのものの研究用途以外には金融関係しかなく仕事の無さはRubyどころじゃねーだろ
関数型言語以外の相当に高いレベルが要求されると予想されるが
697デフォルトの名無しさん:2011/05/15(日) 07:38:26.28
>>694
前半と最後の1行のつながりがわからん
698デフォルトの名無しさん:2011/05/15(日) 10:03:03.00
>>694
リーダーは実装なんて知らなくていいと思うんだがな
工程管理と顧客窓口と設計のまとめ役やってりゃいいよ
実装に口だすリーダーなんていらん。
※もちろん少人数チームでカミカゼ管理職の場合はマルチプレイヤーじゃないと厳しいが

XPは普通だろ、まだサポート範囲内だし
今ちょうど7(64bit)の人柱してる。開発部隊から順次置き換え予定

今ヤバイのはofficeだな、今年でサポート切れるし
2007からリボンインターフェースで営業から文句いわれるわ
ファイル形式が混雑してカオスになるわ、やってらんねぇ
699デフォルトの名無しさん:2011/05/15(日) 10:12:21.95
例えば2011-5-33という日付があったらRuby側がで修正して2011-6-2ってやってくれるものですか?
700デフォルトの名無しさん:2011/05/15(日) 10:25:11.71
>>699
3行くらいで確認できるんだから書けばいいじゃん




ちなみに dateライブラリのDateクラスにぶち込んだらArgumentError吐いた
701デフォルトの名無しさん:2011/05/15(日) 10:32:57.05
>>699
Ruby にはそういう Time 型や Date 型という機能はない
相応のクラスを自分で選んで使うか探すか作るかして、オブジェクトとして保持しなければならない

というわけでたとえば Date
irb> require 'date'
irb> Date.parse('2011-5-30') #=> <Date: 4911423/2,0,2299161>
irb> Date.parse('2011-5-33')
ArgumentError: invalid date

つぎ、 require 'time' で標準の Time を置き換えた場合
irb> require 'time'
irb> Time.parse('2011-5-30') #=> Mon May 30 00:00:00 +0900 2011
irb> Time.parse('2011-5-33')
ArgumentError: argument out of range

なんというか、パースそのものは可能だけど、オブジェクトとして返すときのチェックに引っかかってる模様
irb> p Date._parse('2011-5-33')
{:year=>2011, :mday=>33, :mon=>5}

ということで、標準では無理
自分で計算するしかないねえ
gem でカッコイイライブラリがあるかもないかも
702デフォルトの名無しさん:2011/05/15(日) 10:45:58.73
俺はRun/Cでいいや
703デフォルトの名無しさん:2011/05/15(日) 11:05:22.74
だからRubyは流行らないんだよな
バカにしているPHPは自動で計算して日付を訂正するのに
704デフォルトの名無しさん:2011/05/15(日) 11:15:13.29
デフォルトでどっちに倒すかはかなり微妙な問題
ユーザー入力がエラーにならないことそのものがエラーと言えることはままある

だからオプションとかで選択できるべきなんだが、まあ、現状、オプションすらないしなw
705デフォルトの名無しさん:2011/05/15(日) 11:18:49.01
そこにsetLenientを用意したのがJava
706デフォルトの名無しさん:2011/05/15(日) 11:33:04.37
gemってRubyで作られてるんですか?初心者には作れない系ですか?
707デフォルトの名無しさん:2011/05/15(日) 11:43:15.27
それでもActiveRecordなら…ActiveRecordならなんとかしてくれる…

>>706
ただの第三者が作成したrubyスクリプトライブラリ集だ
ファイルをまとめて公開するためには規則に沿った記述が必要だが、雛形はサポートライブラリがやってくれる

いろいろな意味で初心者には無理だけど、まあ、1年くらい触れてればなんとかなるんじゃないのかな
708デフォルトの名無しさん:2011/05/15(日) 12:27:54.37
XML-RPCについて

ブラウザでhtttp://localhost/test.rbにアクセスする

サーバでXMLを生成してブラウザに送信

ブラウザでXMLを取得する

ってことで合ってますか?
709デフォルトの名無しさん:2011/05/15(日) 12:39:56.98
いいえ
710デフォルトの名無しさん:2011/05/15(日) 12:52:06.01
XML-RPCってのはHTTPを土管としては使うけどウェブサーバとウェブクライアントじゃなくて、
なんか俺たちのサーブレットとクライアントで勝手にやりますからー、HTTPステータス何それ。
表現には流行ってるからXML使うねっていう規格。SOAP(WS-なんとか)みたいに泥沼には
恵まれなかったけどね。

>>708 で書いてるのはRESTとかAjaxとかそんなん。
711デフォルトの名無しさん:2011/05/15(日) 12:59:11.78
XML-RPCって言ってるんだからXMLを使ってRPCするに決まってんだろうがああああ、
という、RPCがわかってる人向け(あるいは何もわからないけど我が社もXML導入だでお金出す人向け)の技術
712デフォルトの名無しさん:2011/05/16(月) 04:27:26.11
Sleepで何秒か待たせるのんじゃなくてエンターとか押したら待つの終わらせるようにできますか?
713デフォルトの名無しさん:2011/05/16(月) 05:41:19.63
スレッドの知識がどーしても必要だが可能
てか要求的には「特定のキーを押したら処理を諦めさせる」だよね
Enterキーを押したから待ってた処理が完了するわけじゃない
もし「レジューム機能」を持たせたいのだとしたらちょっと大変
714デフォルトの名無しさん:2011/05/16(月) 05:49:08.62
スクリプトの最後にgetsでも置いとけという話かと思った
715デフォルトの名無しさん:2011/05/16(月) 05:57:46.82
まあ、よくよく話を聞くと
「ダブルクリックで一瞬だけ現れるコマンドプロンプトを自動で閉じないようにしたい」
「sleepだと即閉じないことを大発見したがタイマーになってしまって不便」
とかだったりするんだが
pause 書いた rubys.bat にでも関連付けとけ
716デフォルトの名無しさん:2011/05/16(月) 11:47:55.61
ネットを巡回してると下記のようなsnippetsがありました。
Net::HTTP.get(URI.parse(url)).toutf8.each do |body|
...(1)...
(1)の部分で、1行毎の処理が書かれていました。

質問は、「上記のコードがHTTPリクエストを何回発行しているか数える方法はありますか?」です。
eachがあっても、各行毎にHTTPリクエストを発行していないとは思うのですが、
いざ自分で調べようと思ったときに、(Rubyでの)調べ方がわかりませんでした。
もしあれば、教えていただければ幸いです。
717デフォルトの名無しさん:2011/05/16(月) 12:15:31.99
>>716
メソッドチェーンは、慣れると一発なんだが、とりあえず分割する

Net::HTTP.get(URI.parse(url)).toutf8.each do |body|



uri = URI.parse(url)
body = Net::HTTP.get(uri)
utf8_body = body.toutf8
utf8_body.each do |line|
...
end

と分割する
ということで、Net::HTTP.get のとこの 1回だけ
Net::HTTP.get(uri) の時点で文字列が全部一気に返ってきてるし

いわゆる逐次取得したい場合は
Net::HTTP.response(uri){|response|
response.each_body{|s|
...
}
} とか書く

つか、each do |body| ... end は書き方がよくないな
ブロック引数は body と呼ぶべきではなく、 String#each 依存でおそらく行単位なんだから line とか書くべき
718デフォルトの名無しさん:2011/05/16(月) 12:47:35.47
回答要件を満たしていないことに気づいた
いつ誰がどこで接続してるかのチェックは、基本的にはマニュアル読んでから目視でメソッドをさがすしかない
実際に接続するメソッドは少数なんだけど、それを呼んでるメソッドがちょっと多い

接続先を知りたいのなら net-htt-spy という gem があるのだが(gem install net-http-spy)、
「スクリプトのどこで」接続が行われているかはさすがに分からない

irb> require 'rubygems'
irb> require 'net-http-spy'
irb> Net::HTTP.get(URI.parse('http://www.google.com/')).size
I, [2011-05-16T12:43:58.410168 #6680] INFO -- : CONNECT: ["www.google.com", 80]
221

irb> require 'open-uri'
irb> open('http://www.ruby-lang.org/ja').read.size
I, [2011-05-16T12:44:52.238128 #6680] INFO -- : CONNECT: ["www.ruby-lang.org", 80]
I, [2011-05-16T12:44:52.756314 #6680] INFO -- : CONNECT: ["www.ruby-lang.org", 80]
13072
719デフォルトの名無しさん:2011/05/16(月) 14:53:56.19
>>712
require 'timeout'

begin
timeout(10){gets}
rescue Timeout::Error
end

とかするのはどうだろう
1.8.7以上だとWindowでも動くよ
1.8.6までだとWindowsでは入出力待ちでスレッドも止まっちゃって動かない
720デフォルトの名無しさん:2011/05/16(月) 15:26:40.09
デザインパターンって覚えておくべき?
シングルトンでつまづいてるんだけおd
721デフォルトの名無しさん:2011/05/16(月) 15:38:11.76
デザパタはある程度悩んで、本を読んでなるほど、と思うならいいんだが、むやみにパターンだけ
覚えても意味ないと思う。
そんな労力があるなら実際のコードをみて勉強した方がいいような・・・。
722デフォルトの名無しさん:2011/05/16(月) 15:54:28.63
Windowsで外部プログラムを起動して、その標準出力を文字列で取得するにはどうすれば良いんでしょうか?

$stdout = File.open("hoge.txt", "w")
%x{ foo.exe }
$stdout = STDOUT

で試してみたんですが、hoge.txt には何も書き込まれず、標準出力にそのまま出力されてしまいました。

1.8.6 です。
723デフォルトの名無しさん:2011/05/16(月) 15:57:10.63
>>720
一般的には、あんまりいらない
オープンクラスで動的メソッドでラムダラムダで個人プレイなRubyでは特にね
(あれはCやJavaのような言語で大人数開発するときのノウハウだ)

が、まあ、頭に入ってれば役に立つことは年に何回かはあるんじゃないかな
立ち読みで済ますくらいのが一番いいんじゃないの
724デフォルトの名無しさん:2011/05/16(月) 16:00:23.99
>>722
str = `hoge.exe`
File.open('hoge.txt', 'wb'){|f| f.write(str)}

でいいんじゃないのん?
725デフォルトの名無しさん:2011/05/16(月) 16:56:34.15
>>724
ためしてみましたが、やっぱりファイルには出力されず
標準出力に結果が出力されてしまいます。
726デフォルトの名無しさん:2011/05/16(月) 17:33:41.08
ジャンケンゲームを作ろうと思ってます。
CGI部分は動くんですが、rubyがエラーを吐いてしまいます。
画像等はちゃんと同じ同じ名前でrbファイルがあるフォルダに置いてます。
恐らく判定部分の画像の表示が間違ってるんだろうとは思いますが全くわかりません、
どなたか助けてください。


#! ruby -Ku

print "Content-type: text/html\n\n"

user = ""

ENV[ "QUERY_STRING" ].split( "&" ).each do | term |
name,user = term.split ( "=" )
end

727デフォルトの名無しさん:2011/05/16(月) 17:36:46.61

s = rand
if s < 0.618
system = "gu"
elsif s < 0.8
system = "cyo"
else
system = "pa"
end
728デフォルトの名無しさん:2011/05/16(月) 17:38:29.55

if user == "gu"
if system == "gu"
judgment = "draw"
elsif system == "cyo"
judgment = "win"
elsif system == "pa"
judgment = "lose"
end
elsif user == "cyo"
if system == "gu"
judgment = "lose"
elsif system == "cyo"
judgment = "draw"
elsif system == "pa"
judgment = "win"
end
elsif user == "pa"

if system == "gu"
judgment = "win"
elsif system == "cyo"
judgment = "lose"
elsif system == "pa"
judgment = "draw"
end
729デフォルトの名無しさん:2011/05/16(月) 17:39:49.24
>>725
標準出力でなく標準エラー出力に出力されてる可能性は?
もしそうならOpen3
730デフォルトの名無しさん:2011/05/16(月) 17:40:11.85
print <<EOS
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charest=UTF-8">

<title>じゃんけんゲーム</title>
</head>
<body>
EOS

print "<h1>勝敗</h1>"

print <<EOS

システム側が出したのは...
EOS
731デフォルトの名無しさん:2011/05/16(月) 17:41:31.66
if system == "gu"
<img src="gu.png">
elsif systemu == "cyo"
<img src="cyo.png">
elsif system == "pa"
<img src="pa.png">
end

if judgment == "win"
<img src="kati.png">
elsif judgment == "draw"
<img src="hikiwake.png">
elsif judgement == "lose"
<img src="make.png">

end

print <<EOS
<center>
<a href="game1.html">戻って、もう一度勝負する</a>
</center>
</body>
</html>
EOS
732デフォルトの名無しさん:2011/05/16(月) 17:44:19.71
<?php ?>こんな感じでRubyも埋め込みできませんでしたっけ?
733デフォルトの名無しさん:2011/05/16(月) 17:49:33.77
埋め込みがしたければerbでぐぐる

上のコードはぱっと見ではimgタグが引用符で囲まれてない
print "<img src='make.png' />" とかしなきゃ
734デフォルトの名無しさん:2011/05/16(月) 19:16:17.07
>>732
>>733
ご指摘ありがとうございました、
print "<img src='make.png' />" で解決しました^^
735デフォルトの名無しさん:2011/05/16(月) 19:37:29.10
標準出力か標準エラー出力かさっぱりわからなくて、
なおかつ初心者がRubyから出力を制御したいようなプログラムに心当たりがある

wget.exe
736716:2011/05/16(月) 19:55:52.59
>>717-718

丁寧な回答ありがとうございます。
まだ頂いた回答を消化しきれてませんが、恐らく私の要件は解決しそうです。
まずはお礼を申し上げます。
737デフォルトの名無しさん:2011/05/16(月) 23:21:31.55
ローマ字で書くぐらいなら普通に英語で書くます
738デフォルトの名無しさん:2011/05/16(月) 23:26:00.35
「取り急ぎお礼」とかする人間は全員カス
事態が動いてから報告しろ
739デフォルトの名無しさん:2011/05/16(月) 23:33:28.98
>>738
まあこれはもう文化圏が違うとしか…
商社営業文化圏だよね
740デフォルトの名無しさん:2011/05/17(火) 01:28:02.59
2,3日放置されるとそれはそれで怒るくせにぃ
accepted→closed ってその度に報告だよね?
741デフォルトの名無しさん:2011/05/17(火) 06:50:33.44
「取り急ぎお礼」ってだめなの?
742デフォルトの名無しさん:2011/05/17(火) 07:32:45.81
>>741
自分が相手にとって代替可能である場合、つまりふつうの社会人利害関係である場合は、
私はあなたを忘れていませんコンゴトモヨロシクという意味を込めて、
内容がなかろうと進展がなかろうと落ち着き次第早急に連絡「しなければならない」

んが、こーゆーコンピュータ関連コミュニティ(またはPC関係者)の中には、
属人性をすぱっと切り捨てて結果だけ欲しがるという風潮が少なからずある
「今更挨拶とかどうでもいいしお前個人のことは最初からどうでもいい、事例はどうなった」
ある意味純粋で機能的で、ある意味無機的で冷たい

突き詰めると古来NNTPから伝わる「お礼ポストはバイトの無駄、解決したらサマリを流せ」になる
743デフォルトの名無しさん:2011/05/17(火) 07:58:21.23
訓練され(過ぎ)た回答者は、ありがとうというお礼よりもあなたの指示が動作しましたという事実報告の方に満足する
コンピューターに関するやり取りをする人のおせっかい度はわりと万国共通なので、外国語のMLとかでも
「動きましたありがとう」「まだ動きません、エラーメッセージは…」の2種類だけで結構なんとかなったり

>>738も書いてるが単に文化圏の違いだから
通常人の場でこれをやると非常識だと思われて友達減ったり給料減ったりするので注意
744デフォルトの名無しさん:2011/05/17(火) 08:20:37.16
自転車屋とか釣具屋のオヤジもそんな感じだな。
745デフォルトの名無しさん:2011/05/17(火) 10:39:46.43
「取り急ぎお礼」って「お前の回答は読んだ」という「事態の進展」の報告だろ。
そんなことも理解できないなんて世の中にはバカっているもんだな。
746デフォルトの名無しさん:2011/05/17(火) 10:42:46.56
俺なんて動いても動かなくても質問したらそのまま消えてるよ
747デフォルトの名無しさん:2011/05/17(火) 11:14:57.03
時にはわざと嘘の回答を書いて、それを訂正しにやってくる正義感に満ちた回答者をあぶりだすことも必要。
748デフォルトの名無しさん:2011/05/17(火) 12:51:49.29
少なくとも掲示板でやることじゃないよなあ >取り急ぎお礼

コード答えて試したり理解したりする前にお礼言われても仕方ない。
749デフォルトの名無しさん:2011/05/17(火) 12:54:24.68
俺なんて質問してもけなされて終了させられる
750uy:2011/05/17(火) 14:17:02.52
こまかwwwwwww プログラマきもwwwwwwwwww おうふwwwwwww
751uy:2011/05/17(火) 14:44:17.23
ぼくのかいたソースコードなのですけど
1.9系では動いて1.8系では動かないのは仕様?
1.9
http://ideone.com/PT7q9
1.8
http://codepad.org/ojm0qhYA

どうやら15行目あたりの
o.task[key] = miyu
この記述で、o.task[key] に正しく代入されていないみたいなんだけど
似たようなソースかいてみたけどこっちは動きました
http://codepad.org/l7TmRG9i
752デフォルトの名無しさん:2011/05/17(火) 15:19:26.34
クラスとかの使い方は分かったんですが、それを用いてどのようにオブジェクト指向で書くのか分かりません
例えば

私立高校A 公立高校B
教室1〜4組
1クラス最大40人

生徒を管理する場合、
必要なメソッドは
・生徒を増やす
・生徒を減らす
・生徒の学年が上がる
・生徒が卒業する
・生徒が退学する

こんな感じでメソッドを処理ごとに分けて作っていけばよいって事ですが
1処理1部品ってことで作ればオブジェクト指向ですか?
753デフォルトの名無しさん:2011/05/17(火) 15:27:47.31
>>752
それだけの処理なら作るクラスは学校クラスと生徒クラスぐらいかなあ。
そのメソッドごとにクラスを作る必要はないよ。
教室クラスは要らないかもね、Arrayでおk。作ってもいいけどさ。
754デフォルトの名無しさん:2011/05/17(火) 15:34:31.15
>>751
1.8ではシャドウイングしないよ。
755uy:2011/05/17(火) 15:57:13.43
未知なる単語がでてきたw

バグではないのですね レスありがとうございます
756デフォルトの名無しさん:2011/05/17(火) 16:29:27.47
ただのスタイルの問題だからどうでもいいんだけど

lambda do|o|

って気持ち悪いな。
do のあとのブロック変数は離して do |o| にしてほしいし、 lambda なら do...end よりは{|o| }してほしい
757デフォルトの名無しさん:2011/05/17(火) 17:09:44.37
>>752
クラスはメソッドをまとめて hoge.foo とか書けるようにするもの
モジュールは定義時にselfとか書かないといけないのでめんどくさい謎存在

でいいです
必要になったら少しずつわかります
最初からクラス設計とか大上段に構えるとつまんないし全く前に進みません
758デフォルトの名無しさん:2011/05/17(火) 17:10:12.91
Ruby 1.9で質問です

h = {a: 1, b: 2, c: <...>, d: 5}

この<...>の時点で、h[:a]やh[:b]の値を取得する方法はありますか?
759デフォルトの名無しさん:2011/05/17(火) 17:22:43.59
>>758
ない。リテラルの仕事じゃないもの、それ。
素直にHash.newして
h[:a] = 1
h[:b] = 2
<...>
h[:d] = 5
と地道に代入したらいかがでしょうか。
760389:2011/05/17(火) 17:29:56.54
すいません僕が投稿したコードでrubyinstallerにアクセスできなくなってしまいました

Ruby192/lib/ruby/1.9.1/net/protocol.rb:135:in `read_nonblock': 既存の接続はリモート ホストに強制的に切断されました。 (Errno::ECONNRESET)って
エラーが出たのですが、これはアクセス拒否されてるって事でしょうか?
761デフォルトの名無しさん:2011/05/17(火) 17:30:11.02
うむ

h = {:a => 1, :b => 2, :c=> nil, :d => 5}
h[:c] = h[:b] + 1

こう書くしかないな
まあ、途中で参照出来れば一発で書けて便利だなと思うことは月に1回くらいはある
が、それを有効にするためのRuby側の処理はあからさまに面倒そうなので、別にいいかみたいな
762デフォルトの名無しさん:2011/05/17(火) 17:36:33.10
>>759,761
ふーむ、やっぱりありませんか
もし参照できればこんな感じの構造体をパースするのに便利だと思ったんです

struct hoge {
 int next_item_count;
int item[next_item_count]
 ...

おとなしくStructあたり使うことにします。レスどうもでした
763デフォルトの名無しさん:2011/05/17(火) 17:36:47.41
>>760
知りたいなら、サーバが何を言っているかを聞き取るといい
サーバが何を言っているのかがわからないなら、HTTPなりDNSなりの勉強が必須
勉強が終わって、Rubyでどうすればそれを聞き取れるのかがわからないのなら、
何をしたいかぽちっと質問すればきっと誰かが答えてくれる

サーバが何を言っているのかわからないというレベルでは、たぶん誰もあなたを助けられない
764uy:2011/05/17(火) 17:38:15.67
>>756
本当にどうでもいいね
お前が気持ち悪いよ

lambda do|o| とか、意識した事はない
この程度が気になるのならばそれは病気だ


このソースのかき方で
end と } を混合すれば大変なことになるから特にそれは不可能な願い、やってみればわかる
元々Rubyでやるべき記述じゃないから行数かさめば何やっても読めなくなるは
765デフォルトの名無しさん:2011/05/17(火) 17:44:27.88
>>763
エラー名かエラーメッセージはもうちょっと実データを反映させたほうがいいとは思う
Errno::ECONNRESETはソケットのECONNRESETだからまだマシなんだけど、
たまーにRubyオリジナルのエラー名があってちょっと困った覚えが

まあ今回はふつうのブラウザからアクセスできれば特段問題はない
なんだったらふつうのブラウザのフリでも
766デフォルトの名無しさん:2011/05/17(火) 17:48:11.13
スクリプトを何度も実行して確かめて何度も外部のサーバにアクセスしてたらあっちから蹴られた、とかいうのはよくある話だ
ソフトウェアテストを書くようにしてからWebMockでも使っとけ捗るぞ
767デフォルトの名無しさん:2011/05/17(火) 17:56:47.87
>>764
変数のシャドウイングもわからないレベルで
「元々Rubyでやるべき記述じゃないから行数かさめば何やっても読めなくなるは」

別にコーディングスタイルだから強要はしないけどさあ、
他人のコードまともに読んだことも無いのにコーディングスタイルについて語るなよw

lambda do|o| yield o end

なんて書く奴そうそういねえよw
これぐらいならendと{}を混合して書くことなんて別に普通も普通、おもいっきり普通w
768デフォルトの名無しさん:2011/05/17(火) 17:59:32.37
>>763
日本語で
769デフォルトの名無しさん:2011/05/17(火) 18:02:04.83
ガイアが俺に囁いている…!
770デフォルトの名無しさん:2011/05/17(火) 18:13:23.36
>>767
それまだ表示してるのお前だけだぞ
771uy:2011/05/17(火) 18:43:33.52
>>767
いやいや、あのねシャドウィング君。病気の君が読めないなら無理しなくていいんだよ
それと、


  誰 に 話 か け て ん だ ? wwww


君が理解できないだけでそのソースコードはね・・・w
まぁ俺の予想ではあと2年くらいで広まり始める傾向が見れる思ってる
これを読み解いて価値に気づく奴が増えないとまずダメだけどな
即レスしたから、もしやと思って、けしかけたけど
シャドウィング君にはちょっと早かったようだ

ちょっと本格的開発に入る前に、もう一回だけ人目につく場所にソース晒しておきたかっただけだから
はい、それでは。
772デフォルトの名無しさん:2011/05/17(火) 18:56:17.02
なんだただの中二か
773デフォルトの名無しさん:2011/05/17(火) 18:59:41.70
shadow-ingであってshado-wingではないのだが大丈夫だろうか
それだけが気がかりだ
774デフォルトの名無しさん:2011/05/17(火) 19:50:13.94
>>763
参考にさせていただきます

>>765
ありがとうございます
他のサイトは問題ないので規制させられたようです
ブラウザからはアクセスできるので代替策を考えてみたいと思います
775デフォルトの名無しさん:2011/05/17(火) 21:32:04.46
荒らすわけじゃないんだけどrubyって本当に初心者向きなの?
マニュアルドキュメントも日本産なのに微妙だし
if分のthen(省略可能だったらはじめからつけないでもらいたい)や
elseifの微妙な独自色とか意味のない部分にこだわりすぎてて使いにくい
c言語の基本から学んだ後にこっちにきたんだけどほかにもいろいろ不満はあるけど
致命的なのは開発環境が悪い
irbの使い勝手の悪さはいちいち面倒でチマチマ入力もウンザリ
インタプリタのメリットってないじゃん
これだったら素直にperlとかpythonやったほうがいいね
776デフォルトの名無しさん:2011/05/17(火) 21:35:27.50
誰が初心者向けなんて言ってたの?
777デフォルトの名無しさん:2011/05/17(火) 21:44:38.35
>>775
PerlもelsifでPythonにいたってはelif

ちなみにirbは開発環境っていうかあくまで
簡単な式を試すのに補佐的に使うものだよ
とりあえずはエディタ+シェル(コマンドプロンプト)+irbで
ウインドウ3つ開いて開発するのが簡単でおすすめ

それでもダメならPerlでもPythonでもお好きなのをどうぞ
778デフォルトの名無しさん:2011/05/17(火) 21:58:09.60
elsifがRubyオリジナルだと誤解される時代なのか。
779デフォルトの名無しさん:2011/05/17(火) 22:13:13.66
>>775
then は省略可能ではない
$ cat a.rb
if 1 puts "yes!"
end

$ ruby a.rb
a.rb:1: syntax error, unexpected tIDENTIFIER, expecting kTHEN or ':' or '\n' or ';'
if 1 puts "yes!"
     ^

「改行または行終端記号 ; で代替可能」なだけだ
then を省略した場合は改行に相当するものを絶対に書かなければならない
780デフォルトの名無しさん:2011/05/17(火) 22:19:12.32
>>706
jewelerというgem使っとけ
gemの雛形を作ってくれるからgemを作るなら楽だぞ
jewelerでgemを公開できるならgemの使い方やライブラリのファイルの置き方や構造を学べるし、
むしろ初心者を脱するためにもちょっとしたgemを作るのは有用じゃね
781デフォルトの名無しさん:2011/05/17(火) 22:20:01.27
Basic原理主義者→Ruby
C原理主義者→PHP
Java原理主義者→Python
囲い厨→Perl
782デフォルトの名無しさん:2011/05/17(火) 22:25:01.02
irb は Lisp なんかのインタラクションモード(を参考にした何か)が念頭にあるんだと思う
$ clisp --quiet
[1]> (car '(1 2))
1
[2]>
783デフォルトの名無しさん:2011/05/17(火) 22:45:53.80
>>775
現時点で入りづらいの事実だろうと思う。ただし開発したい環境にもよる。

以下私見
・人手が足りず入門者向けの記事やドキュメントが少ないのは仕方がない
・英語のドキュメントやソースを読むクソをつけるのがいいと思う
・Ruby 1.9を勧めたいところにRuby 1.8のものばかり検索に引っかかるのは、過去1年や3ヶ月など期間指定で回避できる
 これはRubyだけの問題じゃないが
・きみの開発したいプラットフォームで開発環境が悪いと思ったのなら、プラットフォームの選定自体が悪いかもしれない
 世の中の8割以上のクライアントPCで動いているOSつまりWindowsは開発環境や動作環境も含めてRuby向けではない
 何故ならRubyの開発者、ライブラリの開発者の多くがその9割のOSを使っていない
・Pythonは逆に積極的にWindowsをサポートしているようだが方針と人手が・・・
784デフォルトの名無しさん:2011/05/17(火) 22:50:29.82
PHP最強伝説
785デフォルトの名無しさん:2011/05/17(火) 22:51:48.48
>>779
then 書いてる人は意外と多いな
786デフォルトの名無しさん:2011/05/17(火) 22:58:07.80
>>785
条件終了の意図を明示できるのがいいらしい
書き忘れはありませんという宣言

まあ、みんなが書いてなかったら自分も書かない
既存のコードにきちんと書いてあったら自分も書くという程度
787デフォルトの名無しさん:2011/05/17(火) 23:21:57.92
injectを理解しようと思って以下のコードを
書いてみたのですが、何が悪いのかよく分かりませんでした。
何故エラーになるのか分かりませんか。

p (1..5).inject(0){|s, i|
p i
p s
s += i
p s #ここで悪さをしているらしい??
}

=>undefined method `+' for nil:NilClass (NoMethodError)
(ruby -v => 1.8.7p330)
788デフォルトの名無しさん:2011/05/17(火) 23:31:49.11
injectが次のループのsに使うのは、ブロック最後の値。
つまりそのコードだとpの返値であるnilだ。
789デフォルトの名無しさん:2011/05/17(火) 23:39:01.64
>>787
最後の p s のあとに
s
だけの行を入れて実行したらいいんじゃないかな
いまのままだと p s の戻り値(= nil)がブロックの戻り値となっている。
790デフォルトの名無しさん:2011/05/17(火) 23:40:50.44
なるほど。
p sの後に、再度sを入れることで解決しました。
injectは便利そうなのですが、配列を絡めると
まだよく理解できてので、もう少し研究してみます。
ありがとうございました。

ちなみに、1.9.2にVerをあげてみたら、
動作したのは、何か仕様が変わったのかな?
791デフォルトの名無しさん:2011/05/17(火) 23:46:09.99
ありゃ1.9ではpが引数自身を返すようになったのか??

これでgolferの1.9移行がまた遠のいたのかな。(p1バイトでnilを表現できて重宝していた)
792デフォルトの名無しさん:2011/05/17(火) 23:49:41.19
(p1バイトでnilを表現できて重宝していた)
どうでもいいなw
そんなにゴルフが好きなら目的の処理を0バイトで表現できるプログラミング言語作ればいいじゃない。
793791:2011/05/17(火) 23:54:54.83
golferの間では、だよ。
おれはちゃう。
794デフォルトの名無しさん:2011/05/17(火) 23:57:41.47
?d が整数100にならない以上、golferが来ることはないと思う。
795デフォルトの名無しさん:2011/05/17(火) 23:58:39.83
>>791
今手元の1.9.2で試したら
引数が1つならその引数を、複数なら引数リストを配列として返すようになってるね
796デフォルトの名無しさん:2011/05/18(水) 00:00:28.73
injectでは確かに最後にデバッグ用のpを置いて、
動かなくてイラッとすることがよくあったが、そういう理由なんだろうか。
まさかな。
797デフォルトの名無しさん:2011/05/18(水) 00:07:42.02
injectだけでなく、ブロックの中でp()デバッグすると割とある話だね
798デフォルトの名無しさん:2011/05/18(水) 00:22:43.30
使えるIDEがなかなかでないのは、
Rubyを使い倒してるような方々が大抵エディタで済ませちゃってるのが大きい理由なのかな。

まともに動くIDEってRadrailsぐらい? あれも重さに見合った機能はない気がするけど。
WindowsならRDEもあるけどバグバグだしなあ。

やっぱりRubyはエディタ+端末が手軽だね。
799デフォルトの名無しさん:2011/05/18(水) 00:32:03.38
>>798
というか端末で使うのが一番Rubyらしい用途って感じがする
Rubyは組み込みメソッドからしてコマンドラインの補助にピッタリだし
800デフォルトの名無しさん:2011/05/18(水) 00:43:36.60
>>798
・Rubyはかなり極端な動的型付け言語なので
入力補完の類はあまり当てにならない
・ビジュアルデバッガはあれば嬉しいが、伝統的なprintfデバッグでも何とかなってしまう

仮にIDEを開発したとして、よほど頑張らないと
emacs/viみたいに営々と改良されてきた汎用エディタに対して優位性がないのだと思う
801デフォルトの名無しさん:2011/05/18(水) 01:03:37.18
やっぱりEclipse+RDTだよね
802デフォルトの名無しさん:2011/05/18(水) 01:34:16.31
>かなり極端な動的型付け言語なので入力補完の類はあまり当てにならない
ってのは単なる甘えなのでは。
803デフォルトの名無しさん:2011/05/18(水) 01:36:05.07
>>802
だよね

def foo(string_or_regex)
  case string_or_regex
  when String
    string_or_regex.<ここではStringのインスタンスメソッドを補完>

これぐらいできないとね
804デフォルトの名無しさん:2011/05/18(水) 01:42:19.47
スクリプト言語は甘え
805デフォルトの名無しさん:2011/05/18(水) 01:42:56.56
どうでもいいけどRubyのような
多様性の高い言語を初心者向けとかありえない
806デフォルトの名無しさん:2011/05/18(水) 01:48:47.91
>>803
dry runしてstring_or_regex.methods呼べば良いじゃまいか。
甘え。
807デフォルトの名無しさん:2011/05/18(水) 01:55:09.25
>>806
ごめんなさい then then 分かりません
dry runってなんぞ?
808デフォルトの名無しさん:2011/05/18(水) 05:35:02.66
>>729
標準エラーに出力されていました…。
win32-open3 で取り出すことができました。
ありがとうございます。
809デフォルトの名無しさん:2011/05/18(水) 07:41:58.87
NetBeans+プラグインはどうなん?
使い物にならん?
810デフォルトの名無しさん:2011/05/18(水) 08:53:12.18
Rubyは書くのはお手軽だけど習得はそんなお手軽でもない。
811デフォルトの名無しさん:2011/05/18(水) 10:33:50.96
Radrails()
RubyMineや3rdrails()も忘れないでください
俺はaptanaとNetBeans(公式サポートがなくなる6.9まで)使っていたがはっきりいってC#やJavaのような
入力補完やデバッグ、リファクタリングは期待できんよ
それでも、スニペットやgrepのような機能はありWindowsのフリーソフトにあるようなちょっと弄ったテキストエディタのようには使えるので、
端末がどうしても嫌で嫌で仕方がなく親の敵で憎くて仕方がないと思っている人にはおすすめできる

PythonやphpやJavaScriptも動的言語の一種だと思うがこれらのIDEを使っているエキスパートで何使っているのか気になってるわ
phpとJavaScriptはaptanaとNetBeansで試したが、補完はruby並で期待できなかったw
812デフォルトの名無しさん:2011/05/18(水) 10:38:35.14
それと動的言語はともかく・・・
多用されるRubyの名前付き引数のように使うHashリテラルや
JavaScriptのオブジェクトリテラルも補完効かなくて面倒だったわ
そもそもライブラリごとのサポートやドキュメントとの連携がないと、文脈にあったHashリテラルのキーの補完なんて効くわけないんだが
IDE脳だとつい期待してしまうんだよね
813デフォルトの名無しさん:2011/05/18(水) 10:45:45.55
scanとmatchの違いってなんですか?
どっちも同じですね?
814デフォルトの名無しさん:2011/05/18(水) 10:48:36.55
>>791
gorubyの仕様をいじればいいんじゃね?w
815デフォルトの名無しさん:2011/05/18(水) 10:50:14.83
ちいーっす先輩方
聞きたいことがあります

[1,2,3,4,5].map{|i| i * 100 + 10 }

このmapのiみたいな引数わざわざ書くのがアホらしくないっスか?
こうパーッと景気よく

[1,2,3,4,5].map{ i * 100 + 10 }

こんな風に省略してかけないんすか
instance_evalか何かつかってoreore_mapを作ってみようとしたんスが
iがundefined local variable or methodになっちまいます

to_sなら[1,2,3,4,5].map(&:to_s)でいいのはこのスレで習ったんすけどね
816デフォルトの名無しさん:2011/05/18(水) 11:06:10.15
暗黙の引数があったらPerlみたくできるなと思ったことはないでもない

[1,2,3,4,5].map{ $#1*10} #=> [10,20,30,40,50]
open('test.txt', 'wb'){ $#1.puts(s)}

個人的にはこっちの方が「なにがなんだかわからなくて」めんどくさいが

マッチの $1 や $2 が「なにがなんだかわからない」のと問題が同じ
結局変数名をつけてしまうなら、ブロック引数で名前つけたほうが見やすい
817デフォルトの名無しさん:2011/05/18(水) 11:06:52.16
>>815
こういうケースを考えよう

i = 108
[1,2,3,4,5].map{ i * 100 + 10 }

さて、ブロック内の”i”とは何かというと、前行の i(=108) になる
つまり単に i と書くだけでは、ブロックの引数と外側で定義された変数が区別できない
だからわざわざ縦棒で区切って、ブロックの引数だとはっきりさせる
818デフォルトの名無しさん:2011/05/18(水) 11:14:47.46
>>813
scan は文字列が入った配列の配列が返る(ブロックがある場合はマッチした文字列が毎回渡る)
match は MatchData オブジェクトが返る
おもいっきり別物

…まあ、
hit = str.scan(/(re1)(re2)/).flatten
とか
hit = str.match(/(re1)(re2)/)
とかやって hit[0] と hit[1] を使用するだけならどっちも変わらないので好きなほう使え
819デフォルトの名無しさん:2011/05/18(水) 11:15:51.42
t = "abc"
m = t.match(/a/)

これでマッチしなかった場合の条件判断がわかりません
if "" != m then
print "match"
else
print "none"
end
だとマッチしてもしなくても同じ結果になってしまいました
820デフォルトの名無しさん:2011/05/18(水) 11:32:06.25
>>819
それはきちんと String#match のマニュアル読め
成功の時と失敗の時に何が返ってくるかくらいは、どの解説でも書いてあるはず

if m then
puts "matched:", m.inspect
else
puts "falied!"
end
821デフォルトの名無しさん:2011/05/18(水) 11:40:47.01
>>815
むしろそのoreore_mapはどんな処理なんだ
余程のことが無い限りyieldで事足りると思うのだが
822デフォルトの名無しさん:2011/05/18(水) 12:10:33.31
>>819 が何を思って
"" != m
なんて謎な記述をしたのか気になる。
どうして空文字列なのか、どうして!=比較なのか……。
823デフォルトの名無しさん:2011/05/18(水) 12:18:28.79
>>822
文字列処理なんだから、失敗したら空文字列が返ってくるのかもしれないじゃないか

まあ、実際は>>820の言うようにメソッド作った人がどう作ったか依存だから、メソッドの解説読むしかないんだけど
824デフォルトの名無しさん:2011/05/18(水) 12:34:56.45
matchならif m thenで返ってくるけどね
scan使うなら同じように書けないよ
825デフォルトの名無しさん:2011/05/18(水) 12:55:03.89
Dirの引数に**/を与えてフォルダの再帰表現になるみたいですが、
正規表現的にどうしてフォルダ再帰マッチになるのかいまいちよくわかりません。
予約語みたいなものなのでしょうか?
826デフォルトの名無しさん:2011/05/18(水) 13:04:12.23
>>825
Dir.glob の文字列引数はヴェルタースオリジナル
なぜなら世間様一般のグロブ表現は正規表現と相容れない特別な存在だからです
827デフォルトの名無しさん:2011/05/18(水) 13:44:21.18
ここの'*'は正規表現じゃなくて、シェルのワイルドカード
**/* は zshでも使われてたからunix文化じゃないかな?
828デフォルトの名無しさん:2011/05/18(水) 13:51:16.06
>>824
何故同じに書けないのですか?
829デフォルトの名無しさん:2011/05/18(水) 13:51:24.75
元祖はちょっとわからんなぁ
XMLPathにもあるし
830uy:2011/05/18(水) 13:52:06.87
>>775
Rubyは初心者にも表面上は扱えるけど、初心者向きじゃない
んでマニュアル描いてる人間って頭わいてる奴多いから
サンプルコードがカスなのは仕方がないよ

rubyは、もし最初に手をつけて覚えられないなら
C++やった後でrubyに来たほうがいい

rubyも「いい言語」なんじゃなく「マシな言語」ってだけだから
あまり期待はすんな
831デフォルトの名無しさん:2011/05/18(水) 14:04:56.76
初心者向けならPythonとどっちがいいですか?
832デフォルトの名無しさん:2011/05/18(水) 14:18:24.42
個人的にはRubyのが日本語で色々調べられて楽だったけど
まあ言語としてはPythonのが初心者向けなんじゃないかな
833デフォルトの名無しさん:2011/05/18(水) 14:26:57.54
せっかくRubyインストールしたのに
Pythonすれ言ってきます
834デフォルトの名無しさん:2011/05/18(水) 15:03:00.80
>>828
フォークでスープを掬って飲むことはできないからだよ。
835uy:2011/05/18(水) 15:19:57.52
初心者はC++10年やってからrubyでおk
836デフォルトの名無しさん:2011/05/18(水) 15:22:55.38
いろんな言語に挫折した俺でも使えるくらいRubyは簡単なのに
837uy:2011/05/18(水) 15:30:18.90
使えるやつは、すぐ使えるだろうけどね

世の中には、論外的にコンピュータが苦手な子もいる
そういう子はpcの前にくると思考がとろくなる
そういう子にとってはCやPHPとかのほうが、おそらくはrubyよりも使いやすい
だから俺はPHPは良言語と思っています
838デフォルトの名無しさん:2011/05/18(水) 15:34:01.54
>>828
まあ、コンセプトが違うものだからとしか
そもそも String#scan はイテレータ志向で、
ブロックなしのときに配列の配列が返るのはオマケみたいなもんだし

String#scan の戻り値を flatten するくらいなら
String#match 使って MatchData#to_a したほうがたぶんタイプ数も短くて済む
839デフォルトの名無しさん:2011/05/18(水) 15:42:50.30
>>831
何を作る初心者か140文字以内で述べよ
いやわりと本気で

Windows上で動作するプログラムなら今のところC#しかない(いや、他のCでもJavaでもいいけど、確実に道のり遠いよ)
レンタルサーバ上で動作する「CGIみたいなやつ」を作ってみたいなら、とりあえずPHPが無難
(ほぼ確実にインストールされてて、動作サポートに間違いがないから)
新卒就職でアピールしたいならJavaやっとけ(たぶんそれ以上何も聞かれないから)
スマートフォンのアプリで何かやりたいならObjective-Cになる
ブラウザ上でなんかグリグリ動くゲームっぽいフラッシュな何かを作りたいなら、そりゃFlashしかない
840デフォルトの名無しさん:2011/05/18(水) 16:59:05.66
プログラミングまでの道のりは遠い
言語仕様を覚えた後はライブラリを覚えなきゃいけない
しかもライブラリの大半は英語
プログラミングが日本に根付かない理由はこういう些細なことではないだろうか
大半の人間はそこまでしてプログラミングしたいと思わないのかもしれない
841デフォルトの名無しさん:2011/05/18(水) 17:13:21.22
やりたいことがある→ググってそれができるフリーソフトなりスクリプトを探す
で、99%解決しちゃうからな。
カネになるとか、それ自体趣味の変態でないかぎり、プログラム覚えようなんてするわけがない。
842デフォルトの名無しさん:2011/05/18(水) 17:24:55.09
テキストにあれこれ定型処理をしたくなったのがRubyはじめた理由だったっけなあ。
柔軟なテキスト処理はスクリプト言語の十八番だよね。
843デフォルトの名無しさん:2011/05/18(水) 17:27:19.93
そういう10行程度のプログラムだったら正直Perlで何も問題ないというか、
特殊変数が充実している分便利だったりしない?
844uy:2011/05/18(水) 18:32:55.86
>>841
PGの半分くらいはゲーム作りが目的じゃね

んでそっから方向性かえるやつもいるし、
ゲーム作りがメインなのにソフトも作れるようになってる奴も多い


ところでaifがほしくなったんだけど、ライブラリないの?
一応elseまでは実装した自分実装のはあるけどunlessやelsifまで作るのたるいんだよね
845uy:2011/05/18(水) 18:34:41.75
どうせならelsunlessもほしい
846デフォルトの名無しさん:2011/05/18(水) 18:41:32.75
とりあえずニコ生のsweetwaterさんの放送見ると勉強になるよ
847デフォルトの名無しさん:2011/05/18(水) 19:49:52.94
tukaene-sureddodana
848デフォルトの名無しさん:2011/05/18(水) 20:32:38.86
>>840
「日常」にめっちゃ役立って解説が全部日本語で日本中の一般的な「ぱそこん」で実行可能なプログラム言語がある

エクセルのVBA

だから、たぶん、説明文が日本語かどうかというのはそれほど多勢には影響しない
849デフォルトの名無しさん:2011/05/18(水) 21:08:02.03
最近はAdobe AIRでWindowsクライアントアプリという選択肢もあるよ
ActionScriptも他の言語のイイトコどりでC#に似た覚えやすさあるし
850デフォルトの名無しさん:2011/05/18(水) 22:58:14.85
RGSSをいじくるためにRubyを勉強し始めたはずがゲームそっちのけでRubyにはまりこんでしまた
851825:2011/05/19(木) 09:37:43.50
>>826-827
ありがとうございます。
852デフォルトの名無しさん:2011/05/19(木) 13:26:00.03
PythonとRubyってどちらがlinuxでつかわれてるもんですか?
853デフォルトの名無しさん:2011/05/19(木) 14:24:33.12
>>852
その2つで比較するならPython

というかRubyはシステムワイドにインストールしてなにかするというのはあまりメインじゃない
自分でインストールして、自分のために使う
「ホームディレクトリに複数バージョンの実行環境をインストールして(コマンド一発で)使い分け(または一括実行)」
なんていう逆ベクトルに面倒な変態行為がポピュラーなスクリプト言語がRuby以外にどれだけあるというのか
854デフォルトの名無しさん:2011/05/19(木) 15:08:00.20
トップページに「A programmer's best friend」って書くぐらいだからな
その言語で何かを作る、作られた何かをユーザが使う…ではなく
プログラマが使う補助ツールって感じのスタンスなんだろう
855デフォルトの名無しさん:2011/05/19(木) 15:26:08.64
Rubyなんてやらなければよかった
856デフォルトの名無しさん:2011/05/19(木) 15:52:18.95
個人的にはRubyを学んで損したと思うことはない
プログラミングやらコンピュータやらいんたーねっとやらの知識の補強になっている

まあ、たとえば、

 ・ 学校に行かず3年間Rubyをやった
 ・ 卒業後家で2年間ずっとRubyをやっている
 ・ どんくさい入門と間違った解説で半年学んだ
 ・ Rubyを勉強しながら蕎麦屋を始めた

あたりだと、Rubyであることとのシナジー効果がまったくないので大損で無駄だと思う
っていうか早々に見切りつけろ学校行け就職しろ本買え寄り道するな
857uy:2011/05/19(木) 15:54:47.43
class moduleがこんだけ作りこまれてる言語が補助ツールってカテゴリだったらJAVAとか涙目じゃんwwwwwwwww
実行速度がRuby程度で良いアプリはRubyで作っても良いんだろうけど
まだ完全にJAVAとかを捨てられる程にRubyが良言語になっていないから
移行してる会社が少ない

問題は、やはりオーバーライドとクラス変数の継承と、変数宣言
Rubyのコーディング作法が、定まっていないから採用しにくい
def a n
 @test ||= function
 @test[n]
end
こんなコードが容易に書けちゃうから、かいてる奴も多いだろ

自由度が高いから、PG全員のスキルがある程度ないとやっていけねえ
特に、日本じゃRubyをちゃんと扱える技術者を頭数揃えるのが厳しい問題
言語構文知ってるだけで使えます(キリッ)とか言っちゃう奴も多いため、判断が難しい
858デフォルトの名無しさん:2011/05/19(木) 16:03:13.28
Rubyがもっとwebに強ければよかった
859デフォルトの名無しさん:2011/05/19(木) 16:09:21.76
本当に技術的話題にはついていけないんだな可哀想に
860デフォルトの名無しさん:2011/05/19(木) 16:14:15.07
>>859
自転車置場以前の話しか出来てないからね
なんのためにム板のあちこちのスレに書き込んでるのかすごく不思議

rake test をセーフレベル指定で実行する方法はある?
rake -E"\$SAFE=1" test って書いたけどなんか微妙に test 側には反映されてない雰囲気
861デフォルトの名無しさん:2011/05/19(木) 17:07:51.95
>>859>>860は何の話をしてるのか分かりません
862デフォルトの名無しさん:2011/05/19(木) 17:28:58.80
そもそも学校でrubyを教えた所で無駄な気がする。
863デフォルトの名無しさん:2011/05/19(木) 17:30:44.19
どこから学校でRubyという話がわいてきたのかね?
864デフォルトの名無しさん:2011/05/19(木) 17:39:13.43
まともな学校じゃやらんだろ
865デフォルトの名無しさん:2011/05/19(木) 17:49:54.28
>>861
直前にあぼん1個あるのでたぶんこれだ
ttp://www.google.com/search?num=30&hl=ja&q=uy+tech+site%3Ahibari.2ch.net
本物も偽物も完全エリミネイト
866デフォルトの名無しさん:2011/05/19(木) 19:46:42.15
話が絡んでなくてさっぱりわからんなw
867デフォルトの名無しさん:2011/05/19(木) 20:14:41.16
文字列を指定カラムで分割する分かりやすい方法ない?
"20110519" ==> ["2011","05","19"]
みたいな感じで。
データ長700文字位を200個位に分割
868デフォルトの名無しさん:2011/05/19(木) 20:22:01.54
バイトでよければunpackじゃないかな。
869デフォルトの名無しさん:2011/05/19(木) 20:26:43.62
irb> s = "文字列を指定カラムで分割する分かりやすい方法ない?"
irb> p s.match(/#{[4,6,4,6,5].map{|i| "(.{#{i}})"}.join('')}/).to_a[1..-1]
["文字列を", "指定カラムで", "分割する", "分かりやすい", "方法ない?"]

わかりやすくはないな…
870デフォルトの名無しさん:2011/05/19(木) 20:28:05.25
unpackだと数値になってしまうね…
すなおに str[nth, length] で切り出せばいいか。
あとはscanとか。
871デフォルトの名無しさん:2011/05/19(木) 20:30:41.67
文字列をスライスしていけばいいんじゃないの?
872デフォルトの名無しさん:2011/05/19(木) 20:36:44.29
「わかりやすい」のはずらずらと
s[k1...k2]
s[k2...k3]
:
s[kn..-1]
を並べることだと思う。(最後だけ ..)

ループ化したりなんだりはその後必要に応じて。

873デフォルトの名無しさん:2011/05/19(木) 20:48:02.45
>>868
ASCIIならunpackで"a4a2a2"とか書けるみたい。
>>869
理解できません。
>>870
scan(/(....)(..)(..)/).flattenは分割数が多いと分かりにくい。
str[nth, length] で切り出せるのは知ってますが
文字列操作に長けたRubyならもっと分かりやすくて簡単な方法が用意されてるはずと思って質問しました。
>>871
スライスって?
>>872
やっぱそれしかないですか。
874デフォルトの名無しさん:2011/05/19(木) 20:52:29.98
初心者は何ができないかを知らず、方法を求めて無為に時間を費やす
875デフォルトの名無しさん:2011/05/19(木) 20:53:11.47
keta = [0, 4, 6]
s = "20110519"
(keta + [0]).each_cons(2).map {|x,y| s[x..(y-1)]}

[0] が不格好だなー。

876デフォルトの名無しさん:2011/05/19(木) 20:57:30.66
>>869が文字エンコーディングさえ揃ってれば一発だと思うのだが、何か不都合でもあるんだろうか
877デフォルトの名無しさん:2011/05/19(木) 21:09:52.15
簡潔さは求めていないということでは?
878デフォルトの名無しさん:2011/05/19(木) 21:10:19.81
>>876
>>869
理解できません。
879デフォルトの名無しさん:2011/05/19(木) 21:10:23.53
[nth, length]や[n..m]やString#sliceで配列で指定した文字数ずつで分割していくメソッドなんて
2,3行で書けそうだし自分で作ったら?

文字列操作に長けてるってのは文字列を操作するさまざまなメソッドを簡単に書けるってだけで、
最初からなんでもメソッドが用意されてるって意味じゃないよ。
880デフォルトの名無しさん:2011/05/19(木) 21:17:05.25
カッコばっかで嫌がらせ並に読みにくいことを否定はしねえw

irb> p s.match(Regexp.new [4,6,4,6,5].map{|i| '(.{' + i.to_s + '})' }.join).captures

でどう
っていうか、/(.{4})(.{6})(.{4})(.{6})(.{5})/ みたいに「わかりにくい」正規表現を自動で生成する手もあるというだけのお話
なんで定型作業をちまちま手で書かなきゃならないのよ
プログラムをプログラムで生成することを厭ってはいけない
881デフォルトの名無しさん:2011/05/19(木) 21:19:55.94
>>862-864
てけとうに検索してみたら東大、つくば、東京情報大、中京、京都女子大、高知工科
島根大、阪大、千葉大、Berkeley、Texas Techにはコースがあるらしい

>>867
ascii以外の文字もアリなん?
882デフォルトの名無しさん:2011/05/19(木) 21:22:58.95
s = "fjoifjdsfioasdjfiojsadio"
cnt = 0
p [4,6,4,6,5].inject([]){|xs, i| xs << s.slice(cnt, i); cnt += i; xs}
883デフォルトの名無しさん:2011/05/19(木) 21:25:33.41
なんで初心者は理解できもしないのに無理にスマートに書こうとするんだろうね。
泥臭くコード書いちゃえよ。

def ore_split(str, ary)
  n = 0
  ary.collect{|i| n += i; str[n-i...n] }
end
884デフォルトの名無しさん:2011/05/19(木) 21:30:23.01
>>869
>>880
matchのリファレンス読んできました。やってることは理解しました。
>>879
意図は、自分で作れるが予め用意されてるのではないかということで
885デフォルトの名無しさん:2011/05/19(木) 21:33:20.56
皆さんありがとうございました。
886デフォルトの名無しさん:2011/05/19(木) 21:35:40.35
処理を自分で書く
→ でもこれRubyに最初からあったようななかったような
→ 調べる
→ やっぱりない or あった!Rubyは豪勢すなぁ

ということがよくあるので質問者の気持ちはよくわかる
887デフォルトの名無しさん:2011/05/19(木) 21:38:03.17
自作って初心者から見て「カッコ悪い」んだよね
ほら見てよ5行もある


んでしばらくしてワンライナに嵌って可読性落として、
結局教科書みたいな行数と空白と呼び出しカッコの多いスクリプトに戻る
888デフォルトの名無しさん:2011/05/19(木) 21:41:18.26
元の文字列を破壊していいなら

ary.collect{|n| str.slice!(0...n) }

でいいんじゃね? 破壊したくなければdupしとけばいいし。
889デフォルトの名無しさん:2011/05/19(木) 21:48:07.61
ハッシュのかぶった時の処理をブロックで指定するmergeを自分で必死こいて実装して
ものすごい低速ながらがんばっていろいろ処理させた後にmergeに普通にブロック渡せるの知ってしかもそれが
めちゃくちゃ速かったときは泣きそうになった。
890デフォルトの名無しさん:2011/05/19(木) 22:15:50.25
だよな。
Hashってなんだよw
普通Mapだろwワロチw
891デフォルトの名無しさん:2011/05/19(木) 22:17:50.26
公式ドキュメントを読む限りJavaの世界でMapっていうと「連想配列なデータ入れ」を指すのか。
地図に対してはマップという言葉を使わずにどう定義するつもりなのか。
いちいちオレオレ辞書を定義しないで欲しい。
892デフォルトの名無しさん:2011/05/19(木) 22:21:27.29
連想配列をHashと呼ぶのも結構アレだけどね。
893デフォルトの名無しさん:2011/05/19(木) 22:26:25.41
機能の名前を付けるべきなのに、実装の詳細を名前にしているからな。
二流のプログラマーって命名のセンスがないよね。
894デフォルトの名無しさん:2011/05/19(木) 22:27:42.73
Perlの凄腕はかーの皆さんを敵に回すのはやめてくだしあ
895デフォルトの名無しさん:2011/05/19(木) 22:28:29.42
class Map < Hash; end

さ、帰った帰った。
896デフォルトの名無しさん:2011/05/19(木) 22:29:45.99
>>891
に呼応して
>>892
を書いただけのつもりなのに、なぜか素晴らしい命名センスを持った一流プログラマによるまつもと叩きに利用されたでござる。
897デフォルトの名無しさん:2011/05/19(木) 22:31:01.19
一流プログラマはどんなことでも自分の主張に利用するのだ。
898デフォルトの名無しさん:2011/05/19(木) 22:36:04.10
旧リファレンスマニュアルの用語集 Hash
Rubyにおけるキーから値へのマッピングを表すデータ構造。 連想配列とか 辞書とも呼ばれる。ハッシュがハッシュと呼ばれるのはその実現に「ハッシュ表」と呼ばれるアルゴリズムが使われているからである。

るりまのHashクラスの冒頭
ハッシュテーブル(連想配列とも呼ぶ)のクラス。ハッシュは任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができます。
899デフォルトの名無しさん:2011/05/19(木) 22:39:42.55
あれは連想配列の方がいいよ。
別にハッシュを使って実装しなくてもいいわけだし。
900デフォルトの名無しさん:2011/05/19(木) 22:42:14.97
それを言い出したら連想配列のほうが謎訳のような、わかりやすいけどさ

>>891
mapは「位置づける」とかの意味もあるし
数学とかデータ構造の用語として英語では普通に使われてるよ↓こんなんとか
ttp://en.wikipedia.org/wiki/Multimap

perlの連想配列はハッシュテーブル使ってるからハッシュなんじゃね
901デフォルトの名無しさん:2011/05/19(木) 22:43:25.23
ハッシュってーとハッシュ値のことをハッシュと呼ぶ場面がけっこうあるからなあ。。。
902デフォルトの名無しさん:2011/05/19(木) 22:49:20.09
連想配列だと "Associative array" てタイプすんのが面倒だから
米人がhashて呼称してんじゃね、とかつまらないオチをつけてみる
903デフォルトの名無しさん:2011/05/19(木) 22:52:38.77
実際そんな感じだったかと
associative arrayが長くてピリッとしないから
じゃあhashにしとくかとPerlのみなさん

でもってRubyはそれを踏襲したと
904デフォルトの名無しさん:2011/05/19(木) 23:03:20.01
Rubyは色んなところでPerlを意識してるからね
Perlが連想配列をハッシュと呼ぶから、それを意識したRubyもハッシュと呼ぶことにした、ってことだろう
905デフォルトの名無しさん:2011/05/19(木) 23:29:46.88
とりあえず気になることがあったらルーツはPerlではないか、と調べてみるべき。
昔はPerlが基礎教養だったから調べる必要も主張する必要もなかったんだけど。
906デフォルトの名無しさん:2011/05/20(金) 00:20:55.13
perlの焼き直しと言われる所以だね。

rubyならスマートに描けると思ってたら、そうでもないことを知って落胆する入門者も多いと思うよw
自称一流を自負するならスマートに書いてあげればいいのにwww
907デフォルトの名無しさん:2011/05/20(金) 00:26:33.80
なんのこっちゃ
908デフォルトの名無しさん:2011/05/20(金) 00:44:44.29
>>905
いろんな言語からの輸入があるから、単純に Perl とも言い切れない
gsub とか一部のメソッド名は Perl どころか awk 発祥らしい……
例外処理の rescue/ensure はたぶん Eiffel からだし、
クラスの super の挙動は Lisp 由来らしいし、Ruby の細部をつつくと Matz の趣味が詰まってる
909デフォルトの名無しさん:2011/05/20(金) 00:52:45.88
なんでreplaceじゃなくてgsubなんだろう
910デフォルトの名無しさん:2011/05/20(金) 01:07:28.63
だからawkなんじゃねーの?
置換といえばsedもawkもperlもreplaceじゃなくてsubstituteだ。
911デフォルトの名無しさん:2011/05/20(金) 02:07:31.51
全角コロン(:)を含むUTF-16のファイルを読み込むと
どうやらうまく行を取り出せません。
1.9.2だとうまく動いたのでもしかしてバグ?
1.8系で回避する方法はありますか?

#!ruby -Ks
require 'kconv'

f = open("a.txt")
f.each{|l|
puts Kconv.kconv(l.chomp, Kconv::SJIS, Kconv::UTF16)
}
912デフォルトの名無しさん:2011/05/20(金) 02:30:55.25
>>839
せっかくRubyスレに来ている初心者に現実を見せるのはやめませんか・・・

>>856
おいやめろ
913デフォルトの名無しさん:2011/05/20(金) 03:29:53.19
RubyはなにかちょっとしたCLIツールを作るには十分すぎるほど役立つが、
それ以外の目的については、Railsを除けば「他の言語の方が効率いいけどRubyでやりたいからRubyでやる」になっちゃうよね。
914デフォルトの名無しさん:2011/05/20(金) 03:31:06.43
現場ではやっぱりPHPかJAVAあたりになっちゃう。
人が集まらないもん。
915デフォルトの名無しさん:2011/05/20(金) 03:39:47.07
>>913
Rubyのほうが効率いいから(効率がいいうちは)Rubyで作るんだよ
ソフトウェアってのは最初からキラキラした箱に入った状態で畑から収穫されるわけじゃない

まあ、畑から産地直送するしか許されてないのなら、最初から化粧箱ごと作らないといけないがw
916デフォルトの名無しさん:2011/05/20(金) 03:57:50.11
>>911
Windowsならbinmodeじゃないとアウトだけど、そういう話じゃなさそうね
917uy:2011/05/20(金) 08:13:09.23
>>908
Rubyは散々Lisp方言っていわれて来ただろwwwwwwwwww

初心者の理解できない単語を使うのは嫌いだけどwwwwwwww
そこら辺の動作を理解したいならアナフォリックマクロでググレカスwwwwwwwwwwwwwwwwwwwww

>>914
だね、日本じゃ無理
言語を、「仕事で必要にならなければ覚えない」っつうアホが日本には多いから
仕事がないと技術者が集まらないし、 技術者がいないと仕事が出来ない
どっか力のある会社が率先してRuby使っていくようにならないと無理


JAVAみたいに、C言語が出来ればある程度扱える言語とは違うからなRuby
Lispっつうか、ある程度のスキルがないと無理

918デフォルトの名無しさん:2011/05/20(金) 08:40:15.56
「仕事で必要にならなければ覚えない」人たちがRubyを使い出す

30年後COBOL化する

              〜 Fin 〜

しまn
919デフォルトの名無しさん:2011/05/20(金) 08:40:41.87
しまった初心者スレだった
流してくれや
920デフォルトの名無しさん:2011/05/20(金) 09:25:23.09
RubyがLisp方言とかただのネタなのに真に受けちゃったんだ……。
921デフォルトの名無しさん:2011/05/20(金) 09:36:58.44
>>911はIO#eachが何を頼りにしてるかなんだと思う
$/ = Kconv.kconv("\r\n", Kconv::UTF16) でどう
922デフォルトの名無しさん:2011/05/20(金) 10:39:12.21
Rubyじたいネタだからな。
まじで使ってるとかw
923デフォルトの名無しさん:2011/05/20(金) 10:44:01.64
人生自体ネタだからな
まじで生きてるとかw
924デフォルトの名無しさん:2011/05/20(金) 11:54:11.63
ごめん宇宙創っちゃったwうけるw
925uy:2011/05/20(金) 13:57:47.88
>>920
はぁ?wwww
アレを言ってたのは、ガチでスキル高い奴らだぞ
Rubyをオブジェクト指向的な使い方しかやっていないなら一生、意味のわからない言葉だと思うけどね
926デフォルトの名無しさん:2011/05/20(金) 15:17:08.74
たいして効率がよいわけでもないのに
いまさら金にもならないRubyを覚えるのはごめんだ。

みんなそう思ってるんだろうな…もし俺がRubyを知らなくて、
今から何か使えるようにならなきゃならないと言われたら別の言語にする。
927デフォルトの名無しさん:2011/05/20(金) 15:45:11.51
rubyで作ったら後から困るのが分かり切ってるのに仕事でruby使うプログラマは馬鹿。計画性無さ過ぎ。

ツイタもrubyじゃ面倒見きれず乗り換えを余儀なくされた。将来乗り換えが予想されるコストをrubyを選んだプログラマが負担すればいい。
928デフォルトの名無しさん:2011/05/20(金) 15:49:46.62
>>927
どうして最初から最後まで同じ言語で作らなければいけないの?
929デフォルトの名無しさん:2011/05/20(金) 15:49:58.73
PerlとRubyはどっちか知ってれば、もう一つの方を使うのにほとんど苦労がないというか、
必要なたびにちょっと調べればいいぐらいの違いしかないでしょ。
930デフォルトの名無しさん:2011/05/20(金) 15:52:00.91
そんな技術無関係な誰でもできる話をするとまたuyが寄ってきますよ
931デフォルトの名無しさん:2011/05/20(金) 15:59:16.93
Rubyで間に合ううちはRubyで作って間に合わなくなったらもっと速いのに乗り換える
ってのはRubyに限らずスクリプト言語全体で似たようなもの。

PythonもとりあえずはPythonで手軽に実装してみるけど、
間に合わなそうならC/C++に切り替えってのはよくあるスタイル。
932デフォルトの名無しさん:2011/05/20(金) 16:04:31.80
PythonのほうがアップデートたくさんしてくれそうだからPythonの勉強したいんだよね
まあPython4が出たら勉強したいかな
933デフォルトの名無しさん:2011/05/20(金) 16:07:05.80
原発が安全なうちは原発を使い続けるエネルギ政策みたいなものか。

将来的なruby採用時の被害補償負担を担保する為に、全rubyプログラマから利用料を徴収して基金を作っておいたほうが良い鴨な。足りない分は島根の教祖が被るとw
934デフォルトの名無しさん:2011/05/20(金) 16:09:25.97
Perlだってシェルスクリプトだって、VisualBasicすら「時間があったら必ずCで書き直すから」がデフォだった
まあ、往々にしてそんな時間はないわけなんだが
935デフォルトの名無しさん:2011/05/20(金) 16:13:37.72
モックでビルが建てられないと囃し立てるような人は
実のところ何も知らない何も作ったことのない人なので無視してよい
そもそもビル立てるものじゃない
936デフォルトの名無しさん:2011/05/20(金) 16:14:04.29
うちのしすてむRubyを採用してるけど、PSNのような情報流出は無いよな?
早めにCで書き換える対策しておいたほうがいい?
937デフォルトの名無しさん:2011/05/20(金) 16:15:49.64
かつてのコボラーたちから利用料徴収して被害補償しようぜ。
938デフォルトの名無しさん:2011/05/20(金) 16:18:06.03
>>936
Rubyだから漏れるわけでもないし、Cで書いたら漏れないわけでもない。
Cで書き換えてメモリリークして鯖落としたら世話ないわな。

速度や柔軟性が気になるなら書き換えたらいいんじゃないでしょうか。
939デフォルトの名無しさん:2011/05/20(金) 16:20:57.91
>>933

> 原発が安全なうちは原発を使い続けるエネルギ政策みたいなものか。

時事ネタを絡めた喩え話に見せつつ、よく読むと意味不明だな
940デフォルトの名無しさん:2011/05/20(金) 16:26:37.40
だいたい何年も続くサイトなら
何回もリニューアルするから言語なんか関係ない
941デフォルトの名無しさん:2011/05/20(金) 16:28:35.87
Twitterはここまで大規模なサービスになることを開発者が見越していなかったってだけだと思うよ。
942デフォルトの名無しさん:2011/05/20(金) 16:35:11.69
>>925
「Acceptable Lisp」「Algolの皮を被ったLisp」と言われることはあっても
さすがにLisp方言は言いすぎ
943デフォルトの名無しさん:2011/05/20(金) 17:09:45.78
>>925
RubyにLispとの類似点も相違点も多く持つことを理解している人の間だから
「RubyはLisp方言」というネタが成立するんじゃないか。 あたまだいじょぶ?
944デフォルトの名無しさん:2011/05/20(金) 19:06:50.27
全ての言語の原型はコボル由来。その他は方言にすぎない。
とか半島的な原理主義者が台頭して来そうだwww
945デフォルトの名無しさん:2011/05/20(金) 19:21:21.78
>>944
物知らないなら無理しなくていいよ
946デフォルトの名無しさん:2011/05/20(金) 20:15:35.77
それにしても上級者向けな話題ばかりだな
947デフォルトの名無しさん:2011/05/20(金) 20:20:22.51
よーしパパ、Rubyの名前を全てエスペラント語に書き換えたエスペラントRubyつくっちゃうぞ〜
948uy:2011/05/20(金) 20:26:12.90
>>942-943
念のためいっておくけど
外見の事言ってるわけじゃないからな?
『 今までLispでしかなしえなかったプログラミング技法がRubyでも一応可能 』

それをわかってる奴がLisp方言って言っていたとしか思えない
なぜなら今、俺もRubyをLisp方言と言いたい気分だからwwwwww
949uy:2011/05/20(金) 20:28:00.54
アルゴリズム自体の探求したい奴は、
「 RubyはLisp方言 」っつう言葉を頭の片隅にでも覚えといて損はないよwwwwwww

いつかその言葉の意味がわかる時がくるwwwwww
950デフォルトの名無しさん:2011/05/20(金) 20:33:47.74
RubyよりはTclのほうがLispに近いが、TclはLisp方言とは呼ばれない
RubyがLisp方言うんぬんは、単純にRubyユーザのLispコンプレックスじゃね?
951デフォルトの名無しさん:2011/05/20(金) 20:39:43.66
>今までLispでしかなし得なかった

えっ

えっ

えっ
952デフォルトの名無しさん:2011/05/20(金) 20:44:27.59
いいかげんほかのスレでやれよと
953uy:2011/05/20(金) 21:04:01.52
言ってろ言ってろ
ふざけたレスに時より織り交ぜるuyのマジレスに気づけない奴は三流
954デフォルトの名無しさん:2011/05/20(金) 21:26:55.74
ここは初心者スレです、質問スレも兼ねております
質問の邪魔になりますので単なる雑談であれば御引き取り願います
955デフォルトの名無しさん:2011/05/20(金) 21:32:00.37
>>921
うまくいきませんでした。
アドバイスをリファレンスを見てこのように
解釈しましたがあっていますか?

f.each(Kconv.kconv("\r\n", Kconv::UTF16)){|l|
と同じ意味で、$/のグローバル組み込み変数
に直接代入することもできる。

改行コードを明示したら動くかも。
956デフォルトの名無しさん:2011/05/20(金) 22:16:51.57
>>911,955
バイナリモードでオープンしてみたら?
下記参照のこと
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39214
957デフォルトの名無しさん:2011/05/20(金) 23:07:08.75
>>911
環境よくわからないけど、自分の ruby1.8.7 on Windowsでは以下で動いた

require 'kconv'
lines = open("g.txt", "rb") {|f| f.read}
lines.gsub(/\r\x0\n\x0/, "\n").each_line {|l|
puts Kconv.kconv(l.chomp.gsub(/(.)(.)/, "\\2\\1"), Kconv::SJIS, Kconv::UTF16)
}

引っかかったのはUTF16がUTF16BEとして解釈されてるみたいなところ(テキストはUTF16LEとして作成)
全角コロンに限定して引っかかりそうな箇所はないので、別の問題かもしれんが
958957:2011/05/20(金) 23:16:29.38
あれ
UTF16の文字列中に0x0aのコードがあったらまずいので、

lines.each_line("\r\x0\n\x0") {|l|

としないとだめかな
chomp が使えなくなるので改行取り除くのが面倒になるけど
959デフォルトの名無しさん:2011/05/20(金) 23:29:53.72
このスレの書き込みの勢いを40越えにする為に俺は来た
俺が来る前はここ30も超えてなかったよ
960デフォルトの名無しさん:2011/05/21(土) 00:24:25.55
時より・・・
日本語と同じでRubyもその他言語も使える気でいるだけなんだろうな
961デフォルトの名無しさん:2011/05/21(土) 00:56:23.12
ttp://jp.rubyist.net/magazine/?0005-FirstProgramming
このページの内容を実行しようとしたのですが、require 'tk'で弾かれてしまいました。
そこで、tcl/tkを手動で導入しようとしたのですがどうにも上手くいきません。
ActiveTcl8.5をインストールすると、wishは動作しましたが相変わらずrequire 'tk'は弾かれます。
どのようにすればいいでしょうか。環境変数は設定しました。
962デフォルトの名無しさん:2011/05/21(土) 00:58:58.15
すいません、インストーラは何を使ったか書くのを忘れていました。
ttp://rubyforge.org/frs/?group_id=167&release_id=45627 の rubyinstaller-1.9.2-p180.exe です。
963デフォルトの名無しさん:2011/05/21(土) 01:08:35.70
>>957
ruby1.8.7 on Windowsで動作しました。
ただ、改善前、改善後の両方で試しにBEで保存して
読み込ませたらやっぱりうまくいきませんでした。

うまくいった意味がわかりません・・・
今日は遅いので断念します。

ひとまず、目的は達することができそうなのでありがとうございました。
964957:2011/05/21(土) 01:29:00.55
>>963
>>957はUTF-16LE用なので、ファイルがUTF-16BEなら以下のように修正が必要

require 'kconv'
lines = open("g_be.txt", "rb") {|f| f.read}
lines.each_line("\x0\r\x0\n") {|l|
puts Kconv.kconv(l, Kconv::SJIS, Kconv::UTF16).chomp
}

改行は4バイトで表現されるため、変数 l に対してchomp使えない
Shift_JISに変換してから chomp することに注意
965957:2011/05/21(土) 01:33:14.31
いまさら気づいたけど、最初に全体をShift_JISに変換して、
それから each_line で処理するほうが簡単だし、普通かも
966デフォルトの名無しさん:2011/05/21(土) 02:56:44.16
forbiddenなるんだが ファイル自体にはchmodで755ついてるし
httpd.confも設定した
他なに設定ある?
967デフォルトの名無しさん:2011/05/21(土) 03:10:58.69
そのファイルが置いてあるディレクトリのパーミッションを
755にしてみるとか
968デフォルトの名無しさん:2011/05/21(土) 06:54:28.75
(Rubyと関係ねぇ…!)
969デフォルトの名無しさん:2011/05/21(土) 07:10:30.69
無職・童貞の自分にとって結城さんのリア充日記が心に痛いお…
970デフォルトの名無しさん:2011/05/21(土) 08:42:43.13
>>961
>>962
rubynstaller-1.9.*
にはruby/tkが入っていないといううわさが
971デフォルトの名無しさん:2011/05/21(土) 08:55:28.70
>>962
確認のために検索してみたけど、tk.rbでもtk.soでも引っかからないから、
1.8.7も1.9.2でもRubyinstallerはそのままじゃruby/tkが使えないみたいだよ。

検索してみたらRuby/tk Kit を入れろとかいう話だけど……。
972デフォルトの名無しさん:2011/05/21(土) 08:58:30.42
>>961-962
使ったこと無いけどRuby/Tk Kitが使えるかも
ただRuby 1.9.1用のやつなので、正しく動くかどうかは分からない
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/47093
973デフォルトの名無しさん:2011/05/21(土) 10:36:16.73
s.gsub!(...)
とか文字列操作したとき変更をトラップして
メソッド呼び出したりする機能ないですか
974デフォルトの名無しさん:2011/05/21(土) 10:39:41.63
>>973
gsub!するときに変更をトラップしたいならブロック使えばいいんじゃないかしら。

あらゆる変更に対して反応する機能はないと思う。
975デフォルトの名無しさん:2011/05/21(土) 10:45:23.34
set_trace_funcってのが無くはない
ただし、かなり特殊なケースでしか使用されない
あるいはメソッドを上書きしてトラップ動作を挿し込むとか

まずは、トラップが本当に必要か考えたほうがよさそう
976デフォルトの名無しさん:2011/05/21(土) 10:46:06.64
>>973
破壊的メソッド全部についてメソッド呼びたいならメソッドレベルでもクラスレベルでもいいけどラッパー作るのが速いかもね。
977デフォルトの名無しさん:2011/05/21(土) 11:11:25.08
irb> str = "うんこ"
irb> def str.gsub!(*args); warn "やめてください!"; self; end
irb> str.gsub!(/う/){'ち'}
やめてください!
irb> puts str
うんこ
978デフォルトの名無しさん:2011/05/21(土) 11:15:00.46
>>970-972
ありがとうございます。TkKitを入れてみた所、
require 'tk'
Tk.mainloop
は動作しましたが、>>961のURLのページのvisualnovel.rbを実行すると、
ttp://gyazo.com/7637d800281bafde7f84d84b3b4388f5.png
というようなエラーが出ました。これはどういう意味でしょうか。
979デフォルトの名無しさん:2011/05/21(土) 11:15:18.47
オブジェクトに直接defできるのか…
980デフォルトの名無しさん:2011/05/21(土) 11:17:15.92
>>978
RubyやったことないならRuby本体の勉強からやっと毛
自転車乗れないうちからラーメンの出前とか無理だろラーメンぶちまけるだろ
981デフォルトの名無しさん:2011/05/21(土) 11:18:17.05
>>978
これぐらいの英語も読めないの?
982デフォルトの名無しさん:2011/05/21(土) 11:21:52.61
>>978
と、煽るだけだと申し訳ないので、

require "guiutil.rb"
require "scenario.rb"



require "./guiutil.rb"
require "./scenario.rb"

に変えてみましょう。1.9.2ではカレントディレクトリはロードパスに入ってない。
983デフォルトの名無しさん:2011/05/21(土) 11:27:15.67
>>980
「Rubyではじめるプログラミング」を見てる人にその言い草はちょいとないんじゃないかw
今回の問題は1.8と1.9の互換性のなさが問題になってるだけ。
984デフォルトの名無しさん:2011/05/21(土) 11:29:10.02
まだ自転車でのラーメンの出前とかあるのかね
カブとかならともかくあれはそれなりに匠の技だと思うのだが

次スレ
立てるには条件がいるので立候補を
985デフォルトの名無しさん:2011/05/21(土) 12:14:39.67
>>982
駄目でした。他にも問題があるようです。
ソースの読解と割り切って今回は諦めます。
ありがとうございました。
986デフォルトの名無しさん:2011/05/21(土) 12:20:39.09
>>985
カレントディレクトリはちゃんと移動してる?
987デフォルトの名無しさん:2011/05/21(土) 12:22:33.89
>>985
エラー内容も変わらなかったの?
988デフォルトの名無しさん:2011/05/21(土) 12:25:30.73
エラーのひとつひとつの進捗を報告して聞いてけば解決できそうな問題なのに、
勝手に自己完結して諦めるようじゃRuby人生は暗いかもしれないな。
989デフォルトの名無しさん:2011/05/21(土) 13:10:32.71
>>985
おせっかいモード。

rubyinstaller-1.9.2-p180 でvisualnovel.rbを動かすのに必要なこと

1.
Ruby/Tk Kit を導入する
2.
visualnovel.rb の require "nantoka" ってのを全部 require "./nantoka"に変える
3.
guiutil.rb の先頭の $KCODE = "S"を削除
4.
guiutil.rb の60行目ぐらいの
@img0 = TkPhotoImage.new { file(fname) }

@img0 = TkPhotoImage.new("file" => fname)
に書き換える
5.
scenario.rb の先頭に #coding: CP932

これで動くようになるよ。
990デフォルトの名無しさん:2011/05/21(土) 14:31:04.84
winでrubyinstallerから入れた場合にtkを入れたいのですがどこのurlからtkをダウンロードするのですか?
991デフォルトの名無しさん:2011/05/21(土) 14:33:06.42
>>990
ちょっとログ遡ってみたらいいんじゃないかな
992デフォルトの名無しさん:2011/05/21(土) 14:38:49.93
require_relativeって嫌われてるの?
993デフォルトの名無しさん:2011/05/21(土) 14:45:05.44
次スレ立てろクズ
994デフォルトの名無しさん:2011/05/21(土) 16:57:02.66
建てられないので埋めとく。
995デフォルトの名無しさん:2011/05/21(土) 17:17:58.25
建てられないから埋めるってキチガイかよ
996デフォルトの名無しさん:2011/05/21(土) 18:13:46.83
書き込まないと伝わらないことも有る。
997デフォルトの名無しさん:2011/05/21(土) 18:57:27.72
早くしろよ!!!!!!!!!!!!!
998uy:2011/05/21(土) 19:22:20.97
999uv:2011/05/21(土) 19:23:28.77
>>2 おねがい
1000uv:2011/05/21(土) 19:24:10.49
てすと?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。