プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
1乙
オツ
何度も出ていそうな話題ですが… '10' + 1 => '101' 10 + '1' => 11 こういう仕様じゃ何で駄目なの?
10 + 1.1 => TypeErrorでいいならいいんじゃね
Rubyだから
初心者のくせに仕様にケチ付けるなんてなまいきだぞ。
>>4 Rubyの整数や文字列は型(Type)じゃなくてクラスだから
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が標準でこんなだったら使いたくなくなる
>>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 にあった
文字列として動作しないオブジェクトに to_str 定義しちゃだめ あれは String を継承してないけど String のメソッドが(委譲とかで)使えますみたいな印
debianでRuby1.9.2をコンパイルするのに必要なパッケージの一覧というのを昔教えてもらったような気がするのだが 残念なことに昔のことだったので忘れてしまった ぐぐってみたけど見つけられなかったので、だれか教えて
>>10 まあawkの場合、連結には別の記法があるから
連結なら始めからそっち使えってことだろう
14 :
デフォルトの名無しさん :2011/04/23(土) 11:00:56.82
>>14 ありがとう。
それらに加えて、たとえばmakeだとかbisonだとかautoconfだとかあるじゃないですか。
そういう開発ツールも列挙してもらえるとうれしい。
#昔どっかに書かれてたのをコピーしとけばよかったんだけど、
#当時はRedHat使ってたから関係ないやって思ってコピーしなかったんだよね。
#失策だ。
>>15 ↓デビアンパッケージを作るのに必要なものが芋づる式にインストールされるが、ruby-1.9.1-fullパッケージはインストールされない。
sudo apt-get build-dep ruby1.9.1-full
>>16 なにその便利Tips
試してみる。さんくす
>>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ライブラリなんてワンライナーとかでしか使ったこと無いし
>>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'
(つづく)
(つづき) 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 (つづく)
>>19 そりゃ、debパッケージ作るための開発パッケージが含まれてるからな
(つづき) 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を学習するのにいい本はありますでしょうか?
具体的に何が「明らかに不要」なのか言ってくれれば
>>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 スレで聞くべきだったな
>>24 debhelper をインストールしてしまうといろいろくっついてくると思う
deb パッケージが要らないならインストールしなくてもいいはず
tcl と tk も依存関係多いから、不要ならコンパイルオプションごと外したほうがいい
autoconf は perl5 を呼んだはず
26 :
デフォルトの名無しさん :2011/04/24(日) 18:35:10.22
configureスクリプトは単独で動作するので、実行にautoconfやautomakeは不要。 リポジトリからさきっちょを取ってきてコンパイルするなら必要だけど、tarballなら 不要。
>>23 他言語の既修者なら、とりあえず『初めてのRuby』を勧めておく
しいて言えば、オブジェクト指向について基礎的な知識があると
より理解度が上がると思う
28 :
デフォルトの名無しさん :2011/04/24(日) 19:09:22.87
>>27 探してみます。たのしいRubyの方を読むと、
プログラミング言語を初めて学習するような感じなので、
悩んでいました。
>>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
if @m == (7 or 11) と書けないのは理解できているんですが if @m == 7 or @m == 11 と書くのがなんだか冗長に思えてしかたないんです 力技でなく一行目みたいな書き方をする方法ありませんか?
>>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!
irb> puts "\tyes!" if [:a, :b].any?{|m| __send__(m) == str} a is made yes! やったーできたよーすごい長いよー
33 :
30 :2011/04/25(月) 20:45:46.03
基本的にない、ということなら納得することにします ありがとうございました
■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' と書いたら自分自身で条件満たしちゃうじゃん
>>34 gem install でインストールしたライブラリは require 'rubygems' が必要
前に「require 'rubygems' と書かなくてもいい方法」というのが流行ったことがあるので、
その記事の人はその古い慣習を引きずってるのだろう
・ gem ライブラリを利用するときには最初に require 'rubygems' と書いとく (スクリプト内で被って複数回呼ぶことになっても負荷はほぼゼロなので一応書くとよい) ・ require する文字列と同じ名前の rb ファイルをカレントディレクトリに作ってはいけない(Ruby1.8.x、Ruby1.9.1) たぶん後者だな
>>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のバージョンとかの問題でしょうか?
たびたびすみません。
>>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は書かずに実行したら、
すんなり動きました。
JSONエンジンの指定がないのだろう 適当なJSONライブラリ入れて MultiJson.engine = :json_gem とか指定
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フォーマット がひっかかちゃって探してる情報が見つかりませんでした。
>>39 CentOSってgemのパッケージは用意されてないのでしょうか?
gemを使えるようにするには、という意味です。
>>42 "フォーマット文字列" % [引数リスト]
も含めて一緒なのでお好きなのをどうぞ
>>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 ).
>>44 ありがとうございます。 それじゃ書きやすい format を使うことにします。
>>45 サンクス。
CentOSの環境もあるので、試してみようと思ったのですが、こっちはGemのシステム自体がインストール
できなくてはまっています。
Ubuntsuで文字コードの問題を解決した方が早いのかなあ。
>>33 orだけだけど、==と===がおなじになるオブジェクトならば
case @m
when 7,11
puts @m
end
って書くことができるかも
>>49 ぬう、結構めんどくさいですね。
VMWareのCentOS環境は作ったのですが、今日は力尽きたのでまた明日以降やってみます。
重ね重ねありがとう。
というか、初めてGemとか使って簡単なプログラム動かしてみようと思ったけど、Twitterは結構
地雷だったのかな。
重ね重ねありがとう。
README読めない人には無理 「全く何も見ずに感性だけで」プログラミングできるようなものではない
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パーサクラス
と指定する
GUIアプリ作るならJRubyでSwing使うのが良い選択なのかな? Ruby/Tkってなんか動かない環境多そうですよね。
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
同じファイルの取得を三回繰り返しているように見えるが
そこはwhileループじゃないだろう
禁止されてなければ、素直にライブラリ呼べばいいんじゃないの? require 'time' Time.parse("20110426") #=> 2011-04-26 00:00:00 +0900 ローカルタイムになるけど
date/format.rb を見る限り、「標準」で読み込まずに別途にしたのは正解
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 クラスメソッドの中にある複数の共通処理を外に抜き出す方法は他には無いでしょうか。
クラスメソッドというのは本質的には存在しない クラスとメソッドという文脈においては、Rubyにはインスタンスメソッドしかない クラスメソッドは、self が Class クラスのオブジェクトであるインスタンスメソッドだ なので、アクセス制限法も public か private(かprotected)しかない ということで、それでいいよ ほんのり遅くなってもいいのなら、メソッド内で proc オブジェクト作って 2回 call してもいい
lambdaが楽しくていつの間にかlambdaだけのソースコードになってしまいましたがどうしたらいいでしょうか?
64 :
61 :2011/04/26(火) 20:32:44.14
<<62 ありがとうございます。上のソースでいくことにします。
65 :
デフォルトの名無しさん :2011/04/26(火) 20:44:26.74
>>63 とりあえずソラでYコンビネータが作れるようになるまで習熟してから
Haskelに体当たりだ。
>>63 関数型言語行って存分にλってこいw
その病気はしばらく続くと思うが(実体験)、
手続き型言語でやるのはほどほどにしとけよ?
67 :
34 :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に当たる書き方ってありますでしょうか?
privateはレシーバつきで記述しても動作しないようにする効果(だけ)を持つ ので、その動作は正当だ 「公開APIってほどじゃないのでなんとなく隠したい」以上の意図は示せないし、 ユーザーの操作を縛ることもできない レシーバという概念について勉強するといろいろはかどるかと思う あと、後者は「やらないほうがよい」ので勧めない
Rubyではオブジェクトに対して外からできることは公開メソッドの呼び出しだけなのに、 publicメソッドからprivateメソッドを呼ばないとしたらいったいいつどこでprivateメソッドを呼ぶというのだ……。
誰も知らない所でひそかに呼ばれてるんだよきっと
でもrubyの場合動的にメソッド追加したりできるから privateとかする意味あんまないんじゃね? とか思う今日このごろ
普通は呼べないから、「これ勝手に呼ぶなよ!」と警告するぐらいの効果はあるかもしれない。
呼ばれたら嫌なメソッドなんてはなから定義しなければいいだけじゃん。 アクセス制御とか無用。 ダチョウ倶楽部が「おすなよ?おすなよ?」と言ってるようなもん。
まさか基地外と一緒にコード書いてるわけじゃあるまいし、プライベートにしとけば普通はevalとかしてまでは呼ばないと思うよ。
76 :
デフォルトの名無しさん :2011/04/28(木) 19:31:01.58
質問の内容が伝わってなくてすみません privateとかpublicなどはとりあえず置いといてください PHPで呼び出すときに$this->a()限りませんがC#やjavaでもこのような感じで呼び出しています Rubyはこのthis->メソッドのような概念がないということでしょうか?
>>76 いつもの発作なので気にしないでください
Rubyでthisに相当するのはselfです
>>76 PHPの$this->method()に相当するのは、Rubyではself.method()
そんで、Rubyでは「self.」は省略できる。それだけ。
>PHPで呼び出すときに$this->a()限りませんがC#やjavaでもこのような感じで呼び出しています そうですか これはRubyなのでそれは忘れてください Rubyではレシーバを省略しメッセージだけを書くのが普通で、 それ以外の記法を見たときは普通ではない何らかの意図があるものとみなします
>>77 >>78 thisに相当するのはselfだけど、 self.method ではプライベート呼べないよ。
>>68 のケースでは、"self."は「書いてはならない」
>>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を省略した形でしか普通には呼べない」の意。
84 :
83 :2011/04/28(木) 20:19:18.63
thisやないRubyではselfや。
Ruby1.9.2のスクリプトエンコーディングについて質問です。 RUBYOPTに-Kuと設定しておけばマジックコメントを記述せずutf-8で書けますが -Kは1.8互換のため残されているだけで推奨されていません。 マジックコメントを書かずにすむ方法は他にありますか? もうひとつWindows上での実行について質問 標準入力からutf-16leのテキストデータを読み込んで スクリプトとして実行することはできませんか?
あのさー、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
マジックコメントは「エディタでの新規作成時に自動で挿入する」みたいなのがないと微妙に面倒なのよね
90 :
デフォルトの名無しさん :2011/04/28(木) 20:53:01.19
環境変数とかに依存してると、よそに持っていたときギャッとなるので ファイル内で完結させるのが正しいんだろうとは思う。
92 :
デフォルトの名無しさん :2011/04/28(木) 21:10:47.88
Rubyでメジャーな開発環境ってありますか?OSは問いません
Vim Emacs TextMate
gedit
>>92 notepad
vi
Emacs
サクラエディタ
Eclipse
NetBeans
紙と鉛筆
脳内
これで6割方はいってるような気がする
>>95 Windowsのxyzzyが抜けてる
3パーセントくらい増えるはず
Geanyもわりと使える
>>92 とりあえずnetbeansのrubyバージョンでも使ってみては
netbeansですか。。。 実はちょっと前に入れたのですがスペックが足りないのか単語補完のときに動作が遅いですみたいな警告が表示されてしまったのでそれ以来使ってないです やっぱeclipseやnetbeansのように高機能なIDEが使えないとなるとテキストエディタしかありませんね ありがとうございます
100 :
85 :2011/04/28(木) 21:50:32.78
やりたいこと(下) 私が愛用するサクラエディタは編集中のテキストを外部コマンドの標準入力に流し込むことができる。 これを使って、編集中のテキストを保存すること無しにスクリプトとして実行したい。 外部プログラムへの出力はShift-JISかUNICODEが選択でき、Shift-JISで用が足りる場合は外部コマンドを ruby - と 指定すれば良いがUNICODEを含むときはうまくいかず解決策を知りたい。 (上)はそのときのタイピング量を減らしたいため
外部コマンド実行にこういれてる ruby -EWindows-31J:UTF-8 "$F"
サクラエディタ保存はしないと実行できないと思ったけど出来たのか
複数のファイルを一つの配列に読み込むにはどのようにすればよいでしょうか。 例えば、 $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) となってしまいます。
>>103 色々とツッコミどころはあるのだが、致命的なのは$
>>103 読み込みたいの書き込みたいの?
書き込みたいならwモードでファイルオープンしないといかんのでは
モード省略するとrモードやでー
って…待てよ? そのコードでは違うエラーになると思うのだが… 実際にはちょっと違うコードじゃないのか?それ
なんかしら反応がないとモヤモヤして眠れない流れだなw
・ グローバル変数は使うな、せめてインスタンス変数使え (ただし、インスタンス変数乱用もあまりよくない) ・ ローワーキャメルケース(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
質問ではファイルを読み込みたいと言ってるのに、コードでは書込してるから どう答えればいいのか混乱してくる まあいいや、書き込みは答えが出たから俺は読み込みで filenames = ["a","b","c"] files = filenames.map {|fn| File.read(fn) }
>>109 File.read(path) は使ってはいけない
File.open(path){|f| f.read} と呪いながら必ず書く
1.8.7 で直ってないんだっけ?
>>110 何故File.readを使ってはいかないの?
わかりやすい例がないなあ
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 だけ画像として開けないはず
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
>>114 安全の意味がわからん
ブラウザもどきとしての安全性なら、Cookieの流出は気にしなくてよいし、
勝手なJavaScriptやFlashが走ることはないのでその意味では安全
コードとしての安全なら、urlが正しくない場合の考慮とか、
異常系の強化の余地はある
>>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を入れたいと思います
>>116 > 1アクセスごとに絶対に1秒スリープしろ
まだその信仰残ってるよね…
「1ページ分」は人間の操作するブラウザっぽく一瞬で取得して速攻で接続切ってもらったほうが嬉しかったりもする
君の後ろにもサーバ取得待ちのユーザーさんの列はあるのよ、見えないけどw
でっかい静的ファイルやサーバで生成する動的 HTML を連続取得されるのは辛い
別途サーバ立てるような細かい静的ファイルをだらだら時間かけて取得されるのも辛い
>>117 書いてある通りにしか動作しないよ
つまり、Get するためのオブジェクト作って、アクセスして、返り値取得して、それを表示する、までが1回のループ内容
スレッドを使う必要があるが、あんまり速くもならないので素直にループ
あと、
>>108 も言ってるけど、イテレーションはデータ配列自体を each するのが普通
urls.each do |url|
uri = URI.parse(url)
...
end
と書く
while も i も使用しない
ということはつまり
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はしないでおいたほうがよさそうですね
ミス
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
}
その500個のファイルを一人のユーザーによって間断なしに取得することが そのサーバにとって通常範囲内であると想像されるなら、sleep はいらない ふつうはそんなこと想定してないので、sleep で間隔あけるべき 俺なら特定可能なユーザーエージェントを設定した上で、 2ファイルにつき3秒 sleep させて、1時間に100ファイルずつ取得する
(1..10).each do |i| Net::HTTP.start('www.example.com') do |http| puts http.get('/index%d.html'%i).body end end
結局、IO.writeはいつ実装されるんだろう・・・
>>112 >>113 でも例を挙げてもらってるが、1.8系列だとバイナリモードで読み込めないから
(1.9系列であれば、バイナリモードで読み込むようにオプション指定できる)
124 :
デフォルトの名無しさん :2011/04/29(金) 12:12:49.66
ブラウザっぽくってのは、keep-alive使って、コネクション切らずに ページ本体と画像その他リソースを取得したほうがサーバの負荷に ならないってことかしらー。
ヘッダーを送信するのはサーバに負荷が掛かりますか?
アクセス自体がわりと負荷だ 本当に負荷を気にするなら、不要不急なアクセスはお控えください ホントに欲しいページだけダイレクトに見てください 収集はシアワセ産むのかどうか、よく考えて行ってください で、ヘッダくらいは別にいいよ HTTP の勉強は結局は避けて通れないんだけども
ヘッダを1分に60回送信してこれを1時間やる場合もOKですか? 専用サーバかVPSでやりたいのです
>>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()
}
}
ぎゃー途中送信してしまった まあ、途中だけどなんとなくわかるしょ これならkeep-aliveでいけるらしい
>>127 一般的には(技術者の間では)1リクエスト/秒なら許容範囲とされているが、
自分の意図とは別に訴えられる可能性があるので、OKかどうかの保証は誰にもできない
あとは自己判断
http://librahack.jp/ この人はたまたまサーバの不具合で低負荷でもサーバダウンしてしまったため約1リクエスト/秒で逮捕されてる
最終的に起訴猶予で釈放はされたけど
>>127 具体的になにがしたいのかよくわからんが
1秒間に1アクセスごときで負荷になるようなサーバは管理人がおかしい
ただアクセスログを見る奴がかわいそうかもなw
(Rubyと関係ねぇ…!)
>>132 このスレ見てつくりましたー、って人がタイーホされて
言語はRubyでしたー、なんてイヤやん?
裏でDB見に行くとか動的なページは
アクセス間隔あけるなり、1リクエストが完結してから次を送るなり
工夫したほうがいいね
ちょっとよく分かってないんだが、 サーバ側がダメな場合は503を投げ返すのがHTTP的な作法? んでクライアントはそれを受けたら自重するような動作で
>>130 それ最近知った事件だ
最終的にサバ管理会社のMDISが岡崎市から契約解除されたと
で、それを受けてMDISが調査して非を認めて謝罪文だしたと
財閥系の天下り官僚癒着企業が如何に糞かという見本みたいな事件
>>30 if @m.to_s=~/(7|11)/
139 :
138 :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
今回は数値であろうモノから文字列化しているから関係ないと思うけど 真の意味で文字列頭・末を表したい時には^$は使わないように心がけた方がいい。
>>138 mの内容が限定されてればいいがいろいろ問題があるな
70もかかるし"7"もかかるし
>>140 どういうこと?
^$を使うと問題あるの?
>>142 @m = "mild\n7\nsuper light"
でもマッチするとかその辺じゃね
>>143 なるほど、改行の前後にもマッチするのか、知らなかった
きちんとした意味で ^ や $ を使う機会は少ないと思う それの7割くらいは \A と \Z で表現されるべきシロモノ 純粋スペース(U+0020)を \s で書くのと同様、「観測範囲内でたまたま動く」に過ぎない
ここ初心者スレなんで‥な?
文字列先頭で充分な場合は今は \A だろ 大昔、sed と perl くらいしかなかった頃は 「vi のカーソル操作にちなんで ^ と $ だ!すごいわかりやすい!」 とか言えたけど、今は記号の由来がわからん人のほうが多いだろう おまけに改行文字を扱う場合は思ったとおりの動作にならないことがある 書く文字数を1文字削減するのに見合う苦労だとはあんまり思えん 素直に先頭表すのは \A で最後表すのは \Z にしとけ
EmacsとViがいつ滅びるのか楽しみでならない。
[Emacs AND 滅びる ] [検索] 約 160,000 件 (0.31 秒) [Ruby AND 滅びる ] [検索] 約 464,000 件 (0.24 秒)
Rubyスクリプトが動く高機能エディタを作成すればいいよ。
sopa_hっていうクソガキのせいでRubyの寿命がのびやがったまじしねこいつ まじしね うぜぜええええええええええええええええええええ うぜえええええええええええええええええええええええええええええええ まじきめぇこいつw まじマツゲロもきめぇんだけど宣伝しててひっしにw 日本産っていうのをおおいに利用しててきめぇw はやくしなないかなこいつら
マツゲロの金策ってなに? Ruby技術者検定とか?Rubyラーメンとかクソガキ使ってRubyの宣伝? マツゲロきめぇ やることがきめぇwswwwwwwwwww 情弱商売wwwwwwwいかくせぇっていうかあたまのおつむがへぼいwww クソガキをとりあえずコミッタとかそういうのに使ってまじ宣伝しようと必死 きめえんだけど?まつげろ死ねよまじほほほほおほほほい!!!!!!!!! ほほほほほほおほほほほおおおおおおおおい!!!!!!!! やることがせけえぇwwwwwwwてかきめぇえwwwwwwww 速く死ねマゲロ!! きめえからお前の金策Rubyとかまじ宣伝しないで片隅でやっててくれねえ? まじでお前ら糞鼻毛のカスの目糞耳糞鼻糞カスの雑魚はマジで日本からきえてくれねえかな? 韓国いけよまじでチョンどもまじでしんでくれお願いしますマツゲロ Perl業界の足元にも及ばないくそRubywww 金を生み出すしまくっているのはPerlwwwwwwwwwwwwwww GoogleでもPerlは使われていて フェイスブックでもライブドアでもDEnaでもいろいろな場所で使われてるPerlにくらべて まじきもい国内身内ネタでもやっておりょッッッッッッッw速くしね 死んでくれないかな?Rubyっていう単語みるだけでむかついてくるんだがww Perlの時価総額にもかてねえクズみたいなハナクソみたいなバカみたいな雑魚みたいなクソなことやってねえで とっとと言語終了して速く消えろマツゲロ
俺はRubyが滅びるまで戦う さっさと死ね雑魚ども テロにあってしねRubyども
viは○nix系で最低限必要なツールだからなくならないんじゃ emacsはしらん、秀丸エディタのほうが先になくなったりしてな
補助金がなかったらRubyなんて使おうとも思わない
ニコ生やユーストなどのようにwebカメラで配信するのはRubyだけでは出来ませんか?
無理
>>157 Perlだとできるよ
WEB::Cameraっていうモジュール使うと
WEBカメラ認識してくれる
160 :
157 :2011/04/30(土) 23:33:51.44
>>159 ありがとうございます
ちょっとPerlやってみようかと思います。
>>157 の偽者さん代理レスありがとうございます
Perlをこれから覚えても周りのプログラマーには勝てないので他にも検討してみたいと思います
162 :
157 :2011/04/30(土) 23:43:43.24
偽はあなたでしょw
ユーザーがゴミしかいない まじむかつく 消えろよクソゴミども!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 死ね!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!いちいち逆鱗に触るようなわめき ユーザーがクソみてええなクソガキと喧嘩腰みたいな きもちわりいんだけど!!!!!! !!!!!!!!速く死ね!!!!!!! そんなに金が欲しいか?!!!!!!!!!金が欲しいんだろ Ruby情報技術者とかRubyラーメンとかまじ死ね!!!!!!! 速くRubyは潰れろ!!!!!!!憎い!!!!憎い!!!!!! 暗黒パワー!!!!憎い!!!!!憎い!!!!!!!!!憎い!!!!!
落ち着いてください 時代遅れなPerlさん
↑こういうのがうぜえんだよ いちいちしゃくに触る言い方 Perlみるたびに目くじらたてて来るわめき ぶっとばされてこいよまじで 速く死ね
ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう ぼくはていのうぼくはていのうぼくはていのうぼくはていのう
アクセス制限のprotectedは具体的にはどういう時に使いますか? privateはよく使うのですが、protectedを使う機会が全くありません。 Javaで開発していた頃は、設計も細かく考えていたのですがRubyだとどうしても大雑把になってしまいます。 極端に言えばprivate指定したところでsendで呼び出せてしまうわけですし。 こういうケースではprotectedを使うべき、みたいな使いどころがあれば教えてください。 よろしくおねがいします。
>>167 まあ、無理して使わなくていいよ
巷のユーザーの90%くらいはこの1年ほどprotectedなんて使ったことないし、
巷で使用されてるprotectedの96%くらいは使用法間違ってるわけだし
>>167 Rubyのprotectedは言語仕様のミス疑惑が出てたと思うw
非常に微妙な可視性なので、あまり深く考えないほうがいい
privateとpublicの二本立てで
171 :
デフォルトの名無しさん :2011/05/01(日) 01:01:59.81
数少ないprotectedの利用ケースは、同値比較の実装で同クラス(とサブクラス)の 他のインスタンスに対して呼びたいメソッドがある場合くらい。 もちろんsendでいくらでも回避可能。
クラスシステムってもう * メソッドは全てパブリック * フィールドは全てプライベート これで良いと思うんだ。 んで継承は無くす。 そんかわり委譲を簡単に書く機能を用意。 これでええんちゃうん。
イテレータについて質問です。 {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での動作です。 よろしくお願いいたします。
>>167 sendは最終手段と考えてる
protectedで済むならprotectedでやる…んだが
Rubyの場合、privateがJavaでいうprotected並の制限なので
わざわざprotected使う意義は薄いかな
一応、俺は後で読み返したときに分かりやすいよう
「引き継がせたいprivate」はprotectedにしてる
>>173 {}はハッシュ(他言語では連想配列、辞書とも呼ばれる)のリテラルなので
1がキー、2がその値、3がキー、4がその値に
なっちゃってる
配列リテラルの[]を使えば想定通りになるかと
>>175 なるほど。
空目してました。
ありがとうございます!
動作を調べたりするときには、printとかputsよりも pを使うのがおすすめ。 {1,2,3,4}.each{|i|p i}だと [1, 2] [3, 4] と表示されるので、どんなデータなのか分かりやすい。 さらに複雑なデータを扱うときにはpretty printというのもあるよ。
>>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に近い パッケージがあったら御教示くださいませ。
全く試してないが、RubyInstaller で devkit をインストールした上で gem 入れたらどう
正規表現で、否定はどうやって表現しますか。 指定した正規表現に一致しない箇所を抜きだしたいのですが、やり方がわかりません。 str.scan(/AAA.*?BBB/m) do ... end この場合なら AAAから始まってBBBで終わる最短一致にマッチしますが、 今回はそれ以外の箇所にマッチさせたいです。 awkだと ! /正規表現/ { print ... } とか書けたので、同じようなことがRubyでもできるだろうと期待してます。
>>181 今週のruby-listのやりとり見てみれば良い
>>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) なんですが、、、何か間違ってますでしょうか?
しらんけどNArrayじゃないの?
187 :
デフォルトの名無しさん :2011/05/01(日) 10:11:00.06
ああっ!!、今見たら180さんが正解を書いてくれていました。見落としてました。orz 有難う御座いました。m(__)m あとはNArrayのオブジェクト生成ができればウマー。
省略しすぎた nArray.byteじゃなくてNArray.byteじゃない?
189 :
デフォルトの名無しさん :2011/05/01(日) 10:52:28.33
>>189 テスト用のファイル名は test_hoge.rb とかにすると良いよ
ライブラリの名前そのものや、単に test だけの名前も避けとけ
191 :
デフォルトの名無しさん :2011/05/01(日) 19:27:07.17
オリジナルのソースコードと、オリジナルを日本語向けに修正した日本語版のソースコードがあるとします オリジナルを基準にどの部分を修正したのか知りたいのですが あるフォルダ内のファイル一覧(サブフォルダを取得)して比較をしたいのですが 比較の部分をどのように実装したらよいのかがわかりません
>>191 ruby -e 'puts `diff -r #{ARGV.join(" ")}`' orig/ ja/
>>191 ruby -v;diff -r org/ ja/
>>191 WinMarge.exe /r org ja
diffの動作そのものは独自研究しないほうが幸せになると思う むしろ既存のプログラムの操作と出力をRubyに寄せたものを作ったほうが喜ばれる
196 :
デフォルトの名無しさん :2011/05/02(月) 08:06:35.27
先日はnarrayとbitsetの件、色々御解答頂き有難う御座いました。 外部ルーチン使いたい時はRubyInstaller + devkitで決まりですね。 早速色々bitsetの実験してますがドキュメントが殆ど無くて困っております。 rdocにも何も書いてないし。複雑なサンプルはいくつかあったのですが、 基本的なものがなくて。。。
/_____ |/⌒ヽ ⌒ヽヽ | ヽ Rubyコミッターになったよ | / | ヽ |─| l / ー ヘ ー ′ ´^V ママ、Z会でもぼくがんばるよ l \ U/ _丿 . \ ` ー ´ / . >ー── く / |/\/ \ l l | l ヽ、| | ノ |ー───j \ / _____ / ヽ /^ \ _ /________ ヽ (_/ ヽ |ノ─ 、/─ 、ヽ | ヽ (_\/ ,| \ |・ | | j ヽ `−ノ . || 二 | | ̄ ⌒ヽ′ / / 学校で今日はちょっと別のところに自転車で移動したんだけど / /ー C ` ─ \) _ノ / / そこで学校に戻るときに豚同級生がカギをなくして、30分位まってた後に ! ⊂──´⌒ヽ ノ/( / ノノ結局ポケットにあったとか言って皆キレる \ \_(⌒⌒_) /! ヽ、/俺は「ヴァカだろ死ねよ!!」って言っておいた。同級生いじめはストレス解消。 ` ,┬─_− ´/ ヽ / / |/ \/ く (( /\ \ ヽ /, ─ 、/ \ /\ . ( l l j \ ___ / ヽ
/!/{ / ヾ--r
_ /  ̄ <_
_>`´
>>1 ___<_
> r‐'" ̄ ̄ ノ ̄ ̄`ヽ、―ニ 二
/ , | `ヽ/ ´`ヽ _ 三,:三ー二 豚とかいうな sopa_h!!!!!!!!
 ̄/ | ノヽ--/ ̄ , ` ̄ ̄ ̄
/ /⌒ヽ,| ミ } ...| /!
レ l d _}`ー‐し'ゝL _
| ヽ、_, _,:ヘr--‐‐'´} ;ー------
|/| \ ノ`ヾ:::-‐'ーr‐'"==-
ヽ/l/|` ー------r‐'"  ̄ ̄
|└-- 、__/`\-:、
__,ゝ,,_____/ \_」 \
( ) (、 , ,) || |‘ ,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,;;;;;;,,, ∧∧∧∧∧∧∧ ______;;;;;;''''" ''';;;;;;;;,,, / ̄ ̄ ̄ ̄\ < 石破天驚拳 > / _ノ_ノ:^) ''';;;;;;;;;,,, l ∨∨∨∨∨ l < > / _ノ_ノ_ノ /) ''';;;;;;;;;;;;;;;;;;;;;; | \()/ | ∨∨∨∨∨∨ / ノ ノノ// (| ((・) (<) |) __ / ______ ノ | ⊂⊃ | _.. r(" `ー" 、 ノ | .| ⌒ \.l/ ⌒ | | _. - '"´ "-、 ゙ ノ |. l + + + + ノ | ' " _.. `ー''"ー'" r\_____/"´ __ '"´ -" ̄ "- ̄ヽ / ----,,, ,,_.- ' " /" _ ----ヽゞ;;;,, ,,,,:;;;;;;;;;;;;;;;;;; '''''─ " (___-" ヾ ヽヽヽヽ'';;;;;,,,. ,,,;;;;‐″ | _..ヾ ヽヽヽヽ '';;;;,. .,;;;;;;' | ,,,-‐ '"´ ヾ__)__)__)_) ''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,,.,;;;;‐''' │ "─r'--,,,,,--''''''''
*は可変長引数で使う記号だとぼんやりと思っています。 *を理解していないからだと思いますが、 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
その例で、 alist.flatten の結果は、[1, "a", 2, "b"] p *alist.flatten ではそれがバラバラにされてpの引数になってるので、 p 1, "a", 2, "b" になってる。
>>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 初心者スレなんだから、もっとわかりやすく書こうぜ
>>202 横からだが、お前の説明の方がずっとわかりにくかった
カッコを省略しないことは重要、という見解はあるかな。
カッコの省略ただ単にコーディング規約に従えばいいだけで重要な部分ではない。 つけないとパースがおかしくなるような部分以外はスタイルさえ統一してりゃ好きにしていいと思うよ。
rubyでは begin なにか rescue Exception end を なにか rescue Exception と書けるそうですが、両者はまったくの同一なのでしょうか。 たとえば前者は速いけど後者は遅いとか、そういう落とし穴はありますか。 後者を使ううえでのデメリットがないのか知りたいです。
なにか rescue Exception じゃなくて、なにか rescue なんか
208 :
デフォルトの名無しさん :2011/05/02(月) 21:03:17.58
パフォーマンスはおいといて、 修飾子(後置)rescueには例外クラスを指定できず、 StandardError(とサブクラス)しか捕まえられない。
結城浩がRubyの入門書書かないかな?
>>206 経験上、後置rescueを書いた箇所はあとあと必ず揉めるし、必ず書き変える羽目になる
なので、最初から素直にbegin構造で書いたほうが見通しがいいと思うの
>>207-208 そ、そうだったんですか。おしえていただきありがとう。
>>210 そうなんですか。
eruby中で使おうと思ったんですが、erubyだと
<%begin%>
<%rescue%>
<%end%>
をかくのがめんどくさかったので、rescueをくっけるほうが簡単でいいやと
思ったんですけど、やめたほうがいいですか。
やりたいようにやるのが一番やで
213 :
デフォルトの名無しさん :2011/05/02(月) 21:47:22.14
trimモードならちっとはましかも。 % now = Time.now <%= now %> % if now.sec % 2 == 0 even sec % else odd sec % end
正規表現の先読みが理解できない。 >>> /(?=foo)bar/ =~ "foobar" => nil なんでこれがマッチしないん?
215 :
デフォルトの名無しさん :2011/05/03(火) 10:24:00.49
この手の記法は基本的に、幅がなく、位置(文字と文字の境界)にマッチする。 (?=foo) の場合は、「直後にfooのある位置」("foobar" の場合、fの左)にマッチする。 その位置から bar にマッチせよ、ということ。
「幅を持たない」って書いてあるじゃん /(?=foo)/ で "foo" までマッチはするんだけど、位置は動いてないんだ 動いてないってことは、直後の正規表現 /bar/ はまた "foo" の先頭からマッチを試される もちろんマッチしない 結果は nil /(?=foo)bar/ は 「文字列fooと文字列barが同じ開始位置から存在する」という必ず失敗する正規表現 先読みはマッチ記号入れないと思い通りには動作しない
それは(foo)かつb,a,rと続く文字 /(?<=foo)bar/
>>215-217 あーわかった、
/(?=foo)bar/ =~ 'foobar'
だと、いったん先頭から foo にマッチしたあと、開始場所がまた先頭に戻るわけね。
それが「幅を持たない」って言う意味か。なるほど。ありがと。
「ruby 正規表現 先読み」でぐぐったら
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html のページがでてくるんだけど、このページを見てもさっぱりわからかったんだよね。
「幅を持たない」というのがどういう意味か、まるで書いていないし。マッチング開始場所が戻ると書いてほしいな。
あとこれも。
> (?=re1)re2
> という表現は、re1 と re2 両方にマッチするものにマッチする正規表現で す。
こうじゃなくて、「re1とre2の両方に、同時にマッチする正規表現」と書いてくれればいいのに。
「マッチするものにマッチする」ってなんだよ。
先読みとか戻り読み駆使した正規表現読み書きしてるとだんだん脳みそ溶けてくるよね。
93%くらいの用途は正規表現のマッチメソッドを && や || で繋げて処理すれば済むんだが 人はなぜか正規表現の先読み戻り読みを使って一発で表現しようとする 正規表現オブジェクトいっこでマッチさせたい需要は理解はするがw
正規表現をマスターするには1つの言語を習得するぐらいの時間が必要だよね
正規表現の先読みって、どんなときに必要なの? 用途がさっぱりわからない。
>>222 if /re1/ =~ str && /re2/ =~ str then
のかわりに
@re = /(=?re1)re2/
if @re =~ str then
と書けるようになる
ぶっちゃけ、どこに条件を押し込むかという問題に過ぎない スクリプト構造を単純にするかわりに、正規表現に条件を押し込む 正規表現を単純にするかわりに、スクリプト構造側で条件を増やす
>>223 if /re1|re2? =~ str
でよくね?
まちがえた if /re1|re2/ =~ str でよくね? それとも速度に違いがあるんかな
>>223 ん、
/(?=re1)re2/ =~ str
と
/re1/ =~ str && /re2/=~str
は全然違うぞ。勘違いしてない?
str = 're1re2'
p (/(?=re1)re2/ =~ str) #=> nil
p (/re1/ =~ str && /re2/=~str) #=> 3
>>226 /re1|re2/ =~ str
どこかにre1かre2の少なくとも一方あればマッチ、どっちでもいいから最初のマッチ位置が返る
/re1/ =~ str && /re2/ =~ str
どこかにre1があって、かつre2もどこかにあればマッチ。re2のマッチ位置が返る
/(?=re1)re2/ =~ str
re1でマッチするか確かめ、そのマッチ位置(≠re1のうしろ)でre2にマッチすればre2の位置が返る。
全部違うお
/(?=re1)re2/ がマッチする例ってあるの?
>>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 }
subとかgsubみたいに「マッチした部分」を取り扱うメソッドだと先読み使うこともある。
233 :
デフォルトの名無しさん :2011/05/03(火) 14:55:31.97
Rubyでデスクトップ座標のx 100 y 200の位置をダブルクリックするというのは書けますか? 普段はAutoItを使っているのですがRubyではどこまでできるのか知りたくて
Rubyにはそんな機能はない ので、デスクトップの座標のどこそこをOSがダブルクリックだとみなす間隔で2回クリックしたことにできるAPI というのを直接なんらかの手段で呼べばいい
テキストファイルから内容を読み込んで処理するプログラムを書くときコンソールでファイル名を指定しても、リダイレクタで標準入力を選んでもいいようなプログラムとしたい時、ARGVの引数をみてgetかfileopenか切り替えるような条件で分岐するしかないのでしょうか? それとももっとスマートな方法がありますか?
>>235 標準入力がリダイレクトされてるかを判定して、
リダイレクトされていればされていれば標準入力からの読み込み
そうでなければARGV解釈(orARGF)でいいと思う
FileTest.chardev?($stdin) # 偽ならリダイレクトされてる
238 :
デフォルトの名無しさん :2011/05/03(火) 18:06:58.27
>>237 $stdtin.tty? ではダメなのかな。
239 :
237 :2011/05/03(火) 18:21:49.86
>>238 指摘ありがとうございます
tty? が普通みたいですね
何年も前に1度使ったきりでメソッドが思い出せなかったので
適当に検索して引っかかったものを書いてしまいました
240 :
デフォルトの名無しさん :2011/05/03(火) 18:34:29.84
暗号化と復号化で出来るコードを書きたいのですが文字列をランダムに並べ替えたものはどのくらいの強度がございますか?
本当にいわゆるランダムで並べ替えたのなら、復号不可能だから最強レベルだと思う 復号可能なら、それはそもそもランダムではない 公開鍵暗号とかそのへん調べるといいぞ 自分で実装してもあんまり勉強にならない
鍵配送問題とか気にしないでいいならワンタイムパッドで
復号不可能な暗号ってなんだよ 揚げ足取らないで質問の意味が分からないと返してやれば良いのに
245 :
デフォルトの名無しさん :2011/05/03(火) 19:28:15.33
暗号化してみました l%20P.%21r%21%20hewoeHllI%20i%20kdPlo これ解読できますでしょうか?
>>241 DH共有鍵とか勉強する価値はあると思うけどね。
実際使うときはopensslを使うわけだが。
md5とsha1は復号できないよね一方通行だから
もともとハッシュの場合は情報が落ちるので 普通は一対一対応ではなくなってしまう それに加えて一方向ハッシュの場合は、原像計算困難という特性がある
md5とかは暗号ではないんじゃ?暗号学的ハッシュ関数とは言うけど まず暗号ってのは特定の人物にだけ読めるようにしたいってものだし その特定の人物が複合化して読めなきゃ暗号としての存在意義がねぇ
ファイルにしてパスワードつきzipにするのがいちばん簡易で広範に機能するということが判明している パスワードは別途電話とかで伝えとけw
LinuxとかWindowsじゃないの使ってる人、Ruby本体なんかのマニュアル閲覧どうしてる? Windowsだとchmでえいやーと検索して表示だったんだけど、もっと安楽なのない?
>>252 るりま入れてPath通ったところにシェルスクリプト置いてrefe2で検索。
検索して調べたいんじゃなくてマニュアルを眺めたいときはserver.rb立ててブラウザからローカルホスト
>>252 初心者には、Windowsじゃなくてもchmがいちばん手軽だとおもう。
refe2とかコマンドライン型は中級者以上の道具。個人的意見だけど。
>>252 chmをアンパック読めるようにするツールがある。
名前は忘れた。
Ubuntuではchmseeというそのままのアプリケーションが存在する Rubyマニュアル読み込んだだけで1万5千個のファイルがキャッシュディレクトリに展開された 容量90MB これから全文検索するのでもちろん検索は遅い
refe2ぐらいは使えてもいいんじゃないかな。便利だし。 そんな手間でもないし、難しいこともないから。
#=> 実行結果にみたいなのをつけてくれるライブラリなんだっけ?
xmpfilter
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 >
=>ってロケットっていうのか…
<=>を宇宙船って言うのは聞いたことがあるが ロケットは初耳だなあ
263 :
デフォルトの名無しさん :2011/05/04(水) 00:01:40.26
単にプロンプトの:RETURNを弄ればいいんじゃぁ。
SFの見すぎだろ。 <=>はどう見てもどら焼きにしか見えない。
たすけてtkが動きません サンプルどおりにやってるのに
rubyのマニュアルといえばWebのマニュアルというかリファレンスはやたら読みずらいな JavaとかPHPでweb上のAPI見る癖がついてると「ありがたいけど、みづらい‥」と思ってしまう
=>でhash rocketって言うよ
旧マニュアルは読みやすいと思うが 最新のは俺も読みにくいと思う
>>265 「なにもしなくても」Ruby/Tkが動作するのはActiveScriptRubyだけ
それ以外は別途Tcl/TKのインストールが必要
rubyどころかプログラミング初心者なんだが ちょっと楽しそうかもと思って手を出そうとしたら、 RadRailsのインスコでつまずいたわ・・・ なんで起動しねーんだよ・・・ 日本語化どころかエディタが起動しねーって何だよ
テキストエディタ+ターミナル(コマンドプロンプト)でいいじゃない
最初はそういう事に丸一日かかったりするけど、 あちこち寄り道してるうちに色々とできるようになってくるもん。
このスレでもすすめられてる「楽しいRuby」買ったら、 ある程度Rubyに特化したエディタがいいってあってさ、 テキストエディタはあるんだけど、まぁその方がいいのか、と思ったら、これだよ・・・ 一日かけて出来ればいい気がしてきたわw AptanaのWEB見て、Studioって何?2?3?え?なに? って状態だもん
Rubyに特化っていうのはそういうことじゃないと思うw Ruby用にキーワード強調表示や自動字下げしてくれるエディタってこと たのしいRubyの範囲なら無くてもどうってことないよ あとRadRailsみたいな統合開発環境はこのスレでは人気が無いので 質問してもレスがつかないかもしれない
>>273 まったくの初心者なら、だれか知ってる人が近くにいないと、どんな言語でも
きついと思うよ。
ときどきカンのいいやつがいて、独習できちゃう人もいるけど、多くの人は
そんなことないと思う。
初めて自転車にのるときのようなもので、一人で練習してできる人もいるけど
ふつうは親が補助してやって乗れるようになるでしょ。
まあ頑張ってこのスレでもいいから気長に勉強してくれ。
事前に期待される、概念的に必要なもの(Windows版) キーボードから文字を入力してファイルをどうにかする黒い画面があるらしいこと ディレクトリパスを元にした(エクスプローラ上での)移動と操作の概念 Wordではないテキストファイルというモノがあり、メモ帳で編集するということ 文字化けの原因は英語とシフトジスとユーティーエフはちとかいう日本語の記述法があるから 最低限あると便利なエディタの機能 「Rubyの予約語に対応」した着色機能(シンタックスハイライト) 改行支援(オートインデント、スマートインデント) 行番号表示
Rubyマニュアル、HTML固めたのってないんだな 読むだけなのにWEBrickが起動するのがイヤだったので、 「localhost:10080 を wget -r でリンクまるごと保存すればメインの部分は読めんじゃね?」 と思って現在処理中 うん、終わらないw 現在32MB クエリ文字列つきのリクエストどうしよう
webサイトはPHPで作り、携帯アプリはJavaで作る場合、Rubyを覚える場合メリットはありますか?
メモリとスワップ使い切った
キャンセル
よく考えたら半分くらいは月に1回くらいしか読まないし、
もう半分くらいは年に1回読むか怪しいし、
よく読むものでもクラス全体眺めて探すなんて1日数回あるかどうかなので、
必要なときに動的生成させたほうがマシだった
見積りは実行前に行ないましょう
>>278 それHTMLじゃないぞ
>>279 webサイトを作成したり携帯アプリを作成したりするのではないときに役立ちます
>>280 旧リファレンスマニュアル 20051029版
ってとこをミロ。htmlのがある。
version 1.6 〜 1.9 対応
原著:まつもとゆきひろ
だからまだまだ使える。
その「1.9」 は 1.9.0 のことのような気がしてならない
公式適当だからな
最近はwebサイトのるりま検索使ってるわ ブラウザの検索バーから検索できるようにしてる
これ便利だな &:symbol File.open('text', &:readlines)
RubyでGuiを作る場合にメジャーなのって何ですか? Pythonならtkです
>>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みたいなのにも便利かも。
>>291 なんか直感的じゃなくてヤな書き方だなぁ。
ストリームがちゃんと閉じられてますよ感が無い。
tkとかgnome2とか でもrubyのGUIライブラリはどれもドキュメント不足で結構めんどい。 もともとCUI文化な上にドキュメント少ないからGUI作る人が増えないし、 GUI作る人が増えないからドキュメントも増えないみたいな袋小路。
>>293 File.openだと微妙だけど
array.sort_by(&:length) とかだと個人的にはこっちの方が直感的に読める。
>>295 array.sort_by{|e|-e.length}の場合はどう書くのっと。
やめようよ、こんなの絶対おかしいよ。
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>'
array.map(&:length).sort_by(&:-) :-)
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>'
>>274 違うのか・・・(´・ω・`)
統合開発環境ではないエディタ、RDEだな!
よし、入れてみる!
>>275 HTML、CSSまでは独学で来たんだが
プログラミング言語は次元が違うというか、読めないw
いままでは英語で何となく読めてたのが、急にアラビア語になった感じ
気長に勉強してみるわ。
検索してみたのですがどうやらRubu1.9.2でredmineをエラーなしで動かせている記事がありませんでした には不可能です 世の中の偉人方に出来ないものを私のような小生には不可能なので諦めたいと思います
>>296 個人的にはマイナスでソートするの嫌いだから
array.sort_by(&:length).reverse
RDEはRDEでいろいろトラップまみれだから サクラとかApsaryとかXyzzyとかその他もろもろ高機能テキストエディタの Rubyモードで書いて「コマンドプロンプトに送る」あたりで実行するのがいいかも。
VMにUnix系のOS入れてVimなりEmacsなり
>>303 RedmineってたしかRails2.xだよね。
そしてRails2.xはRuby1.9.xをサポートしてないはず。
>>305 トラップとかあるのかよ
サイト見る限りよさそうに書いてあったのに
サクラでいきます。
ほんと助かります。ありがとうございます。
Redmine は Xubuntu 10.10 の Ruby 1.8.7 で動作させてるよ Ruby1.9 で動作させる意義を見いだせない あとたった今、自分用 Redmine のチケットに長文で投稿したはずの文章が「eucJP-ms」の1語だけになった 今日はもう何もやる気が起きない たぶん投稿文中のHTMLのタグや<pre>とかの複合のなにかだと思うのだが、原因究明する気すら起きない Firefoxからit's all Text!経由だったので、もしかしたらそれ絡みかもしれないがもうやだ 外部エディタに別ディレクトリバックアップ保存機能があればよかったんだが、軽さ優先で選定に手を抜いた
>>302 Rubyのスレでこんなこと言うのも難だが
HTML、CSSと来たなら
最初のプログラミング言語はJavaScriptのが良くないか…
Ruby1.9への移行っていつぐらいなの?
redmineの他にも良いものがあればそれを利用したいと思います webにインストールして利用するプロジェクト管理についての話題はどこの板のどのスレで伺えばよいでしょうか?
>>312 Ruby1.8に慣れてるのなら今すぐが最適
ただ、文字列を使用するライブラリは遅いので注意
Rails が移行すればいいんだろうけど、たぶん絶対しないと思う
UTF-8しか使わない場合はRuby1.9から初めてもいいですか? 初心者です
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
>>317 Shift_JISとEUC-JPとUTF-8が違うものという認識があり、
エディタとかでファイルの文字エンコーディングを書き換えたり意識したことがあって、
なにかわからないことがあってぐぐった結果がRuby1.8専用の書き方だったとしても
めげない程度のリテラシがあるのなら、最初からRuby1.9.2を使ってもいいよ
1.9の本も出てるし いまさら1.8から身につける必要はあんまり感じないな
Railsって何?
Ruby1.9が流行らない最大の問題はRedmineとRailsの対応の遅れである
>>323 設定ファイル集というとStrutsのほうがイメージ強いな
Railsは「設定の前に規定」がポリシーだし
___ _ / ____ヽ /  ̄  ̄  ̄ \ | | /, −、, -、l /、 ヽ | _| -| ・|< || |・ |―-、 | , ―-、 (6 _ー っ-´、} q -´ 二 ヽ | | -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | | | ̄ ̄|/ (_ ∧ ̄ / 、 \ \. ̄` | / ヽ ` ,.|  ̄ | | O=======| `− ´ | | _| / | | (t ) / / | 「Rubyコミッタに選ばれちゃった!」 「まじかよすごくねーなwww」
>>320 前にもあったが、2つ目の言語としてなら1.9.2で一発なんだよね
なんで今の面倒な時期を狙い済ましたように
初めてのプログラミング言語としてRubyやろうとするんだ
説明めんどくせえ、とかちょっと思う
>>327 Python3も似たような広報的問題抱えてる
まあ、よく考えたら他の言語も大体似たようなもんだったりもしたんだけどw
バージョンがひとつしかなくて非互換的新機能もない、という状態の方が稀
酷い言い方だが、混乱する初心者は切り捨てでもいいと思う
非商用でノンサポートな言語はこれまでもそうだったし、これからもそうだろう
gemでインストールしたやつを全てアンインストールする方法ってありませんか? パッケージがたくさんありすぎてひとつひとつ入力するのがきついので もし存在しない場合はrubyinstallerでインストールしなおします
330 :
デフォルトの名無しさん :2011/05/04(水) 23:08:17.02
>>329 gemのインストールディレクトリの下の
binとdocとgemsとspecificationsの下のディレクトリを全部消す。
331 :
デフォルトの名無しさん :2011/05/04(水) 23:08:48.37
おっともちろんディレクトリだけじゃなくファイルもね。
レジストリは修正しなくていいの?
333 :
デフォルトの名無しさん :2011/05/04(水) 23:33:31.41
>>311 なん・・・だと・・・
いや、イメージの問題なんだけど、
JavaScriptって古い&重いってあって、
プログラミングやろうかなってときに頭になかった
refe2もるりまサーチも刷新版も芋すぎて使う気になれん! findしてソースコード読んだ方が早いがな!
>>334 古いか新しいかと言えばJavaScriptはRubyと同い年くらい。
速度は改善されてて処理系も現在進行形で進化中。
むしろRubyよりホットな言語だろう。
ただ動作環境が事実上Webブラウザだけなので、
(サーバーサイドJSも昔からあるが声のでかい奴が叫んでるだけ)
ファイルを処理するとかなら使いづらいだろう。
今はRubyでゆんゆんしてるけど、 もし入出力がサポートされててコマンドラインから叩けるV8がでたらそっちに移行するかもしれないな。
ブラウザから離れたJavaScriptなんて高が知れてると思うなあ もし離れてもやってけるなら今頃みんなRhinoでも使ってる
>>337 まさにnode.jsのことだな。今すぐ移行しろ。
>>336 node.jsは基本的なファイル処理も十分できる。
ただバージョンアップが激しいのでライブラリの仕様が安定してないのが弱み。
>>338 Rhinoは遅いけどnode.jsは爆速。Rubyがどう頑張ってもこの速度にはとうてい追いつけない。
イベントループモデル流行りだしてんな といっても同時接続数が多いサイトじゃないと効果実感できんと思うが JavaScriptは保守性に難がありすぎると思う つーかいきなりnode.jsの話がでてきたがWebProg板向きの話だと思うが 少なくとも初心者スレ向きの話題ではないわな
node.jsが人気あるのは尖がってるからで、だからその筋の人に人気 一般プログラミング従事者や初心者には若干荷が重い JavaScriptで作られたnode.jsで作られた何か、というのが流行した頃合いなら、 適度にわかりやすく適度に便利で適度に遅いはず Rubyで作られたRailsで作られた何か、と同様に
>>340 >JavaScriptは保守性に難がありすぎると思う
これってJavaScriptそのものに難があるってことじゃなくて、
HTMLやらAjaxやらが絡んでくるからしっちゃかめっちゃかになるって話だよね…?
Rubyinstallerで入れたらまずやること gem updateでgemを最新版にする 他にやることありますか?
pikを入れる
Rubyの次に学習すべき言語は何がおすすめですか? やはりHaskellでしょうか。
英語がいいと思うよ
Haskellにこだわるのが意味わからんw
JavaやC++など変数が型を持つオブジェクト指向言語もおすすめ
rubyが最初の言語だと、次はどの言語選んでもキツいだろうね。
Rubyがカバーしていない部分を新たに覚えるだけ。
ほおお、上に出てきてた奴 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
>>336 同い年なのか。
単に自分が知っているJavaScriptは昔からあって
Rubyは最近って意識だったんだと思う
むしろホットか・・・orz
>>337 の書き込み内容とかnode.jsとか、意味が全然わかんないw
徐々にわかっていくものと信じたいわ
ウェブサイト作りの一環でプログラミングを使いたくなったときの勉強と
例えばJaneを作るときのプログラミングの勉強って全く違うの?
デスクトップアプリケーションと ケータイアプリと Webアプリケーションと 自分のパソコンの中でシェルから起動してなんかやらせるスクリプトは 勉強の方向性というか追加で覚えることがまったく違う 日常的にいちばん便利なのが4、 いまのところ趣味で充実感を得やすいのが3、 初期投資に見合った収入になる可能性が一番高いのが2、 どっかの企業に就職して手がけないと今後割に合わなそうなのが1
その中で
>>302 が習得しやすそうなのはWebアプリケーションだな
JSとRubyは担当するところが全く違う
(JSはブラウザ側、Rubyなどはサーバ側がメイン)
んでHTML、CSSとWebアプリ界のブラウザ側での記述を学んで来たなら
取っつきやすいのはJSじゃないかな?って思った
まあ、いきなりサーバ側やるのもダメじゃないけどね?
Rubyはどうしてもちょっとしたツール作成言語って感じになるなぁ。 所詮趣味レベルなんだよね。 仕事で使う機会は無いし(あったとしてもRails使ったWebサイトぐらいか?) 何より、あえて潰しの利かないRubyを選ぶ理由が無い。
>>302 がひと月でもふた月でもプログラミングを学んで
幾多の妄言に惑わされなくなることをお祈りしときます
>>359 Windows環境ならバイナリモード必須だね
Linux環境でもやっておいたほうが無難だろう
>>360 やはりそうですよね。
ありがとうございました。
これa.mp3は1回読んだら使ってないからさっさと閉じちゃえばいいのに。 x = File.open('a.mp3', 'rb') {|file| file.read }
Web系でRubyを選択する意味はないと思う
Railsはまだ需要あるだろ。 PHPでいいじゃん、ってなることが多いけど。
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
>>365 ああ、あと、CSVライブラリは1.9でインターフェースが大きく変わったようだよ。
古い灰色背景のリファレンス見てるならるりまにかえたまへ。
>>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
>>368 syntax error, unexpected '=', expecting tASSOC
370 :
デフォルトの名無しさん :2011/05/05(木) 20:38:37.02
そのくらいわかれ、と言いたいところだが、 => にしておけ。
失礼します、るりまってなんですか?
>>355 わかりやすい解説ありがとうございます。
追加で覚えることが違うと。
趣味の範囲だしWebアプリケーションが楽しそうだ
>>356 なるほど、そういうことだったんですね。
>>358 ありがとうございます。
がんがります。
まぁでも早速
>>357 、
>>363-364 あたりを見て、
Rubyってそんなによくないの?なんて惑わされたり。
惑わされるというよりは、ここにいるRuby好きの方が
日常的にどういったときにRubyを使ってるのか気になったって方が正しいですが
>>373 どもです
公式サイトのRubyリファレンスマニュアル刷新計画 chm版 1.9.2用使ってますが公式サイトで見れるものとはこれとは違うのですか?
376 :
365 :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>'
続行するには何かキーを押してください . . .
ってエラーが出ました
>>374 それは基本的に新しいので、古過ぎるのかもしれないと考える必要はない
古すぎてよくないのは灰色のやつ
>>372 ・ とりあえずどんなものでも全部オブジェクトにする
・ スクリプト言語なのでその場でコンパイル
・ 誰も止めない誰も読めない自分の足を撃ちたいはいどうぞ(1ダースの銃(歌って光る変形ギミック付き)
・ 1クラス1ファイル志向なので最終的に実行するまでファイル読み込みいっぱいおっぱい
というRubyのポリシーが、
・ 作成言語は利用者数が多いほうがプログラマが安く買えて良い
・ ユーザーは待ってくれないのでとにかく速く動けばそれで良い
・ サーバにインストールされてないとかマジ問題外
・ ソフトウェア工学のお勉強は大学でやれカス
という商用サイト作成ポリシーとあんまり合致しない
>>376 だからエラーメッセージをちゃんと読んでマニュアルを調べろ、と。
標準添付ライブラリ(All libraries) > csv > class CSV
>>368 CSV.foreachに'r'なんて指定できないぞ
380 :
365 :2011/05/05(木) 22:39:17.01
すみません何とか読み込めたのですが、tsvに"が含まれているとエラーになります 文字列に"が入った場合は取れないのでしょうか? a 100 aは"apple" b 200 bは"banana" c 300 cは"chokoreeto"
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| でも読めた
書き忘れました
>>381 はWindowsでのことです
TSVの改行が\r\nになってます
>>380 CSV.foreach('test.tsv', col_sep: "\t", quote_char: "'") do |row|
とかにするとどうだろうか
384 :
365 :2011/05/05(木) 22:51:38.82
>>381 さんありがとうございます
a\t1\t"foo"のように文字列を"で囲った場合は読めたのですが
a\t100\taは"apple"
のような"で文字列を囲わない感じのでは読めませんでした
>>380 quote_charはデフォルトで"になってるから、:quote_char => "'"とか違うのを設定
RubyのマニュアルもPHPのマニュアル並みに全てのページにサンプルをついてればなぁ
387 :
365 :2011/05/05(木) 22:59:15.05
出来ました!ありがとうございます
>>366 ー386さんありがとうございます
388 :
365 :2011/05/05(木) 23:15:29.58
実はソフトウェアの更新確認ツールを作りたかったのですが、
変数listの内容を外部ファイルにtsvで保存したかったのですが
何とか先輩方のお力のお陰でtsvを読み込めるまでにいたったのですが
tsvに書いた正規表現パターンがうまく動かないので、外部tsv化は挫折しました
また勉強して外部tsv化にチャレンジしてみたいと思いますが1年ぐらいかかりそうです
途中ですがコード張っておきます
http://codepad.org/H3RSUoLn
HTML解析しようと思っていてどの言語使おうか迷ってます。 RubyでHTML解析って簡単にできますか?
HTMLの解析そのものが目的なのか、HTMLを解析してデータを抜いたりすることが目的なのか。
解析出来るとは思うが、他に良い言語/ツールがありそうな気もする
>>390 「ruby nokogiri」でぐぐれ
>>390 慣れてる言語でやったらいいよ
どの言語にあるHTMLパーサも一癖あって一長一短
Rubyは比較的やりやすい部類に入るかと
まあおれならyaccで一から作るね
hpricotとか使ってみたら?
テキストから読み込んだ文字列を正規表現として扱うとか Regexp.new(str)で普通にできそうだけどなあ。 エスケープ周りで失敗してるのかね。
>>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...
本当にド素人なんですがお願いします とりあえずruby覚えるためにRubylifeってサイトのRuby入門を 上からやってたのですが、日本語の文字入力のところで さっそくつまってしまいました print("日本語の表示");を実行すると 文字化け以前にエラーが出てしまいます バージョンが違うせいで上手くいってないのか、 何か必要なものインストール出来てないから上手くいってないのか わかりません ちなみにバージョンはruby 1.9.2p180のようです プログラムは大学在学中にCを授業でやった程度です
>>401 $stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
>>399 適当なこと言うな禿げ。
Regexp.new(またはRegexp.compile)をリファレンスで引いてみましょう。
evalもあるよ。
>>394 お前にとって「パーサー」はどう訳されてるんだ?
>>401 スクリプトの先頭に
# encoding: shift-jis
文字コードは適当に指定してね。
1.9は結構1.8とは勝手が違うから、1.9に対応した書籍/サイト(書籍はいっぱいあるけどサイトは知らない)で勉強した方がいいと思うけど、
どうしてもそこで勉強したいならまた詰まったところで質問にいらっしゃい。
RubyのCGIスクリプト配布してるサイトってありませんか? そういうリンク集みたいなの探してます
>>402 >>405 ありがとうございます
今度はtest1-1.rb:1: unknown encoding name: shift-jis (ArgumentError)
とエラーが表示されました・・・
こんなに早くつまづくとはダメぽかもしれんorz
>>407 それはぼくがわるいですごめんなさいShift-JISとか普段使わないんですまじごめんなさい吊ってきます
shift-jisをsjisにしてくだしあ
おりょ? inspectの結果もoptionsもencodingも一緒なのに ==でfalseになるってどういう状況?
>>408 Windowsならsjisよりcp932のほうがいいと思う
>>404 パースしただけで解析完了とか言ったらグーで殴られるぞグーで
HTMLの解析でnokogiri勧めたら恫喝されるなんてすごいスレだな
415 :
401 :2011/05/06(金) 12:24:49.07
print("KCODE=", $KCODE);を実行したところ test1-1.rb:1: warning: variable $KCODE is no longer effective と出て例題どおりに実行されません・・・ 文字列の基本的な扱いを分かっていないためこんなことになってる とおもうのですが・・・ 良かったらその辺の基本を網羅できそうなオススメ書籍も 教えてもらえると助かります 在学中にmatlab使った数値計算してたんで、数値とか変数使うのは まだ少しはマシかと思うのですが、文字の扱いが分からない・・・ 大学でもっと勉強しとくんだったorz
>>415 no longer effective って言うぐらいなんだから
1.9ではもう$KCODEを使ってないんだろう
なのでその例題が1.9には対応していない可能性が大
万人向けの入門書はないけど
寄らば大樹の陰ならたのしいRuby
>>415 で、 Windows の Ruby 1.9.x で日本語を扱うには、まず
・ スクリプトファイルの記述の文字エンコーディングを自分で決めるor認識する
いわゆる「書いたスクリプトファイルをエディタで保存するときの文字コード」
昔の Windows なら Shift_JIS 名義(実際はWindows-31J)、ナウでヤングなフレッシャーズなら素直に UTF-8
時々優秀なエディタが UTF-8 によく似た選択肢をファイル保存時にずらっと提供してくれることがあるが、
その場合は「BOM なし」「リトルエンディアン」「UTF-8n」のようなものを選ぶ
つぎ
k = "3+(2+5)*5" この変数の中身を計算式として評価する方法ってありますか?
つぎ ・ スクリプトファイルの文字エンコーディングを、スクリプトファイルの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の設定)
422 :
401 :2011/05/06(金) 12:57:21.43
みなさんありがとうございます。すごい説明が分かりやすいです 1.9.1ダウンロードさせて1.9.1では使えない例題とはワナだった なんか教えてちゃんになっててすいません とりあえずご飯がてら本屋寄ってたのしいRuby第3版見てきます
>>420 文字列の中身をRubyスクリプトとして処理させたいならeval
せっかく書いたのでその3、やっとスクリプトの記述に入れる # encoding: UTF-8 puts '日本語' これを hoge.rb として UTF-8 で保存し、コマンドプロンプトから ruby hoge.rb のように実行! うむ化けた puts は受け取った文字列を、なにもなければそのままのエンコーディングで画面(とか)に表示する Windowsのコマンドプロンプトは UTF-8 を解釈しないので、UTF-8 文字列をそのまま表示させてもいわゆる化ける
その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等では表示できない)
PHPでいうprint_rとvar_dumpみたいなのってRubyではどういうのでできるのですか?
まったく同じかは知らないがpでたぶん事足りる
おわり、
>>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 と呼ばれることもあって、実はレアな文字の含まれ方がちょっと違うんだがとりあえず忘れよう
phpのvar_dumpは例えば $a = 123; var_dump($a); で変数の型と値をチェックできるんだよね Rubyでもvar_dumpと同じような機能使ってデバッグしたいんだけど
>>429 php と Ruby はあまりに違いすぎるので
あまりRubyでphpではphpではと呪文を唱えない方がいい。
Rubyには変数に型なんてものはないっす。
中身が見たければp
出来ないんですね、了解しました
>php と Ruby はあまりに違いすぎるので >あまりRubyでphpではphpではと呪文を唱えない方がいい。 こういう野次飛ばす奴たまに見るけどいらないね
p hoge で hoge と名付けられたオブジェクト(通称「変数hogeに入っているオブジェクト」)の概略が表示される どの程度概略にするかはクラス設計者の一存なので(実際は hoge.inspect を puts している)、 クラス名などは表示されないこともある オブジェクトのクラス名を得たい場合は自力でインスタンスメソッド class を使う p "@を先頭につけるとエラーが出なくなりますwwwwwww".class #=> String まあ、めんどくさいっちゃめんどくさいのだが
>>414 ぐぐった
この量は確かに若干ひどい
まあ、若干だが
全部どっかにすっ飛ばすタイプじゃないので、良心的な部類
>>422 アフィサイトが正確で満足いく説明を自前で提供してしまったら本を買ってもらえないじゃないかw
不満足不十分なんかよくわからんけど動かんやっぱ本買うかこれがいいの?、みたいな説明がベスト
435 :
401 :2011/05/06(金) 14:07:42.98
王将うます
>>428 ほんとありがとうございますorz
すごい勉強になりたました。自分ひとりでは絶対分からなかったですw
本屋2件寄ったのにRubyの本ないんだが!クソがぁぁぁ
アマゾンぽちるかな・・・
最終的に
@Ruby使ってHP上から必要なとこもってきて
データをPCに保存する
AHPにアクセスして、プログラムで色々な操作をやってもらう
みたいなことしたいんですが
この本も一緒に買っとけってのありますか?
>>435 いろいろな「操作」の内容にもよるけど、
入門本のあとはレシピブック系を読むが吉。
そのあとはリファレンスでも眺めましょう。
>>435 たのしいRubyのような入門書ひとつで踏み出せる範囲に見える
HTTPやHTMLの知識は必要かもしれないが、罠はないしネットの解説サイトで充分
>>435 レシピブック(逆引き本)に+1
Rubyレシピブックはカバーがぼろぼろになるまで使った
>>437 それでも別にいいんだよ
質問のやりとりが生むものは個人教示だけではないのだし
回答を読んだ別の人の役に立てばそれで何も問題はない
「〜しない方がいい」 横からだが上から目線な人は消えてくれ
レシピブックは検索すればだいたい同じような内容がいつかどこかに出てくるので、本質的には買う必要はない が、その時間を金で買うぜブルジョワだぜ賢い消費者だぜベイベーという人にこそお勧め いろんなクラスやメソッドの使用法がおおむねいわゆるイディオムのような書き方に沿ってるので、 メソッドの使い方が色々できるのはわかったがどれをどう書くのが一般的なんだ、とか悩むときにも役立つ 大雑把に2種類あるのだが、立ち読みでもしてピンと来るほう(で、1.9対応を謳った版)を買うといい
〜しない方がいい とか 〜 いらない とか 〜 消えろ 系発言は階層が深くなればなるほどなるほどいらない度がアップしますね。
phpが話題に出てくると決まって荒れますなあ。
お互い見下すようなレスは慎めでFA
>>444 「彼」はプログラミングの知識がまったくなく、
ム板の新着レスが技術的な話題で埋まっているとストレス解消できずに悪態をついて逃げ出す
逆に「自分でもレスできる、専門性の全くない話題」には涎を垂らして飛びつく
ム板を利用するなら、「彼」の習性は頭に入れておいたほうがいい
447 :
デフォルトの名無しさん :2011/05/06(金) 14:53:06.91
railsで、という質問なら(ビューで)debug(obj.class)とかdebug(obj)が回答になるんだろうか。 如何せんrubyで、という質問だものな。
どうして
>>426 に
>>427 で終了しなかったのか理解に苦しむ。
添付のcgiライブラリが微妙に使いにくいんだけどなんかいいのない?
>>448 p はクラス名を必ずしも表示しない
Object#inspect そのままを使ってるならいいんだけど
CGIライブラリに望むものが各人全く違う、というのがcgi.rb刷新計画の唯一のプラス収穫
どんな機能が欲しいのか言ってくれれば当たりがあるかもないかも
Perlの多次元の連想配列 $array{$w1}{$w2}みたいなのってRubyでもできますか?
Perl と Ruby はあまりに違いすぎるので あまりRubyでPerlではPerlではと呪文を唱えない方がいい。
>>449 少なくとも組み込みとか標準添付のものはクラスわかるようになってなかったっけ?
リテラルがあるものは「表示の仕方見てお察しください」だけどさ。
>>450 全く同じかは知らないが配列の中に配列/ハッシュ、ハッシュの中に配列/ハッシュ、
全部いくらでも入れ子にできるよ。
>>450 残念ながらできない
多次元配列や多次元Hashをリテラル形式で取得することはできない
単なるネストした配列やハッシュのメソッドチェーン呼び出しにしかならない
ものすごく慎重に作成すれば似たように動作するものを作ることは可能だが、大変効率が悪い
>>450 ハッシュの中にそのままハッシュを突っ込んで入れ子のハッシュにすればおk
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次元連想配列じゃなかった?
そもそもやりたいことは2次元ハッシュなんだろ? だったらそれはRubyでは何で代用すべきかっつーたらハッシュのハッシュじゃね?
>>456 それで、引数が2個の多次元配列/連想配列と、
ネストした配列/連想配列のチェーン呼び出しの違いが
初心者スレに質問に来る人に対してどういった問題を引き起こすのですか?
hash = Hash.new {|h, k| h[k] }
多次元配列のように扱えればそれは多次元配列である デイブ
>>456 arr = [[0,1,2],[3,4,5]]
arr[1][2]
の[2]がarrと直接関係あって欲しい状態って例えばどういうときですか><
>>457 2次元「的」な位置だから実際にどう格納されてるかは問題ないんじゃねw
$arrayが引数を全部受けとってるということが重要だと思う
この「多次元配列っぽく見えて実は単なるメソッドチェーン」というのは
個人的にRubyのいちばん良くないとこだと思う
シンタックスシュガーにもほどがある
>>459 存在しない第1キーを指定するとNoMethodErrorとか
[] メソッドさえ動作すればデータ構造ミスってても動くとか?
完全に妥当な構造である場合には問題はないんじゃないかね
というか言語比較的な質問には「いや同じではないです」という重箱角つつきな回答が来るのは必然かと
>>463 でもここ初心者スレだからなあ
そもそも質問者
>>450 は「同じもの」ではなく「みたいなの」を求めてるんだ
つまり「Rubyではこういうことするとき、何を使えばいいの?」と質問してる
だったら回答は「入れ子のハッシュ」で何も間違ってないだろ?
擬似で動作するなら擬似でもいいじゃんと思う 確かに、擬似の範囲からこぼれたときは初心者的には悲惨なんだが ホントはメソッド呼出の連続であるという知識は必要ではある 言語として多次元配列をサポートしているわけではなく、 そう見えるようにそう動作するように自前で全データをネストさせなければならない
本当他の言語が絡むとこういう風になるよねwwwwwwwwwwww
多次元配列とはなんぞやってことが完全にスルーされてるからなあ そりゃ話がまとまるわけがない 荒れる代表例の値渡しと参照渡しの議論とおなじ
>そう見えるようにそう動作するように自前で全データをネストさせなければならない 飼い慣らされてるから当然だと思ってるのかもしれないが、世間的にはこれは異常なのでそのへんよろしく 内部配列が丸見えな時点で何かがおかしいと思えよ
てか、Perlのハッシュも確か1次元だったような… $h{$k1}{$k2}ってやった場合、暗黙に「ハッシュのリファレンスを要素とするハッシュ」が作られるだけだろ? それってRubyのハッシュのハッシュと何が違うんだい
んーと、(特に初心者レベルの場合は)多次元の配列/連想配列の大半が、 ただのネストで代替可能な用途で使われていることを考えれば、 別にネストのメソッドチェーンでも何の問題もないような。 内部配列が見えて困ることもそうそうない。
方針として 大半の用途は配列やハッシュのネストで十分だべ、 本質的な多次元配列が欲しければ自分でクラス作れや というだけじゃね。 探せばライブラリもありそう。
これはこれで問題が山積みだけど、 メソッドチェーンじゃない多次元配列というと、 ary = Hash.new ary[[0,0]] = 1 みたいな方法もなくはない。
まあ、nilに対するNoMethodErrorが出る理由だけは理解してたほうがいいかも 「多次元配列」を作っても碁盤の目のように全要素が初期化されるわけじゃないので
$h{$k1}{$k2}は、$h{$k1}->{$k2}のシンタックスシュガー。 Rubyと同じだね。
475 :
デフォルトの名無しさん :2011/05/06(金) 17:31:54.35
しまった。 Perlで正体が一次元配列なのは $h{$k1}{$k2} じゃなくて $h{$k1,$k2} のほうだったか。 (区切り文字は $; (デフォルト 034))
narrayェ……。
477 :
450 :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 }
>>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
ごめん誤送信
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 こういうこと?
>>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]= []}}
の間違いです。他にもなんかあるかも。
.push=
ごめんね、動作テストしてから書けばよかったや。 手直ししてまた投稿します。
Rubyのフレーム枠はRORしかないのですか?
485 :
デフォルトの名無しさん :2011/05/06(金) 19:34:24.44
sinatraとかpadrinoとかcampingとかmerbとかramezとか
動作テスト済み
>>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
>>477 テキスト処理をするプログラムっぽいがいったい何をしたいのものかさっぱりわからん。
標準入力で英文食わせたが、同じのがでてくるだけじゃね?
>>487 マルコフ連鎖。
短い文じゃなくて長い文いれた方がいいよ、
俺は聖書のGenesisまるまるで動作テストした。
>>487 これはめんどくさいのでとりあえず単語1つ版ので説明すると、
1.文頭に来た単語を全て記録する
2.とある単語の次に来た単語を全て記録する
1.ランダムに文頭に来た単語を出力する
2.1で出力した単語の次に来たことのある単語のうちいずれかを出力する
3.2で出力した単語の次に来たことのある単語のうちいずれかを出力する
4.3で出力した(ry
...
n.(n-1)で出力した(ry
という手法で文章を自動でランダム生成するやり方があって、
ここで出てきてるのは「2つの単語の並びの次に来た単語」を記録して、
最新の2出力の並びの次に来たことのある単語のいずれかを出力して文章を生成する
というもの。
Rubyのソートアルゴリズムってクイックですか?バブルですか?
sort と sort_by でも何か違ったはず
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
何でクイックソートを実装したんだろう 安定性ないのに
速いからじゃない? 安定ソートが欲しければ i = 0 ary.sort_by{|e| [e, i += 1]} 「安定じゃなくてもいいから速い方がいい」ってパターンの方が多いだろう、きっと。
qsort msort の二つを用意してくれてたらよかったのにね。 マージソートが大好きさ。
クイックソートだと余計なメモリを食わないからってのもあるかと 普通の安定なソートだと余計にメモリを使う メモリを使わないin place merge sortってのを調べたらなかなか面白かったが メモリ領域とひきかえに実行時間が増える
>>496 >i = 0
>ary.sort_by{|e| [e, i += 1]}
安定ソートはこんなふうに書けるんだ。知らなかった。さんくす。
>メモリ領域とひきかえに実行時間が増える まあ、そりゃ、そうだろうな… 削る部分がないようなアルゴリズムにおいてメモリとCPU時間はトレードオフ
>>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だから問題ないんだな。
>>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メソッドってない(これはケアレスだと思うけど)。
>>503 Array#sampleはRuby 1.9系で追加されたメソッド
配列の要素をランダムに1つ取得する
>>504 そうですか。
すみません1.8系で考えてました。
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だとどうなんだろうか?
結局1.9の方がソート早いの?検証した人いる?
流石にソートの速さとかは初心者スレでやる話じゃない気がするが
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) ...
$ 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) うむ、「若干遅い」と言っていいと思う 文字列絡んでないのに…
メルセンヌツイスタってRubyでどうやくのでそうか?
どうやくって?
513 :
デフォルトの名無しさん :2011/05/07(土) 12:22:56.74
組み込みのRandomクラスがMT19937だけどあえて実装したいの?
アルゴリズムの勉強したいんですがwikiのコードをRubyに移植したいんだけどよく分からなくて
自分で考えないと意味がない部分を人に聞いて丸写ししたら勉強にならないじゃないか
>>514 もっと基礎的なアルゴリズムは実装してみた?
バブル、クイック、ヒープ、マージ、コム、イントロこれらは実装出来ましたがメルセンスがよくわからない
写経でなんとかなる勉強と写経ではどうにもならん勉強というのが大雑把に2種類あって、 アルゴリズムは全部後者だ しかも必要に迫られてないと全く頭に入らず退屈に過ぎる 大学の黒板授業でアルゴリズム説明とか狂気の沙汰 というわけで、必要になってから実際のプログラム内で勉強するといいぞ アルゴリズムだけ動作させるコードは何も教えてくれない何も聞かせてくれない
中学校でソートアルゴリズムの授業やったけど好評だったぞ。 トランプを短い手数で並べ替えるゲームさせただけだけど。
「実際はライブラリが提供するsortを使ってください」とか注釈がある謎授業だった アルゴリズムの認知は大事なのだが、なんかもっとこー、 生活が便利になるようなのから教えていったほうがいいかもしれん
なんかすげえ質問者がはぐらかされてる悪寒
はぐらかすというか、何をどう説明して欲しいのか全くわからないからな。 Rubyに移植したコードをこっちで作って投稿しろと言ってるんじゃあるまいし。
>>517 何を教えて欲しいの?
このスレに「メルセンヌツイスタがよくわからない」とだけ投げられても、
「そうですか、資料をよく読んで勉強してください」としか。
たとえば、
「こういう処理をしたいんだけどRubyではどうやるの?」
みたいな質問なら回答がつくと思うよ。
メルセンヌ・ツイスタのアルゴリズムがどういう仕組みになってるのか自体がわからないなら、
このスレよりもっと適切なスレがあるんじゃないかな。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここまで俺の自演
525 :
デフォルトの名無しさん :2011/05/07(土) 17:39:45.35
疑似乱数生成は理論背景が分かるのが前提だから、 「アルゴリズムというもの全般」の勉強の題材としては不適。
このスレでwiki読んでRubyで書けるやつなんて居ると思えない
>mt19937のcコードを読んだほうが早いような気がする‥ 泣けるw
ぶーめらん
tk使いたいんですけどダウンロードするところのurlを教えていただけませんか?
>>530 使ってるpcのosと
使ってるrubyのバージョンと
使いたいtkのバージョンを教えれ
Windows Vista Ruby1.9.2 最新版のtkが使いたいです
1.9になったことでRubyはGUIを標準でサポートしないってこと?
もともとのアレとして、サポートしてるとは言えないと思う や、Readlineと同レベルではあるのか、一応 誰も有効にしないだけで
>>534 基本的にRubyでGUIとかゲームは茨道だお
JRubyいっとく?
>>535 誰も使ってないから、何かがあっても気づけないんだよね
初心者の人からの報告待ち状態
そういうライブラリは普通標準から外すもんなんだけど
というか、何もなかった昔ならともかく、今はrubygemsにぶん投げたほうがいいと思うの
使う人がメンテして、使う人が最新版に追従して公開するはず
Ruby本体の更新に引っ張られてる現状はあんまりよくない
IronRubyいっとく?
>>540 Ruby/TkのライブラリはTcl/Tkを叩いてるだけだから、
Tcl/TKの畑を見ればよいということじゃないかな。
逆に遊んでみたくなった 明日ちょいといじってみるかな‥
普通に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の両対応みたいだ
Tkを呼んでるだけなんだよねよくも悪くも 最新版が無理な場合はひとつ前インストールすれば問題はない 「WindowsのActive Tcl/Tkの更新に合わせて新しいパッチレベルのrubyを公開しました」とかできん ActiveTclは事実上の標準ではあるが、WindowsにおけるTcl/Tkの勝手な実装のひとつに過ぎない >>542 やたら普通にウィンドウテキストやらボタンやら画像やら貼れるぞ(リアルタイムな動作は例によって苦手) Tkの知識が必須になってしまうが、あちらさんもスクリプト言語だし一旦覚えればどうということはない 昔は独特のUIを提供しててTkだと一発でわかったんだけど、最近はすこし垢抜けた
RubyやってるとだんだんWindowsがめんどくさくなってきますね。
でもWindowsでRubyやってるとだんだんコマンドプロンプトが便利になってくる 標準のコマンドプロンプトに不足してる機能を おおよそRubyでこなせるからな…
tk使えないのに公式マニュアルに使い方載せるのは初心者の俺としては嫌がらせ行為に値する
548 :
デフォルトの名無しさん :2011/05/08(日) 10:22:37.52
それはパッケージングの問題のような。
そろそろ標準添付のGUIは WxRubyとかそういう、外部のライブラリを必要としないものに 差し替えるべきじゃないかと思う
外部のライブラリを必要としないGUI・・・すげーな
まあ、言いたいことはわかる 大昔はTk本体を含んでたのよ 無駄に大きいのでやめちゃっただけ
553 :
549 :2011/05/08(日) 11:08:09.40
すまん、言い方が悪かった。
>>552 がフォローしてくれてる通り
「Rubyの他に何かのソフトウェアをインストールする必要がないGUIライブラリ」
がいいんじゃないか、ってことです
>>552 サイズの都合があるのか
とすると、ライブラリ本体が10MBくらいあるWxRubyも微妙だな……
Ruby自体としては何でもパッケージに含めるって方針が無いからな
開発前期に、GUI関連にリソース割けそうな人が確保できなかったので分離されたのだ で、そのまま今まで来てる 結果的には正解だったと思うがぬ ウィンドウウィジェットも標準公式サポートするにはPython並の人員が必要で、Rubyにはそれがない ないものねだるのはやめよう
RubyでGUIは作るな!って事でいいですか?
いいです
RubyでGUIを扱いたいなら選択肢くらいは複数あるが、 GUIなプログラムを作りたいのならRubyは選択肢に入れてはならない
RubyでGUIは作るな! →それでも作りたい! →勝手にやってろ! っていう対応でもやっていける人だけやればいい
>>556 RubyでGUI作るのは別にいいけど、
GUI作るのにRuby使うのはやめた方がいい。
Rubyスクリプトから制御できるウィンドウインタフェースであることに意味がある人向け 学習効率糞くらえ、実行効率糞くらえ、とにかくRubyであることにこそ価値があるという場合にのみ有効 普通の人はそんなところに価値を置かないので、RubyでGUIなんてやらなくてよろしい GUIやりたいなら他の言語使え
コンソールはRuby GUIはHSP
zenityみたいなのWindowsにはないんだっけ
RubyCocoaとかダメなの?
Windows なら HTA という選択肢もある 簡単なダイアログレベルなら十分
566 :
デフォルトの名無しさん :2011/05/08(日) 13:30:23.87
>>564 Macならどっちかというと今はMacRubyじゃないかね。
OSXの機能は全部呼べるわけだし。
よく考えたらウハウハだよな。 OSXでRuby使っていろいろできるなんて。
GUIに走りたかったら、JRubyでJavaのGUIライブラリ群を使うんじゃだめけ?
GUIからRubyを叩けば良いのに、 なんでRubyからGUIを叩くんだよ。
きっとどうしてもRubyだけでコードを書きたいんだよ
574 :
401 :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
$LOAD_PATH カレントディレクトリ でググッてみてね!
576 :
401 :2011/05/08(日) 17:26:20.89
>>575 require_relativeに変更で解決しました
とりあえずggってパッと読んでみたんですが、
$LOAD_PATHの下りはまだ理解できるレベルに達していないようです
とりあえずrequire_relativeに変更で先には進めるようなので
また理解出来るレベルになったら戻って確認したいと思います
ありがとうございました
PHPのhtmlspecialchars($str, ENT_QUOTES)に相当する関数ってありますか?
>>574 ruby1.9.2から、たしか$LOAD_PATHに「.」(カレントディレクトリ)が含まれなくなったんじゃなかったっけ?
require './hello'
とするか、
export RUBYLIB=.
とすればいいのかな。
>>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
>>556 「RubyでGUIは作るな!」「GUIを扱うのに向いていない」と言っても勝手にやっちゃうような人向けです
>>580 いちおうつけくわえておくと、attr='value' を使わず、すべてをattr="value"にしていればシングルクオートのエスケープは必要ないからね。
584 :
401 :2011/05/08(日) 17:59:29.27
>>578 なるほど。場所指定しろやってことですね。
次のプログラムがRubyの標準ライブラリを利用しろってことで
require "data" を使えって感じなんですが、
この場合どこに指定してやればいいんでしょうか?
もう1.8.7どっかから見つけてきて
ダウンロードした方が早い気も・・・orz
あとエディタメモ帳のままってわけにもいかないだろうしRDEっての
インストールしてみました。ググって見たらサクラエディタってのが
人気みたいですがこっちの方がいいのかな?
今までメモ帳でやってたものでrbファイルからエディタ選ぶと勝手に
メモ帳で開きやがるんですが、これ指定したエディタで毎回開くように
設定出来ませんか?
いやいやシングルクォーテーションも手を加えないとXSS(ry
>>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もついてくるんだけどなぁ
>>584 標準添付のライブラリならなにもしなくても
require 'date'
でオッケー。
31p のプログラムは 'date' だよ 'data'じゃなくて。
>>584 時間がない社会人なら本が対応している1.8.7でやったほうが速いかもだけど
時間がある学生さんならこのスレで聞きながらまったりやればいいと思うよ
\ -> \\ に変換するために s.gsub('\\','\\\\') では\がひとつのままで s.gsub('\\','\\\\\\') で \\ になってくれました。 なぜ\ひとつに \\\ の三つが必要になるんでしょうか?
String#sub と String#gsub は正規表現とブロックを「使わなければならない」と思ってくれ バグだと罵ってくれてもいい ということで s.gsub(/\\/){'\\\\'}
まず、シングルクォートでもダブルクォートでも「\」自身をあらわすためには'\\'とする必要がある 次に、subやgsubの第二引数では 正規表現でグルーピングした部分文字列を呼び出すために\1とかをつかうので、\自身を表すには'\\'とする必要がある さて、s.gsub('\\','\\\\\\')の第二引数は ソース上では'\\\\\\' Rubyの内部では「\\\」 gsubの解釈では、最初の\\が\になり、最後の\は後に続くものがないので、これは\として扱われる よって 「\\」になる 正式にはソースにも'\\\\\\\\'と書くほうがいいと思うが s.gsub('\\'){'\\\\'} の方がわかりやすいよね
>>592 横からだけど第二引数はRubyの文字列として解釈されたあと
置換文字列としてのルールでもう一回解釈されるわけだね
勉強になりました
>>591 >>592 ありがとうございます。
特に
>>592 さんの詳しい解説で何故そうなっているかが理解できました。
おとなしく s.gsub('\\'){'\\\\'}を使うことにします。
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
596 :
401 :2011/05/08(日) 21:57:25.45
>>586 >>588 >>589 ありがとうございます。とりあえず1.8.7見つけてきて
インストールして進めています
サクラエディタは関連付けのところで
何回やってもうまくいかなかったので
むかついてRDEで進めています
data× date○ こんな単純なとこでミスっていたとは恥ずかしい・・・orz
また、つまずいたらいたら聞きにくるのでお願いしますorz
俺がこのスレ見て学ぶのをやめたGUIか・・・
Windowsしか使ってないのだけど execてUNIXの機能じゃなかった? forkしてexecとかいう execしちゃうと二度と帰ってこないので systemを使ったほうがいいじゃないのかな ただし、systemも子プロセスが終了しないと帰ってこないけど 1.9なら spawnで非同期に子プロセスを実行できるけど
私は自作Ruby/Tkのランチャで Thread.new{system('dir')} と、してました 子プロセス数百個も起動しっぱなしってことは無いだろうから 多少のRubyスレッドが居残ってても、問題ないだろうと 本当はWin32APIでCreateProcess呼ぶほうがいいんだろうけど
RDEは File.open('file') do |f| f.read end とかやるとf.の補間でエラー吐くからムカついて使うのやめたなあ。 1.8.7いっちゃったか。。。 まあ1.8系列もまだバリバリ現役だから別にいいとは思うけど。。。
Python製のEditraみたいにRubyで作られたテキストエディタってないの?
やべえな乗り換えようかな 秀丸より高機能なのかな
>>598 リファレンスを見る限り
Open3.popen3 には「Windowsは使えないよ。」の
警告があったんですが、execにはなかったですよ。
>>599 ありがとうございます。 うまく動きました。
すぐに終わる処理なので join したので多分これで問題ないんだと思い込んどきます。
>>598 execはWindowsでも使えるよ
>>604 リファレンスは、あんまり全面的に信用しない方が良い
今回のようなOS間の差異が絡む問題では特に
Windowsで使えないと書かれていない=使える、とは限らない
リファレンス信用しちゃダメなんですか…。 (;´Д`)
信用できるのはソースだけってどっかのだれかがいってた
>>605 > Windowsで使えないと書かれていない=使える、とは限らない
いやいや、今回の場合は
マニュアルに書いてあるとおりにexecは使えてますよ
ただ、「起動に成功した場合、このメソッドからは戻りません。 」
なだけで
しかし、execだけあってもあまり使い道が無いという罠
他の言語でも同じ仕様でexecあったけどいつ使うのかよくわからん
まあ、「戻りません」じゃわからんよな exec メソッドはシステムライブラリの exec(2) か spawn などを呼ぶので、 現在の ruby 実行のプロセスは引数プロセスで上書きされます が正しい解説だろう system 'notepad' はメモ帳を起動して、メモ帳が終了するまで待つが、 exec 'notepad' はメモ帳を起動するとスクリプトは終了する(ように人間の目に見えるよう振舞う) exec(2) のシェルレベルのサポートなしに後者の動作は不可能 system で起動されるシェルでたまたま & とかがサポートされてれば system でも似た見た目にはできるが
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
普通に-Ks
>>612 そんな話じゃないだろ
もっと深い理由に違いない
…まあ、なんだ、Rubyに慣れないうちからGUIもやるとか従来のパターンでは正気の沙汰ではないので GUIでなんか質問されると中級者レベルの何か深遠な理由なんだろうと考えるのはわからんでもないんだが、 でもこれからの時代においては偏見だと思う ラーメン食いながらダブルピースで写真撮られる練習をするようなことは実生活では全くの無駄だが、 ヒマの潰し方としては別に悪いことではないだろう
化けてもUTF-8出るなら文字列をいちいちUTF-8から変換して使えば……めんどくさいな。
>>611 Rubyのバージョンは何ですか?
Ruby1.8以下だと VisualuRubyはSJISしか想定していなのじゃないのかな
スクリプトをSJISで書き -Ksつきで実行しておけば問題ないような
Ruby1.9だとちゃんとマジックコメントを書いておけば
SJIS(cp932)でもUTF-8でも
文字化けせずに実行できたよ
漢字を含む文字列を表示幅指定で書き出すにはどうしたら良いでしょうか? 固定ピッチフォントで英数字の1文字分の表示幅を1とし、 漢字等の英数字の2文字分の幅の文字の表示幅を2として計算して表示したいのですが ljustは文字数で計算されるため文字列に漢字が含まれるとうまく行きません。 環境はRuby 1.9.2、Windows、表示用フォントはMSゴシックです。
教える側が過保護すぎる。 プログラミングをさも特別な技能かのように装うのはやめないか? ぶっちゃけうちのオカンでもできるよ? プログラミングなんて何度失敗してもリスク無いし。 本当に特別な技能ってのは素人がいきなりやると死ぬレベルとか、 実施できる回数が人生の間で数回とかそういうもんを言うんだよ?
>>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
1名(だと思うけど)人を下に見る人がこのスレに生息しているのは何でですか?
>>619 Unicodeなにそれなフォント固定な環境なら問題なかんべ
あと記号とかいろいろ入ってない
>>620 君を加えて2名 >人を下に見る人
このレスで俺を加えて3名
/[ -~ァ-ン゙゚]/ ASKII文字と半角カナだとこれでいいのかな?
文字コード表の特定範囲を指定するなら数値をそのまま書いたほうが分かりやすいかも /[\x20-\x7e\xa1-\xdf]/
指定として間違いないのだが、リテラル的にあんまりわかりやすくないのが難点
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で)
>>612 ありがとうございます、できました。
>>616 1.8.6です。
1.9だとvrubyでもUTF-8が使えるんですね。
多言語表示したい時は1.9を試してみることにします。
ありがとうございました。
>>610 UNIXはよく知らんけどふつうは
fork{exec ほげほげ}
とかするんじゃないの
forkでプロセスの複製をして、execで中身を切り替える
forkとexecを別々にできると、場合によっては便利なこともあるらしいね
すくなくともOS作るのには便利なんだろう
WindowsのAPIだとfork機能とexec機能は別れておらず一体なので
Windows版Rubyのexecは二度と帰ってこない外部プロセス起動メソッドでしかない
>「現在の ruby 実行のプロセスは引数プロセスで上書きされます」
Windowsだと
「外部プロセスを起動して、起動に成功するとRubyは強制終了します。ただし、Rubyが終了するのは、その外部プロセスの終了を待った後になります。その間Rubyは停止しています。」
くらい?
forkして権限を落としてからexecするなんてのが典型じゃないかな systemみたいなのだとこうはいかない
633 :
デフォルトの名無しさん :2011/05/10(火) 01:34:42.30
Kernel#spawn 使おうぜ。
634 :
617 :2011/05/10(火) 01:46:47.66
皆さんありがとうございました。 文字コード表を見るとUnicodeの記号は半角と全角が混沌としていて完璧を期すのは困難そう。 とりあえずASCII+カナ+αでやってみようと思います。
635 :
デフォルトの名無しさん :2011/05/10(火) 01:52:54.47
Unicodeの文字には一応Eastern Asian Widthというプロパティがあるので、 文字データベース引っ張ってくれば計算は出来る、はず。 Ambiguousの扱いがいろいろ茨らしいが。
Ruby製アプリのコード解説をしているサイトや書籍はありませんか?
>>636 コードリーディングならるびまの添削記事でも読んでみたらいかがでしょうか。
>>634 表示フォントが大体決まってるなら「俺らが普段半角幅だと思ってるもの」だけ幅1で計算すればOK
どうせ日本人向け環境で日本人向けフォントだろw
昨今のLinuxのターミナルエミュレータで英語圏対応するとかだと泣きたくなるほど面倒だが
Enterの上の\とEnterの下の\で入力文字と表示幅が違ったときは最新追従すぎて飛び降りたくなった
今度からはバックスラッシュは「ろ」で入力しないといかんのか
640 :
636 :2011/05/11(水) 00:31:50.51
>>637 読んでみましたが良さそうでした。ありがとうございます。
俺が書き込みしてから書き込みの勢いが30超えた!
2038年以降のタイムスタンプを取得する方法ってありませんあk?
>>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]
同じruby1.9.2p180何ですけど実行しても空でした 日付を2038年より前田とタイムスタンプが出力しました windows 32bitだからですかね?
windows XP 32bitで試したがちゃんと動く 2038年問題はRuby1.9.2で解消されてwindowsだからとか32bitだからとか関係ないと思うが
>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ビットを超えた日付を扱えなかった…
マカってホント情報弱者だな。
今は2011年なんだから2038年の問題なんて今しなくても良いじゃんね。 27年後だよ?27年前と今を比べてみなよぉ。 Z-80でぽちぽちやってた時代だよぉ?
マクって2019年問題とかもあったよな。ポンコツすぎる。 ウィンドウズだと19000101でも大丈夫だけどマクだとエラーwww
1940年代にコンピュータが発展してたけど00(20000101)に成るまでには何とかなってるだろうと放置して2000年を迎えて大問題が発生した訳だが。 2000年にコボラーをかき集められた様に、2038年にルビラーをかき集められて対応させられると思うとぞっとするわwww
それでも頑張ったら何とかなったんだから、そのときがきたら頑張ろうぜ。 まったりいこうよ。
getsでコンソールでディレクトリを入力するようなやつを作ってるんですが ディレクトリ名前をタブで補完するようにできるんでしょうか?
関数的メソッド gets ではできない Readline ならできる
655 :
デフォルトの名無しさん :2011/05/13(金) 08:30:08.29
>>648 touch コマンドが何なのか理解してないだろ。
威張ってないで説明すればいいのに。
>>649 大企業では何十年計画でプロジェクトを立てるからそうもいかないんだな
UTF-8からSJISに変換するとき、SJISにない文字は文字化けすると思いますが SJISからUTF-8に変換するときなら機種依存文字さえ使わなければ文字化けはないと考えられますか?
>UTF-8からSJISに変換するとき、SJISにない文字は文字化けすると思いますが うん >SJISからUTF-8に変換するときなら UTF-8にない文字は文字化けすると思います
〜とか不用意に書いて泣くといいよ
まあなんだ、基本的には
>>659 だが、なにで変換して「変換ミス」をどれくらい許容するかにもよる
変換方法によって失われたりまとめられたり「変換ミス」されたりする文字は違う
2011年になってもNKFによるString#toutf8が無難とかありえん
じゃあどうすればいいのか具体的に書けよ
>>662 何も考えたくないなら tosjis と toutf8 を使って、実害が出ないように祈る
変換を制御したいなら変換テーブルについて学んだ上で Ruby 1.9 を使用し
好みの変換をするように String#encode でオプションを指定する
> 変換を制御したいなら変換テーブルについて学んだ上で Ruby 1.9 を使用し > 好みの変換をするように String#encode でオプションを指定する 何も言ってないのと同じだろw
ああ忘れてた (toutf8などの動作が好ましくなくて)NKF を使用する場合、ショートオプション s や S は普通使用してはならない 代わりに --ic=CP932 や --oc=CP932 を日常的に使用する 何かよくないことが起こった場合 --no-cp932 も有効だが使用上の注意をよく読むこと これらは添付されている NKF のバージョンなどによってはうまく動かないかもしれない(少し古いJRubyとか)
>>664 これらのレガシーエンコーディングに関しては「正しい変換方法」なんてもう存在しないんだよ
太古の人々が妥当だと思ったお着せの動作で我慢するか、それが嫌なら自分で全部やるしかない
結論から言うとutf-16になれば文字コードに悩まなくなるって事でOK? さらに言えばUTF-32なら全世界の文字を表現できるでOK?
>>667 Unicode はひとつだけだよ
Uni な Code なんだから
※ 若干の語弊あり
それをコンピュータ上のバイトで表現する方法が複数あるに過ぎない
従来の ASCII 部分が同じになるように工夫した結果1バイトから4バイトまでバリエーションなのが UTF-8
基本2バイトで、入り切らない特殊な文字は4バイト(サロゲートペア、検出容易)が UTF-16
一律4バイト固定で便利だが ASCII 文字のファイルサイズも4倍でアメリカ人激怒なのが UTF-32(UCS-4)
>>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
Eastern Asian Ambiguous Character Widthでググルといいかも
Unicodeの話題をおかずにご飯三百杯はいけるよ それはいいとして、NKFのtoutf8はもはやRubyの陥りがちな罠レベルだろw
ご飯300杯奢るから語ってくれ。
流石に三百杯分もUnicodeの話したらスレ違いだろw ここは主にRubyの質問を受け付けるスレなんだぜ
しっかし「〜」はとんだ失態だよなぁ。 ピコピコハンマーがあったらピコピコしまくるわ。
675 :
uy :2011/05/14(土) 00:25:23.73
ruby1.9ではマルチバイト文字をソースコード中に入れないようにしてる ro-majikuraiyomenndaro
本気でそんなことしてるならただのキチガイだな
質問です。Ruby初心者です。 ウェブ上での提出書類の簡単な管理システムを作っています。 提出期限と今日の日差が0より大きいなら「あと○日」、 提出期限と今日の日差が0より小さいなら「○日経過」、 0と等しいなら「本日が締め切り日」と表示させたいのです。 以下はその判定部分です。 ※sは提出期限と今日の日差を計算した値の変数です。 if s > 0 print "あと#{s}日" elsif s < 0 print "#{s}日経過"←(このままだと「-」符号がついてしまうので符号を変えたいのですが、方法が分かりません。) elsif s == 0 print "本日が締め切り日" 拙文で申し訳ないですが、ご教授よろしくお願いいたします。
…そういうレベルだと、なんかまとまった本なり解説サイトなり親切な人なりに頼ったほうがいいと思う 完成するより前に挫折してしまいそうな 系統だった情報をさくっと眺めるだけでも違うと思うの
#{s.abs}って事じゃないよな?
>>679 というか、単に「計算して負の数でなくしてしまえばいい」んだが
それを思いつかないということは、整数と文字列の違いとかリテラル埋め込みとか下手したら四則演算とか
そういうのの基礎知識がすっこんと抜けたままである恐れが高い
>>677 ,679
#{-s}でいいでしょ
プログラミング初心者だと思うけど
まあこんな風にこことか誰かとかに聞きながらでも何か1つ作れれば
いろんなことがわかるようになるだろうね
>>678-681 親切にありがとうございます。
皆さんからいただいたことを参考にさせていただきます。
ありがとうございました。
○月○日〜○月○日の範囲でランダムに日付を取得したいのですが まず範囲最小最大値の日付をタイムスタンプに変換して、その範囲の中で乱数を生成する。 生成した乱数を日付に直して出力する。 と、考えたのですが、2038年問題に対応にしたいのでタイムスタンプは使えませんね? 他に代替手段はございませんか?
>>683 年月日で別々に乱数で生成すればいんじゃね
うるう年にきをつけろをょ
日付だけなら 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"
コード見てもサッパリ分からない僕はどこから勉強したらよいか?
687 :
uy :2011/05/15(日) 00:15:46.98
>>676 ネタすらわからないゴミだったか さすが、プログラマはゴミだな
けど実際、ソースコード中に積極的にマルチバイト文字使う奴はアホ
いくらruby.exeが対応していても、その周辺ツールが対応してなければ意味はなし
688 :
デフォルトの名無しさん :2011/05/15(日) 03:15:10.87
欲しい日付=範囲の最初の日 + 範囲(0から)の日数内のランダムな整数 でいいとおもうんだけど、どこに2038年問題?
もう今のハードウェア上に新しい言語要らんわ 当然Rubyも アセンブラからメジャーな言語は全て習得したけどRubyはダメだ、まどろっこしくてたまらない Rubyって業務やプログラマーのためじゃなくてオブジェクト指向競争のためにあるっぽい フレームワークも全然育たないし 何だかんだで、Objective-C2.0+Appleフレームワーク+xcode+instrumentsが 最速最強なんだな
Appleだけだよね〜 言語やフレームワーク系で金儲けしようとしない大手は M$はWPFなんてクソアプローチでズレまくってるし XMLとかなめてGUI要素構成するとかプログラマが一番嫌う冗長な処理でさ〜 別に文字列とか+で連結出来なくてい〜んだよ そんな細かいところまでオブジェクト指向しなくてさ それよりも、完璧なエラーチェックの入った伝票入力クラスを継承してカスタマイズ出来る事のほうが100倍有意義なんだよ よってオレもRuby卒業するわ
オブジェクト指向が便利さに結びつかない言語が多過ぎて結局CとかVB。 dbMagicなんてのが昔あったけど、あれはあれでダサ過ぎて使い物にならないが、動きは事務系Ruby。 どうせRubyはモッサリインタプリタだし、インタプリタ内部に簡易DB持てば死なずに済むんじゃないか?
関数型言語の他はC系とRubyしか分からない関数型言語マニアな友人が全く転職先見つからないと言ってた。 JavaとかPHP使いこなせればとりあえず仕事は無くならないんだろうな。糞つまらなそうだが。
>>692 先っぽの会社は使用言語そのものをあまり問題にせず、その言語でどれだけ知識を得たかを問う
普通の(つまり、凡百の)会社は「メインの言語」が使えること以外をあまり問題にしない
どっちにしてもその人が中途半端に使えない人材なんだと思うよ
最近はちょっと事情が変わってきてて、会社の経営難から年配のベテランを解雇して若いリーダーが多いんだけど、 その若いリーダーが業務に疎かったりして、それは仕方ないとしても自分より出来る人を部下にしたがらない傾向が強いね javaしか知らないなんちゃってプログラマーのリーダーにRuby熟知してて・・なんて言ったらまず雇ってくれないだろうな 最近は案件数も少ないし、単価高くて使える人間よりも、単価低くて実力無くても言う事聞く人間が求められてる ま、今でもXP使ってるしIT業界も終わったなって事だよ
結局将来性ある仕事でもなんでもなかったな。 終わった、と言われていたレガシー重厚長大にでも入っていた方がよっぽど幸せな人生だった。 地方公務員とかと比べるだけもう無駄。 あの東京電力だって、一般社員ならはるかにましな待遇が定年まで続くのだろう。結局は。
関数型言語を使う仕事はそのものの研究用途以外には金融関係しかなく仕事の無さはRubyどころじゃねーだろ 関数型言語以外の相当に高いレベルが要求されると予想されるが
>>694 リーダーは実装なんて知らなくていいと思うんだがな
工程管理と顧客窓口と設計のまとめ役やってりゃいいよ
実装に口だすリーダーなんていらん。
※もちろん少人数チームでカミカゼ管理職の場合はマルチプレイヤーじゃないと厳しいが
XPは普通だろ、まだサポート範囲内だし
今ちょうど7(64bit)の人柱してる。開発部隊から順次置き換え予定
今ヤバイのはofficeだな、今年でサポート切れるし
2007からリボンインターフェースで営業から文句いわれるわ
ファイル形式が混雑してカオスになるわ、やってらんねぇ
例えば2011-5-33という日付があったらRuby側がで修正して2011-6-2ってやってくれるものですか?
>>699 3行くらいで確認できるんだから書けばいいじゃん
ちなみに dateライブラリのDateクラスにぶち込んだらArgumentError吐いた
>>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 でカッコイイライブラリがあるかもないかも
俺はRun/Cでいいや
だからRubyは流行らないんだよな バカにしているPHPは自動で計算して日付を訂正するのに
デフォルトでどっちに倒すかはかなり微妙な問題 ユーザー入力がエラーにならないことそのものがエラーと言えることはままある だからオプションとかで選択できるべきなんだが、まあ、現状、オプションすらないしなw
705 :
デフォルトの名無しさん :2011/05/15(日) 11:18:49.01
そこにsetLenientを用意したのがJava
gemってRubyで作られてるんですか?初心者には作れない系ですか?
それでもActiveRecordなら…ActiveRecordならなんとかしてくれる…
>>706 ただの第三者が作成したrubyスクリプトライブラリ集だ
ファイルをまとめて公開するためには規則に沿った記述が必要だが、雛形はサポートライブラリがやってくれる
いろいろな意味で初心者には無理だけど、まあ、1年くらい触れてればなんとかなるんじゃないのかな
いいえ
XML-RPCってのはHTTPを土管としては使うけどウェブサーバとウェブクライアントじゃなくて、
なんか俺たちのサーブレットとクライアントで勝手にやりますからー、HTTPステータス何それ。
表現には流行ってるからXML使うねっていう規格。SOAP(WS-なんとか)みたいに泥沼には
恵まれなかったけどね。
>>708 で書いてるのはRESTとかAjaxとかそんなん。
XML-RPCって言ってるんだからXMLを使ってRPCするに決まってんだろうがああああ、 という、RPCがわかってる人向け(あるいは何もわからないけど我が社もXML導入だでお金出す人向け)の技術
712 :
デフォルトの名無しさん :2011/05/16(月) 04:27:26.11
Sleepで何秒か待たせるのんじゃなくてエンターとか押したら待つの終わらせるようにできますか?
スレッドの知識がどーしても必要だが可能 てか要求的には「特定のキーを押したら処理を諦めさせる」だよね Enterキーを押したから待ってた処理が完了するわけじゃない もし「レジューム機能」を持たせたいのだとしたらちょっと大変
スクリプトの最後にgetsでも置いとけという話かと思った
まあ、よくよく話を聞くと 「ダブルクリックで一瞬だけ現れるコマンドプロンプトを自動で閉じないようにしたい」 「sleepだと即閉じないことを大発見したがタイマーになってしまって不便」 とかだったりするんだが pause 書いた rubys.bat にでも関連付けとけ
ネットを巡回してると下記のようなsnippetsがありました。 Net::HTTP.get(URI.parse(url)).toutf8.each do |body| ...(1)... (1)の部分で、1行毎の処理が書かれていました。 質問は、「上記のコードがHTTPリクエストを何回発行しているか数える方法はありますか?」です。 eachがあっても、各行毎にHTTPリクエストを発行していないとは思うのですが、 いざ自分で調べようと思ったときに、(Rubyでの)調べ方がわかりませんでした。 もしあれば、教えていただければ幸いです。
>>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 とか書くべき
回答要件を満たしていないことに気づいた
いつ誰がどこで接続してるかのチェックは、基本的にはマニュアル読んでから目視でメソッドをさがすしかない
実際に接続するメソッドは少数なんだけど、それを呼んでるメソッドがちょっと多い
接続先を知りたいのなら 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
>>712 require 'timeout'
begin
timeout(10){gets}
rescue Timeout::Error
end
とかするのはどうだろう
1.8.7以上だとWindowでも動くよ
1.8.6までだとWindowsでは入出力待ちでスレッドも止まっちゃって動かない
デザインパターンって覚えておくべき? シングルトンでつまづいてるんだけおd
デザパタはある程度悩んで、本を読んでなるほど、と思うならいいんだが、むやみにパターンだけ 覚えても意味ないと思う。 そんな労力があるなら実際のコードをみて勉強した方がいいような・・・。
Windowsで外部プログラムを起動して、その標準出力を文字列で取得するにはどうすれば良いんでしょうか? $stdout = File.open("hoge.txt", "w") %x{ foo.exe } $stdout = STDOUT で試してみたんですが、hoge.txt には何も書き込まれず、標準出力にそのまま出力されてしまいました。 1.8.6 です。
>>720 一般的には、あんまりいらない
オープンクラスで動的メソッドでラムダラムダで個人プレイなRubyでは特にね
(あれはCやJavaのような言語で大人数開発するときのノウハウだ)
が、まあ、頭に入ってれば役に立つことは年に何回かはあるんじゃないかな
立ち読みで済ますくらいのが一番いいんじゃないの
>>722 str = `hoge.exe`
File.open('hoge.txt', 'wb'){|f| f.write(str)}
でいいんじゃないのん?
>>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
>>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
<?php ?>こんな感じでRubyも埋め込みできませんでしたっけ?
埋め込みがしたければerbでぐぐる 上のコードはぱっと見ではimgタグが引用符で囲まれてない print "<img src='make.png' />" とかしなきゃ
734 :
デフォルトの名無しさん :2011/05/16(月) 19:16:17.07
>>732 >>733 ご指摘ありがとうございました、
print "<img src='make.png' />" で解決しました^^
標準出力か標準エラー出力かさっぱりわからなくて、 なおかつ初心者がRubyから出力を制御したいようなプログラムに心当たりがある wget.exe
736 :
716 :2011/05/16(月) 19:55:52.59
>>717-718 丁寧な回答ありがとうございます。
まだ頂いた回答を消化しきれてませんが、恐らく私の要件は解決しそうです。
まずはお礼を申し上げます。
ローマ字で書くぐらいなら普通に英語で書くます
「取り急ぎお礼」とかする人間は全員カス 事態が動いてから報告しろ
>>738 まあこれはもう文化圏が違うとしか…
商社営業文化圏だよね
2,3日放置されるとそれはそれで怒るくせにぃ accepted→closed ってその度に報告だよね?
「取り急ぎお礼」ってだめなの?
>>741 自分が相手にとって代替可能である場合、つまりふつうの社会人利害関係である場合は、
私はあなたを忘れていませんコンゴトモヨロシクという意味を込めて、
内容がなかろうと進展がなかろうと落ち着き次第早急に連絡「しなければならない」
んが、こーゆーコンピュータ関連コミュニティ(またはPC関係者)の中には、
属人性をすぱっと切り捨てて結果だけ欲しがるという風潮が少なからずある
「今更挨拶とかどうでもいいしお前個人のことは最初からどうでもいい、事例はどうなった」
ある意味純粋で機能的で、ある意味無機的で冷たい
突き詰めると古来NNTPから伝わる「お礼ポストはバイトの無駄、解決したらサマリを流せ」になる
訓練され(過ぎ)た回答者は、ありがとうというお礼よりもあなたの指示が動作しましたという事実報告の方に満足する
コンピューターに関するやり取りをする人のおせっかい度はわりと万国共通なので、外国語のMLとかでも
「動きましたありがとう」「まだ動きません、エラーメッセージは…」の2種類だけで結構なんとかなったり
>>738 も書いてるが単に文化圏の違いだから
通常人の場でこれをやると非常識だと思われて友達減ったり給料減ったりするので注意
自転車屋とか釣具屋のオヤジもそんな感じだな。
「取り急ぎお礼」って「お前の回答は読んだ」という「事態の進展」の報告だろ。 そんなことも理解できないなんて世の中にはバカっているもんだな。
俺なんて動いても動かなくても質問したらそのまま消えてるよ
時にはわざと嘘の回答を書いて、それを訂正しにやってくる正義感に満ちた回答者をあぶりだすことも必要。
少なくとも掲示板でやることじゃないよなあ >取り急ぎお礼 コード答えて試したり理解したりする前にお礼言われても仕方ない。
俺なんて質問してもけなされて終了させられる
750 :
uy :2011/05/17(火) 14:17:02.52
こまかwwwwwww プログラマきもwwwwwwwwww おうふwwwwwww
751 :
uy :2011/05/17(火) 14:44:17.23
クラスとかの使い方は分かったんですが、それを用いてどのようにオブジェクト指向で書くのか分かりません 例えば 私立高校A 公立高校B 教室1〜4組 1クラス最大40人 生徒を管理する場合、 必要なメソッドは ・生徒を増やす ・生徒を減らす ・生徒の学年が上がる ・生徒が卒業する ・生徒が退学する こんな感じでメソッドを処理ごとに分けて作っていけばよいって事ですが 1処理1部品ってことで作ればオブジェクト指向ですか?
>>752 それだけの処理なら作るクラスは学校クラスと生徒クラスぐらいかなあ。
そのメソッドごとにクラスを作る必要はないよ。
教室クラスは要らないかもね、Arrayでおk。作ってもいいけどさ。
755 :
uy :2011/05/17(火) 15:57:13.43
未知なる単語がでてきたw バグではないのですね レスありがとうございます
ただのスタイルの問題だからどうでもいいんだけど lambda do|o| って気持ち悪いな。 do のあとのブロック変数は離して do |o| にしてほしいし、 lambda なら do...end よりは{|o| }してほしい
>>752 クラスはメソッドをまとめて hoge.foo とか書けるようにするもの
モジュールは定義時にselfとか書かないといけないのでめんどくさい謎存在
でいいです
必要になったら少しずつわかります
最初からクラス設計とか大上段に構えるとつまんないし全く前に進みません
Ruby 1.9で質問です h = {a: 1, b: 2, c: <...>, d: 5} この<...>の時点で、h[:a]やh[:b]の値を取得する方法はありますか?
>>758 ない。リテラルの仕事じゃないもの、それ。
素直にHash.newして
h[:a] = 1
h[:b] = 2
<...>
h[:d] = 5
と地道に代入したらいかがでしょうか。
760 :
389 :2011/05/17(火) 17:29:56.54
すいません僕が投稿したコードでrubyinstallerにアクセスできなくなってしまいました Ruby192/lib/ruby/1.9.1/net/protocol.rb:135:in `read_nonblock': 既存の接続はリモート ホストに強制的に切断されました。 (Errno::ECONNRESET)って エラーが出たのですが、これはアクセス拒否されてるって事でしょうか?
うむ h = {:a => 1, :b => 2, :c=> nil, :d => 5} h[:c] = h[:b] + 1 こう書くしかないな まあ、途中で参照出来れば一発で書けて便利だなと思うことは月に1回くらいはある が、それを有効にするためのRuby側の処理はあからさまに面倒そうなので、別にいいかみたいな
>>759 ,761
ふーむ、やっぱりありませんか
もし参照できればこんな感じの構造体をパースするのに便利だと思ったんです
struct hoge {
int next_item_count;
int item[next_item_count]
...
おとなしくStructあたり使うことにします。レスどうもでした
>>760 知りたいなら、サーバが何を言っているかを聞き取るといい
サーバが何を言っているのかがわからないなら、HTTPなりDNSなりの勉強が必須
勉強が終わって、Rubyでどうすればそれを聞き取れるのかがわからないのなら、
何をしたいかぽちっと質問すればきっと誰かが答えてくれる
サーバが何を言っているのかわからないというレベルでは、たぶん誰もあなたを助けられない
764 :
uy :2011/05/17(火) 17:38:15.67
>>756 本当にどうでもいいね
お前が気持ち悪いよ
lambda do|o| とか、意識した事はない
この程度が気になるのならばそれは病気だ
このソースのかき方で
end と } を混合すれば大変なことになるから特にそれは不可能な願い、やってみればわかる
元々Rubyでやるべき記述じゃないから行数かさめば何やっても読めなくなるは
>>763 エラー名かエラーメッセージはもうちょっと実データを反映させたほうがいいとは思う
Errno::ECONNRESETはソケットのECONNRESETだからまだマシなんだけど、
たまーにRubyオリジナルのエラー名があってちょっと困った覚えが
まあ今回はふつうのブラウザからアクセスできれば特段問題はない
なんだったらふつうのブラウザのフリでも
スクリプトを何度も実行して確かめて何度も外部のサーバにアクセスしてたらあっちから蹴られた、とかいうのはよくある話だ ソフトウェアテストを書くようにしてからWebMockでも使っとけ捗るぞ
>>764 変数のシャドウイングもわからないレベルで
「元々Rubyでやるべき記述じゃないから行数かさめば何やっても読めなくなるは」
別にコーディングスタイルだから強要はしないけどさあ、
他人のコードまともに読んだことも無いのにコーディングスタイルについて語るなよw
lambda do|o| yield o end
なんて書く奴そうそういねえよw
これぐらいならendと{}を混合して書くことなんて別に普通も普通、おもいっきり普通w
ガイアが俺に囁いている…!
771 :
uy :2011/05/17(火) 18:43:33.52
>>767 いやいや、あのねシャドウィング君。病気の君が読めないなら無理しなくていいんだよ
それと、
誰 に 話 か け て ん だ ? wwww
君が理解できないだけでそのソースコードはね・・・w
まぁ俺の予想ではあと2年くらいで広まり始める傾向が見れる思ってる
これを読み解いて価値に気づく奴が増えないとまずダメだけどな
即レスしたから、もしやと思って、けしかけたけど
シャドウィング君にはちょっと早かったようだ
ちょっと本格的開発に入る前に、もう一回だけ人目につく場所にソース晒しておきたかっただけだから
はい、それでは。
なんだただの中二か
shadow-ingであってshado-wingではないのだが大丈夫だろうか それだけが気がかりだ
>>763 参考にさせていただきます
>>765 ありがとうございます
他のサイトは問題ないので規制させられたようです
ブラウザからはアクセスできるので代替策を考えてみたいと思います
荒らすわけじゃないんだけどrubyって本当に初心者向きなの? マニュアルドキュメントも日本産なのに微妙だし if分のthen(省略可能だったらはじめからつけないでもらいたい)や elseifの微妙な独自色とか意味のない部分にこだわりすぎてて使いにくい c言語の基本から学んだ後にこっちにきたんだけどほかにもいろいろ不満はあるけど 致命的なのは開発環境が悪い irbの使い勝手の悪さはいちいち面倒でチマチマ入力もウンザリ インタプリタのメリットってないじゃん これだったら素直にperlとかpythonやったほうがいいね
誰が初心者向けなんて言ってたの?
>>775 PerlもelsifでPythonにいたってはelif
ちなみにirbは開発環境っていうかあくまで
簡単な式を試すのに補佐的に使うものだよ
とりあえずはエディタ+シェル(コマンドプロンプト)+irbで
ウインドウ3つ開いて開発するのが簡単でおすすめ
それでもダメならPerlでもPythonでもお好きなのをどうぞ
778 :
デフォルトの名無しさん :2011/05/17(火) 21:58:09.60
elsifがRubyオリジナルだと誤解される時代なのか。
>>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 を省略した場合は改行に相当するものを絶対に書かなければならない
>>706 jewelerというgem使っとけ
gemの雛形を作ってくれるからgemを作るなら楽だぞ
jewelerでgemを公開できるならgemの使い方やライブラリのファイルの置き方や構造を学べるし、
むしろ初心者を脱するためにもちょっとしたgemを作るのは有用じゃね
Basic原理主義者→Ruby C原理主義者→PHP Java原理主義者→Python 囲い厨→Perl
irb は Lisp なんかのインタラクションモード(を参考にした何か)が念頭にあるんだと思う $ clisp --quiet [1]> (car '(1 2)) 1 [2]>
>>775 現時点で入りづらいの事実だろうと思う。ただし開発したい環境にもよる。
以下私見
・人手が足りず入門者向けの記事やドキュメントが少ないのは仕方がない
・英語のドキュメントやソースを読むクソをつけるのがいいと思う
・Ruby 1.9を勧めたいところにRuby 1.8のものばかり検索に引っかかるのは、過去1年や3ヶ月など期間指定で回避できる
これはRubyだけの問題じゃないが
・きみの開発したいプラットフォームで開発環境が悪いと思ったのなら、プラットフォームの選定自体が悪いかもしれない
世の中の8割以上のクライアントPCで動いているOSつまりWindowsは開発環境や動作環境も含めてRuby向けではない
何故ならRubyの開発者、ライブラリの開発者の多くがその9割のOSを使っていない
・Pythonは逆に積極的にWindowsをサポートしているようだが方針と人手が・・・
PHP最強伝説
>>785 条件終了の意図を明示できるのがいいらしい
書き忘れはありませんという宣言
まあ、みんなが書いてなかったら自分も書かない
既存のコードにきちんと書いてあったら自分も書くという程度
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だ。
>>787 最後の p s のあとに
s
だけの行を入れて実行したらいいんじゃないかな
いまのままだと p s の戻り値(= nil)がブロックの戻り値となっている。
なるほど。 p sの後に、再度sを入れることで解決しました。 injectは便利そうなのですが、配列を絡めると まだよく理解できてので、もう少し研究してみます。 ありがとうございました。 ちなみに、1.9.2にVerをあげてみたら、 動作したのは、何か仕様が変わったのかな?
791 :
デフォルトの名無しさん :2011/05/17(火) 23:46:09.99
ありゃ1.9ではpが引数自身を返すようになったのか?? これでgolferの1.9移行がまた遠のいたのかな。(p1バイトでnilを表現できて重宝していた)
(p1バイトでnilを表現できて重宝していた) どうでもいいなw そんなにゴルフが好きなら目的の処理を0バイトで表現できるプログラミング言語作ればいいじゃない。
793 :
791 :2011/05/17(火) 23:54:54.83
golferの間では、だよ。 おれはちゃう。
794 :
デフォルトの名無しさん :2011/05/17(火) 23:57:41.47
?d が整数100にならない以上、golferが来ることはないと思う。
>>791 今手元の1.9.2で試したら
引数が1つならその引数を、複数なら引数リストを配列として返すようになってるね
796 :
デフォルトの名無しさん :2011/05/18(水) 00:00:28.73
injectでは確かに最後にデバッグ用のpを置いて、 動かなくてイラッとすることがよくあったが、そういう理由なんだろうか。 まさかな。
injectだけでなく、ブロックの中でp()デバッグすると割とある話だね
使えるIDEがなかなかでないのは、 Rubyを使い倒してるような方々が大抵エディタで済ませちゃってるのが大きい理由なのかな。 まともに動くIDEってRadrailsぐらい? あれも重さに見合った機能はない気がするけど。 WindowsならRDEもあるけどバグバグだしなあ。 やっぱりRubyはエディタ+端末が手軽だね。
>>798 というか端末で使うのが一番Rubyらしい用途って感じがする
Rubyは組み込みメソッドからしてコマンドラインの補助にピッタリだし
>>798 ・Rubyはかなり極端な動的型付け言語なので
入力補完の類はあまり当てにならない
・ビジュアルデバッガはあれば嬉しいが、伝統的なprintfデバッグでも何とかなってしまう
仮にIDEを開発したとして、よほど頑張らないと
emacs/viみたいに営々と改良されてきた汎用エディタに対して優位性がないのだと思う
801 :
デフォルトの名無しさん :2011/05/18(水) 01:03:37.18
やっぱりEclipse+RDTだよね
>かなり極端な動的型付け言語なので入力補完の類はあまり当てにならない ってのは単なる甘えなのでは。
803 :
デフォルトの名無しさん :2011/05/18(水) 01:36:05.07
>>802 だよね
def foo(string_or_regex)
case string_or_regex
when String
string_or_regex.<ここではStringのインスタンスメソッドを補完>
これぐらいできないとね
スクリプト言語は甘え
どうでもいいけどRubyのような 多様性の高い言語を初心者向けとかありえない
>>803 dry runしてstring_or_regex.methods呼べば良いじゃまいか。
甘え。
>>806 ごめんなさい then then 分かりません
dry runってなんぞ?
>>729 標準エラーに出力されていました…。
win32-open3 で取り出すことができました。
ありがとうございます。
NetBeans+プラグインはどうなん? 使い物にならん?
Rubyは書くのはお手軽だけど習得はそんなお手軽でもない。
Radrails() RubyMineや3rdrails()も忘れないでください 俺はaptanaとNetBeans(公式サポートがなくなる6.9まで)使っていたがはっきりいってC#やJavaのような 入力補完やデバッグ、リファクタリングは期待できんよ それでも、スニペットやgrepのような機能はありWindowsのフリーソフトにあるようなちょっと弄ったテキストエディタのようには使えるので、 端末がどうしても嫌で嫌で仕方がなく親の敵で憎くて仕方がないと思っている人にはおすすめできる PythonやphpやJavaScriptも動的言語の一種だと思うがこれらのIDEを使っているエキスパートで何使っているのか気になってるわ phpとJavaScriptはaptanaとNetBeansで試したが、補完はruby並で期待できなかったw
それと動的言語はともかく・・・ 多用されるRubyの名前付き引数のように使うHashリテラルや JavaScriptのオブジェクトリテラルも補完効かなくて面倒だったわ そもそもライブラリごとのサポートやドキュメントとの連携がないと、文脈にあったHashリテラルのキーの補完なんて効くわけないんだが IDE脳だとつい期待してしまうんだよね
scanとmatchの違いってなんですか? どっちも同じですね?
>>791 gorubyの仕様をいじればいいんじゃね?w
ちいーっす先輩方 聞きたいことがあります [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)でいいのはこのスレで習ったんすけどね
暗黙の引数があったらPerlみたくできるなと思ったことはないでもない [1,2,3,4,5].map{ $#1*10} #=> [10,20,30,40,50] open('test.txt', 'wb'){ $#1.puts(s)} 個人的にはこっちの方が「なにがなんだかわからなくて」めんどくさいが マッチの $1 や $2 が「なにがなんだかわからない」のと問題が同じ 結局変数名をつけてしまうなら、ブロック引数で名前つけたほうが見やすい
>>815 こういうケースを考えよう
i = 108
[1,2,3,4,5].map{ i * 100 + 10 }
さて、ブロック内の”i”とは何かというと、前行の i(=108) になる
つまり単に i と書くだけでは、ブロックの引数と外側で定義された変数が区別できない
だからわざわざ縦棒で区切って、ブロックの引数だとはっきりさせる
>>813 scan は文字列が入った配列の配列が返る(ブロックがある場合はマッチした文字列が毎回渡る)
match は MatchData オブジェクトが返る
おもいっきり別物
…まあ、
hit = str.scan(/(re1)(re2)/).flatten
とか
hit = str.match(/(re1)(re2)/)
とかやって hit[0] と hit[1] を使用するだけならどっちも変わらないので好きなほう使え
t = "abc" m = t.match(/a/) これでマッチしなかった場合の条件判断がわかりません if "" != m then print "match" else print "none" end だとマッチしてもしなくても同じ結果になってしまいました
>>819 それはきちんと String#match のマニュアル読め
成功の時と失敗の時に何が返ってくるかくらいは、どの解説でも書いてあるはず
if m then
puts "matched:", m.inspect
else
puts "falied!"
end
>>815 むしろそのoreore_mapはどんな処理なんだ
余程のことが無い限りyieldで事足りると思うのだが
>>819 が何を思って
"" != m
なんて謎な記述をしたのか気になる。
どうして空文字列なのか、どうして!=比較なのか……。
>>822 文字列処理なんだから、失敗したら空文字列が返ってくるのかもしれないじゃないか
まあ、実際は
>>820 の言うようにメソッド作った人がどう作ったか依存だから、メソッドの解説読むしかないんだけど
matchならif m thenで返ってくるけどね scan使うなら同じように書けないよ
Dirの引数に**/を与えてフォルダの再帰表現になるみたいですが、 正規表現的にどうしてフォルダ再帰マッチになるのかいまいちよくわかりません。 予約語みたいなものなのでしょうか?
>>825 Dir.glob の文字列引数はヴェルタースオリジナル
なぜなら世間様一般のグロブ表現は正規表現と相容れない特別な存在だからです
ここの'*'は正規表現じゃなくて、シェルのワイルドカード **/* は zshでも使われてたからunix文化じゃないかな?
元祖はちょっとわからんなぁ XMLPathにもあるし
830 :
uy :2011/05/18(水) 13:52:06.87
>>775 Rubyは初心者にも表面上は扱えるけど、初心者向きじゃない
んでマニュアル描いてる人間って頭わいてる奴多いから
サンプルコードがカスなのは仕方がないよ
rubyは、もし最初に手をつけて覚えられないなら
C++やった後でrubyに来たほうがいい
rubyも「いい言語」なんじゃなく「マシな言語」ってだけだから
あまり期待はすんな
初心者向けならPythonとどっちがいいですか?
個人的にはRubyのが日本語で色々調べられて楽だったけど まあ言語としてはPythonのが初心者向けなんじゃないかな
せっかくRubyインストールしたのに Pythonすれ言ってきます
>>828 フォークでスープを掬って飲むことはできないからだよ。
835 :
uy :2011/05/18(水) 15:19:57.52
初心者はC++10年やってからrubyでおk
いろんな言語に挫折した俺でも使えるくらいRubyは簡単なのに
837 :
uy :2011/05/18(水) 15:30:18.90
使えるやつは、すぐ使えるだろうけどね 世の中には、論外的にコンピュータが苦手な子もいる そういう子はpcの前にくると思考がとろくなる そういう子にとってはCやPHPとかのほうが、おそらくはrubyよりも使いやすい だから俺はPHPは良言語と思っています
>>828 まあ、コンセプトが違うものだからとしか
そもそも String#scan はイテレータ志向で、
ブロックなしのときに配列の配列が返るのはオマケみたいなもんだし
String#scan の戻り値を flatten するくらいなら
String#match 使って MatchData#to_a したほうがたぶんタイプ数も短くて済む
>>831 何を作る初心者か140文字以内で述べよ
いやわりと本気で
Windows上で動作するプログラムなら今のところC#しかない(いや、他のCでもJavaでもいいけど、確実に道のり遠いよ)
レンタルサーバ上で動作する「CGIみたいなやつ」を作ってみたいなら、とりあえずPHPが無難
(ほぼ確実にインストールされてて、動作サポートに間違いがないから)
新卒就職でアピールしたいならJavaやっとけ(たぶんそれ以上何も聞かれないから)
スマートフォンのアプリで何かやりたいならObjective-Cになる
ブラウザ上でなんかグリグリ動くゲームっぽいフラッシュな何かを作りたいなら、そりゃFlashしかない
プログラミングまでの道のりは遠い 言語仕様を覚えた後はライブラリを覚えなきゃいけない しかもライブラリの大半は英語 プログラミングが日本に根付かない理由はこういう些細なことではないだろうか 大半の人間はそこまでしてプログラミングしたいと思わないのかもしれない
やりたいことがある→ググってそれができるフリーソフトなりスクリプトを探す で、99%解決しちゃうからな。 カネになるとか、それ自体趣味の変態でないかぎり、プログラム覚えようなんてするわけがない。
テキストにあれこれ定型処理をしたくなったのがRubyはじめた理由だったっけなあ。 柔軟なテキスト処理はスクリプト言語の十八番だよね。
そういう10行程度のプログラムだったら正直Perlで何も問題ないというか、 特殊変数が充実している分便利だったりしない?
844 :
uy :2011/05/18(水) 18:32:55.86
>>841 PGの半分くらいはゲーム作りが目的じゃね
んでそっから方向性かえるやつもいるし、
ゲーム作りがメインなのにソフトも作れるようになってる奴も多い
ところでaifがほしくなったんだけど、ライブラリないの?
一応elseまでは実装した自分実装のはあるけどunlessやelsifまで作るのたるいんだよね
845 :
uy :2011/05/18(水) 18:34:41.75
どうせならelsunlessもほしい
とりあえずニコ生のsweetwaterさんの放送見ると勉強になるよ
tukaene-sureddodana
>>840 「日常」にめっちゃ役立って解説が全部日本語で日本中の一般的な「ぱそこん」で実行可能なプログラム言語がある
エクセルのVBA
だから、たぶん、説明文が日本語かどうかというのはそれほど多勢には影響しない
最近はAdobe AIRでWindowsクライアントアプリという選択肢もあるよ ActionScriptも他の言語のイイトコどりでC#に似た覚えやすさあるし
RGSSをいじくるためにRubyを勉強し始めたはずがゲームそっちのけでRubyにはまりこんでしまた
851 :
825 :2011/05/19(木) 09:37:43.50
PythonとRubyってどちらがlinuxでつかわれてるもんですか?
>>852 その2つで比較するならPython
というかRubyはシステムワイドにインストールしてなにかするというのはあまりメインじゃない
自分でインストールして、自分のために使う
「ホームディレクトリに複数バージョンの実行環境をインストールして(コマンド一発で)使い分け(または一括実行)」
なんていう逆ベクトルに面倒な変態行為がポピュラーなスクリプト言語がRuby以外にどれだけあるというのか
トップページに「A programmer's best friend」って書くぐらいだからな その言語で何かを作る、作られた何かをユーザが使う…ではなく プログラマが使う補助ツールって感じのスタンスなんだろう
Rubyなんてやらなければよかった
個人的にはRubyを学んで損したと思うことはない プログラミングやらコンピュータやらいんたーねっとやらの知識の補強になっている まあ、たとえば、 ・ 学校に行かず3年間Rubyをやった ・ 卒業後家で2年間ずっとRubyをやっている ・ どんくさい入門と間違った解説で半年学んだ ・ Rubyを勉強しながら蕎麦屋を始めた あたりだと、Rubyであることとのシナジー効果がまったくないので大損で無駄だと思う っていうか早々に見切りつけろ学校行け就職しろ本買え寄り道するな
857 :
uy :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をちゃんと扱える技術者を頭数揃えるのが厳しい問題 言語構文知ってるだけで使えます(キリッ)とか言っちゃう奴も多いため、判断が難しい
Rubyがもっとwebに強ければよかった
本当に技術的話題にはついていけないんだな可哀想に
>>859 自転車置場以前の話しか出来てないからね
なんのためにム板のあちこちのスレに書き込んでるのかすごく不思議
rake test をセーフレベル指定で実行する方法はある?
rake -E"\$SAFE=1" test って書いたけどなんか微妙に test 側には反映されてない雰囲気
そもそも学校でrubyを教えた所で無駄な気がする。
どこから学校でRubyという話がわいてきたのかね?
まともな学校じゃやらんだろ
話が絡んでなくてさっぱりわからんなw
文字列を指定カラムで分割する分かりやすい方法ない? "20110519" ==> ["2011","05","19"] みたいな感じで。 データ長700文字位を200個位に分割
868 :
デフォルトの名無しさん :2011/05/19(木) 20:22:01.54
バイトでよければunpackじゃないかな。
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とか。
文字列をスライスしていけばいいんじゃないの?
872 :
デフォルトの名無しさん :2011/05/19(木) 20:36:44.29
「わかりやすい」のはずらずらと s[k1...k2] s[k2...k3] : s[kn..-1] を並べることだと思う。(最後だけ ..) ループ化したりなんだりはその後必要に応じて。
>>868 ASCIIならunpackで"a4a2a2"とか書けるみたい。
>>869 理解できません。
>>870 scan(/(....)(..)(..)/).flattenは分割数が多いと分かりにくい。
str[nth, length] で切り出せるのは知ってますが
文字列操作に長けたRubyならもっと分かりやすくて簡単な方法が用意されてるはずと思って質問しました。
>>871 スライスって?
>>872 やっぱそれしかないですか。
初心者は何ができないかを知らず、方法を求めて無為に時間を費やす
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] が不格好だなー。
>>869 が文字エンコーディングさえ揃ってれば一発だと思うのだが、何か不都合でもあるんだろうか
877 :
デフォルトの名無しさん :2011/05/19(木) 21:09:52.15
簡潔さは求めていないということでは?
[nth, length]や[n..m]やString#sliceで配列で指定した文字数ずつで分割していくメソッドなんて 2,3行で書けそうだし自分で作ったら? 文字列操作に長けてるってのは文字列を操作するさまざまなメソッドを簡単に書けるってだけで、 最初からなんでもメソッドが用意されてるって意味じゃないよ。
カッコばっかで嫌がらせ並に読みにくいことを否定はしねえw irb> p s.match(Regexp.new [4,6,4,6,5].map{|i| '(.{' + i.to_s + '})' }.join).captures でどう っていうか、/(.{4})(.{6})(.{4})(.{6})(.{5})/ みたいに「わかりにくい」正規表現を自動で生成する手もあるというだけのお話 なんで定型作業をちまちま手で書かなきゃならないのよ プログラムをプログラムで生成することを厭ってはいけない
>>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}
なんで初心者は理解できもしないのに無理にスマートに書こうとするんだろうね。 泥臭くコード書いちゃえよ。 def ore_split(str, ary) n = 0 ary.collect{|i| n += i; str[n-i...n] } end
>>869 >>880 matchのリファレンス読んできました。やってることは理解しました。
>>879 意図は、自分で作れるが予め用意されてるのではないかということで
皆さんありがとうございました。
処理を自分で書く → でもこれRubyに最初からあったようななかったような → 調べる → やっぱりない or あった!Rubyは豪勢すなぁ ということがよくあるので質問者の気持ちはよくわかる
自作って初心者から見て「カッコ悪い」んだよね ほら見てよ5行もある んでしばらくしてワンライナに嵌って可読性落として、 結局教科書みたいな行数と空白と呼び出しカッコの多いスクリプトに戻る
元の文字列を破壊していいなら ary.collect{|n| str.slice!(0...n) } でいいんじゃね? 破壊したくなければdupしとけばいいし。
ハッシュのかぶった時の処理をブロックで指定するmergeを自分で必死こいて実装して ものすごい低速ながらがんばっていろいろ処理させた後にmergeに普通にブロック渡せるの知ってしかもそれが めちゃくちゃ速かったときは泣きそうになった。
だよな。 Hashってなんだよw 普通Mapだろwワロチw
公式ドキュメントを読む限りJavaの世界でMapっていうと「連想配列なデータ入れ」を指すのか。 地図に対してはマップという言葉を使わずにどう定義するつもりなのか。 いちいちオレオレ辞書を定義しないで欲しい。
連想配列をHashと呼ぶのも結構アレだけどね。
機能の名前を付けるべきなのに、実装の詳細を名前にしているからな。 二流のプログラマーって命名のセンスがないよね。
Perlの凄腕はかーの皆さんを敵に回すのはやめてくだしあ
class Map < Hash; end さ、帰った帰った。
>>891 に呼応して
>>892 を書いただけのつもりなのに、なぜか素晴らしい命名センスを持った一流プログラマによるまつもと叩きに利用されたでござる。
一流プログラマはどんなことでも自分の主張に利用するのだ。
旧リファレンスマニュアルの用語集 Hash Rubyにおけるキーから値へのマッピングを表すデータ構造。 連想配列とか 辞書とも呼ばれる。ハッシュがハッシュと呼ばれるのはその実現に「ハッシュ表」と呼ばれるアルゴリズムが使われているからである。 るりまのHashクラスの冒頭 ハッシュテーブル(連想配列とも呼ぶ)のクラス。ハッシュは任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができます。
あれは連想配列の方がいいよ。 別にハッシュを使って実装しなくてもいいわけだし。
ハッシュってーとハッシュ値のことをハッシュと呼ぶ場面がけっこうあるからなあ。。。
連想配列だと "Associative array" てタイプすんのが面倒だから 米人がhashて呼称してんじゃね、とかつまらないオチをつけてみる
実際そんな感じだったかと associative arrayが長くてピリッとしないから じゃあhashにしとくかとPerlのみなさん でもってRubyはそれを踏襲したと
Rubyは色んなところでPerlを意識してるからね Perlが連想配列をハッシュと呼ぶから、それを意識したRubyもハッシュと呼ぶことにした、ってことだろう
905 :
デフォルトの名無しさん :2011/05/19(木) 23:29:46.88
とりあえず気になることがあったらルーツはPerlではないか、と調べてみるべき。 昔はPerlが基礎教養だったから調べる必要も主張する必要もなかったんだけど。
perlの焼き直しと言われる所以だね。 rubyならスマートに描けると思ってたら、そうでもないことを知って落胆する入門者も多いと思うよw 自称一流を自負するならスマートに書いてあげればいいのにwww
なんのこっちゃ
>>905 いろんな言語からの輸入があるから、単純に Perl とも言い切れない
gsub とか一部のメソッド名は Perl どころか awk 発祥らしい……
例外処理の rescue/ensure はたぶん Eiffel からだし、
クラスの super の挙動は Lisp 由来らしいし、Ruby の細部をつつくと Matz の趣味が詰まってる
なんでreplaceじゃなくてgsubなんだろう
910 :
デフォルトの名無しさん :2011/05/20(金) 01:07:28.63
だからawkなんじゃねーの? 置換といえばsedもawkもperlもreplaceじゃなくてsubstituteだ。
全角コロン(:)を含む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) }
>>839 せっかくRubyスレに来ている初心者に現実を見せるのはやめませんか・・・
>>856 おいやめろ
RubyはなにかちょっとしたCLIツールを作るには十分すぎるほど役立つが、 それ以外の目的については、Railsを除けば「他の言語の方が効率いいけどRubyでやりたいからRubyでやる」になっちゃうよね。
現場ではやっぱりPHPかJAVAあたりになっちゃう。 人が集まらないもん。
>>913 Rubyのほうが効率いいから(効率がいいうちは)Rubyで作るんだよ
ソフトウェアってのは最初からキラキラした箱に入った状態で畑から収穫されるわけじゃない
まあ、畑から産地直送するしか許されてないのなら、最初から化粧箱ごと作らないといけないがw
>>911 Windowsならbinmodeじゃないとアウトだけど、そういう話じゃなさそうね
917 :
uy :2011/05/20(金) 08:13:09.23
>>908 Rubyは散々Lisp方言っていわれて来ただろwwwwwwwwww
初心者の理解できない単語を使うのは嫌いだけどwwwwwwww
そこら辺の動作を理解したいならアナフォリックマクロでググレカスwwwwwwwwwwwwwwwwwwwww
>>914 だね、日本じゃ無理
言語を、「仕事で必要にならなければ覚えない」っつうアホが日本には多いから
仕事がないと技術者が集まらないし、 技術者がいないと仕事が出来ない
どっか力のある会社が率先してRuby使っていくようにならないと無理
JAVAみたいに、C言語が出来ればある程度扱える言語とは違うからなRuby
Lispっつうか、ある程度のスキルがないと無理
「仕事で必要にならなければ覚えない」人たちがRubyを使い出す ↓ 30年後COBOL化する 〜 Fin 〜 しまn
しまった初心者スレだった 流してくれや
RubyがLisp方言とかただのネタなのに真に受けちゃったんだ……。
>>911 はIO#eachが何を頼りにしてるかなんだと思う
$/ = Kconv.kconv("\r\n", Kconv::UTF16) でどう
Rubyじたいネタだからな。 まじで使ってるとかw
人生自体ネタだからな まじで生きてるとかw
ごめん宇宙創っちゃったwうけるw
925 :
uy :2011/05/20(金) 13:57:47.88
>>920 はぁ?wwww
アレを言ってたのは、ガチでスキル高い奴らだぞ
Rubyをオブジェクト指向的な使い方しかやっていないなら一生、意味のわからない言葉だと思うけどね
たいして効率がよいわけでもないのに いまさら金にもならないRubyを覚えるのはごめんだ。 みんなそう思ってるんだろうな…もし俺がRubyを知らなくて、 今から何か使えるようにならなきゃならないと言われたら別の言語にする。
rubyで作ったら後から困るのが分かり切ってるのに仕事でruby使うプログラマは馬鹿。計画性無さ過ぎ。 ツイタもrubyじゃ面倒見きれず乗り換えを余儀なくされた。将来乗り換えが予想されるコストをrubyを選んだプログラマが負担すればいい。
>>927 どうして最初から最後まで同じ言語で作らなければいけないの?
PerlとRubyはどっちか知ってれば、もう一つの方を使うのにほとんど苦労がないというか、 必要なたびにちょっと調べればいいぐらいの違いしかないでしょ。
そんな技術無関係な誰でもできる話をするとまたuyが寄ってきますよ
Rubyで間に合ううちはRubyで作って間に合わなくなったらもっと速いのに乗り換える ってのはRubyに限らずスクリプト言語全体で似たようなもの。 PythonもとりあえずはPythonで手軽に実装してみるけど、 間に合わなそうならC/C++に切り替えってのはよくあるスタイル。
PythonのほうがアップデートたくさんしてくれそうだからPythonの勉強したいんだよね まあPython4が出たら勉強したいかな
原発が安全なうちは原発を使い続けるエネルギ政策みたいなものか。 将来的なruby採用時の被害補償負担を担保する為に、全rubyプログラマから利用料を徴収して基金を作っておいたほうが良い鴨な。足りない分は島根の教祖が被るとw
Perlだってシェルスクリプトだって、VisualBasicすら「時間があったら必ずCで書き直すから」がデフォだった まあ、往々にしてそんな時間はないわけなんだが
モックでビルが建てられないと囃し立てるような人は 実のところ何も知らない何も作ったことのない人なので無視してよい そもそもビル立てるものじゃない
うちのしすてむRubyを採用してるけど、PSNのような情報流出は無いよな? 早めにCで書き換える対策しておいたほうがいい?
かつてのコボラーたちから利用料徴収して被害補償しようぜ。
>>936 Rubyだから漏れるわけでもないし、Cで書いたら漏れないわけでもない。
Cで書き換えてメモリリークして鯖落としたら世話ないわな。
速度や柔軟性が気になるなら書き換えたらいいんじゃないでしょうか。
>>933 > 原発が安全なうちは原発を使い続けるエネルギ政策みたいなものか。
時事ネタを絡めた喩え話に見せつつ、よく読むと意味不明だな
だいたい何年も続くサイトなら 何回もリニューアルするから言語なんか関係ない
Twitterはここまで大規模なサービスになることを開発者が見越していなかったってだけだと思うよ。
>>925 「Acceptable Lisp」「Algolの皮を被ったLisp」と言われることはあっても
さすがにLisp方言は言いすぎ
>>925 RubyにLispとの類似点も相違点も多く持つことを理解している人の間だから
「RubyはLisp方言」というネタが成立するんじゃないか。 あたまだいじょぶ?
全ての言語の原型はコボル由来。その他は方言にすぎない。 とか半島的な原理主義者が台頭して来そうだwww
それにしても上級者向けな話題ばかりだな
947 :
デフォルトの名無しさん :2011/05/20(金) 20:20:22.51
よーしパパ、Rubyの名前を全てエスペラント語に書き換えたエスペラントRubyつくっちゃうぞ〜
948 :
uy :2011/05/20(金) 20:26:12.90
>>942-943 念のためいっておくけど
外見の事言ってるわけじゃないからな?
『 今までLispでしかなしえなかったプログラミング技法がRubyでも一応可能 』
それをわかってる奴がLisp方言って言っていたとしか思えない
なぜなら今、俺もRubyをLisp方言と言いたい気分だからwwwwww
949 :
uy :2011/05/20(金) 20:28:00.54
アルゴリズム自体の探求したい奴は、 「 RubyはLisp方言 」っつう言葉を頭の片隅にでも覚えといて損はないよwwwwwww いつかその言葉の意味がわかる時がくるwwwwww
RubyよりはTclのほうがLispに近いが、TclはLisp方言とは呼ばれない RubyがLisp方言うんぬんは、単純にRubyユーザのLispコンプレックスじゃね?
>今までLispでしかなし得なかった えっ えっ えっ
いいかげんほかのスレでやれよと
953 :
uy :2011/05/20(金) 21:04:01.52
言ってろ言ってろ ふざけたレスに時より織り交ぜるuyのマジレスに気づけない奴は三流
ここは初心者スレです、質問スレも兼ねております 質問の邪魔になりますので単なる雑談であれば御引き取り願います
>>921 うまくいきませんでした。
アドバイスをリファレンスを見てこのように
解釈しましたがあっていますか?
f.each(Kconv.kconv("\r\n", Kconv::UTF16)){|l|
と同じ意味で、$/のグローバル組み込み変数
に直接代入することもできる。
改行コードを明示したら動くかも。
>>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として作成)
全角コロンに限定して引っかかりそうな箇所はないので、別の問題かもしれんが
958 :
957 :2011/05/20(金) 23:16:29.38
あれ UTF16の文字列中に0x0aのコードがあったらまずいので、 lines.each_line("\r\x0\n\x0") {|l| としないとだめかな chomp が使えなくなるので改行取り除くのが面倒になるけど
このスレの書き込みの勢いを40越えにする為に俺は来た 俺が来る前はここ30も超えてなかったよ
時より・・・ 日本語と同じでRubyもその他言語も使える気でいるだけなんだろうな
>>957 ruby1.8.7 on Windowsで動作しました。
ただ、改善前、改善後の両方で試しにBEで保存して
読み込ませたらやっぱりうまくいきませんでした。
うまくいった意味がわかりません・・・
今日は遅いので断念します。
ひとまず、目的は達することができそうなのでありがとうございました。
964 :
957 :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 することに注意
965 :
957 :2011/05/21(土) 01:33:14.31
いまさら気づいたけど、最初に全体をShift_JISに変換して、 それから each_line で処理するほうが簡単だし、普通かも
966 :
デフォルトの名無しさん :2011/05/21(土) 02:56:44.16
forbiddenなるんだが ファイル自体にはchmodで755ついてるし httpd.confも設定した 他なに設定ある?
そのファイルが置いてあるディレクトリのパーミッションを 755にしてみるとか
(Rubyと関係ねぇ…!)
無職・童貞の自分にとって結城さんのリア充日記が心に痛いお…
>>961 >>962 rubynstaller-1.9.*
にはruby/tkが入っていないといううわさが
>>962 確認のために検索してみたけど、tk.rbでもtk.soでも引っかからないから、
1.8.7も1.9.2でもRubyinstallerはそのままじゃruby/tkが使えないみたいだよ。
検索してみたらRuby/tk Kit を入れろとかいう話だけど……。
s.gsub!(...) とか文字列操作したとき変更をトラップして メソッド呼び出したりする機能ないですか
>>973 gsub!するときに変更をトラップしたいならブロック使えばいいんじゃないかしら。
あらゆる変更に対して反応する機能はないと思う。
set_trace_funcってのが無くはない ただし、かなり特殊なケースでしか使用されない あるいはメソッドを上書きしてトラップ動作を挿し込むとか まずは、トラップが本当に必要か考えたほうがよさそう
>>973 破壊的メソッド全部についてメソッド呼びたいならメソッドレベルでもクラスレベルでもいいけどラッパー作るのが速いかもね。
irb> str = "うんこ" irb> def str.gsub!(*args); warn "やめてください!"; self; end irb> str.gsub!(/う/){'ち'} やめてください! irb> puts str うんこ
オブジェクトに直接defできるのか…
>>978 RubyやったことないならRuby本体の勉強からやっと毛
自転車乗れないうちからラーメンの出前とか無理だろラーメンぶちまけるだろ
>>978 と、煽るだけだと申し訳ないので、
require "guiutil.rb"
require "scenario.rb"
を
require "./guiutil.rb"
require "./scenario.rb"
に変えてみましょう。1.9.2ではカレントディレクトリはロードパスに入ってない。
>>980 「Rubyではじめるプログラミング」を見てる人にその言い草はちょいとないんじゃないかw
今回の問題は1.8と1.9の互換性のなさが問題になってるだけ。
まだ自転車でのラーメンの出前とかあるのかね カブとかならともかくあれはそれなりに匠の技だと思うのだが 次スレ 立てるには条件がいるので立候補を
>>982 駄目でした。他にも問題があるようです。
ソースの読解と割り切って今回は諦めます。
ありがとうございました。
>>985 カレントディレクトリはちゃんと移動してる?
エラーのひとつひとつの進捗を報告して聞いてけば解決できそうな問題なのに、 勝手に自己完結して諦めるようじゃRuby人生は暗いかもしれないな。
>>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
これで動くようになるよ。
winでrubyinstallerから入れた場合にtkを入れたいのですがどこのurlからtkをダウンロードするのですか?
>>990 ちょっとログ遡ってみたらいいんじゃないかな
require_relativeって嫌われてるの?
次スレ立てろクズ
建てられないので埋めとく。
建てられないから埋めるってキチガイかよ
書き込まないと伝わらないことも有る。
早くしろよ!!!!!!!!!!!!!
998 :
uy :2011/05/21(土) 19:22:20.97
999 :
uv :2011/05/21(土) 19:23:28.77
1000 :
uv :2011/05/21(土) 19:24:10.49
てすと?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。