・いつものエディタとターミナルという普段着でお越し下さい ・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ ・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか? A.好きにしろ ※RubyやRuby使いに対する不満や愚痴などは本スレやバトロワスレなどをご利用下さい
4 :
uy :2012/07/30(月) 05:26:01.45
$a = 6 puts "#{$a}" # => 6 puts "#$a" # => 6 $n = Struct.new(:x).new(4) puts "#{$n.x}" # => 4 puts "#$n.x" # => #<struct x=4>.x # ↑はぁー?
Rubyが遅いというのはCと比べてとかの相対的な批判であって、 ハードウェアを考慮していない。 実は30年前のCと今のrubyでは今の方のrubyの方が早い。
6 :
デフォルトの名無しさん :2012/07/30(月) 19:39:24.36
Array#delete_if はあっても Array#grep が無いというのはFAQでしょうか?
前スレ最後のやつお願いします
>>6 irb> [1,2,3].grep(1)
=> [1]
irb> %w[1 2 3].grep(/1/)
=> ["1"]
オイェァ
ただし、あんまし使い出がないメソッドであることは否定しない
中途半端に使うと肝心なとこで裏切られるので(自業自得だが)、ふつうにfindとか使うのおすすめ
>>7 > はたらきたくないでござる
うっせーバカ
>>9 せめてどうググればサンプルなどが出てくるか教えていただけませんか?
回数指定をする繰り返しでもなく、このような例が見つからずに途方に暮れています
物凄く一般論としては、現在のread moreとかはJavaScriptやらCSSやらで実装されていることが非常に多い 単純な<a>リンクのクリックでは動作しないかもしれない サイトが固定なのなら、本文ページのURLを自力で作成するのが妥当 全部で何ページあるのかとかはそりゃ自分でHtML読んで調べろ もし単純な<a>リンクであることがわかってるのなら、そりゃその続きを読むリンクがそのページにまだあるかどうかで最終ページの判定すればいいんじゃないの 次のページがないのに次のページのリンクが有効であることはまずない
さらにもし、現時点でなにを言っているのかさっぱりわからないのなら、それはライブラリの問題ではなくRuby基礎の問題 Rubyの基礎がまったくできていないために、なにもできない状態になっている ライブラリを使うことは一旦諦めて、Rubyの基礎の勉強をするといい
>>11 よくわかりました!ありがとうございます!
gemライブラリはRuby使い倒せるレベルが前提だからなあ 初心者をなんかどうにかして助けてくれるような機能があることはないよ
>>14 要望を適切に「分解」するのは人力で、それをやるために必要なのは基礎知識と経験だからねえ
今回で言うと「特定の語句があるまでURLの先を取得することを繰り返して本文を溜め込んで返すメソッド」みたいなものを求められても困る
…あっても面白そうな気はするが、デフォルトではたぶん年に1回くらいしか使えなさそうだ(自力で実装したほうが早い)
疑問を整理 ・ トップレベルに定義されたメソッドと定数は Object に所属することになっている(これはとりあえずそういうものだと理解する) ・ が、モジュール M に対する M.ancestors は [M] だけを返し、Object が含まれていないので Object が見えないはずでは? てきとーな回答 irb> module M; end irb> p M.class Module irb> p M.class.superclass Object superclass の定数がインスタンス内から読めるのは当たり前 …という説明で納得して頂けますでしょうか たぶんもっとわかりやすくて本質的な説明をしてくれる勇者様がきっと irb> class SUPERCLASS; end irb> class CLASS < SUPERCLASS; end irb> o = CLASS.new irb> SUPERCLASS.const_set(:CONST,"superclass!") irb> p o.class CLASS irb> p o.class.superclass SUPERCLASS irb> class << o; p CONST; end "superclass!"
ああなるほどそういうことか ありがと
ようするにこういう状態ですよね Moduleのインスタンスだってことを見落としてた class Module < Object def foo # ここからObjectの定数が見える end end
>>21 そっすなー
マジカルさ加減で言うとトップレベルがObjectに行くほうがマジカルなんだけど、そこはとりあえずスレ的には丸覚えで
class Module X = 0 def foo X end end module M; end M.foo #=> 0 module M; X; end #=> NameError あれ?
>>18 5番目 (Object)
class ×; end
class 3番目 < ×
class 2番目 < ×
class C < 4番目
include 1番目
p CONST
end
end
end
まずinclude/extendを探し、次にスクリプト上のネストを探し、さらに継承元を探し、最後にObjectクラスを探してCONSTがなかったらエラー
class A1; CONST="A!"
class B1; CONST="B!"
class C1; CONST="C!"; end
class C < C1; p CONST; end
end; end #=> "B!"
class A2; CONST="A!"
class B2;
class C2; CONST="C!"; end
class C < C2; p CONST; end
end; end #=> "A!"
class A3;
class B3;
class C3; CONST="C!"; end
class C < C3; p CONST; end
end; end #=> "C!"
これはそういう順番になるように作ってあるとしか言えない、でいいと思う
>>23 class Module
X=0
end
module M
p self #=> M
# M=Module.new なので、C::CONST や C.new.class::CONST は読めても C.new::CONST が読めない理屈と同様、Module::X はここから読めない
end
class << M
p self #=> #<Class:M>
# Classの継承元には Module が含まれているのでふつうに読めるというか、回答でこれを出した
>>19 が間違ってるんだな
end
結局
>>18 の見える理由はなんなんだろう
「例外的にそうなってます」でいいのか、それとも
「○○の範囲が見えて、その中にObjectも含まれています」みたいな説明が可能なのか
今の所こういう感じじゃないかと思ってるんだけど違うかな
module A; end とか class A; end の中では以下の順で探索
1 ネストを外側に向かって。ただしトップレベルは含まない
2 継承元に向かって探索(include したモジュールも継承扱い。つまりM.ancestors)
3 Objectから継承元に向かって探索(Object.ancestors。classの場合は2に含まれる)
>>18 のページの記述は3が抜けてる?
あ、書き直し漏れがあった × M.ancestors ○ A.ancestors
質問よろしいでしょうか。 a = gets.chomp while a != "BYE" puts "what?" a = gets.chomp end このプログラムをwhat?と聞き返されるたびにBYEと入力して、の繰り返しで三回目にそのループから抜けられるようにするにはどうすればよいでしょうか?
what?と聞かれる前(つまり初回)に入力したBYEもカウントしていいんかな? そうならまずwhileループをbegin〜end while(ruby版do〜whileの構文)に書き換えてから全体を3.timesで囲むとか
n = 0 while n < 3 puts "what?" a = gets.chomp n += 1 if a == "BYE" end
>>29 >>30 >>31 アドバイスありがとうございます。改善してみました。
3.times{
a=gets.chomp
while a != "BYE"
puts "what?"
a=gets.chomp
end}
ただ、これだとBYEと入力したあとにwhat?と返してくれません。どうしたものでしょうか。
今のままだとBYEと入力しない限りはwhatと返す(BYEと返すとループから抜けてしまう)ようになっているので、
BYEと入力してもwhatと返すようにしたいです。それで三回連続でBYEと入力したときだけループから抜けるようにしたいのですが。
BYEと入力した回数をカウンタで数えるのでしょうか。調べてみてもよく分からなかったので教えていただけるとありがたいです。
>>32 > 三回連続でBYEと入力したときだけループから抜けるようにしたいのですが
連続でないと駄目なの?
だったら
>>30 は忘れて。これは
BYE
HELLO
BYE
BYE
みたいな入力で抜けることだけを想定して書いてるから
基本的には
>>31 みたいな感じで、BYE以外が入力されたらカウンタをリセットすればいいんじゃないかな
34 :
uy :2012/08/05(日) 14:57:37.95
loop.each_with_object ["","",""] do | _, c | puts "what?" a = gets.chomp p a c << a c.shift break if c.join == "BYE"*3 end
35 :
uy :2012/08/05(日) 15:22:44.83
ミスった これcycleでいいや loop.each_with_object ["","",""] do | _, c | ↓ [["","",""]].cycle do | c |
馬鹿には無理
>>34 joinしてからの判別だと、BY EBY EBYE みたいな入力でも通ってしまう
n = 0 while n < 3 puts "what?" gets.chomp == "BYE" ? n += 1 : n = 0 end 標準ライブラリだとプロンプトを引数にとるメソッドはないんだっけ? read_input("what?:") みたいなの
いろいろ考えてくださってありがとうございます!知識がなくて皆さんの言っていることは全然わかりませんが・・勉強します。 変化を加えてみました。 puts "Say \'bye\' to that old woman." n=0 while n<3 a=gets.chomp n += 1 if a=="BYE" puts "What? I can\'t hear your voice well." end puts "OK." これだと三回目のBYEを入力したあとにWhat? I can\'t hear your voice well.と表示されてしまいます。 三回目のBYEの後はOKだけ表示されるようにしたいのですが、どうすればよいでしょうか?
>>39 わかんないなら先進むのやめとけ
理解が先
わかんないのにさらに要素増やしてどうする
41 :
39 :2012/08/06(月) 09:07:04.31
>>41 他人に聞いてそのまま書くのは最初の時点では練習にならない
(クラスやメソッドをあらかた知ってる状態では写経も意味があるんだが)
自分で必要なものを考えて、それに必要な機能を自力で探して、それを必要なだけ自分で組み合わせて作れ
もし、プログラミングで作りたい・作らなければならないものが現時点でなにもないのなら、プログラミングのことはすっぱり忘れて他のことをしろ
プログラミングというものが「必要」となったときに、「っていうか自分で作ればいいのか」と思い出すだけで充分
暇だからプログラミングを始める、というのがおそらく最悪のパターンだな
44 :
uy :2012/08/06(月) 09:32:00.14
>>37 puts "Say \'bye\' to that old woman."
[["","",""]].cycle do | c |
print "what?"
a = gets.chomp
p a
c << a
c.shift
c[0] == "BYE" and
c[1] == "BYE" and
c[2] == "BYE" and break
puts "What? I can\'t hear your voice well."
end
puts "OK."
printfのフォーマットについて質問なんですが printf "_ %s" % [ 2 ] こんな感じのをハッシュでやる方法ってありませんでしたか? どこかでみたような気がしたんですが書き方を忘れてしまって printf "_ %s" % { a: 4 }
46 :
uy :2012/08/06(月) 18:55:17.60
printf "_ %{a}" % { a: 4 }
あれ、%{sym} ってマニュアルに書いてなかったっけ? puts "%{symbol}" % {:symbol => 'val'} val シンボルじゃないと動きません
メソッド内で特異クラスの宣言をしたいんですけど、 何か方法はありませんか? def f n = 0 class << n end end f
>>49 Fixnumオブジェクトは特異クラスを持てない
メソッド内で宣言すること自体は普通に出来る
>>50 そうなんですね
気づきませんでしたありがとうございます
テキストファイルの全行を配列に読み込みたい(改行文字は削除)場合、 こうやってるんですが、もっと簡単な書き方ありますか? lines = open(filename) {|f| f.readlines().map {|l| l.chomp} } getsとかeachとか使うにしてもchompは省略できないんですかね?
53 :
u :2012/08/08(水) 12:50:05.94
p open($0).read.split("\n") p open($0).readlines.map(&:chomp) p [*open($0)].map(&:chomp)
IO.foreach(filename).map{|l| l.chomp}
今ネット上の画像のurl情報からgtk2を用いてそのurlの元の画像を表示するビューアのようなものを作っているのですが、なぜか画像の表示に失敗してしまいます。
個人的に関数等を吟味したつもりなのですが、結局できませんでした。バイナリだけみたら、自前のデータとほとんど同じように取得できているように一見見えるのですが・・・ すみませんアドバイスお願いします
require "gtk2"
require "open-uri"
NAME = "view"
WINDOW_SIZE = [500, 500]
class Win < Gtk::Window
def initialize
super(NAME)
self.set_default_size(*WINDOW_SIZE)
self.signal_connect("delete_event") do
Gtk.main_quit
end
self.signal_connect("key-press-event") do |w, e|
if e.keyval == Gdk::Keyval::GDK_q
Gtk.main_quit
end
end
end
end
url= '
http://www.astroarts.jp/news/2005/05/09hubble_anniversary/m51.jpg '
image = Gtk::Image.new(open(url,"rb").read)
main_win = Win.new
main_win.add(image)
main_win.show_all
Gtk.main
追記ですが、url元の画像が作業中消されてしまってたらしいので
http://upload.wikimedia.org/wikipedia/en/thumb/6/6a/Topimage_ (2ch).png/250px-Topimage_(2ch).png
でお願いします。こちらの画像でも結果は同じでした
書き込み文字数が足りなくて不親切な質問になってしまったので、一応プログラムの流れを説明します
1、windowを準備(qか罰ボタンで画面を終了するようにする)
2、urlを読み込む
3、url元の画像データをバイナリデータで読み込み、Imageメソッドに渡す(imageにデータを格納する)
4、imageのデータでウィンドウを作る
という流れで作っていたのですが・・・できませんでした
とりあえず画像はローカルに保存して使え まさか実行するたびに何百回もサーバにアクセスして画像を取得していたわけではあるまい
やはりそれしか手段はありませんか・・・ まあ、rubyってそういうものですしね。参考になりました。ありがとうございました
tmpdirとかに保存すりゃいい
外部プログラム socat との組み合わせで file descriptor を介して通信したいです。 socat EXEC:./te.rb,fdin=4,fdout=5 /dev/ttyS0 のように perl では、 use IO::Handle; use IO::File $fdr = IO::Handle->new() $fdw = IO::Handle->new() $fdw->fdopen(4, "w") $fdr->fdopen(5, "r") のように書くと実現できるですが、ruby の場合、IO::Handle->new() を実現するには どうしたらよいでしょうか。いきなり IO.new(4, "w") とすると Bad file descriptor で Error になってしまいます
61 :
デフォルトの名無しさん :2012/08/08(水) 23:23:51.39
使ったことないけど IO.for_fd ってのがあるようだ。
62 :
デフォルトの名無しさん :2012/08/08(水) 23:24:39.90
あ、IO.new が整数を第1引数に受け取った時の動作と一緒か。
63 :
デフォルトの名無しさん :2012/08/08(水) 23:28:53.29
perlでは未オープンのfdを構わず使用できてしまうのか。
socat知らないんでshでこんな事してみたけど普通にオープン出来るから socatの動作の方がおかしいんじゃないかな --hoge.rb fd4 = IO.open(4) fd5 = IO.open(5,'w') fd5.puts(fd4.read) --hofe.in hello world --shで実行 ruby hoge.rb 4<hoge.in 5>hoge.out #=> hoge.outにhello worldが出力される
>63, >64 を見て自分の勘違いにきづきました。 perl が error をはかないので勘違いしてました。 単独動作で error をはくだけで、socat の引数で ruby script を与えれば動いていました。 socat 側でdescriptor 作って、 ruby の script を call しているから、ruby 側は既に存在している fd を 割り当てるだけでよかったんですね。 コメントいただいた方々ありがとうございました。
66 :
デフォルトの名無しさん :2012/08/10(金) 01:01:20.23
今更RubyにStruct なんてのがあるのを知ったクチなのですが、 このクラスの上手な使い方が思いつきません(ずっとclassを使ってやってたので) 使用例の参考になるコードなどありますでしょうか?
67 :
デフォルトの名無しさん :2012/08/10(金) 01:19:39.23
複数のデータの組をまとめて扱いたい程度のときに便利。 initializeと読み書きアクセサしかないようなクラスを作るイメージ。 LogEntry = Struct.new(:issuer, :severity, :timestamp, :message) 定型的なアクセサの生成をStructに任せ、返ってきた 無名クラスを継承して振るまい(メソッド)だけ追加する例。 class Location < Struct.new(:latitude, :longitude, :altitude) def country end end
>>67 のように迂闊に使うとめんどくさいことになることは異論を待たない
initialize とアクセサメソッドが欲しいのならアクセサメソッドだけ定義しろ
class Location
attr_accessor :latitude :longitude :altitude
def country
end
end
使い道が思いつかない、または、他の手段で代替可能なのなら、絶対に使うべきではないクラス
説得力皆無です
70 :
uy :2012/08/10(金) 09:08:21.98
>>67 はっああああああ??
それやると、selfからみれなくなるけどいいの????
複雑になるだけじゃないの??この動作知ってた?知ってた?ネェ知ってたー?WWW知らなかったのかな!!!!wwwwwっうひゃwwwっうぇwwwww
class Location < Struct.new(:latitude, :longitude, :altitude)
attr_accessor :x
def initialize
@x = 6
end
def country
self.latitude = 3
p self.latitude # => 2
p @latitude # => nil
p self.x # => 6
p @x # => 6
end
end
Location.new.country
71 :
uy :2012/08/10(金) 09:14:46.22
すみません、値を間違えました p self.latitude # => 2 は p self.latitude # => 3 です Structの活用は、メソッド内とかでちょっと構造体やらクラスっぽいのが必要になった時の 定義する時の文字数の違いとか、そのくらいだと思われる def func a = Struct.new(:x,:y).new p a.x = 2 a = Class.new { attr_accessor :x,:y }.new p a.x = 4 end func
72 :
デフォルトの名無しさん :2012/08/10(金) 10:41:35.51
HashやClassだと、後から任意のものを突っ込めすぎて自由度が高すぎる、って時に使う感じ?
そんな感じじゃね 基本classでいいよ
Structは「Struct使って便利になった」と思うことよりも「やっぱStructにするんじゃなかった」と思うことのほうが多い 最初からがっつり仕様が固まってるプロジェクトでおもむろに使うデータ構造だと思う
あるベンチでは、RubyのStructはHashよりも遅いという結果が出てたけど、 こうなると利用シーンがよく分からないね
というか、Rubyのデータ構造の中ではHashが飛び抜けて速い(配列よりも速い) 「Hashのようなもの」を自前で実装した場合は、Hashそのものよりも格段に遅い Hashに移譲したとしても、移譲自体が遅いのでやっぱり遅い
それはHash引数とかに使うからかなり頑張ったんじゃ・・・
78 :
uy :2012/08/12(日) 20:50:51.52
質問です オブジェクトに追加した特異メソッドの削除を行いたいと思ったんですけど instance_eval→undefしか方法が見つかりませんでした、 remove_methodやundef_methodはないみたいなんですけど特異メソッドの削除の方法ってこれしかないですか? a = Object.new def a.f p 2 end a.f a.instance_eval do undef_method :f rescue p "err0" remove_method :f rescue p "err1" undef :f end a.f rescue p "err2"
>>78 a = Object.new
def a.a ; p :a_a ; end
def a.b ; p :a_b ; end
a.a
a.b
class << a
remove_method :a
undef_method :b
end
a.a rescue p :no_a
a.b rescue p :no_b
80 :
uy :2012/08/12(日) 22:22:46.17
>>79 見落としていました!!
ありがとうございます!
81 :
デフォルトの名無しさん :2012/08/14(火) 14:19:55.08
これわからないです誰かよろしくお願いします 以下で与えられるフィボナッチ数anを、入力したnに対して計算して表示するプログラムをtext.rbで保存して実行してください. A₀=1,a₁=1,an=an−1+an−₂
>>81 よっしゃ実行した次はなにすればいい? って返せ
83 :
デフォルトの名無しさん :2012/08/14(火) 14:35:31.13
プログラムの一番最後の=endと書いた行でsyntax errorが出て困ってます うまく動いていたプログラムの中身をまるまるコピー →新規作成でまるまる貼り付け →名前を付けて保存 とやったらエラーが出るようになりました 調べたら改行の文字コードの問題っぽい気がするのですがどうやって直せば良いのでしょうか RDE使ってます
>>84 全然ちがうところ間違えてました
スルーしてください
macrubyの質問もこちらでいいのでしょうか? 当方、macrubyにてプログラムをくんでいますが、 どうやったら終了時に実行されるメソッドを記述できるのかわかりません。 起動時に<def applicationDidFinishLaunching(a_notification)〜>が実行されるように、 終了時にもなにか構文みたいなものがあると思うのですが、ご存知の方いらっしゃいますか? <def applicationWillTerminate(notification)>とか <def windowWillClose(notification)>とかを試してみましたが、ピクリとも動きません・・・
>>86 新Mac板にも前はRubyスレあった気がしたんだが…今見たら見付からないな
Googleで「applicationDidFinishLaunching site:developer.apple.com」でググったら
それっぽい資料がいくつかヒットするけど、どれかに無い?Terminateとか付いてるのあるからその辺りに
>>87 レスありがとうございます! なんだかんだでできました!
def applicationWillTerminate(sender)で動きました!
もう一ヶ月くらい煮詰まっていたから嬉しい! 本当にありがとうございました!
encodeでUTF8からSJISに変換するときに 例えば全角チルダとか割り当ての無い文字があるとエラーになりますがその文字だけを無視するにはどうすればいいでしょうか?
>>89 :undef => :replace, :replace => ''
92 :
uY :2012/08/19(日) 06:50:09.11
macRubyって知らないんだけど at_exit { } とか END { } 動かないの?
>>92 xcodeでマックアプリを組んでいますが、残念ながら動かないです。
多少のobject-cの知識がないとmacrubyは厳しいです。
でも見た目のいいアプリがrubyで作れるのは最高です!
94 :
uY :2012/08/19(日) 17:02:01.77
左様か
95 :
uY :2012/08/19(日) 17:03:05.20
質問なんですけど
Enumeratorを継承したクラスの使い方ってこれであってますか?
http://ideone.com/5m5qa やりたいことは、
Enumerator.new内でまわしてるオブジェクトに外部から
>p y.cc.x
こんな感じにアクセスしたいって事なんですけど
なんかsuperって引数が暗黙的に渡される?っぽいじゃないですか
けどEnumerator.newのinitializeは引数が渡されるとブロックが評価されてない?ので
superとは別にEnumerator.newを呼び出してEnumを作ってます
一応動いてますけど、二重になってる気がして不安なんですけど
96 :
uY :2012/08/19(日) 21:22:10.76
内部動作意味不明ですけど ブロックじゃなくてlambdaで渡したらうごきましたもういいです class B < Enumerator def initialize h a = super do|y| loop{ y.yield 1 } end p a.next # => 5 a = super &(lambda do|y| loop{ y.yield 1 } end) p a.next # => 1 end end B.new [5,6,7]
質問です :aaaa ってやると p Symbol.all_symbols ここに追加されますけど、 p Symbol.all_symbols.size 1_000_000_0.times do|i| :"#{i}" end p Symbol.all_symbols.size このくらい生成してやると `intern': symbol table overflow (symbol 2095337) (RuntimeError) こうなる事が分かりました いらなくなったシンボルを削除する方法ってあるんでしょうか?
98 :
uy :2012/08/21(火) 04:28:14.40
無理っぽいですね シンボルは大事に使っていくことにします
Cursesと、Term::ANSIColor for Rubyを使って、コンソールでシンタックスハイライトができるテキストエディタを目指し作っているのですが、以下のリポジトリのmain.rbを実行すると、最初の文字「1」が黒字になるというバグが発生します。
このプログラム(main.rb)は、README.rbを読み込んで、出力するものです。
https://github.com/217/VMacs このバグに2時間ほど悩んだのですが、どうにも解決できませんでした。
ライブラリの相性の問題なのでしょうか?
わかる方がいらっしゃったら、教えてください。
>>99 Linuxでも確認。このケースでは、setposの後にrefresh呼び出しで解消できるけど、
cursesを使う時は、表示が乱れるので標準出力へのprintは避けた方が無難。
cursesの作法で色指定するといいよ。
クラスメソッドはドットで呼んだほうがいいと思う あれは「クラスに属する関数なら::で呼ぶのがオブジェクト指向言語の常識」という、 ローカル実装を普遍定義と勘違いした痛い面倒な人を飼い馴らすための時代遅れの機能
公式では特定の言語のユーザーからの移行をスムーズにするため、みたいなマイルドな表現をしてたのになんでそうはっきり言うのん
移行が目的じゃなかった、経験者向けだった まあ、どっちも似たようなもんだけど Rubyでの呼び方が絶対的にタダシイわけではないけれど、 Rubyではそう使うということになってるんだから、Rubyにおいては極力そのように使ってほしいよね
ドット呼び出しを推奨する理由は、パーサーの特殊な振る舞いを回避する為。 :: だと大文字で始まる名前が定数と解釈されるので、メソッドと解釈させるには関数呼び出しの () が必要になる。 . で記述すると一貫して () を省略出来る。
>>100 とりあえずsetposの後にrefresh呼び出したら動きました。
Cursesで色指定する事が出来るのを知りませんでした。なんとか動きました。
ありがとうございました。
106 :
デフォルトの名無しさん :2012/08/22(水) 21:58:17.44
今年のクリスマスプレゼントは何でしょうか?
107 :
デフォルトの名無しさん :2012/08/23(木) 00:14:29.47
intgerが入っているarrayがあるのですが、その要素を全て加算するには、 やはり以下のように外部変数を置くしかないのでしょうか? v = 0; arr.map{ |i| v+=i }; return v
外部というか、どっかに一時記憶用の変数は必要 irb> puts [1,2,3].inject{|r,x| r +=x} 6 それがスコープで消えるかどうかの違いでしかない
>>107 単純に足すだけならこれでもk
(1..10).to_a.inject(:+)
#=> 55
畳み込みを使っていいなら [1, 2, 3].inject {|a, b| a + b } ではダメなん?
Array#sumは欲しい欲しい言われてて、議論を煮詰めると「メソッドを呼べればいい」「+でなくてもいい」に必ずなって、んで結局
>>109 になる
現在のRubyにおける一般的最短は arr.inject(:+)
中身的には
>>110 変数内部効率ウンタラを求めてるんじゃなくて単に見かけで変数がなければいいだけだと思うので、Ruby1.9でarr.inject(:+)するかRuby1.8/1.9で
>>108 しろ
Rubyじゃなくてプログラミングの問題かもしれませんがRubyでやってるのでここで質問します 操作Aのあと操作Cを行う,ということを繰り返したいのですが, もし操作Cでエラーが出る場合はAとCの間に操作Bを行わなければなりません 操作A while begin 操作C rescue 操作Bやってから操作C
すいません途中で送信してしましました 今書いているプログラムが 操作A while begin 操作C rescue 操作Bやってから操作C end さらにCのあとにやりたいこと end
度々すみません…orz
>>113 のように書いているのですが,操作A→Cだけで済むようなときにエラーが出てしまいます
こういうパターンって例外処理ではないのでしょうか?
115 :
uY :2012/08/23(木) 03:35:51.05
begin # 操作C next ########################NEXT######################### rescue # 操作Bやってから操作C end # さらにCのあとにやりたいこと
>>114 ちょっと話を整理して欲しい所
操作Cを実行せずに、操作Cでエラーが出るかは分からないのだから
「もし操作Cでエラーが出たら、操作Cの前に操作Bをやる」
という制御の流れは実現不可能だ
基本的な制御構造はA→C→A→C→……だと思われるので
while 条件
操作A
操作C
end
でいいと思う。ここにどう操作Bを足すかは、やりたいことによる
>>116 ありがとうございます
今回は操作Bを行うきっかけが「Cができるかできないか」としか書けないので
例外を使う方法で考えてみました
なのでBは例外的に必要というよりは,「CができないならBをつかう」という一種の選択肢なのです
2回に1回くらいBを使わなければならないので...
後出し後出し後出し後出し後出し後出し後出し
本当にそうとしか表現できないのなら、なにをしたいのか本当は自分でもわかっていない
>>112 と
>>117 の時点でまったく別のことを喋っている
自分でもわかっていない粒度・抽象度のものを私たちが理解して回答してあげることはできない
ということで、いっそ全部喋るか、適切な粒度にざくざく切るという行為に時間かけろ
Rubyには条件分岐とループと例外によるジャンプしかないんだから
119 :
デフォルトの名無しさん :2012/08/23(木) 06:50:57.47
初心者は例外使うなて
メソッドは放っておいても何らかの値を返し、nilが偽として動作し、条件のcond部分での変数代入が日常でしかもcaseが賢いRubyでは 「例外を使うべき例外的場面」なんてのは例外使いまくって火傷どころか焼死しないとピンと来ない 公開ライブラリでないのなら、初心者はぜひ例外使いまくって泣いてください
>>114 rescue節で実行している操作Cで出た例外を捕捉する記述がないから
begin
操作C
rescue
操作B
retry # beginに戻る
end
>>117 マニュアルの制御構造を参照してね。
begin
〜
rescue ErrorA
ErrorA例外時の処理
rescue
StandardErrorとサブクラス例外時の処理
else
例外が発生しなかった時の処理
ensure
必ず実行する処理
end
>caseが賢いRuby else if を使いこなせない馬鹿のための syntax sugar
elsif
125 :
uy :2012/08/23(木) 09:31:21.62
case proc使ってないやつなんていんの? どんな発展途上国からおこしの技術者だよ
126 :
デフォルトの名無しさん :2012/08/23(木) 18:04:09.25
10101100000100000000101000000001 を "172.16.10.1" にしたいのですが、 > p IPAddr.new("10101100000100000000101000000001") #<IPAddr: IPv6:1010:1100:0001:0000:0000:1010:0000:0001:0000:0000:0000:0000:0000:0000:0000/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff> と解釈されてしまいます。自分でunpackして作るしかないのでしょうかね。。
>>> socket.inet_ntoa(struct.pack('i4', socket.htonl(int('10101100000100000000101000000001', 2)))) '172.16.10.1'
>>126 それだとエラーになったので、素直に2進数で渡してみたよ。
ruby1.9.1 -e "require 'ipaddr';p IPAddr.new(0b10101100000100000000101000000001,Socket::AF_INET).to_s;"
"172.16.10.1"
129 :
uy :2012/08/23(木) 19:07:27.38
>>> "10101100000100000000101000000001".scan(/\d{8}/).map{|x|x.to_i(2)}*"." '172.16.10.1'
ありがとうございます、参考にしながらこうやりました。 a = "10101100000100000000101000000001" p IPAddr.new(a.to_i(2) ,Socket::AF_INET).to_s => "172.16.10.1"
俺の目には
>>118 が読解力なさ杉にしか見えないが
一行目からして電波なんだから触らないでおけ
フラミンゴ2羽犠牲「申し訳ない」 旭川市長陳謝 2012/8/23 19:43
http://www.nikkei.com/article/DGXNASDG2303P_T20C12A8CC1000/ 北海道旭川市の西川将人市長は23日の記者会見で、市が運営する旭山動物園から逃げた
ヨーロッパフラミンゴの捕獲作業で、フラミンゴをおびき寄せるために用意したおとり1羽が死に、
1羽が行方不明になったことを陳謝した。
市長は「フラミンゴは1羽25万〜30万円。市民に損害を与えて申し訳ない。
犠牲になったフラミンゴにも申し訳ないと思っている」と述べた。
2羽のフラミンゴはキタキツネに襲われたとみられ、動物園には電話で苦情が約50件寄せられた。
市長は「捕獲して戻すことが重要な役割だ」として捕獲作業を継続する方針を示した。
同時に「寒くなれば南に飛んでしまう可能性があるので、なるべく早く連れ戻したい」と述べた。
紋別市・コムケ湖で今月17〜18日に行われた動物園による捕獲作業では、逃げたフラミンゴの捕獲に失敗し、
おとりで用意した4羽のうち2羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕
1〜20までの数がランダムに並んだ配列を出力したいんですがどのようにすれば、うまくいくでしょう? Scl = 20 num = [rand(Scl) + 1] while num.size <= Scl elm = rand(Scl) + 1 num.each {|i| if num[i] != elm num << elm end } puts "num_size = #{num.size}" end print num これだと、同じ数が並ぶわ、配列のサイズもバラバラで全くうまくいきません
(1..20).to_a.shuffle
おぉ、1行で済むとは・・・ ただ、1.9では .to_a は使えない様なので arry.shuffle で良さそうですね ありがとうございました。
(1..20).sort_by{rand} とか考えたけど、shuffle1つで済むのか やっぱりArrayとかEnumerableとかのメソッドは流し見して覚えておくべきだね
138 :
uy ◆gXFLM6waxs :2012/08/26(日) 00:57:04.78
暗記って 1日10個ずつ確実に覚えるよりも 1日100個を流し読みしたほうが効率いいんだよ
rescueで特定の例外を捕捉したらwarnでメッセージを出力しているのですが、cronで実行した時のみwarnの出力を抑制するなんてできますか? crontabの設定で対象のrubyプログラムの標準出力のみ/dev/nullにリダイレクトしていますが、rescueで捕捉したエラーについてはメールされるのを防ぎたいです。 warnでエラーを確認したいのは直接実行する時だけで、cron実行時は想定していないエラーのみ確認したいのです。
>>139 ruby のコマンドラインオプションに -W0 を追加する
141 :
139 :2012/08/26(日) 15:37:49.78
ruby1.9にちゃんと付いてきているIDEってどのへんでしょうか? Netbeansは打ち切られていて。。
143 :
デフォルトの名無しさん :2012/08/27(月) 23:59:47.86
RubyMineとか。
>>142 emacsのruby-modeって、rubyの方がサポートしてるんじゃなかった?
2つの文章の類似度を判定するサンプルプログラムありませんか? Ruby1.8でMeCabを使おうと思っているのですがすでにサンプルプログラム落ちてたりしませんかね…
これこれこういう数式でこう表現されるようなことをプログラムでやりたい、というような言い方なら誰か教えてくれるかも
>>145 MeCabと言ったら日本語解析しかないだろう。出てくる語句の頻度で判定するなんて言うまでもなく。
あ、質問者じゃないから。
migemoならプログラムから使ったことあったな。そういえばあの超便利ソフトもとはrubyか。
>>148 jsで、perlインタプリタを作るまでやるか!?
と思ったけどc++で書かれ、実体はバイナリなのね。
151 :
デフォルトの名無しさん :2012/08/28(火) 23:19:46.07
>>145 意味的な話じゃなくて字面上の類似なら文字列の距離として
定義されているものを使えるように思う。
レーベンシュタイン距離とかハミング距離とか。
>>145 こういうこと?
def norm doc
sum = 0.0
doc.each_value{|v| sum += v * v}
Math.sqrt(sum)
end
def cosine_similarity doc1,doc2
sum = 0.0
(doc1.keys & doc2.keys).each {|k| sum += doc1[k] * doc2[k]}
sum / (norm(doc1) * norm(doc2))
end
doc1 = {"私" => 1, "太郎" => 1} # 単語の頻度
doc2 = {"私" => 1, "花子" => 1}
puts cosine_similarity doc1,doc2
そういえばmecab-rubyてどこいったの?
「ruby2.0がかなりすごいらしい」ってコピペして回ってるのが居たんですが、1.9と比べて何が凄いんですか?
下のような、module A と Class C を準備したのですが、同じI/F の module B も準備して Class C を共通で使いたくなりました。file C.rb で require "A" を "B" 、A::hoge を B::hoge にするだけですが、class C (file C.rb) は1つのままにしたいです。さらに、Class C を インスタンスするときにA,B を指示する I/F にはしたくないです。module A,B の wrapper を 用意してclass C はそれを使い、module の切り替えは global チックに行いたいのですが、 その wrapperをどのように記述したらよいかが、わかりません。。 file A.rb module A module_function def hoge(x,y) end end file B.rb module B module_function def hoge(x,y) end end file C.rb require "A" class C def initilize(z) @x = z def hoge(w) A::hoge(@x,w) end end
>>156 AとBを同時に使う必要が無いのであれば
AとBはクラス名を同じにしてそれぞれでrequire 'C'すればいんでね
そうでないなら例えばこんなん
class C
def self.m=(mod) ; @m = mod ; end
def self.m ; @m ; end
def hoge(w) ; self.class.m::hoge(@x,w) ; end
end
C.m = A
158 :
uy :2012/08/30(木) 02:01:13.96
module A module_function def hoge x , y p :a end end module B module_function def hoge x , y p :b end end class C class << self attr_accessor :mod end def initialize z @x = z end def hoge w self.class.mod.method(__method__).call @x , w end end C.mod = B c = C.new 2 c.hoge 4
>>167 ,
>>158 さん、ありがとうございます。
やりたいことができました。本当に助かりました
動的なケースと静的なケースどちらも教えて
いただけて感激です。
確かに静的なケースでは、異なるファイル名で
準備しておいて require しながら起動すれば、
自然に使えますね。依存関係でこり固まっていた
思考が溶けた気分です。
>>137 > (1..20).sort_by{rand}
それ、考えなしの安直プログラマーが高確率でやらかす、典型的なやってはいけないアンチパターンだな。
これは偏りが発生するのでアウト。確率論の問題としては良い題材だから、理由は自分で考えてみるといい。
ぐぐるとこれと同じパターンをやらかす人間が多くて唖然とするが。
>>161 shuffleが無かった時代に、偏ってもいいからサクッと書きたい用途でよく使われてたんだよ
当時から「ちゃんと混ぜるならちゃんと書く」という風に知られてた
そもそも言うほど偏り有るの? sort_by{rand(20)} とか sort{rand-0.5} とかやるならともかく
irb> a=(1..6).to_a; r=Hash.new{|h,k| k=0}; 1000000.times{r[a.shuffle] +=1}; d=r.values; p Math::sqrt(d.inject(0){|x,y| x+y*y}/d.size-(d.inject(0){|x,y| x+y}/d.size)**2) 62.6418390534633 irb> a=(1..6).to_a; r=Hash.new{|h,k| k=0}; 1000000.times{r[a.sort_by{rand}] +=1}; d=r.values; p Math::sqrt(d.inject(0){|x,y| x+y*y}/d.size-(d.inject(0){|x,y| x+y}/d.size)**2) 61.37589103222861 うん、たいして変わらんですな
1:def hoge 2: a = [1,2,3,4,5] 3: 4: a.each do |b|; c = b; end 5: p c 6:end これだとcのスコープが4行目内だけになってエラーになりますが そこで3行目に c = nil と入れているんですがこれでいいでしょうか? もっとスマートな方法はないでしょうか
eachの代わりにfor b in a; c = b; end
>>165 スコープがそのようになっているんだから、そのように書くのがいちばんスマートだと思うがなにか問題ある?
168 :
uy :2012/08/31(金) 14:40:17.28
1:def hoge 2: a = [1,2,3,4,5] 3: p a.last 6:end
169 :
uy :2012/08/31(金) 14:46:12.18
意味把握した 変数宣言がイヤだって事か 元コードみないとわからんけど、eachじゃなくてinjectとかeach_with_objectでやって そのイテレータの戻り値をcに格納すれば
>>161 このイディオムはsort_byだから問題ないんだろうと思ってたが
161はどんなドヤ顔で言ってんだろうw いるよねー、ランダムのラの字を行った瞬間に脊髄反射で食って掛かるひとw
>>167-169 ありがとうございます
すいません
説明不足でしたがブロック内で初めて変数を使うとスコープがそのブロック内になってしまうので
>>165 のようにブロックの前で変数を宣言するのか(グローバル変数は使うべきではないですよね)もっといい方法があるのか知りたかったということです
>>168 >>169 なるほどこれは便利ですね
>>173 >>163 のパターンは偏るはず
sort_by{rand}はほとんど偏らないけどshuffleよりかなり重い
module MyModule def a; p "this is method a"; end end class MyClass include MyModule def b; p "this is method b"; end a rescue p "no such method" b rescue p "no such method" end MyClass.new これでメソッドaとbがないと怒られてしまうのは何ででしょう? クラス定義の中ではレシーバselfはカレントクラスであるMyClassを参照するはずなのでメソッドa,bを呼べるのでは、と思ったのですが…
ものすごくおおざっぱに言うと、ふつうのincludeは引数モジュールのメソッドをインスタンスメソッドとして追加する そして、インスタンスメソッドはクラス定義のclass...endの文脈では呼べない class C def a; end a end が3行目でNoMethodError起こすのと同じ理屈 これで納得しない場合はincludeとはなんぞやという話になる
177 :
デフォルトの名無しさん :2012/09/02(日) 15:36:55.01
ゴミみたいなスコープだよね
>>176 調べてみたりしてなんとなくincludeの役割がわかりましたが、次のコードが動かない理由がわからないです
module MyModule
def self.a; p "this is method a"; end
end
class MyClass
include MyModule
end
MyClass.a
aメソッドをクラスメソッドではなくインスタンスメソッドとして定義してextendしたら MyClass.a で実行できることは確認しました
includeもextendもクラスメソッドは相手にせず、インスタンスメソッドしか見ないという事なんでしょうか
179 :
デフォルトの名無しさん :2012/09/02(日) 20:00:57.17
Rubyに本来クラスメソッドはない。 あるのはクラスインスタンスのインスタンスメソッド。 あとはincludeとextendが何をするものかを考えれ。
>>179 横から勝手に訂正させてもらうね
×あるのはクラスインスタンスのインスタンスメソッド。
○あるのはクラスインスタンスの特異メソッド。
Rubyに存在するのはインスタンスメソッドだけ、というのは昔俺も思ってた 普段考えるぶんにはそれでもいいし統一概念ですっきりするんだけど、でも本当はやっぱり違う…
モジュールをあるクラスにインクルードして使う場合、 モジュール側のメソッド内でそのクラスのインスタンス変数にアクセスするのって普通ですか?
183 :
uy :2012/09/03(月) 05:05:18.87
そのくらいはいいけど 個人的な意見でいえばそこら辺明らかに仕様がイかれてるから バージョンアップ時に動かないソース作りたくなければ あまりこだわったことやらない方がいいと俺様は思う
>>182 システム上および慣習上の問題はないよ
特定のクラス専用の実装べったりのmix-inだね
だいたいにおいてあとあと後悔したりもするが、それが起こらない限りは便利だろう
>>178 def には役目が2つある
ひとつは、その文脈でのメソッドの定義(予約)
module M
def a; end
end
class C
def b; end
end
これらはメソッドの定義行為であって、その時点で実際にメソッドが作られるわけではない
(include先が)newしたときに、生成オブジェクトに対してインスタンスメソッドとしてどさっと追加される
そしてもうひとつ、既に存在する特定のオブジェクトに対する特異メソッドの追加
def obj.s; end
これは特異メソッドの追加で、オブジェクトobjに対して即座に特異メソッドsを追加する
module MyModule
def self.a; p "this is method a"; end
end
でのdefはその文脈におけるselfの指すオブジェクト(ModuleクラスのオブジェクトMyModule)に特異メソッドを追加する行為であって、クラスやモジュールにメソッドを定義することではない
モジュールオブジェクトMyModuleは定義されたメソッドを持ってないので、includeしようがextendしようがメソッドは使えない
質問です 初歩的すぎるかもしれませんm(_ _)m 1.9だとerbコマンドは使えないんでしょうか? 参考にしている本は1.8前提だったので; USB(F:)に入れたためコマンドプロントから入力している状況です F:\>ruby erb hello.txt.erb と入力すると、ファイルかディレクトリが見つかりませんというメッセージが出ます hello.txt.erbというファイルはFドライブに入れています わかる方教えて頂きたいです
erbは添付されてるはずだよ 実行できないとしたらそれはcmd.exeが実行ファイルを見つけられないだけだろう なに言ってるかわからないのなら、フォルダ/ディレクトリと実行パスの勉強をするといい どうせこれからもずっと必要になる知識だ
素早いお返事ありがとうございます!!! 回答を頂けて安心しました 勉強します!
ruby.exeがある場所にerb.batもありませんか? あれば ruby erb ではなくてerbだけで実行できるはずですが
190 :
182 :2012/09/03(月) 21:53:13.15
ありがとうございます やはり下位のものを上位に持っていくことは極力避けるべきですかね まだ歴が浅いので、システム面や慣習に関する言及は助かります
>>190 だから管理できる範囲であるならどうでもいいって
ユーザーがincludeして使うモジュールを作ってるわけでも、ファイル数が30超えてるめんどくさいライブラリを作ってるわけでもあるまい
あるオブジェクトのメソッドがクラス定義に書いてあったものかモジュールで追加されたものかを気にする人はまずいない
ほんとにそっちのほうがプログラミングに便利だと確信するのなら、メソッド定義をごっそりモジュールに移すといい
def f p 3 end lambda(&f).call これを実行すると :6:in `<main>': wrong argument type Fixnum (expected Proc) (TypeError) と、でるんですけど動作原理が良く分かりません どうなっているんでしょうか?
まずfが普通に評価されて3になる。つまりこれと同じ lambda(&3).call 3はProcじゃないしto_procも定義されてないからlambda(&3)でエラー
試したかったことって要は __send__(:f) とか self.method(:f).call とかでいい?
どちらがエレガントで負荷的にも良いか質問です。 hogeというメソッドを何度も実行したいとき、 1000.times { B.hoge } というよりも、 app = A.new 1000.times { app.hoge } とやるほうがいいのでしょうか? class A def initialize ... end def hoge ... end end class B def self.hoge ... end end
100万回連続実行したときに0.001秒の遅れが数億円の損害になるような環境であって、 なおかつどうしてもRubyでやらなければ家族がどうなるかわからないぞと脅されているのなら、俺なら前者で書く なぜなら、定数Bとローカル変数appを比べたとき、絶対的に定数Bのほうが参照が速いから そうでないのなら意味的に妥当なほうでやるといい このためにクラスメソッドっぽくない使い方するクラスメソッドをわざわざ作るようなことはしない
「メソッドが使いたいだけであって、オブジェクト作りたいわけじゃないんだよね」という感覚はないでもないことがないでもない もしそうならクラスメソッドとかの出番だろうか
あとあとめんどくさくないことが多いのはAのパターンだと思う 効率とエレガントさに関してはどっちも変わらん
家族を見殺しにしてでも、cで書くよ
ruby-openglが、ruby 1.9.3 でインストできない。 1.8.7使えってことかよ。
202 :
195 :2012/09/10(月) 02:15:56.97
196-199 スピードと使い勝手の勘所、 よくわかりました、あざっす!
Bは毎回initializeする訳ですか?
Ruby が class B ... end を最初に見かけたときに1度だけ B = Class.new 相当をしてる メソッドを1回使いたいだけなのに毎回オブジェクトを作るのはなんかアレだということが起こらないという点でもエコ っていうか状態を保持利用しない単発野良メソッドでいいならモジュールのクラスメソッドでいい module M def M.mes end end M.mes M.mes M.mes
205 :
デフォルトの名無しさん :2012/09/13(木) 11:55:57.43
mtime, atimeを変更するメソッドってありますか?unixでいうと touch -t yymmddみたいなものです。 File.mtime File.atimeはただ取得するだけみたいなのです。 system(touch -t yymmdd)するしかないですか?
206 :
205 :2012/09/13(木) 11:57:46.80
あ,すいません。「特定の日付」に変更という意味です。
utime
208 :
205 :2012/09/13(木) 12:15:20.71
どういたしまして
Ruby始めようと思っていきなりプログラミング言語Ruby買ったけどちょっと難しいな C、Java、Pythonは経験あるんだが
言語が平易だからといって言語本体の解説書が平易だとは限らない 素直に入門書を手に取るべきだったな
>>210 あれをいきなりやるのは難しいと思う
『初めてのRuby』辺りで書き方をつかむと、言語仕様との落差にびっくりする
大部分のケースでは平易に書ける一方で
細部をつつくといくらでもカオスになるのがRuby
214 :
デフォルトの名無しさん :2012/09/15(土) 22:14:50.24
Windows上のあるフォルダが隠し属性または保護されたオペレーティングファイルであるか判定する方法はありませんか? 例えば "$RECYCLE.BIN" と "System Volume Information" というフォルダです。 これらのフォルダが存在しないパス上で、これらの名前でフォルダを作れるので名前で判定することは出来ません。 どなたか知恵を伝授してください。
// cscript attr.js var o, f; var hidden = 2; var system = 4; // 設定がわからん var folder = 16; var mask = hidden | folder; o = WScript.CreateObject("Scripting.FileSystemObject"); f = o.GetFolder("D:\\work\\hiddenFolder"); if( (f.Attributes & mask) == mask ) { WScript.echo("hidden | folder"); } /* D:\work>cscript attr.js Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. hidden | folder D:\work> */
D:\work>attrib /? ファイル属性を表示または変更します。 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:] [パス] ファイル名] [/S [/D]] + 属性を設定します。 - 属性を解除します。 R 読み取り専用属性。 A アーカイブ属性。 S システム ファイル属性。 H 隠しファイル属性。 /S 現在のディレクトリとすべてのサブフォルダの一致するファイルを 処理します。 /D フォルダも処理します。 D:\work>attrib /s /d hiddenFolder HR D:\work\hiddenFolder D:\work>
217 :
デフォルトの名無しさん :2012/09/16(日) 13:37:15.68
Rubyからファイル属性を取得することは無理でしょうか? cscriptの他にRubyからWind32apiを呼び出すぐらいしか方法ないでしょうか?
おいバカ初心者、よく見やがれw 死ねバカwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww 死ねゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww 死ねコラゴミwwwwwwwwwwwwwwwwww
「ひな壇は韓流タレント中心に」という構想が一変、TV界と韓流の今 09/16 13:00
http://woman.infoseek.co.jp/news/entertainment/cyzowoman_16Sep2012_25106 日韓の関係悪化の影響により、韓流離れが加速する現在のテレビ業界。
しかし、2年ほど前には広告代理店を中心に「ゴールデンタイムの番組には韓国人タレントを使用する」流れが作られていたという。
現在は吉本興業所属の芸人が幅を利かせる“ひな壇タレント”を、そっくり韓流と入れ替えるという計画だったそうだ。
日本国内で、KARAや少女時代がブレークした2010年。
日本音楽事業者協会会長で「尾木プロ」社長の尾木徹氏が、K-POPアーティストの誘致に尽力したと伝えられていた。
そして同時期頃から、広告代理店やテレビ局上層部の間では、こんな“定説”が存在していたという。
「2011年以降は、ゴールデンのバラエティから、吉本芸人はほとんどいなくなります。
代わりにひな壇に座るのがK-POPアーティストや、韓流タレントたち。
安定してレギュラー番組を続けられそうなのは明石家さんま、島田紳助、ダウンタウンくらいで、その他の芸人たちは有名無名問わず降板させていこうという方針でした」(広告代理店幹部)
ところが3月の震災で、エンタメ業界は数カ月ほど停滞状態が続くことに。
その前後に日本デビューを果たしたK-POPアーティストや、バラエティに登場した韓流タレントも少なからず存在したが、テレビ出演者が大幅に入れ替わるといった事態に至ることはなかった。
「紳助は引退してしまったし、高岡蒼佑のフジテレビ韓流傾倒批判など想定外の事態はいくつも発生しました。
特にネット上でのフジテレビ批判は見過ごせるレベルの話ではなく、連日の抗議デモやスポンサー企業の不買運動など、韓流に対する不安要素ばかりが高まっていきました」(同)
そして今回の竹島問題で、韓流コンテンツへの傾倒に関して沈黙を貫いてきたテレビ各局も、方針を表明。
フジテレビは当面韓流ドラマの放送予定はないとし、またBS日テレの定例会見では赤座弘一社長が「韓国ドラマが多すぎるのではという声もある。
少なすぎるという声はないので、今後、(韓流ドラマを)少なくしていく方向になると思う」と発言したことも話題になった。
221 :
デフォルトの名無しさん :2012/09/17(月) 12:18:52.78
anというバイト情報サイトから最新情報をプログラムで取得しようと思って以下のようなプログラムを書きました。
require 'net/http'
Net::HTTP.start("area-baito.weban.jp", 80) do |http|
response = http.get('/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1')
puts response.body
end
しかし結果は何も表示されません。
調べてみると、responseの時点で、正常であればNet::HTTPOKが返ってくるはずなのですが、
上のプログラムだとなぜかエラーページにリダイレクトされてNet::HTTPFoundが返ってきていました。
http://area-baito.weban.jp/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1 というアドレスはブラウザで見れば正常に見れるURLです。
なぜプログラムで取得しようとするとエラーページに飛ばされてしまうのでしょうか?
そのスクリプトのままで動いたよ
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
$ ruby hoge.rb
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd ">
:
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
:
223 :
221 :2012/09/17(月) 13:35:02.72
>>222 試していただいてありがとうございます。
ただ、それはrubyのバージョンの違いのようです。
1.8.7だとリダイレクト先の結果が表示されるみたいです。
私の環境の1.9だと何も表示されないようです。
いずれにしてもエラーページにリダイレクトされているみたいです。
プログラムでアクセスするとanのサーバー側で何かしらのヘッダーを見て、これはロボットだからエラーに飛ばせ、
みたいな処理をしているのかなぁと。。
224 :
デフォルトの名無しさん :2012/09/17(月) 13:49:19.74
その可能性に考えが及んでいるなら とりあえずUser-Agentの偽装くらいは試そうぜ。
225 :
221 :2012/09/17(月) 14:12:48.25
User-Agentはgetメソッドのオプションで色々設定してみたのですが、駄目でした。 javascriptはブラウザで無効にしてもページが見れたので、問題ないようです。
226 :
222 :2012/09/17(月) 15:05:31.78
確かに
>>222 はエラーページだった。
調べてみたら、User-AgentとCookieのANUSRIDを返せばページが返ってくるみたい。
Cookieは他にもJSESSIONID等がセットされるので、それらも含めてちゃんと
セットするのがよいと思う。とりあえず確認するなら、ブラウザが保存しているANUSRIDを
使ってみればいいかと
require 'net/http'
Net::HTTP.start("area-baito.weban.jp", 80) do |http|
hdr = Hash.new
hdr['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1'
hdr['Cookie']='ANUSRID=999999999999999999999999999999999999999999'
response = http.get('/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1', hdr)
puts response.body
end
227 :
221 :2012/09/17(月) 19:33:21.58
ありがとうございます!無事表示できました! もう諦めていたので2chを見ていませんでした。遅くなってしまいすいませんでした。 クッキーを設定しないと駄目だったとは・・・これは自力では無理でした。ありがとうございました。
228 :
デフォルトの名無しさん :2012/09/18(火) 07:29:40.40
ゴミ
229 :
デフォルトの名無しさん :2012/09/19(水) 15:23:37.62
すいません。 ライブラリーとモジュールの違いを分かりやすく説明してくれないでしょうか? グーグルで調べたんだけどいまいち分からない。
関数を別ファイルにして後から再利用可能な形で呼べるようにしたものがライブラリ ライブラリに沢山関数があると訳が判らなくなるので名前空間がぶつからないように整理したり 必要に応じて関連した処理や機能でまとめてライブラリにしたものがモジュール
クラスとことなり、モジュールは、インスタンスをもてない。 クラスにモジュールをインクルードして新しいクラスを作る機能をMix-inと呼びます。 多重継承と対照的に、単一継承によって、Rubyは、継承関係を保ちながら、 モジュールのMix-inによって、多様な依存関係を表現できます。
>> [1,2,3,4,5].sort{|i,j| i.odd? - j.odd?} NoMethodError: undefined method `-' for true:TrueClass >> [1,2,3,4,5].sort{|i,j| i.odd? <=> j.odd?} NoMethodError: undefined method `<=>' for true:TrueClass >> [1,2,3,4,5].sort{|i,j| i.odd?.to_i - j.odd?.to_i} NoMethodError: undefined method `to_i' for true:TrueClass >> [1,2,3,4,5].sort{|i,j| (i.odd? ? 1:0) - (j.odd? ? 1:0)} => [2, 4, 3, 1, 5] 実際に使いたいのはodd?ではなくString#include?等なんですが boolの比較のもうちょっとスマートな書き方ってないでしょうか
irb> p %w[A1 2b A3 4A c5].partition{|s| s.include?('A')} [["A1", "A3", "4A"], ["2b", "c5"]] irb> p %w[A1 2b A3 4A c5].partition{|s| s.include?('A')}.map{|a| a.sort}.flatten ["4A", "A1", "A3", "2b", "c5"] あんま短くなってないっすな
('A`)マンドクセ
cond? ? 0 : 1 とかの結果でソートするしかないね true と false を比較したら true が先に来て欲しいという要望は結構あるんだが ?> [2,3,1,5,4].sort_by{|x| [(x.odd? ? 1 : 0), x]} [2, 4, 1, 3, 5]
rubyって真理値のソートできないのかよ クソだな
列挙型は定数で勝手にやれといういい加減さなのに 真偽はなぜかPascalをはるかに上回る厳格さ(≒貧弱さ)というのが謎だ
真理値はintじゃないし、Boolクラスもない、という、 単に「そういう設計」というだけのことなのだが。 C言語あたりを、たいして深く理解もせずに、他の言語を、 俺の知ってる言語と違うとdisる輩は多いねぇ。
239 :
デフォルトの名無しさん :2012/09/21(金) 11:00:59.45
馬鹿には無理
文字列tとsがあって、tがsで始まるかどうか判定するにはどうすればいいでしょうか? if t[0,s.size] == s
irb> p 'Ruby'.start_with?('Ru') true irb> p 'Perl'.start_with?('Ru') false Ruby1.8.6では動作しないので正規表現を使う irb> p 'Ruby' =~ /\A#{'Ru'}/ 0 irb> p 'Perl' =~ /\A#{'Ru'}/ nil
いやいやいや、indexでしょ
('Perl'*2**2**1024+'Ruby').index('Ruby')
irb> "This is a pencil." =~ /\A#{"This is a pen."}/ => 0
嫌な性格してるなあ "This is a pencil." =~ /\A#{Regexp.quote("This is a pen.")}/ これでいっすか
start_with?なんていつの間に追加されたんだよ ありがとうこれで行きます
旅行会社にソウルなど韓国へのツアーのキャンセルが相次いでいる。竹島問題をめぐる感情悪化が理由だが、
両国の対立はこれまでにも繰り返され、そのたびに「政治と経済は別」との考えから沈静化に向かっていた。
ところが今回は「嫌韓ムード」もあり、問題再燃から1カ月近くたった今も沈静化どころか、影響が拡大しつつある。
「韓国は海外渡航先でトップ3に入るドル箱。事態の長期化だけは避けてほしいのだが…」
大阪市内の日本旅行の店頭には担当者の願いもむなしく、8月下旬以降、韓国への個人パック旅行のキャンセルが
止まらない。関西発着分の9〜10月の予約は前年同期比4割減にまで達しているほどだ。
旅行会社にとってはドル箱の韓国だが、韓流に夢中となり、韓国に何度も出掛けていた女性を中心とする日本人の
意識も少しずつ変わり始めている。
「どのチャンネルも似たような韓国ドラマばかりでうんざりしている」。大阪市内に住む40歳代の女性はこう話す。
また、6月に兵庫県・神鍋高原で韓国人歌手によるコンサートを企画した大阪のイベント会社が突然、倒産した。
2日間でチケット約2万枚の販売を見込んでいたが、売れたのはわずか1400枚。しかも、チケットの全売上高を
歌手への出演料に回したため、払い戻しに応じられない事態となり、チケット購入者からは「詐欺だ」との声が上がった。
「必要以上に持ち上げられた韓流ブームが薄らぐ一方、嫌韓ムードは日増しに高まっている。韓国への旅行の
落ち込みも長期化するのでは」と旅行業界の関係者は先行きを警戒する。
実際、韓国に旅行した東京都在住の40歳代女性はこう話す。
「日本人とわかれば、屋台やタクシーなどは平気で価格をつり上げる。罵声を浴びせる人もいる。竹島問題もあり、
今は行きたくないですね」
http://www.sankeibiz.jp/econome/news/120918/ecc1209180800000-n3.htm
249 :
デフォルトの名無しさん :2012/09/23(日) 16:11:57.97
5バイトのファイルがあって、中身が 先頭4bit : 項目A 次の12bit : 項目B 次の20bit : 項目C 次の4bit : 項目D の数値データ(big endian)が格納されているとします。 項目A〜Dの値をスマートに取り出すにはどうすればいいですか?
bindataっていうライブラリがあるよ。gemで入る 以下スマートとはほど遠いコード buf.unpack("B*")[0].scan(/(.{4})(.{12})(.{20})(.{4})/)[0].map{|e| e.to_i(2) }
252 :
デフォルトの名無しさん :2012/09/23(日) 21:37:00.13
ext/gdbm はソースに入ってるだろ。
>>252 ソースレベルで入っているだけで一般的に配布されているバイナリでは入っている保障はないってこと?
Unbuntuならapt-getとかFreeBSDならpkg_addとかでruby入れても入っていないのだが
それって標準の意味あるのか
>>253 つまりそれはgdbm-devかgdbmのソースがシステムに入っていない場合はmakeを中止させるか、
あるいはrubyと一緒にgdbmソースコード一式(またはバイナリ)を配布しろということ?
人はそれを傲慢と呼ぶ
システムにヘッダファイルが存在しない場合は。./configureがNOを返し、その部分だけコンパイルが飛ばされるという動作は極めて妥当
使いたいextのヘッダファイルを事前にインストール(して./configureで指定)するのが一般的
というか、パッケージシステムならlibgdbm-rubyとかruby-gdmとかいうパッケージがあるだろ
rvmやrbenvなんかの自前コンパイル補助するやつならコンパイル前にgdbm-dev(el)パッケージをインストールしとけ
Windowsで配布者がdllごと入れてない場合はgdbm.dllをどっか安心なとこから拾ってきてbin/に入れとけばたぶん動く
>>254 つまりRubyの標準添付ライブラリというのは環境によって
入っているか入っていないか分からないってことでしょ
別に入れろ言っているわけではないよ
それって"標準"にした意味あるのかなと思っただけ
たとえば"標準でインストール"されているなら依存関係を気にしなくてもいいけど
コンパイル時のオプションで変わるなら入っていない場合のことを考慮しないといけないわけでしょ
あとRubyがバイナリが入っている場合は、gemで入れることになると思うけど
gem gdbmはext/gdbmと同じだとかそういった保障はあるの?
libgdbm-devは仕方がないにしろ、rubyのライブラリはbundlerから入れたい
Ruby は Matz が始めた趣味言語だから 自分の環境でだけ動けば良いや的発想で作られてる
>>255 ソースは環境によらずtarballに必ず入っている(これを標準添付と呼ぶ)
この手のものを、インストールする人にコンパイルさせることを強制はできない
使わない人だけコンパイルオプションで外すようにしてもいいけど、たかがgdbmをそんな扱いにするとそっちのほうがめんどくさいよたぶん
使う予定がないのにtkが丸ごと入ったらキレるだろ
>>255 標準にすることで他のライブラリと名前空間がぶつかることを回避できてるんじゃないの?
rubyの標準添付ライブラリが依存しているものを、
rubyのインストールですべて芋づる式でインストールされたらえらく迷惑だわ
スクリプトで標準添付ライブラリがつかえるかどうかは、必要ならチェックする必要があるだろうな
まあ大抵はスクリプトが例外出すままでOKだと思うけど
あと、たとえばgdbmへアクセスするI/Fを標準添付ライブラリとして用意してるけど、
細かい挙動はOSにインストールされてるGDBMに影響をうけると思う
>>257 Python には入ってるけど誰もキレてないです
RubyスレでPythonポリシー持ち出されても…
>>259 Tkそのものは標準添付されてないと思うよ
Windowsのバイナリ(のインストーラ)には入ってるってだけで
Linux/BSD以外でどう動作するかは、出たとこ勝負 OSSって結局そんな感じやん
tkinnerをTkそのものだと思ってる人は意外といる…
>>257 Ruby開発側と配布されるソースについての標準で
プログラマにとって存在するライブラリが標準化されているわけではないってことね
それが聞きたかっただけです
GDBMは例に出しただけで得に深い意味はないです
>>264 プログラマにとっても標準だろ
少なくとも標準ライブラリに用意されてるものはそれをつかうべきだし、
別のものを作るなら名前がかぶらないようにするべき
作られたプログラムを使うやつが、必要な環境を整えなければいけないってだけだ
標準添付という言葉はわかりにくいんだろうか そんなにRuby独自の表現が入ってるわけでもないと思うんだが
朝鮮人だろう
268 :
デフォルトの名無しさん :2012/09/25(火) 07:55:09.98
ンッペコバンナー「wwwwwwwwwwwwwwwwwwwwwwwwwwwwww」
269 :
デフォルトの名無しさん :2012/09/25(火) 09:57:27.49
ンッペコバンナー「ンッペコバンナーwwwwwwwwwwwwwwwwwwwwwwwwwwwwww」
標準添付ライブラリって別途インストールしなくても requireすれば使えるよってだけの話だろ どんな機能があるのかはそれこそライブラリ次第で gdbmだったら説明にあるとおり外部にあるGDBMを扱うインターフェースを Rubyに提供するだけ
それが問題なくあてはまるのはpure rubyなライブラリの場合だね
ソースだけがtarballに収録されてて、実際に言語から利用するにはCコンパイラなどで実行形式ファイルにする必要があり、 しかもコンパイルや実行の際にシステムまたは第三者のヘッダファイルやAPIを読む必要がある というパターンはけっこうせつめいめんどくさい
>>270 いや別途インストールが必要だからrequireしても使えないって話だろ
ライブラリを標準化する意味って標準に従っていれば 同じプログラムをどこでも動かせるってことにあると思うのだが Rubyの場合は、標準添付ライブラリだけ使うプログラムを書いても 環境によってはインストールされていないので動かない しかも標準ライブラリの動作が環境依存らしい
275 :
uy :2012/09/26(水) 04:22:42.11
標準A 標準B 標準C
>>273 別途インストール不要ってのはRubyのライブラリのことだぞ
Rubyのライブラリが呼び出すGDBMとかのシステムのライブラリは当然別途インストールが必要なのは言うまでも無い
バグってる、なんて言う奴いるんだ?
デバッグする
280 :
デフォルトの名無しさん :2012/09/28(金) 00:24:30.56
一つの値に、複数(可変個)の値を対応付けて記録したい時、定石ってある? Hash.new{ |hash, key| hash[key] = [] } ↑みたいな感じでいい?
駄目なのは素人の漏れでも判る
282 :
デフォルトの名無しさん :2012/09/28(金) 01:31:14.51
ダメっていうのはもっと良いやり方があるってこと? 機能的には問題ないと思ってるんだけど。問題点があれば教えてほしい。 (煽りじゃなくて、純粋に質問。単にもっと効率の良い定石があるなら知りたいだけだよ。)
Apocalypsis Johannis,part13 [13:16]小さい者にも、大きい者にも、富んでいる者にも、貧しい者にも、自由人にも、奴隷にも、 すべての人々にビックデータとスマートフォン、スマートユビキタス監視社会、経済システムの UIDコードを付けさせた。 また、そのコードすなわち、一定のUID符号化数字を持っている者以外は、経済活動に関われ ないように、だれも、買うことも、売ることもできないようにした。 [13:17]そのUIDコード数列の一部はシステムの名前そのものからとられている。 [13:18]ここに重要な意味がある。 思慮ある者はそのUIDコードを分析しなさい。そのUIDコードは人間個人を表現している UniqueIDだからである。 そのUIDコードのエイリアスは666である。
Apocalypsis Johannis,part14 [14:01]見よ、人がXeonサーバ群の上にいる。14万人がデータセンタで働いており彼らはIDが与えられていた。 [14:03]彼らは新しいスクリプトを書いた。この言語は14万人のほかは誰も理解できなかった。 [14:07]基本に立ち返れ、裁きの時が来たからである。自然の行いを侮る事なかれ。 [14:08]巨大なバブルは崩壊した。不良金融債権をあらゆる国民に買わせた者は倒れた。 [14:09]もし、だれでも、このシステムを作り賛美し、UIDを受けるなら、そのような者は、 [14:10]従来の人間社会から逸脱しダイレクトに毒物を飲むようになる。 [14:11]また、自然界と群集の前で、目に見えない火(放射能)と毒物で苦しめられる。そして、彼らの苦しみは、永遠に続く。 システムを賛美し取り入れるもの、システムを作る者、まただれでもUIDを受け参加する者は、 昼も夜もまったく休むことはできない。
ruby 1.9.3 nokogiri 1.5.5 nokogiriでスクレイピングした結果とブラウザのソースとでは異なる内容を表示しています。 たとえば、 2chのスレ一覧を取りに行くと全部取得できません。 ブラウザでは500スレほどあるのですが、nokogiriでは180スレほどしか取得できていません。 </body>直前が明らかに違っています。 内容が常に変わらないとこを見るとキャッシュを表示しているような気がするのですが・・・・ 詳しい方、解決方法を教えていただけないでしょうか?
コード貼ってくださいな
取得した2chのページのURLを具体的に知りたいな
Nokogiri自体はスクレイピングしません
…いやまあ、nokogiriコマンドもあるんで、やれないわけじゃないんだけど、たぶん思ってるのとは違う
$ nokogiri
http://www.ruby-lang.org/ja/ Your document is stored in @doc...
irb> p @doc.at('title').text
"オブジェクト指向スクリプト言語 Ruby"
ちなみに内容はopen(uri).read
>>286 スクリプトで取得したファイルが「完全」であるかをまず確かめてください
…これが完全に取得されていない場合、まあ、なんかどっか悪いんだとは思うんだけど、2chではなんだろう
次に、そのファイルをNokogiri::HTML.parseして、すべて正しくパースされるかを確かめます
すべて正しくパースされていない場合、配列 Nokogiri::HTML.parse(html).errors にエラーが入っていることがあるので確認します
libxml2やlibxsltがやたら古い場合や適切な文字エンコーディングが推測または指定されていない場合、パースに失敗します
parseメソッドの第三引数に、なんかてきとーなエンコーディング名文字列を指定してください
rubyのrakeってmakeの完全な代わりになりますか? make覚えなくてもrakeで代われるなら、rubyの勉強して なんだか一石二鳥だなあとか思ったんですが
rubyを覚えた後にrakeを別途覚えるようなもんだから あまり一石二鳥な感覚ではなかったなあ
>>290 基本的にmakeでできることは、ほぼ全てrakeでできるはずなので
完全な上位互換(rakeがあればmakeは必要ない)と考えて良いと思う
ただしもちろん、ほかの人の書いたソフトウェアをコンパイルしたりするなら
そこではmakeが必要になるので、そこは諦めてください
293 :
デフォルトの名無しさん :2012/09/30(日) 00:29:41.05
完全じゃ無いじゃん
makeは普段shellでやってることをそのまま書けるからな。rakeもantもmakeから移植する感じになる。
>>293 自分で書く分には何でもできるが、人に書かせることはできないってだけだろ。
awk2perlみたいな変換書けば、そうでもないか。
296 :
デフォルトの名無しさん :2012/09/30(日) 00:51:19.58
つまり、互換ですら無いということだな
誰が互換を求めてるんだよ まあ、求めていないとも書いてないから分からんか
298 :
デフォルトの名無しさん :2012/09/30(日) 01:22:33.37
単に
>>292 が「完全な上位互換」と書いたのが嘘だったということでしょ
299 :
uy :2012/09/30(日) 08:35:07.43
rubyはperlの上位互換(キリッ) と同じ程度の意味だろこのアスペ共が
>>290 の質問からしてなんかヘンだから仕方ないんだけどな
>>290 には
「makeと同レベルの自動作業を記述することはできるが、Makefileとの互換性はないので、あくまで自分で書いて自分で実行させるだけの用途にしか使えない」
「実行にはruby実行環境とgemライブラリとrakeライブラリの別途インストールが必要なので、たとえRakefileを配布しても一般的な可搬性は低い(Rubyライブラリ中では高いが)」
>>292 には
「そういう用途的なカバーのことはふつうは上位互換とは言わない」
と言うのが妥当
301 :
デフォルトの名無しさん :2012/09/30(日) 23:06:23.93
286です。 お返事いただいた方、ありがとうございました。 encodingを指定してもだめでした。 errorsの中身はSyntax Errorと出ていました。 net/httpでコンテンツを取得し、正規表現で対応しました。
>>302 ここで答えちゃうけど、要するに捕捉する記述をしていない例外が発生した場合でも
自動的にログだけ取ってプログラムを動かし続けたいって事だろう?
無理じゃね
class A def step puts "A" end end class B < A def step super() puts "B" end end class C < B def step # ここでA#stepを呼びたい puts "C" end end できますか?
できないはず クラスCを作るファイルでクラスAの定義を再オープンしてA#orig_stepとかに退避しておくとかどうだろう
そんなことになるstep関数はオーバーライドしちゃいけないってことだ もしくはそもそもC<B<Aの継承関係がやりたいことに合っていないのかも
>>304 継承とか関係なしに呼ぶこと自体はできる
A.instance_method(:step).bind(self).call
309 :
デフォルトの名無しさん :2012/10/05(金) 10:51:54.24
p h[:a]
311 :
デフォルトの名無しさん :2012/10/06(土) 13:47:08.50
rvmに移行しました。rvm install ruby-headしたら、 1.8.7-p370がインストールされた。 head(最新)って1.9.3系列だと思っていたから、驚いた。 すんません。独り言です。
>>309 310のとおりで
> h = {a:"A", b:"B", c:"C" }
これは、
h = {:a => "A", :b => "B" , :c => "C"}
これと同じ意味で書き方が若干違うだけで
:aはシンボル変数。
309の書き方だと、
h = {"a" => "A", "b" => "B" , "c" => "C"}
という書き方をしたハッシュなら通じる。
キーの名前自体を使って条件分けなどごにょごにょ
やらないのであれば、シンボル変数が軽いけど、
クラス継承やモジュールをガシガシ書かない間は
違いはさほどないからどっちでもいい。
前にもスレに書いてあったが、{ sym:'value' } という単純なリテラルとしての書き方はするべきではない これはシンボルキーなHashを引数に取るメソッドの引数のときにのみ使う
{ :"ho ge" => "A" } ってのを { a: "A" } 式に書くにはどうするの? { ho ge: "A" } も { "ho ge": "A" } もだめだよね
書けないし、書けなくてもいいと思う そもそも「やっかいなシンボル」をキーワードに指定しなければならないことなどないはずだから
シンボルはコンパイル時に定数でなければならない c で char hoge[variable]; と書けないのと同じ
最新の純Cの規格に則った環境なら書けるけどなそれ …まあ、ほとんどのC環境が純CでなくC++になっちゃってるんだが
Rubyの質問と少しずれるかもしれませんが、 rvmから以降するためrvm imploadしてから、ターミナルの起動時に -bash: /etc/profile.d/sm.sh: No such file directory -bash: /etc/profile.d/rvm.sh: No such file directory と表示されます。 homeの.bashrcと.bash_profileに上の記述はなく、 どこにこの読み込みが書かれているんでしょうか?
板違い
320 :
318 :2012/10/07(日) 11:41:29.54
すみません板違いでしたね。自己解決しました。 /etc/profileに記述が残ってました。
>>313 べきじゃない、といよりも、
ライブラリやモジュールのコードを
観る段階になれば自然と身につくと思うんだけどなあ。
おいらはそうだった。
322 :
デフォルトの名無しさん :2012/10/07(日) 22:35:15.09
違うサーバーにあるファイルを実行するために以下のようなスクリプトを書きました。 require 'net/ssh' Net:SSH.start('host','user') do |ssh| ssh.exec!('cd dir1') ssh.exec!('ruby sample.rb') end しかしcdコマンドの実行後、カレントディレクトリがdir1になっていないようなのです。 やりたいことは、sshでuser@hostにアクセスして、~/dir1/sample.rbを実行したいです。 ただし、ruby dir1/sample.rbと実行するのではなく、dir1に行ってから実行したいのです。 どのようにすればいいでしょうか。
>321 他人を自分と同一視するのは病気
1が全角に見えるのはネタだからか?
>>322 ssh.exec!('cd dir1; ruby sample.rb')とか出来たりしない?
327 :
322 :2012/10/08(月) 00:50:22.65
>>323 なるほど毎回違うシェルで実行するからカレントディレクトリが戻っちゃうんですね
>>326 これでできました!ありがとうございます
★修学旅行、韓国から国内に変更…宮崎・日南高
日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。
日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。
竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。
県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。
http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm
韓国より台湾へ行けば良いのに
いま台湾も尖閣でギスギスしてんじゃん
情報弱者って本当にいるんだな
群馬が一番危険なのに
韓国の弾道ミサイルの射程制限が現行の300キロ・メートルから800キロ・メートルに緩和されることについて、
日本政府は、「東アジアの緊張が高まることに直結するものではない」と冷静に受け止めている。
防衛省幹部は7日、全域が韓国の弾道ミサイル射程内に収まることになる北朝鮮の強い反発が予想されることに関し、
「結果的に抑止効果が高まり、北朝鮮側は挑発行為を行いづらくなる」と語った。
日本にとっても、西日本地域が韓国の射程内に入ることになるが、自衛隊幹部は7日、「日本の安全保障にマイナスなら、
(射程緩和で合意した)米側が認めることはない。
日米韓の枠組みでの抑止力が高まれば、日本にとってもプラス面はある」と指摘した。
http://headlines.yahoo.co.jp/hl?a=20121008-00000564-yom-int
車道にはみ出すな…後ろから歩行者をはねた男
http://www.yomiuri.co.jp/national/news/20121008-OYT1T00646.htm 埼玉県警所沢署は8日、所沢市美原町、建築作業員衣斐昂(いびたかし)容疑者(23)を殺人未遂容疑で逮捕した。
発表では、7日午前1時40分頃、同市緑町の市道で乗用車を運転し、道路左端を歩いていた男性約10人のうち
3人(22〜23歳)を後ろからはね、殺害しようとした疑い。3人は頭などに軽傷。
衣斐容疑者は、男性たちの一部が車道にはみ出していたことに文句を言い、いったん通り過ぎた後、
Uターンして再び背後に回り、時速約50〜60キロで突っ込んだという。
車を約2キロ先の駐車場にとめて逃げたが、男性たちの中に顔見知りがおり、市内のホテルで見つかった。
調べに対し、衣斐容疑者は「広がって歩いているのに腹の虫が治まらなかった」と供述しているという。
(2012年10月8日22時11分 読売新聞)
“街宣車”に赤色灯設置で右翼団体代表の男を逮捕(10/08 20:03)
http://news.tv-asahi.co.jp/news/web/html/221008053.html 千葉県野田市で、所有する街頭宣伝車に不正に赤色灯を設置していることを隠して
車検証を交付させたとして、右翼団体代表の男を逮捕しました。
道路運送車両法違反の疑いで逮捕されたのは、右翼団体「関東一盟会」の代表・
程田一樹容疑者(40)です。警視庁によりますと、程田容疑者は、所有する街宣車の
屋根部分に緊急車両にのみ設置が認められている赤色灯を日常的に設置していたにもかかわらず、
6月の車検の際だけ外し、車検証を交付させた疑いが持たれています。取り調べに対し、
程田容疑者は「間違いありません」「格好つけるためにやった」などと供述し、
容疑を認めています。警視庁によりますと、都内で走行している右翼の街宣車は200台余りで、
そのうちの約2割には不正に赤色灯が設置されているということです。不正街宣車の摘発は、
関東では今回が初めてで、警視庁は今後、厳しく取り締まりを行うとしています。
>>334 わかってて反応してんのにさらに反応すんなよ
検索まで貼っつけてさぁw
rubyで関数の中で一時的な名前付き関数を使いたい時ってどうすればよいですか?
sum = lambda { |x, y| x + y } で、出来ました
RubyでExcelのVBAってなんでも書けますか? exlap.rbのページを見たらExcelの基本的な操作は載っているのですが もっと複雑なものでも同様に問題なく書けるのかを知りたいです
「起動はRubyだけどここだけVBAで書く」というレベルでなら書ける だから普通は直接VBAで書く VBAの知識がないとそもそもいっこも書けないし
343 :
340 :2012/10/10(水) 14:51:27.38
VBAそのものは出来ています それをRubyで呼び出すという形にすればなんでも書けるということでしょうか? ということは、VBAをRubyで書き直す必要はなくに、呼び出す方法だけ勉強すれば良いということ?
書けるか書けないかで言えば書ける きっとRubyのことだから超遅くなるだろう
345 :
340 :2012/10/10(水) 15:04:37.30
>>340 ありがとうございます
速度は気にしないので呼び出す方法を調べてみます
今まで調べても出てこなかったので不安ですがorz
所謂正確な物言いってやつだな 記述行為が可能であるかどうかで言えば可能 ただし、普通の感覚を持っているなら普通はやらない 複雑なVBAはVBAスクリプトとして書くのが妥当 Rubyから二重三重の手間とレイヤをかけて使ったりはしない だから「RubyからExcelを操作」みたいなのは流行んないんだよ RubyでVBAやるのはVBA自体を勉強するのよりも大変なんだもの
>345 自分にレスするとは自演ぽいな
>>346 すでに書いてあるVBAスクリプトを新規Excelファイルに書き込む動作を
Rubyで動かすことは可能、ということですよね
>>347 名前欄もレス番も手で打ったらミスりました
a = [1, 2, 3, 4, 5]とあった時、指定した添字以降の配列を取得するにはどう書くのがよいですか? 例えばf(a, 2)で[3,4,5]が返る というものです。
こんなんでどうよ [1,2,3,4,5].slice(2, 100)
def group (lst, n) rec = lambda { |lst, acc| rest = lst.slice(n,100) (rest == nil)? (lst + acc).reverse : rec.call(rest, [lst.slice(0,n)] + acc) } rec.call(lst, []) end a = [] 200.times do |x| a << x end group(a, 4) グループ化する関数を作ったのですが以上を実行すると、 [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41, 42, 43], [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61, 62, 63], [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81, 82, 83], [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99], [100, 101, 102, 103]] ここで止まってしまいます。これは仕様でしょうか? 再帰の深さは30程度までなのですか。 ruby 1.9.3p125 (2012-02-16) [i386-mingw32]
>>353 に言い忘れてたんだけど、っていうか、なにか教えてもらったらマニュアルなりで確認して欲しいんだけど、
Array#sliceは「n要素目からx個取り出して配列として返す」だ
slice(2,100)は2要素目から100個取り出す
100個取り出すんだから100越えたら動かない
slice(n, 100)だからそのあたりで止まるんじゃないかと もしRubyがスタック食いつぶせば例外が投げられて表示されるよ
あとcdrに相当するのはlst[1..-1]かlst.slice(1, -1)
>>356 ,357,358
あー!なるほど
ありがとうございます!
>>358 irb(main):242:0> [1,2,3].slice(2,-1)
[1,2,3].slice(2,-1)
nil
>>360 あああ、ごめんなさい。[1,2,3].slice(1..-1)か
・韓国は外貨調達をめぐり、「悪縁」という言葉がしっくりくるほど日本には苦々しい記憶がある。
最もつらい記憶は1997年アジア通貨危機当時。外貨準備が底を突き、デフォルトの危機に
追い込まれた韓国には、日本から借り入れた短期債務220億ドルがあった。しかし、日本はうち130億ドルを
その年に回収し、韓国がIMFに支援を要請する決定的な要因になったとされる。日本は97年12月だけで
70億ドルを回収した。当時の姜万洙財政経済院次官(現産銀金融持株会長)が「必要なときに助けるのが
真の友人」だと訴えたが、日本は「日本の銀行も自己資本比率8%という規制を満たすために困難な
状況だ」として、韓国側の求めを断った。
2008年の世界的金融危機の際にも日本は冷たかった。危機の影響でドル調達が困難になり、韓国政府は
同年10月に300億ドル規模の韓米通貨スワップで切り抜けたのに続き、日本にも既存の通貨スワップの拡大を
求めた。しかし、日本は「大規模な通貨スワップ拡大は困る」と慎重姿勢を崩さなかった。結局、韓国政府は
中国と300億ドルの通貨スワップで合意し、それに基づき日本に圧力をかけて初めて、韓日通貨スワップの規模を
300億ドルに増額することができた。韓国政府の元幹部は「普段は協議がうまくいっていたのに、困った時期には
異なることを言い出し、憤らずにはいられなかった」と振り返った。
日本は昨年の韓日首脳会談で韓国の通貨スワップ拡大要求を喜んで受け入れた。それまでの悪縁は
解消されたように見えた。当時の日本には円高を緩和する効果もあるため、日本が実利を狙ったという分析も
あったが、欧州財政危機で動揺する為替相場の安定にも役立ったことは明らかな事実だ。
しかし、今年8月に独島(日本名・竹島)問題が浮上後、日本の政界が韓日通貨スワップの延長に難色を示し
結局増額部分の延長はできなくなり、韓国と日本の悪縁は繰り返されることになった。(抜粋)
http://www.chosunonline.com/site/data/html_dir/2012/10/10/2012101000537.html ★日韓通貨スワップ縮小「日本は経済大国にあるまじき態度」=韓国
http://news.searchina.ne.jp/disp.cgi?y=2012&d=1010&f=national_1010_012.shtml ※前:
http://uni.2ch.net/test/read.cgi/newsplus/1349879756/
すっごい初歩的な質問で申し訳ないけど たとえば a**k(k=0,1,2) の関数ってどういうスクリプト打てばいいの? aを代入しただけでk=0,1,2全ての答えをreplyしてもらえるようにしたい
aに3が代入されたら[0, 1, 8]を返すとかそんなの?だったら irb(main):001:0> def f(a); [0, 1, 2].map{|e| e ** a }; end => nil irb(main):002:0> f 3 => [0, 1, 8]
>>364 オギャアアアアア(^q^)
関数か・・・
ありがとうれす(^q^)
Enumerableのメソッド群は覚えると配列操作が捗るぞ
「初めてのプログラミング」P19の puts 'You?'re swell!' ってYouの後「?」で合ってます?エラー出るんだけど。 バックスラッシュだと1行目と同じになっちゃうし何だろ
放射性セシウム:ネットで販売容疑、韓国人2人逮捕
放射線測定器の動作確認用に放射性物質「セシウム137」をインターネットで販売したとして、警視庁は12日、
放射線障害防止法違反(譲渡)容疑で、測定器販売会社「オアシストレード」(東京都荒川区)の韓国人従業員、
黄娟熙(27)と景善美(28)の2容疑者を逮捕したと発表した。東京電力福島第1原発事故以降、放射性物質の
譲渡を同法で摘発したのは全国初。
逮捕容疑は黄容疑者らは、11年10月?12年4月、同社のネットショップ「オアシス」で注文した男性17人
に対し、容器に入った「セシウム137」計18個(計約61万円相当)を販売したとしている。同社と違法性を
認識していた客5人も同法違反容疑で書類送検された。
同法では10キロベクレルを超えるセシウムを取り扱う場合は国への届け出が必要にもかかわらず、37キロベクレル
の商品を無届けで販売していた。生活環境課によると、逮捕された2人は容疑を認めている。容器の表面を測定すると
毎時10マイクロシーベルトとなり測定器が正常に作動するか確認できるという。
http://mainichi.jp/select/news/20121012k0000e040223000c.html
オライリーの木の描いてるやつ? バックスラッシュだろうね
363だけどカルダノの公式を作ってみたらエラー出まくりで やばいことになった どこがおかしいのかな ちなみにOはωのことです include(Math) def cardano(a,b,c) O**3=1 Of+O=-1 D=(-1)(4(-b**2/3*a**2+c/a)**3+27(2*b**3/27*a**3-b*c/(3*a**2)+d/a)**2) [0,1,2].map{|k| -b/(3*a)+O**k(-b**3/(27*a**3)+(b*c)/6*a**2-d/2*a+(1/6)*sqrt(-D/3))**(1.0/3.0)+Of**k(-b**3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)-1/6*sqrt(-D/3))**(1.0/3.0)} end ちなみにエラーは syntax error,unexpected'=' expecting KEND dynamic constant assignment unexpected'(' unexpected')' といっぱい・・・
371 :
デフォルトの名無しさん :2012/10/13(土) 12:23:51.48
=の左に置けるのは左辺値(くだけていえば変数)だけ。
今日日、rubyのメリットが見えない このスレの住人って何かの罰ゲームで使ってるのかな
>>372 もしかしてGUIとかに使おうとしてる?そうだとしたら確かに壁が多いが
・OOPのプロトタイピングに
・組み込みクラスを魔改造してDSLに
・テキスト処理やリスト処理に
・テストの補助に
・RoR
376 :
デフォルトの名無しさん :2012/10/13(土) 22:20:17.06
>>374 (定数も書けるよ)
数学とは違って=は代入にしか使わないので、ωが満たす条件/関係
O**3=1
を書いたつもりでも、自動的に方程式を解いてくれるわけではない。
(三次方程式だから解いても3つ解があるし…)
自明な1以外は素直にO=Complex(-0.5, -Math.sqrt(3)/2) みたいに書くとか。
数式処理系とかmetafontみたいに方程式を解ける言語もあるけど。
377 :
363 :2012/10/13(土) 23:25:36.37
自分なりに調べて改良してみた include(Math) require'complex' def cardano(a,b,c) d=(-1)*(4*((-b**2)/(3*a**2)+c/a)**3+27*(2*b**3/(27*a**3)-b*c/(3*a**2)+d/a)**2) [0,1,2].map{|k| (-b)/(3*a)+(((-1+sqrt(3).im)/2)**k)*(-b*9*3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)+(1/6)*sqrt(-d/3)**(1.0/3.0)+(((-1-sqrt(3).im)/2)**k)*(-b**3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)-(1/6)*sqrt(-d/3))**(1.0/3.0))} end だがinvalid charとかいうのがかえってきた(((^q^))) もうおかしいものなんてないれしょ! なんだこのそっけない返答は(^q^) もうかれこれ六時間くらい消えたwww
include(Math)の後ろに全角空白が入ってるよ そのコードコピペして動かせば > hoge.rb:1:invalid multibyte char (US-ASCII) とか怒られるんだから不正なマルチバイト文字が一行目に入ってるってわかる
プログラム初めての人がいきなり完成系書き上げようとしても、動かなかった時何が悪いのか分からんでしょ まず1解だけの計算を目指した方がいいよ あと、部分式は無理に展開せずに変数や関数を使うべき require 'complex' def cardano(a, b, c) omega = (-1+Complex::I*Math.sqrt(3))/2 p = (3.0*b - a**2.0) / 9.0 q = (27.0*c + 2.0*a**3.0 - 9.0*a*b) / 54.0 t = Math.sqrt(q**2.0 + p**3.0) puts "がんばれ" end puts cardano(ARGV[0].to_f, ARGV[1].to_f, ARGV[2].to_f)
俺も昔そんなんだったなぁとしみじみしてる
今Rubyからプログラミング始めた 初心者ですが愚痴ですいません。 1.9+Sinatra+Slim+Redis(セッション管理)、Mongoidで 初めてのバックエンドのあるサイトつくってるのですが Railsって便利なんですね。 入力バリデーションを自分で考えて実装してましたが、 できあがってRailsをみたら自分が 車輪の再発明状態なのがよくわかりました。 メアドの正規表現とかは自作してたらかなり勉強にはなりましたけど。。 みなさんはバックエンドのあるWebシステムつくるなら Railsありきでしょうか。
382 :
デフォルトの名無しさん :2012/10/15(月) 03:21:03.34
るはないな
383 :
363 :2012/10/15(月) 22:47:56.09
皆さんのアドヴァイスのおかげでcardanoはなんとかできました 今、条件分岐をやっているところなのですがerrorが出るもののどこが間違ってるのか わかりません endがどうのと言ってくるのですが・・・ def solutions(a,b,c) if a=0 1 else if 0<b**2-4*a*c 2 else if b**2-4*a*c<0 0 else 1 end end end end ifは三つ、def一つなので それに対応してendの数も合計四つにすればいいはずですし全くわかりません ちなみにこれは二次方程式の解の個数を求めさせる問題です
384 :
デフォルトの名無しさん :2012/10/15(月) 22:53:02.63
>>383 回答と関係ないけど、最初の a=0 は a==0
で、2つの else if を elsif にする。endは2つだな。
385 :
363 :2012/10/15(月) 23:01:02.94
ちょっと改良してみた def det(a,b,c) b**2-4*a*c end def solutions(a,b,c) if a==0 || det(a,b,c)==0 1 else if det(a,b,c)>0 2 else 0 end end end でもエラー出るけど汗
386 :
363 :2012/10/15(月) 23:02:25.90
>>384 a==0にしなかったのは完全に自分のミスでしたorz
elsifってのは初めて聞きました
「endがどうの」などというエラーは存在しない エラーメッセージは(少なくともRubyと標準ライブラリのエラーは)すべてを表す
・最近、若い女性の間でも右寄りの思想に傾倒する女子が急増している。
「K-POPや韓流ドラマは絶対視ない!」、「韓国は国ぐるみで間違った歴史を教えて、日本を悪者に仕立てている。
許せない!」、「尖閣諸島や竹島は絶対に日本のもの!」、「中韓とは断固国交断絶!」「広告代理店やマスコミが
朝鮮人と結託して、日本人に反日的な感情を植え付けようとしてる!」……などと語気が荒く語る女性が少なからず
存在するのだ。
しかも、彼女たちはいわゆる”普通の女子”。流行やブランド品を好む、 “スイーツ系女子”の相田多喜子さん
(仮名・33歳・会社員)はこう話す。
「韓国製のコスメや食品はもちろん、韓国と業務提携、協賛している日本企業の製品も購入しないようになった」
発端は知人に紹介された「2ちゃんねるまとめブログ」だという。
「それまで2ちゃんねるに関心がなかったのですが、中国や韓国の実態を伝える書き込みを初めて読んでショックを
受けました。韓流芸能人が韓国で日本を悪く言っていること、韓国の性犯罪率の高さ、商品にウジが混入すると
いった企業の衛生管理のずさんさなどを知り、さらにネットで勉強するように。日本のマスコミが偏った報道しか
しないことを知りました」
彼女たちの多くが、ネットを通して”真実”にたどり着き、日頃感じていた矛盾が解決したと語る。
それは、いわゆる「ネトウヨ」とは違うのか……?
「違います。私たちがしているのは日本人として当たり前のこと。許してはいけないことを許したくないだけ」(竹中さん)(抜粋)
http://nikkan-spa.jp/312054
>>373 メリットの見えなくなった理由が「これって、全部jsでよくね?」なんだ
(デザパタならgithubでサンプルコードのレポジトリ見かけた)
文字コードとか、gem、railsで出来た既存資産でのアドバンテージ教えてくれ
一体今までどれほどの時間が=と==のせいで無駄になったことだろうか
>>389 俺自身Railsとかはあんまり知らんのでそこは何とも言えんが
JSで継承関係が絡むクラスベースOOPはあまりやりたいと思わんなあ
そこのあなた TypeScript ですよ
Rubyちゃん「…」
ド素人ですが教えてください Win7 Ruby193 入力 puts texts 出力 {"text1"=>"あいうえお", "text2"=>"かきくけこ"} この状態から以下のように実行結果が出せるようにするにはどうしたらよいのでしょうか 入力 puts text1 出力 あいうえお オリジナルの出力はハッシュのキーと値だと思うのですが、 valuesというメソッドを使おうとしたのですが、定義されていないとエラーが出て使えませんでした。
396 :
デフォルトの名無しさん :2012/10/20(土) 18:25:58.61
puts texts['text1'] #=>あいうえお ってこと?
>>396 以下の様にエラーが出てしまいました
(ファイル名).rb:63:in `[]': can't convert String into Integer (TypeError)
後出しでもうしわけないですが、
もとのtextsが別の配列の中から抽出したものなのですが、そのあたりが原因なのでしょうか
このコマンド自体も大きなプログラムの中に私が追加しようとしているのです
ハッシュに並カッコでなく角カッコ使ってるとか
399 :
デフォルトの名無しさん :2012/10/20(土) 21:15:47.25
>>397 そのエラーが出るということは texts は Hash ではなく Array
>>398 角カッコが使っているかもしれません
putsだと
>>395 ですが、p やprint を使うとなぜか角カッコが頭と尻についてしまいます
p texts
#=> [{"text1"=>"あいうえお", "text2"=>"かきくけこ"}]
print texts
#=> [{"text1"=>"あいうえお", "text2"=>"かきくけこ"}]
そこで、よくわからないままeachメソッドをつかってみるとなんとなく、もとめてる出力がでました
T1 = 0
T2 = 0
texts.each {|texts|
T1 = "#{texts['text1']}"
T2 = "#{texts['text2']}"
}
puts T1
#=> あいうえお
激しく無駄の多いような気がしますが・・・
ruby1.8.7でmecab利用している初心者です
このサイトのプログラム(1.9.1用)を動かしたいと思っています
ttp://blog.fenrir-inc.com/jp/2011/10/ruby-mecab-japanese-keyword.html require 'MeCab'がうまく行かなかったので
最初のrequire 'MeCab'を削除して代わりに
mecab = ""
text.each_line{|f|
IO.popen("mecab", "r+") {|pipe|
pipe.write(f)
pipe.close_write
mecab << pipe.read
}
}
puts mecab を書きました
このプログラムのmecab = MeCab::Tagger.newと書いた部分で
uninitialized constant MeCab (NameError)
というエラーが出るのですが「::Tagger」の意味が分からず困っています
どこを直せば動くのでしょうか
お願いします
402 :
デフォルトの名無しさん :2012/10/21(日) 01:49:48.42
>>400 その texts は、「Hash1つを要素として持つArray」だ。
"あいうえお"に到達するにはArrayの0番の要素(Hash)のキー"text1"にアクセス。
texts[0]["text1"]
403 :
デフォルトの名無しさん :2012/10/21(日) 01:54:10.40
>>401 MeCab::Tagger
require 'MeCab'が成功したら定義されていたはずの
モジュール(or クラス)MeCab の中に定義されている Tagger
ダミーでとりあえずそういう名前のが存在するようにすればそのエラーだけは
出なくなるだろうけど。
mecabとrubyバインディングがインストールできてないんじゃないの OS名+ruby+mecab とかでぐぐれば動かすまでの解説が何かしら出るだろうから、 この手順までは進めたけどこの手順が分かりません、とか、この手順でこのエラーが出ました、とか書きなよ
>>405 そのためのmecab-rubyの配布が公式でなくなっていたので
IO.popenを使っていました
もっと調べてみます
>>406 見つけたー!できるかもしれないです!頑張ります!
ソウルからヨボセヨ 「ハングル輸出」は虚報 2012.10.20 03:01 [韓国]
韓国独自の文字であるハングルは民族的自慢のタネで、10月9日が「ハングルの日」として以前は祭日だった。
しかし祭日が多すぎると休日からははずされたため、復活を望む声が強い。
来年には復活の可能性があるとかで、カレンダー業者が気をもんでいる。
そのハングルをめぐってまずい話が起き問題になっている。
先年、インドネシアの小さな島の部族がハングルを自分たちの「公式文字」に採択したというニュースがあり
「ハングルの優秀性を世界に示した」として官民挙げて大喜びした。
教科書でも紹介されるまでになったのだが、最近、この話はマスコミが誇張したもので「公式文字採択」は虚報と分かった。
政府も教科書や各種展示を手直しすることになったという。
この少数部族というのはスラウェシ島に近いブトン島のチアチア族といい人口は6、7万人とか。
固有の部族語を話しているが、韓国の団体が援助を餌にその部族語の表記にハングルを使うことを勧めた。
その結果「公式文字に採択」となったというのだがインドネシアはローマ字が公用文字。地方の部族が別の文字を
公式文字に採択するのはありえない。
実際は単にハングルを学んでいるといった程度だったのだ。ハングル愛国主義の勇み足である。(黒田勝弘)
http://sankei.jp.msn.com/world/news/121020/kor12102003020000-n1.htm
全然わからん… ぐぐったけどそのまま使えないってことしかわからん…orz
○○というシステムを××言語で使えるようにしました、というものを利用するのに必要なものは ○○というシステムの動作に関する知識 ××言語の使用に関する知識 のふたつ どちらが欠けても利用できない 「○○というシステムを××言語で使えるようにしたもの」は、○○と××のどちらの知識も必要とする 当たり前っちゃ当たり前
mecabとrubyというよりwindowsの問題みたいです 名詞の数を数えたいだけなのに難しすぎてタヒにたい
>>402 すげーすっきり書けた ほんとにありがとう
とあるウェブサービスにログインする必要のあるスクリプトを書いています。 テストのたびに毎回ログインさせるのはマズイと思うのですがどうしたら良いのでしょうか。 mockやstubとやらを使ってダミーのデータを返すようにするのが普通なんでしょうか。
はい html = uri.read のようなサーバアクセス部分を # html = uri.read html = File.read('200body.html') のようにするようなイメージでOKです 実際はレスポンスヘッダとかも返さないといけないのでサーバアクセスメソッドごと切り替える形になるかと いちいち手動でやるのめんどくへえ且つNet::HTTP利用ライブラリ経由で取得してる場合はWebMockなどが使えまする
ありがとうございます。 webmockを導入して勉強中です。
今落ちてはいない気がする sourceforgeにファイル自体はあるから、その理屈では仮にサイトが落ちてもなんとかなるんだけど…
rubyの鯖っていつも落ちてるイメージがある
復活してました 無事落とせました
お、新しいやつ来てたのか。俺も明日落とそう
422 :
デフォルトの名無しさん :2012/10/24(水) 21:45:12.11
class Parent def initialize(name); @name = name end def child; Child.new end class Child def parent_name; "私の親は#{@name}です" end end end Parent.new("マスオ").child.parent_name Child.new(@name) というのは避けて 私の親はマスオですという結果を得たいのですが、 どうすればいいでしょうか?
424 :
デフォルトの名無しさん :2012/10/25(木) 04:58:55.34
>>423 コンストラクタがダメなら多分アクセサメソッド使うのもダメなんでしょ?
Parent.new('ノリスケ').child.parent_name
Parent.new('ナミヘイ').child.parent_name
とか作った時どーすんの
ChildからParentに対する(またはその逆とかの)なんらかの参照が無ければ無理よ
子供に親の情報を持たせたくないなら親や外部に親子関係の情報持てば?
(flag ? arr.each : arr.revese_each){|i| puts i} proc = flag ? &arr.each : &arr.revese_each; prco{|i| puts} みたいな列挙の仕方を分岐するコードを たまに書きたくなるんですけど、自然でうまいやり方ないですか。
>>428 こうじゃなくって?なんか別の方法ってこと?
(flag ? arr : arr.reverse).each{|i| puts i }
やりたい処理の流れをその都度日本語できちっと書いてから考えるようにするとわかる手の話のよーにも思える
431 :
デフォルトの名無しさん :2012/10/26(金) 21:53:03.46
正規表現について質問です。 文中にある固有名詞を全て先頭を大文字にしたいのですが、 str = 'This pen belongs to john smith.\nThat hat belongs to mary jane.\n' @words_to_capitalize = ['john', 'smith', 'mary', 'jane', 'john rock'] capitalizeRegex = Regexp.union(@words_to_capitalize.collect{|e| /#{e}/i}) str.gsub!(/( |\.)(#{capitalizeRegex})( |\.)/io){ pre = $1; post = $3; mid = $2 pre + mid.gsub!(/(?:\b)(\w)/){$1.capitalize} + post } p str これで、出力は "This pen belongs to John smith.\\nThat hat belongs to Mary jane.\\n" となるのですが、求めているのは "This pen belongs to John Smith.\\nThat hat belongs to Mary Jane.\\n" なのです。各行の最初にマッチしたものしか置換されません。 gsubを使って、マッチする場合はすべて置換するように書くことはできないでしょうか? 実際には、strが5000語くらいからなる長文で、大文字化する単語は4000語くらいあるので 正規表現の展開をあらかじめ行なっておかないと、単語ごとの処理では2億回も ループを回す形になります。これだと分単位で時間がかかり、実用的でありません。 長くとも数秒単位で処理を終えたいのです。 たとえば、スペースなどの区切り文字で区切って、単語ごとに処理するという方法も考えられますが そのやり方だと、'rock'だけでは大文字にしたくないが、'John Rock'とつながる場合は どちらも大文字にしたいという要求に応えられません。
>そのやり方だと、'rock'だけでは大文字にしたくないが、'John Rock'とつながる場合は >どちらも大文字にしたいという要求に応えられません。 前の語を参照するくらいできるでしょ
>>432 word2cap = ['john rock', 'john', 'smith', 'mary', 'jane',]
re = Regexp.union(word2cap)
str.gsub!(/\b#{re}\b/){ $&.gsub!(/\b\w+/){$&.capitalize} }
Hash使うのとどっちが早いんだろな
437 :
432 :2012/10/27(土) 21:52:35.50
いくつかご回答有難うございました。
>>433 それが、1語遡るだけならそれでも多少のコストは構わないんですが
中には2語以上遡らないといけないレアケースもあるので、そういうレアケースのために負うコストを考えると
区切り記号で区切って1語ずつ処理という手法では難しいのかと思います。
>>434 432では細かく書いてないのですが、単語区切りは一概に \b では処理できないのです。
というのも、たとえば"I don't smoke."というスペルがある場合、単語境界を\bで処理すると、
固有名詞 "Don"に引っ張られて"I Don't smoke."となってしまいます。
なので、\bで一般化することはできず、432で書いた他にも( |,|^|"|'|\?|!|--+)みたいなことを
しないと漏れが生じてしまいます。
自然言語に対して一般化処理を行うのがかなり無理あるのは承知しているのですが
(たとえば、"bill"は固有名詞"Bill"かもしれないし、普通名詞"bill"かもしれないので
最終的な判断は人間が文脈で判断するしかない)、それでも機械的に処理できる範囲では
機械任せにしたいかなと。
>>432 の正規表現が期待通りに動かないのは、後ろの( |\.)が
次の単語の前の空白を消費してるから
先読みが使えそうだけど他にもいろいろ条件がありそうだなあ
str.gsub!(/\b#{capitalizeRegex}(?=[\s\.\?!])/io){
英語の形態素解析ライブラリとか使ったらいいんでね?
>>438 なるほど!そこでしたか!
ありがとうございます。ライブラリはこれから探してみます。
島根県と言えば… アレ?なんだろ?浮かばねえな…
ヒント:このスレのタイトル
答: いずもまがたまの里
444 :
デフォルトの名無しさん :2012/10/28(日) 14:26:18.48
砂丘
445 :
デフォルトの名無しさん :2012/10/28(日) 14:29:05.28
それは取鳥
取烏
最近島根に初のスタバが出店して 地元では大変なニュースになってたようです
448 :
デフォルトの名無しさん :2012/10/28(日) 19:19:40.56
Ruby初心者どころか、今日からRubyを始めてみようという者なんですが、 .rdoc形式のファイルってどうやって読むのですか? テキストエディタでももちろん読めますけど、なんかタグもついてるし、 なにかビューワーがあるのですか? ぐぐってもわからんかったです
ri
450 :
デフォルトの名無しさん :2012/10/28(日) 19:54:03.23
ri ? じぇんじぇんわからんちん
そのまんま読んでいいよ そのまんま読めるというのがいちおう売りなので
452 :
デフォルトの名無しさん :2012/10/28(日) 20:11:55.82
>>451 例えばrails new hugeとかやって
できるREADME.rdocみると
<tt>hogehoge</tt>みたいなタグがついてるけど
なんか対応したビューワーがあるんじゃないの?
ないです
いちおうHTMLに変換して読むということができるんだが、それは自力だ めんどくさいので、ファイルとして第三者に提供するのでなければ誰もいちいちやらない そのまま読んだほうが早い
455 :
デフォルトの名無しさん :2012/10/28(日) 23:29:24.53
>>453 ,454
そうなんですね、、、なんか不思議ですが了解です
<rails>hogehoge</rails>
457 :
デフォルトの名無しさん :2012/10/29(月) 03:18:39.17
RubyでOpenGLプログラミングできますか?
なぜOpenGL
自分でGPU制御してもいいんだけとZバッファとか面倒くさいからGL使いたい 半透明ポリゴン使うからZ順には並べますがめり込んでる処理とかがですね・・ Rubyじゃかけませんよね
そういうのはruby openglとかでググった方が早いだろ
できるかできないかでいえばできる してもいいししなくてもいい 個人的にはしない方が良いと思う メリットほとんどないし
最近使い始めたガチの初心者だけど htmlを書き換えるプロキシがことごとくできない… サイトにあるサンプルすら動かないってどういうこと…
サイトのサンプルを動かせるようになってからプログラミングしましょう。
プロキシサーバはアプリケーションではなくサーバなので、通常のプログラムではありません(語弊だらけ) ユーザーが自作のサーバ(しかもプロキシサーバ)を立ち上げることを前提としていないセキュリティソフトが多いので、 とりあえずはそのへんのパーソナルファイアウォールとかアンチウィルスソフトとかの設定を見直し
>>462 そのサンプルと動作環境を特定してくれないとたいしたこと答えられないよ
自作のプログラムがアンチウィルスソフトに撃墜されたというのはよくある話だな
467 :
462 :2012/10/30(火) 11:28:28.05
自分の動作環境は
OS:windows7
Rubyのバージョン:ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
です。
動かそうとしているサンプルは
http://thinkit.co.jp/article/117/3/ にある、11731フォルダに入っているproxy2.rbやproxy3.rbです。
これらのプロキシを動作しながらページを見ることはできるのですが
書き換えだけができていない。という状態です。
また同じフォルダに入っているproxy4.rbはコンテンツフィルタとして問題なく動作しています。
>>464 さんのアドバイスは実践しましたが特に変わりませんでした。
本当に初心者な相談で申し訳ないです…こういった書き方で大丈夫でしょうか
いまいち要領を得ない 結局、そのサイトのスクリプトを(全く修正せず)実行したが、 いくつかのスクリプトは記事のどおりに動いてないってことか? proxy2.rbを見ると content-type が text/html でないと処理しないみたいだから そうでないページでテストしたのでは?
470 :
462 :2012/10/30(火) 15:33:23.62
>>469 試行錯誤で色々試してみたのですが、あなたの言う通りです
content-typeがtext/htmlでないページでテストしていたようです…
次はこれをどのページでも対応できるように考えてみようと思います
proc と Proc.new と lambda と ->(){} に違いはありますか。 またどのように使い分けた方がいいか、指針はありますか。
WindowsXP ruby1.9.3 RDEver1.1.1 を使っています 「たのしいruby」を片手に勉強してるのですが def hello print("hello,ruby.\n") end →helloで保存 require "hello" hello() →use_helloで保存 これでuse_helloを実行するとエラーが出ます どこがダメなのでしょうか
たのしいRuby 1.9.2 でぐぐる
>>474 ありがとうございます
さっそくググってきます
お手数かけました
エラーメッセージを読めばどこがダメか書いてあるよ
それはたぶん気のせい
Rubyのバージョンの問題だな 俺もそれやられたわ Ruby1.9.2だっけからは$LOAD_PATHにカレントディレクトリが含まれてないからそれだと読み込めない require './hello'またはrequire_relative 'hello'で解決
479 :
デフォルトの名無しさん :2012/10/31(水) 21:27:54.11
>>472 まず2つに分けると
Proc.new と proc が同じ。
-> と lambda が同じ。
Procのインスタンスを返すという意味ではすべて Proc.new なわけだが、
上段の作り方だとProc#lambda? が false
下段の作り方をしたものは Proc#lambda? が true
になる。
-> は lambda のタイプ量を減らすために構文レベルに組み込んだもの。
(首を捻るとλに見えるはずとmatzは主張しているとかいないとか)
lambda? が true を返すProcは、
* 引数の扱いが厳しい(数が違えばエラー)
* Procのブロック内でreturn すると Proc から return する。
lambda? が false を返すProcは、
* 引数の扱いが緩い(多重代入と同等)
* Procのブロック内でreturnすると、Procを渡されたメソッドからreturnする。
おおまかな使い分けとしては、
(値を返す)無名関数的に使うときは lambda
メソッドにコード片を渡す時は proc
という感じ。
procって書いてあると、あとでブロックつきメソッドの一部にするのかなーと思う lambdaって書いてあると、あとで代入してメソッドみたく使うのかなーと思う Proc.newって書いてあると、原理主義者が出たぞー逃げろーと思う ->って書いてあると、->wwwwwwwwwwwwwwwwwwと思う
すみません eachとかのメソッドがどこのクラスに属しているかは どうやって調べるんですか?
rubyの場合は関連の無い様々なクラスがそれぞれ独自にeachを実装する
hoge.each… という記述があった場合、 p hoge.class hoge.each… とかやって、hogeがなにクラスのオブジェクトかを調べて(またはスクリプトから推測して)、そのクラスのマニュアルなりソースなりを読む p hoge.class とやってArrayと表示されたらそのhogeはArrayクラスのオブジェクトだからArrayクラスのインスタンスメソッドArray#eachを調べる もしArrayクラスがINHとかいうクラスを継承してて、Arrayクラスにeachというインスタンスメソッドが定義されてなかった場合はINH#eachも探す もしArrayクラスがINCとかいうクラスをincludeしてて、Arrayクラスにeachというインスタンスメソッドが定義されてなかった場合はIINC.eachも探す
それがダックタイピング。 アヒルのように鳴くものはアヒルであるし、 each メソッドがあるクラスはコレクションである。
クラスを知りたいときには継承関係もいっしょにわかるこれが便利だな p hoge.class.ancestors
irbのヒストリ機能は便利なのだが、過去の入力が長くて折り返しがあった場合、 最終行しか編集できないのは、どうにかならないものか。(Windows)
emobile
emobile
MeCabで名詞カウントするプログラム作成しています
しばらく放置していたのですがまた取り掛かります
https://friendpaste.com/425ROVMjubUeEqcJnzYUo8 文字化けしていますがこのプログラムの3行目は
NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/
と書いてあります
これらの品詞が連続して出てきた時に一つの単語とみなして欲しいのですがどう付け加えれば良いでしょうか
ド変態でカウントして欲しいのにドと変態で別々でカウントしてしまうのです
47〜49行目は解析したいテキスト、51行目は名詞扱いされる記号を書いています
どなたかよろしくお願いいたします
>>490 化け化けで見えないからどんな文章で引っかかってるのかわからん
つうか変なとこで苦労するより辞書作った方が早いんじゃね
>>491 化けている部分は
>>490 に書いた通りです
47〜49行目に入るテキストは特に決まりがないので辞書作成は無理です
NECESSARYに書いた品詞が2つ以上続いた場合は一単語とみなしてカウントしたいです
例えばテキストに「ド変態と変態」と入れると「ド」は接頭詞,名詞接続で「変態」は名詞,一般なので
"ド"=>1 "変態"=>2 とアウトプットされますが欲しい結果は "ド変態"=>1 "変態"=>1 なんです
>>492 あと51行目に関しては!や@などの記号が名詞扱いだったので除外するために入れました
それだけなので無視してください
0を区切りとした数列のグループそれぞれの和を返す、 f([1, 2, 3, 0, 5, 5, 0, 2, 4, 6, 0]) => [6, 10, 12] となるような関数fを作りなさい (10点)
でけた def f(suretu) result = [] sum = 0 suretu.each do |x| sum += x if x == 0 then result += [sum] sum = 0 end end return result end p f([1,2,3,0,5,5,0,2,4,6,0]) [6, 10, 12]
def f(lst) lst.chunk{|n| n == 0 ? :_separator : :num }.map{|_, seq| seq.inject(0, &:+) } end
>>497 :_separatorを活用してる人をものすごくひさしぶりに見た
文字列と同様に、Array#splitみたいなのがあれば便利そうだ
500 :
デフォルトの名無しさん :2012/11/06(火) 20:59:27.22
つーか chunk categorize の使い道を自分では思いつけん。
exlap.rbを利用しないで require 'win32ole' fso = WIN32OLE.new("Scripting.FileSystemObject") filename = fso.GetAbsolutePathName("test.xls") #フルパス名で記録 xl = WIN32OLE.new("Excel.Application") xl.Visible = true #Excelが動くのを見えるようにする if test(?e, filename) #filenameが存在する場合 wb = xl.Workbooks.Open(filename) else #filenameが存在しないので新規オープン wb = xl.Workbooks.Add() end ss.Range("C2").Select #左2列と上1行を固定 xl.ActiveWindow.FreezePanes = true だと動くのにexlap.rbを利用して require 'exlap' require 'win32ole' xl = Exlap.new filename = "test.xls" wb = xl.book_open filename # ワークブックを開く ss = wb.first_empty_sheet # 最初の空シートを選択 ss.Name = "論文の要約一欄" # ワークシート名を設定 ss.Range("C2").Select #左2列と上1行を固定 xl.ActiveWindow.FreezePanes = true だと最後の行でエラーでるのはなぜですか?
>502 exlapだから
>>504 最後の行をどう書けば動きますか?
exlapではセルの固定はできないのでしょうか
exlap 使っても require 'win32ole' は変わらないんだから exlap 使う意味なくね?
>>506 このあともexlapを使うのでwin32oleを組み合わせたいのですが
まずここのエラーの理由がわからないと他のエラーも直せないのです…
>>507 エラーメッセージもなしにエラーの理由なんて分かりません
excel持ってないからあてずっぽうだけど、
xl.objで生のExcel.Applicationオブジェクトに触れるっぽいから
exlapがラップしてないメソッド使う場合は
xl.obj.ActiveWindow.FreezePanes = true
みたいにするんじゃないか?
>>503 うーん、質問の意味がわからない…
なんでいきなり
'n1 n2 n3 n4 n5' ←文字列の一部
が出てくるのか…
a[b + c => d] = e この添字の部分はどういう意味ですか?
ハッシュ
シングルトンってオブジェクト一つしかつくれないってことだけど 具体的になイメージがわかない。 例をだして教えてください。
>>513 おれは、通し番号をつくってる
たとえば、ファイルをひらいたりとじたりしてるとき、操作したファイルの通し番号
>>513 必要ないものを作ったり使ったりしてはいけません
思いつかないのなら、使おうとしてはいけません
>>513 Javaには、グローバル変数がない。シングルトンを利用する。
JavaのプログラムをRubyに翻訳するとき、Rubyでもシングルトンを利用できる。
グローバル変数でもできる
>>513 The earthとか、ひとつしか存在しないものを定義するとき便利。そのシステム中に一定個しか出現しないものにもいい。
>>515 が真理ではある…のだが、地雷踏み抜かないと成長しないというのも真理…かもしれない
本当に必要になったらわかるようになるから忘れろ、ってのもありだけどね
一つしか作れないことよりも、新規生成したつもりでも既存のオブジェクトとして存在していれば、 素知らぬ顔をしてそのオブジェクトが帰ってくるのが、使い勝手が良い気がする。 複数の場所・タイミングで生成される可能性があるが、どこで作られたとしても、他の場所で使い回したい。みたいな。 生成がコピーによる生成を含めて、一カ所に閉じ込められるなら、要件としてシングルトンを満たしていても、採用する 必要は無いかなと思う。
GoFでいうFlyweightとSingletonを組み合わせるパターンはしばしば出現する ファクトリの部分にキャッシュを入れて、 かつファクトリ自体が一つであることを保証しようとすると 勝手にそうなる
>>499 ホイ
class Array
def arsplit(pattern)
# pattern = regexp, string or number
result = []
result << []
self.flatten.each do |elm|
if pattern === elm
result[-1] != []? result << [] : false
else
result[-1] << elm
end
end
result[-1] == []? result.pop : false
result
end
end
>>521 の続き
[1,2,3,0,5,5,0,2,4,6,0].arsplit(0)
=> [[1,2,3],[5,5],[2,4,6]]
[1,2,3,0,5,5,0,2,4,6,0].arsplit(0).map{|ar| ar.inject(:+)}
=> [6,10,12]
" hoge hage hige ".split("")
=> [" ", " ", " ", "h", "o", "g", "e", " ", " ", "h", "a", "g", "e",
" ", " ", " ", " ", " ", " ", "h", "i", "g", "e", " ", " ", " "]
" hoge hage hige ".split("").arsplit(/¥s/)
=> [["h", "o", "g", "e"], ["h", "a", "g", "e"], ["h", "i", "g", "e"]]
なんか冗長だなぁ…
[:a,:b,:c,:d,:e,:f][0,3,5] => [:a, ;d, ;f] という感じで複数の添字で引っこ抜くのできないの? a = [:a,:b,:c,:d,:e,:f] [a[0], a[3], a[5]] でもいいけどマンドクセ
>>522 >>525 values_at とか inject は知らなかった
使えそう
自分←不勉強
527 :
デフォルトの名無しさん :2012/11/13(火) 14:33:49.47
1.8.7 から 1.9 への移行したい。 どこかに注意点のまとめがあったはずなんだけど見つからない。
Rubyとして意味はなくても装飾はつけといたほうがよいということになってる すくなくともEmacsの簡便な動作には必要なものなので、それに相乗りして「なんか余計なの書いてあったから消した」を防ぐ効果が期待できる Emacsを使ってるか、すくなくとも知っていればこの行を消すことはないはず
> Rubyとして意味はなくても装飾はつけといたほうがよいということになってる どこで推奨されてましたっけ?
本当にRubyにマジックコメントは必須だったのだろうか どのエンコードか指定するのはもちろん良いとして 書かなくても自動判別できるようにするべきだったのでは
require 'AutoEnc'
>>534 1万行あるスクリプトファイルの、最後の行にだけぽつんと日本語が使われてる、とか、
EUCかシフトJISか判別不可能なオクテット列しか現れない、とか、
そういう嫌なケースがいくらも思いつく。
自動判別は誤爆のほうが多いし、たとえばShift_JIS/CP932とLatin-5あたりの区別は技術的に困難 Latinの中でどのLatinかを判別するのも出現頻度と辞書頼りで根本的に誤爆上等 文字エンコーディングは「最初にファイルを書いた人」が"絶対に知っている"はずなので、 わざわざ電気代と時間をかけて推測して当たりか外れかドキドキするよりもその人に確かな情報を教えてもらうのがコスト的にベスト テキストファイルは本来、最低限、文字エンコーディング情報をファイル中またはファイル付随で持つべきだった …そんな「エンコーディング形式」なんて概念が不要だった時代からの遺産だから仕方がないんだけど
538 :
529 :2012/11/13(火) 21:40:50.28
>>530 ありがと
いま自分のスクリプトをみたら
> #coding: Windows-31J
> $KCODE='s'
とか
> #coding: utf-8
> $KCODE='u'
> # あ utf8
って書いてあったんだけど、
これって移行期を考えて書いてあったのかな?
って他人に聞く話ではないなw
obj.method{ |arg| ... } の arg がブロックローカルに
なることにビビった。
とりあえず、each_with_index とか times あたりが怪しいので
全部調べた。やっぱりヤバイのあった。疲れた。_| ̄|○
ST2最強や emacsなんていらんかったんや!
先端開発版だと、デフォルトのソースエンコーディングがUTF-8になったようですが 2.0はそれで決定なんですかね?
それと String#bメソッドでエンコーディングをASCII-8BITに出来るそうですが やっぱりリテラルもあったほうがいいと思うんですけどね %u() と %U() でUTF-8のリテラル %b() と %B() でASCII-8BITのリテラル みたいな さらに贅沢を言えば、Windows用に\をエスケープしないリテラルが欲しいですな """ほげほげ\ほげほげ\ほげほげ\"""的なやつか、%記法で
つーかいまどきutf-8以外使ってる方が悪いんだから utf-8使ってる限りは変なコメント書かせずに良きに計らってくれよっていうね
>テキストファイルは本来、最低限、文字エンコーディング情報をファイル中またはファイル付随で持つべきだった >…そんな「エンコーディング形式」なんて概念が不要だった時代からの遺産だから仕方がないんだけど Appleはエロいよ
544 :
デフォルトの名無しさん :2012/11/14(水) 12:33:22.64
Windows Ruby1.9.3p286です if a then p "true" end って書くと"true"って表示されますが if a == true then p "true" end って書くと表示されません Rubyではifのfalseとnil以外は真になるのに撫ぜa==trueが偽になるのでしょうか? あとifはthenを省略かけるのですが、業界的には省略するのとしないのどっちが当たり前でしょうか?
545 :
デフォルトの名無しさん :2012/11/14(水) 13:10:56.91
a が 1 とか 2 とか bool じゃないならそうなる 要するにあんた Perl に毒され杉だよってこと
一瞬、「a が 1 とか 2 とか bool 」だったらa==trueがtrueになるのかと思った あいまいな日本語はよくないぞ
気付いたけど敢えて直さなかった 今は反省していない
例えば1とか2のように、aがboolではない場合そうなります つまり、あなたはPerlの感覚にとらわれすぎているということです
世の中、Emacs中心に物事が回っている。そういうことだ
a.rb の中身 # coding: Windows-31J $KCODE='s' doc=<<'EOD' こんにちは 世界 EOD p doc a.rb の出力 1.8 では "こんにちは\n世界\n" になっていたけど、1.9 では "こんにちは\r\n世界\r\n" になったりしますか? # ブロックパラメーターの確認と修正オワタ 疲れた・・・
binmode と同じか
resolv、net-dns、dnsrubyといくつかあるけどどれが主流ですかね それぞれの違いとかどんなものなのか知りたいのだけど資料もあまり多くはないな
Ruby 1.9x irbでの環境で実行していて、 16進文字コードと、正規表現の入力チェックに 関して質問したいことが出ました。 "0123456789" =~ /¥A¥d+¥z/u => 0 こういう入力チェックをしている状況で、 たとえば先頭の0を16進表記しても "¥x30123456789" =~ /¥A¥d+¥z/u => 0 という風になります。 '¥x30123456789' =~ /¥A¥d+¥z/u => nil 一方、式展開をさせないシングルクォートだと こうなります。 irb以外の、ブラウザからの postやgetされた16進表記などの入力値は、 どういう風に処理されるのでしょうか ¥x30はrubyで処理するときにはもう既に 展開されて0になっているのか、などです。 それとも処理系やブラウザ依存でしょうか。
Ruby 1.9x irbでの環境で実行していて、 16進文字コードと、正規表現の入力チェックに 関して質問したいことが出ました。 "0123456789" =~ /\A\d+\z/u => 0 こういう入力チェックをしている状況で、 たとえば先頭の0を16進表記しても "\x30123456789" =~ /\A\d+\z/u => 0 という風になります。 '\x30123456789' =~ /\A\d+\z/u => nil 一方、式展開をさせないシングルクォートだと こうなります。 irb以外の、ブラウザからの postやgetされた16進表記などの入力値は、 どういう風に処理されるのでしょうか \x30はrubyで処理するときにはもう既に 展開されて0になっているのか、などです。 それとも処理系やブラウザ依存でしょうか。
>\x30はrubyで処理するときにはもう既に展開されて0になっているのか いいえ >処理系や いいえ >ブラウザ依存 いいえ
> ¥ (マカーだ…) (マカーが来たわ…)
rubyでwinndowsのプログラムはつくれますか
yesかnoかで言えばyes 茨の道だからお薦めはしない LLでやりたいってことなら Pythonの方がWindowsと相性良い
ありがとうございます
>\x30はrubyで処理するときにはもう既に展開されて0になっているのか はい
まずはここに接続 サーバー chat.na1.lol.riotgames.com ポート 5223 SSL使用 接続したあと pvp.netに認証↓ ドメイン pvp.net ID tarou PASS test resource xiff これをXMPPで送信したいんですけどRubyでやる方法教えてください
汚いトロルだなあ
>>556 >>562 あざまっす処理系やブラウザには依存しない、
でOKのようですね。
>¥x30はrubyで処理するときにはもう既に展開されて0になっているのか
ここについてはご意見違うようですが。
httpの通信の部分ですよね。
>>557 知ってるかもしれませんが、
ローカルでirbやったりすると
Windowsと比較にならないくらい
実行が早いっすよ。
MacBookAirはスタバでドヤ顔のためでもなく
デザイナーのためでもなく、
エンジニアのノマド開発用だとおもいます。
なぜ比較対象がWindowsなんだろう
>567 Window8があまりにひどいので 次買い換えるときはMacにするかも知れない 楽しみに待っててね!
>>568 5年前くらいの頭で止まってるとそうなる
Windows7マシンにCUIなLinuxをVMで入れるのがコスパと使い勝手の総合で現状最強
※ コスパを入れ忘れないように願います
andLinux いいよね
def change(hash) hash.merge!(key: "change") end h = {key: "value"} change(h) h[:key] # => "change" となるのに、rspecで it do h = {key: "value"} change(h) h[:key].should == "change" end とすると expected: "change" got: "value" (using ==) となってしまいます。 なにが間違っているんでしょうか。
573 :
デフォルトの名無しさん :2012/11/16(金) 23:00:19.56
>>572 method(:change) を出力してみると分かるかもしれないけど、
RSpecが定義しているマッチャーメソッドに change がある。
expect { operation }.to change(:hoge).from(X).to(Y)
のように使う奴。
別の名前のメソッドにすれば期待通りに動く。
ありがとうございます。 無事動作しました!
S式のファイルをパースしてHashにしたいんだけどライブラリとかないかな?
hashにしたい人なんて居ないだろうから無いだろう。
Hashじゃなかった。Arrayだった。
>>577 は少し試してみたけど使えそう。
ってか、基本rubygemsしか探さないから気づかなかったわ。
ありがd
>573 なんで名前空間分かれてないの?
DSLだから ユーザーはキーワードを事前にすべて把握「していなければならない」 これはDSL使用における不可避な義務 assertというメソッド作ったらぶっ壊れるのと同じ
582 :
デフォルトの名無しさん :2012/11/18(日) 19:38:46.37
Rubyで、ブロックパラメータの構文木って取得できない? foo {|x| x == nil ? 1 : 0 } みたいな関数呼び出しがあったとして、foo()が受け取ったブロックの中身を構文木として取り出してごにょごにょしたい。
exerb のソース見ると良いよ
そこに書いてある
>>583 Rubyの標準機能ではできない。たしかRubiniusならできたような。
>>584 exerbはソースコードをパースしてるだけなんじゃないの?583がやろうとしているのはそうじゃないでしょ。
588 :
デフォルトの名無しさん :2012/11/20(火) 15:37:59.31
最近ようやくrvmに手を出したものです。環境はOSX10.8です。現状は $ rvm list rvm rubies =* ruby-1.9.3-p194 [ x86_64 ] # => - current # =* - current && default # * - default which rubyだと /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby $ ruby --version ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0] です。
ものすごい初歩的なミスだと思うのですが助けて!
環境 ruby1.8 windows7
# 配列を作成
ary = [
[1, "aさん", "
[email protected] "],
[2, "bさん", "
[email protected] "],
[3, "cさん", "
[email protected] "],
[4, "dさん", "
[email protected] "]
]
require "CSV"
file = CSV.open("hoge.csv", "w", "\t", "\n")
ary.each { |row| file << row }
配列をタブ区切りCSV?に出力するコードに、
↓な感じでダブルクォーテーションをつけようとしたんだけどエラーが出るんです。
file = CSV.open("hoge.csv", "w", "\t", "\n", {:force_quotes=>true})
エラーメッセージ
C:/AptanaWorkspace/Hello2/array2.rb:13:in `open': wrong number of arguments (5 for 4) (ArgumentError)
from C:/AptanaWorkspace/Hello2/array2.rb:13
↓にするとダブルクォーテーションは付くんだけど、区切りの文字はないし改行もされないです
file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})
↓にするとまたエラーがでます file = CSV.open("hoge.csv", "w", "\t", {:force_quotes=>true}) エラーメッセージ c:/ruby/lib/ruby/1.8/CSV.rb:492:in `index': type mismatch: Hash given (TypeError) from c:/ruby/lib/ruby/1.8/CSV.rb:492:in `generate_body' from c:/ruby/lib/ruby/1.8/CSV.rb:288:in `generate_row' from c:/ruby/lib/ruby/1.8/CSV.rb:692:in `<<' from C:/AptanaWorkspace/Hello2/array2.rb:16 from C:/AptanaWorkspace/Hello2/array2.rb:16:in `each' from C:/AptanaWorkspace/Hello2/array2.rb:16 csv.rbを覗いてみると83行目が↓になっててパラメータを5つ渡せるように見えるのですが 最後の&blockはパラメータではないのでしょうか? def CSV.open(path, mode, fs = nil, rs = nil, &block)
>>591 どこを見ればいいのかわかりませんorz
{:force_quotes=>true}をどこらへんに書けばいいのでしょうか
1.9ではFasterCSVが標準のCSVとして採用されたんじゃなかったかな 1.8にFasterCSV入れれば同じように使えるかと
>>593 file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})
これだと一応ダブルクォーテーションは付いたので、対応してるのかなと思いましたが、
1.9からの機能かも知れないのですね
1.8にFasterCSV入れるか1.9でやってみます!
初心者スレに逝けよ
597 :
デフォルトの名無しさん :2012/11/22(木) 21:30:30.37
ごくろうw
602 :
デフォルトの名無しさん :2012/11/24(土) 16:11:03.86
# この前にstrを組み立てる処理 str = result require 'net/ftp' ftp.open('server', 'user', 'pass') この後、ftp.put()でstrをアップしたいのですが、ftp.put()はファイルのパスを引数に取るので、strを渡せません。 ファイルのパスを引数に取るメソッドはたくさんあるのでこのようなケースはよくありそうなのですが、一般的にはどのように処理すればいいのでしょうか。
ftpを止めるべき
>>602 net/ftpはpurerubyだからソースを読んでみるといい
どうせ回答も似たようなのしか来ないだろう
>>602 nfsとかで直接って書き込めばいいじゃん。
606 :
デフォルトの名無しさん :2012/11/24(土) 19:43:28.18
内容をTempfileに書いて、putのlocal側にTempfile#pathを渡す。
それだとファイル名おかしくなる
転送ファイル名を別途指定できないんならそんなライブラリは捨てろ
609 :
デフォルトの名無しさん :2012/11/25(日) 12:24:17.92
1.8.7とgemでインストールできるもののみで Gmailの下書きにファイルを添付したメールを保存 ってできそうでしょうか? watirで行けるかと思いきや、IE向けのSeleniumドライバ?を別途インストールする必要があるみたいでした
>>610 gmailをimapでアクセス可に設定できるのなら簡単になりそうじゃない?
RDEの最新版がダウンロードできないんですけど
>>611 できるだけWebアクセス(httpかhttps)だけで・・・と考えてましたが
こだわらないとしたら確かにimapでできそうですね
ありがとうございます考えてみます
ノーパソでキーボードが小さくてアンダーバーが打ちにくいので to_iやto_fをtoiやtofに変更したいのですがどうしたらいいでしょうか
615 :
デフォルトの名無しさん :2012/11/27(火) 21:35:33.63
オレオレRubyを作りたいというのではないよね? class String alias toi to_i end あたりでいいんじゃないの? # 尚、Rational, Float, Complexにも定義されている。
>>615 ありがとうございます
単に自分の環境だと打ちにくいから変更したいというだけで
いわゆる動く擬似コードの視点から見ればto_iやto_fのが
良いと思ってます
アンダースコアの有無を無視して補完してくれるエディタを使え
>>614 エディタ何使ってるかしらんけど、補完や短縮入力あればそれで
Vimなら、
iabbr toi toi
とか。スレ痴やな…
Rubyって標準ライブラリにZipファイルを圧縮解凍するのついてないんだ… Javaは付いてるのに…
Unix環境じゃzipファイル使うことあんま無いからな 一般にgzipだからrubyにはzlibが用意されてる Javaはjarファイルとの絡みでzipの読み書き欲しいだろうけど
pythonにはzipfileもgzipもbz2も付いてるよ!
>>621 全OS制覇を目指すならそれくらい標準でできんとお話にならん
Rubyは「そういうのめんどくさいからやりたい人が誰かやって」で通してきたからなあ
Gemがあるんだからそれを使えばいいだろ
javaもrubyも自分に必要な機能だからあるんだな だがjavaのzipは日本語がうにこーどでウィンドウズのツールで開くとうにうに
>624 情弱乙
せめてbundlerみたいなのを標準で入れてほしいな Gemなんて知らねって(Rubyをただの実行環境としか使ってない)人に渡すのが難なんだよね
質問いたします、クラスの メソッド群をcommaderのところで イテレーション実行する際、 hogeのようにパラメータが不要な場合に __send__のところの、*argsをうまく 取り除く?方法はないでしょうか? class A def hoge puts("hogehoge") end def fuga(x) puts(x) end def commander order = [:hoge, :fuga] params = {:fiuga => "fugafuga"} self.each{|method| args = params[method] self.__send__(method, *args) } end
bundlerにそういう機能があるだろ
629 :
628 :2012/12/01(土) 21:04:46.10
630 :
デフォルトの名無しさん :2012/12/01(土) 22:56:51.67
>>627 (脱線:self.eachはorder.each だろうか?)
method(method).arity で判断とか。
質問で使っているローカル変数と被って紛らわしいな。
>>627 argsが空の配列だと引数は無かったものになるよ
def hoge() :hoge end
send(:hoge,*[]) # => :hoge
send(:hoge,*[1]) #ArgumentError
632 :
デフォルトの名無しさん :2012/12/02(日) 01:08:18.28
もしかして
>>627 は引数のある fuga のほうで(typoのため)引数を
渡し損ねてエラーになってるのを見間違えたのだろうか?
>630-632
誤字、脱字多くて失礼しました。回答ありがとうです
>>631 >argsが空の配列だと引数は無かったものになるよ
ありがとうございます。これ使わせていただきます。
【お題】 WINDOWSで一定時間(10分)ごとにブラウザ(ChromeかIE)を更新(読み込み)するマクロ を教えて下さいお願いします
>>634 webrick/httpproxyでコンテンツ編集するプロクシ作って
window.setTimeout(function(){window.location.reload()},1000*60*60*10);
みたいなjavascriptをHTMLソースに埋め込む
つうか自動更新付いてるブラウザか拡張機能使えよ
ぶちゃけ、
>>634 だけじゃ何をやりたいのかよくわからん
更新するページを自分が管理しているのかどうかとか、
もっと具体的に
見るだけなら、自動更新機能のあるWebブラウザまたはWebブラウザに追加できる自動更新機能を使うというのがいちばん妥当かと思う いちいち見せなくてもいいのならRubyで取得して差分出したりなんだりということはできるが、用途次第っすなー ちなみにどこをどう頑張ってもいわゆるマクロ相当の簡便さ可搬さにはできない IE操作ならVB.netとかC#使え Firefoxアドオン製作ならjavaScript使え どちらにおいてもRubyの出番はない
crontabで1分起きにrubyの結果をテキストに吐き出したいんだが上手くいかない */1 * * * * ruby -e 'puts "#{Time.now.to_i}\t#{`コマンド`}"' >> ~/ファイル名.txt txtを見てみるとunixタイムとタブのみ出力されていて、肝心のrubyの結果が出ないんだ コマンド>> ~/ファイル名.txtのみで実行したときはしっかりと出力されるんだが。。。 crontabの書き方が悪いのか?
>>638 とりあえず最後に 2>&1 を追加して様子を見る
>>639 コマンドが見つからないみたいだ パスがおかしいのか?
crontabのPATHとかシェルのPATHとかパーミッションとかtypoとか まあrubyとはあんまり関係ない部分だと思うわ
642 :
デフォルトの名無しさん :2012/12/02(日) 20:18:19.06
実行内容を puts ENV["PATH"] にしてみたらあらびっくりというパターンかな。
crontabって、root用と一般ユーザー用があるんだろ?LPIC1落とした
644 :
デフォルトの名無しさん :2012/12/02(日) 21:00:03.69
次は Time.now をフォーマットしようとして crontab(5) の % の扱いにハマる。
>>641 PATH通ってないことがほとんどだな
ユーザーが手動ログインしたときの環境とcrontabが実行されるときの環境はほとんどの場合まったく違う
Rubyをrvmやrbenvでホームディレクトリにインストールしている場合なんかはそのままではたいてい動かない
Ruby使おうと思ってるんですが PerlのCPANみたいなのありますか? それはCPANよりモジュールそろってますか? 教えて
CPANみたいなものは、多分、gemだろうけど あなたみたいな人はVBAでも弄ってる方が絶対に幸せだよ
railsブームも去りそうだし、そろそろ成熟したOSSのツールの バインドでも充実させてくれれば良いのにな
>646 きみにぴったりなのはpythonだよ
Rubyは誰でも簡単に使えるようになるし 誰が使っても同じようなコードかけるのがいいよね Perlは難しいし書く人によってコードが変わりまくるし 変態的で比較的レベルの高い人じゃないと向いてないよ
初めての言語は Java、次に JavaScript その次が Perl ある日「ひさしぶりに Perl を使おう」と思い立ち $line = chomp($line); と書いて、意図通り動かないことに気がついたとき 自分は Perl に向いていないと思った。 my とか bless とか、配列とかの不満よりも、 上記の1行コードでの失敗の方がおどろいた。
Perlってほんといらつく言語 みんな嫌々使ってたと言わざるを得ない ってかもうみんな忘れちゃった言語だよね まだ使ってる人はコボラーの様にパララー原人としてウッホウッホと生きてゆくしかない。
周りの評価 流行 新しい/古い の基準で生きてるお前は死ね
Linuxにほぼ入ってるから、インストールスクリプトとかでよく見かける。そのうちpythonに置き換わるのかな。
656 :
デフォルトの名無しさん :2012/12/03(月) 21:19:02.75
>>652 なんで動かないんだろうと思ったら…
> It returns the total number of characters removed from all its arguments.
( Д ) ゚ ゚
完全に忘れていた。
>>655 Linuxディストリビューションのコアのほうに近い新規スクリプトはPythonか移植性の高い書き方をされたシェルスクリプトかどちらか
新規にPerlスクリプトがゼロから書かれることはまずない
rubyは好きだけどrubyだけ使ってるとマジでアホになってくるな… まぁこんな多様性の無い会社で働いてる俺が悪いんだけど。
どちらにしろ「Rubyしか書けない」は阿呆確定なので、Rubyをオモテでほとんど使わないことを気にする必要はない 家で存分に使い倒せ
jsだけ書ければ十分←これが真理
C、C++、Java、JavaScript、AWK、SED、ShellScript、Lisp、Scheme、Prolog、VBA、VB、C#、Obj-C、Clojure、Erlang、Ruby、Pyhton くらいは標準装備だろ?普通のプログラマなら。
Perlが抜けてるよ低脳
shすら書けないとは。
あった//
>>662 erlang以外は、どれもスグに習得できる自信がある。
毎日短いスクリプトを書くための標準装備がjsだけで良い。
多くの言語を行き来するって、本質的に、どうでも良い仕事をしているPGで、 はやい話が会社側からすれば、何時捨てたところで変わりがいくらでも居る人材
別にこれくらい普通じゃね…? 初心者はえっと思うかもしれないけど、 普通なんだよ。別に特別なわけじゃなく、普通なんだよね。 ごく普通。
ガリ女が私デブだよ とかいうのと似てるね
なにひとつとして(Rubyすら)"極め"てはいないが、使えるかどうかで言えば5言語やそこらは普通に使えるな HTML5未満とCSSはカウントしないのでよろしく
近年稀に見るキモいレスを見た
ここしばらくずっときもい 本スレならまだしも初心者スレでこういう流れは勘弁
C、C++、Java、JavaScriptなんてきょうび標準スキルでそ。 AWK、SED、ShellScript、Lisp、この辺はLinuxとEmacsを使ってたらごく普通。 んでiOS流行ってんだからObj-C触ったことないプログラマなんているはずない。 VBAなんてそこらへんの事務員さんでも使ってるような言語。 VBやC#なんてWindows使ってたら普通に使うし。 あとSICP読んでない奴なんて居るわけないんだからSchemeは当然みんなできるし、 Ruby、Pythonなんてそこらへんにおちてるちょっとしたスクリプトを拝借していじってりゃ覚えるし、 Prolog、Erlang、Clojure、Smalltalkくらいは教養としてやっとけよってレベルでそ?
SEDって全部大文字で書くとおくすりみたいですね
冬だなぁ…
そういうレベルで使えると言う奴も居るのか。面接で言語数アピールしてくる奴は気をつけよう。
Twitterとかの自己紹介欄に沢山言語書いたり ハテブに沢山言語のカテゴリ作っててスカスカってクズだろうなあ
うちのお勉強サイトがそれだ 虫食いのようにあれこれ摘んでろくな記事が増えない
679 :
195 :2012/12/05(水) 00:43:33.74
>>661 jsが使えて十分とかは、
ちっこいサイトでnode.jsで
遊ぶレベルならいいよ。
飯食えるレベルなら何でもいい。素晴らしいことだ。と最近になって思う。 大学生時代の俺は・・・ それなりに高学歴であらゆる言語をマスターして情報科学を学びEmacsを極限までカスタマイズして 家では自宅サーバーを立ち上げてスタバでドヤ顔でmacbookで作業して有名ベンチャーでバイトをしてチヤホヤされ人生勝った気でいた。 しかし社会に出たら勝手が違った。稼ぐためには価値を生み出さなければならないのだ。自分のためではなく人のために働く必要がある。 俺みたいにはなるなよ。
環境設定の質問いいですか? Mac OSX Mountain Lion 症状: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed となって実行できない。 バージョン:ruby 1.9.3p194(rbenvでインストール rbenvはHomebrewでインストール) ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'の出力結果 →/usr/local/etc/openssl/cert.pem(つまりHomebrewで入れたOpenSSLのパス) なんでエラーになるんだろう? ちなみにUbuntuでは実行できた。
680 了解
683 :
デフォルトの名無しさん :2012/12/05(水) 23:21:51.69
>>681 キーチェインアクセスからシステムのルート証明書リストを書き出して
使ってみたらどうでそ?
684 :
デフォルトの名無しさん :2012/12/05(水) 23:39:54.03
おまいらの使ってるIDEを教えてくれ。
>>680 大学でてたら経営工学概論なんて講義ぐらい取ったんじゃないの?
だいたいベンチャーって、どこも10年ぐらいで潰れるだろ。
とはいえ、ウェブ系でロクロ回してる連中と中堅規模の無能の集まりって、
どっちが最後まで立ってんだろな。巻き込まれたくないバブルだこと
ところで受託開発とニッチでコアな技術って、どっちが社会的に付加価値あるんだろ
>>673 SICPもprologも内容的に被るから、片方で良いでしょ
web系よかメーカー系の方が、よっぽど技術者らしい人生を送れそう
web系は、もはやエンジニアではなく起業家か事務屋の集合体か何かだ
>>676 経験年数に対して言語数が多ければ大した仕事してないって見るでしょ。普通は。
よっぽどボンクラな採用担当でもなけりゃ、言語や経験年数より、どの業務に従事したか聞くよ
常時使う言語なんて、多くて2つぐらいが限度でしょ 時間と記憶力の資源は、もっと有意義なことに使えよ
>>688 例えばWeb屋さんだと、
バックエンドに、Ruby、C、Java、Node.js
フロントエンドに、JavaScript、Java、Action Script、
メンテにShellSsript、
くらいはごく普通に常用してるでしょ?
あなたは初心者なのになんで意見しちゃうの?
Ruby は無いわ
Perl PHPのほうがしっくりくるな
Web屋のバックエンドはPHPだと思う Rubyはシェルスクリプトレベルの頻度と隠れ具合なはず 「見えない」部分で言語指定がない場合にはシェルスクリプトで書くが、それがRubyになる感じ まあ、初心者スレ向きの話ではない 「Rubyができるからといって仕事や就職の口があるわけではない」という認識で間違いない 仕事や就職自体は別の技術で受けて、プロダクト本体にならない自由裁量部分でRubyを使う
Web屋は自信満々だね
コピペで何とかしようとするとPHP
配列について質問です 配列の中に配列を入れたくて調べているのですが ary=[[a, b, c, d, ], [e, f, g, ], [h, i, ], [j, k, l, m, ]] のように各要素数がバラバラの二重配列って作れないんですか? 最初一つ目の要素(a, b, c, d, )のあとに二つ目(e, f, g, )を追加,というようにぼんぼん突っ込んでたら, ary=[a, b, c, d, e, f, g, h, i, j, k, l, m, ]という配列になってしまって 本当はary[0]=[a, b, c, d, ],ary[1]=[e, f, g, ]を取り出したいのに カンマで切れてary[0]=[a, ],ary[1]=[b, ]となってしまったのです 二重配列以外にも対策あったら教えて下さいお願いします
irb(main):001:0> ary=[] => [] irb(main):002:0> ary << %w(a b c d) => [["a", "b", "c", "d"]] irb(main):003:0> ary << %w(e f g) => [["a", "b", "c", "d"], ["e", "f", "g"]] irb(main):004:0> ary => [["a", "b", "c", "d"], ["e", "f", "g"]] irb(main):005:0> ary[0] => ["a", "b", "c", "d"] irb(main):006:0> ary[0][1] => "b"
初心者スレでパーセントリテラル使う自己満は死んでいいよマジで
まあ今回はパーセント記法のほうが余計にわかりづいらいな
>>695 Array#<< および Array#push は引数のオブジェクトを配列の最後の要素として単純に追加する
要素を配列にしたければ引数に配列を指定すればいい
irb> arr = []
irb> arr << ['a', 'b', 'c', 'd']
irb> arr << ['e', 'f', 'g']
irb> p arr
[["a", "b", "c", "d"], ["e", "f", "g"]]
699 :
デフォルトの名無しさん :2012/12/06(木) 19:24:32.93
rubyについて質問です。 あらかじめrubyで何かしらのサーバを立てておいて サーバが動いているマシン内で別のrubyプログラムを走らせて サーバの挙動を変えたいのですが、このようなことは可能でしょうか? 例 別プログラムが動いてない時のサーバはアクセスがあると「A」を返すが 別プログラムを動かすと「B」を返すようになる。 (「A」を返すところを「B」を返すように動的に書き換える)
パーセント記法くらい普通だろ ググって調べろよカス
可能かどうかで言えば可能だが、おそらく90%くらいの確率でアプローチ法が間違ってるな
>>699 できるかどうかすら他人に訊かないと分からないレベルならもっと大人しいことから勉強しなよ
そもそもここが何のスレかも分かってないみたいだし
systemuでpidpfかpgrepを叩いて判定すりゃええやんか。
馬鹿には無理
>>698 できました!ありがとうございます
%wも分かったのですが実際のデータはスペースも含んでいるので使えませんでした
フロントにJAVAって使ったことないな
良いとしこいたおっさんがふぇぇとか言ってると虫酸が走る
昨日に引き続き配列の質問です 以下のプログラムでうまくいかないのですがどこがおかしいのでしょうか ary_a = Array.new(0) k = 3 while k < 10 text = [k] #既に存在しているk番目のテキスト ary_b = Array.new(0) counter.count("#{text}") #テキスト中から名前と出現回数を探すモジュールを使用 counter.result.each do |name, count| #名前と回数を配列に入れていく ary_b << "#{name}" ary_b << count #この時点で["花子", 1, "太郎", 3]のような配列になる end ary_a << ary_b #二重の配列を作っていく k += 1 end 本当はary_a[0]=["花子", 1, "太郎", 3],ary_a[1]=["花子", 2, "優子", 1]としたいのに ary_a[0]のカウントにary_a[1]が追加されてary_a[1]=["花子", 3, "太郎", 3, "優子", 1]となってしまいます お願いします
>>709 X ary_a = Array.new(0)
O ary_a = [[]]
>>710 かわりませんでしたorz
ちなみに以下のものはうまく行きます
ary=[]
ary << %w(a b c d)
p ary => [["a", "b", "c", "d"]]
ary << %w(e f g)
p ary => [["a", "b", "c", "d"], ["e", "f", "g"]]
ary=[]
ary << %w(a b c d)
p ary => [["a", "b", "c", "d"]]
なにも追加動作のない空の配列の生成に Array.new は使ってはいけない、目立ってめんどくさいから ごく普通に素直にリテラルで [] や [ ] と書くとよい なにかデータを格納したマイオブジェクトがあって、メソッド引数で動作を指定して、動作結果を利用したいという場合は my = MyObject.new(init_data) my.action(condition) my.result... ではなく、actionメソッドの戻り値の時点で計算結果を返すようにするとよい(resultメソッド自体は別途存在しても構わない) my = MyObject.new(init_data) result = my.action(condition) result... んで、おそらく、単にcountメソッドかresultメソッドがバグってる p k,text,counter.result,'--------------------' あたりをeachの前に入れて、期待通りの出力になるかどうか確かめてみれ
>>712 ありがとうございます メソッドがバグってるみたいです
でも私の知識ではメソッドを直すよりもあとから修正したほうが早そうですw
配列からハッシュ作成しているので,{"花子"=> 3, "太郎"=> 3, "優子"=> 1}
から{"花子"=> 1, "太郎"=> 3}を引き算して{"花子"=> 2, "優子"=> 1}を作る方法はありますか?
なんとぐぐれば良いのかあやふやですが調べてみます
いややっぱりメソッド書き直してみます(`・ω・´) webで見つけた名詞カウントモジュールなのですが繰り返し利用すると加算されてしまうのはなぜでしょうか インスタンス変数が空になってないから?初心者すぎてorz 長いので分けます module Meishi class WordCounter NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/ def initialize @result = Hash.new(0) end attr_reader :result # mainループ def count(text) words = split_to_words(text) count_up_result(words) self end
# Mecabで単語に分割し,必要な品詞のみ抽出する def split_to_words(text) results = IO.popen("mecab", "r+") { |mecab| mecab.puts(text) mecab.close_write mecab.readlines } results.map { |result| necessary?(result) ? result.split.first : nil }.compact end # 単語として使うする属性を判断する def necessary?(feature) case feature when Regexp.new(NECESSARY.join('|')) true else false end end # 単語数をカウント def count_up_result(words) words.each do |word| @result[word] += 1 end end end end 以上ですお願いします
まあそりゃ@resultを初期化せずに何度もcount_up_result呼んだら足されてしまうわな
>>716 ああやっぱり初期化のところでしたか…
調べていたら最初のinitializeが初期化だと出てきたのですが初期化できていないのでしょうか
……えーと
あらゆる Rubist は幼女
>>718 プログラムは思っている通りではなく書いている通りに動く
たいへん残念なことにプログラミングは魔法ではないので、自力で道筋を考えて記述する必要がある
挙げられたメソッドを見る限り、どれがどうやってどう動いているか把握できてないものと思われる
>>721 カウントするところだけを何度も呼び出してたんですね…
呼び出してカウントする都度@resultを初期化しなければいけないんですね
今なにも考えず@result = Hash.new(0)をぶちこんだらエラーでたので調べているところですorz
できた!できたできた!! カウントする度にメソッドまるごと呼び出したらできました! みなさんありがとうございました!!
とう module Meishi class WordCounter NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/ def count(text) result = {} split_to_words(text).each{|word| result[word] += 1} result end def mecab(text) IO.popen("mecab", "r+") { |mecab| mecab.puts(text); mecab.close_write; mecab.readlines} end def split_to_words(text) words = [] pattern = Regexp.new(NECESSARY.map{|s| Regexp.quote(s)}.join('|')) mecab(text).each{|line| words << result.split.first if line =~ pattern} words end end end たぶん動かない result メソッドはなくなったので count の戻り値を直接使ってね
そうか卒論の追い込みシーズンか
お題じゃなくて宿題だろ 宿題は自分でやれよ
テキストの色と背景色をRGBで設定したいのですが、 init_colorを使うといい話を聞きました。ググっても init_colorのサンプルがットしなくてどう書いて良いのかわかりません。どなたかご教示お願いします。 require "curses" Curses.init_screen Curses.start_color Curses.init_pair 1, Curses::COLOR_BLACK, Curses::COLOR_WHITE begin Curses.attrset(Curses.color_pair(1)) Curses.addstr("Hello World!") Curses.refresh Curses.getch ensure Curses.close_screen end
int init_color(short color, short r, short g, short b); init_color ルーチンは色の定義を変更します。 次の 4 つの引数を取ります。 変更する色の番号の後に 3 つの RGB 値が続いたものです (赤、緑、青の各コンポーネントの量についてです)。 最初の引数の値は、0 と COLORS の間である必要があります (デフォルトのカラーインデックスについては、 Colors のセクションを参照してください)。 最後の 3 つの引数はそれぞれ 0 と 1000 の値の間にある必要があります。 init_color を使用するとき、 画面上にその色が発生したところはすべてただちに新しい定義に変化します。
731 :
デフォルトの名無しさん :2012/12/08(土) 20:06:23.86
たとえば Curses.init_color(Curses::COLOR_BLACK, R, G, B) すると、画面で COLOR_BLACK を指定した部分の色が 指定のRGBに変わるんじゃないの? うちのターミナルだと Curses.can_change_color? が false なので確認できないけど。
引きこもりプログラマなんですが中二の妹に家から出て散歩でもしろと言われるのですが意味がわかりません。
で?
近いうちに地震来るから 嫌でも外に出ることになる
proc = proc{ a } [1].each{ |a| p proc.call } 1を出力して欲しいのにブロックのaが参照出来ないみたいでエラーになってしまいます。 proc = proc(a){ a } と値を渡す以外の方法でブロックのaを参照する方法はないでしょうか。
>>735 [1].each{|a| proc = proc{a}; p proc.call}
Rubyだとこんなんでもいいんだな a=0 proc=proc{a} [1].each{|b|a=b; p proc.call}
>>735 いわゆる動的スコープの振る舞いを
そのままRubyで実現する方法は無いと思う
ruby1.8.7を使っています コードの中にVBAのコードを書いているのですが例えば i = 1 a = <<EOT j = i EOT のようにVBAの中にそれまでRubyで使っていた変数を入れることは不可能でしょうか
i = 1 a = <<EOT j = #{i} EOT
構文などはそれなりに覚えてきたので、セオリーのような物を掴むために.rbのソースコードを色々と読んでみたいのですが、 綺麗にまとまっていて分量もそれほど多くない(数百行?)ものでオススメはありますか? Class周りの実際の使い方がよくわからないのでそのへんが書いてあるといいです
そのレベルだと本買って勉強した方がいいんじゃないか? プログラミングRubyとか、オライリーのやつとかベストプラクティスとかそこら辺
一応たのしいRuby第三版を読んだのですが、そのあたりの本だと色々とコードが豊富なんですかね ただ使われてるプログラムも読んでみたいです
事前に自力でうんざりするほどスクリプト書いてないと、セオリーなんて見えないし教えられても身につかないぞ
スレ直近だと
>>714-715 から
>>724 の「値の受け渡しにインスタンス変数を使わないで済むならそうする」というのがあるが、これを口で言ってもピンと来ないはず
使いでがあって構造見れそうなのはNet::HTTPとかだろうか
HTTPの知識ないとわけわかめだけど
なんか自分の知識のある分野のスクリプト読んでみるのがいいかと思う
ここで一度も使ったことがなくて用途もよくわからんライブラリを「綺麗だから」という理由で勧めても、たぶん"読めない"
多少汚なくても、自分が使える分野の他人の書き方を眺めるほうが勉強になる
あとあと「あのライブラリってヒドかったのね」とわかればそれはそれで糧
>>744 プログラミングRubyはさすがに
初心者向けとは言いがたいと思う
反面教師にはcgi.rbがおすすめ
C言語に比べてどこがどういう風に簡単なの?
よりによって比較対象がCかよ… 理屈的には、Cで書かれたマクロの集合体がRubyだ Rubyスクリプトは、C言語プログラムを細かく動作指示しているに過ぎない
>>751 >理屈的には、Cで書かれたマクロの集合体がRubyだ
Cでインタープリター、コンパイラを作ってるからという意味なら、かなりの数の言語が相当するな。
C以外のプログラム言語なんてそもそもそんなもんという気はする いかに安楽効率的わかりやすくCプログラムを動作させるかの指示の集合体
>>732 正しい助言だ
散歩すると、
健康によい、うつ状態も改善する、便秘がよくなる、日光でビタミンDができる、よく眠れる、食欲が出る、
よいことずくめ
>>753 日常的な事務処理用だと、DSLの楽さは捨てがたい。
756 :
743 :2012/12/10(月) 17:48:00.07
色々とありがとうございます
ものすごく基本的なことなのかもしれませんが この処理ができるならやって、できないならスルー ってどう書けばよいでしょうかw 具体的には複数のテキスト内を順番にサーチしていき ある文字列があるならそれを取り出し、なければなにもしないという処理をしたいです if サーチした結果 = nil p 1 else p 2 end にしたら全部2になるし if サーチした結果 = "" にしたら全部1になるしで判別できません
=は代入 ==が比較 if サーチした結果 == nil とする。 あるいは if サーチした結果.nil? とか if !サーチした結果 とか unless サーチした結果 とする。
>>757 書いてみたコードを晒したら、アドバイスしやすい。
ありがとうございます 返ってくる値がnilじゃなくて""だったので h = サーチした結果 unless h == "" テキストとってくる end これでうまくいきそうです
なんで!が有るのにunlessも有るんですか? if conditionとunless !conditionって同じですよね? unlessを使うと、 ・タイプ数が多くなる ・手続き中に正常系と異常系が混在して頭の切り替えコストが増える ・二重否定が可能 なんだけどメリット有るんですか?
762 :
デフォルトの名無しさん :2012/12/13(木) 00:13:32.90
Perlから引き継いだ以上の意味はないんじゃない?
763 :
デフォルトの名無しさん :2012/12/13(木) 00:18:15.21
強いてあげるなら、 * 後置するとブロークンイングリッシュとして読みやすくなる場合がある。 * if !condition だと ! を見落としやすい (if ! condition のように間を開けて見やすくする流儀もある)。 尚、unless には else 節を付けないほうがいい。 それこそ二重否定でわかりづらくなる。
!を見落とすって経験上ないなぁ なんかJavaとかでifに常に{}書けという主張とやや似てる
765 :
デフォルトの名無しさん :2012/12/13(木) 00:34:01.73
perlintro(1)には > This is provided as a more readable version of "if (!condition)". とだけ。
[1,2,3].each_with_index do |e, i| puts "#{i+1} / #{SIZE_OF_ARRAY}" end とかしたいだんけどSIZE_OF_ARRAYを表す組み込み変数とか無いの? array = [1,2,3] array.each_with_index do |e, i| puts "#{i+1} / #{array.size}" end だと変数への代入が増えて何かダサイ
なぜイレテータのローカルスコープにselfちゃんが居ないのか…
769 :
デフォルトの名無しさん :2012/12/13(木) 01:24:16.83
[1,2,3].tap {|array| array.each_with_index {...} } # 全然解決になってない:)
>>766 おまえのような雑魚が同意できなかったところで誰も困らない
Larryが使いやすければ、それでいい
class Enumerator def with_size(&blk) return to_enum(:with_size) unless blk ary = to_a size = ary.size ary.each{|args| blk[*args, size] } end end %w(a b c).each_with_index.with_size{|s,i,n| p [s,i,n] }
どなたか教えてください! rubyでプログラムを実行し、表示させた結果をメモしないままターミナルを閉じてしまいました。 表示履歴を見る方法はありますか?
ターミナルがログを保存する設定にでもなってない限り方法は無い 入力したコマンドラインの履歴でよければ$HOME/.bash_historyとかに入ってる可能性があるけど
レスありがとうございます。 コマンドラインじゃなくて、コマンドラインで実行させた結果が知りたいです。 詳しい人に初期設定してもらったので、ひょっとしたらログを保存する設定になっているかもしれません。 その場合、どう入力したらいいかご存知でしょうか? ググってもググってもよくわからないんです・・・!
以前、なにかの拍子に全履歴がのってるファイルを開いて、 「ほー」と思った記憶があるんだけど幻だったのかな・・・
>>776 その詳しい人はある日出社しなくなったまま行方不明になってしまったのでなんとも・・・
今後はちゃんと保存しておくよう、教えていただいた方法で設定しておきますね、ありがとうございます。
今回はもう諦めて上司に土下座することにします。
これを機にいろいろとrubyを勉強しよう、そうしよう・・・
last
Ruby/Tkってどう?
rakeの引数がキモすぎるな… これならシェルの引数をそのまま渡した方がまだましだわ。
「rake 引数 きもい」でググると結構でてくるな。
argsの挙動がキモいな。 なんかC臭さの残る仕様だわ。
現状環境変数使うのが正解だな。 railsのrakeもそうなってるしな。
自分で作った例外クラスをスロー&キャッチする時に、再利用性がなく、その処理内だけで使うような例外クラスで、わざわざ大げさにclass Hogeとか定義するまでもないような場合に、ちょろっとその場で定義して使うような機能はないんですかね? ↓おおげさ class HogeException < Exception end begin raise HogeException.new rescue HogeException puts "うわー" end ↓こんな感じで書きたい begin raise :hoge if hoge raise :fuga if fuga rescue :hoge puts "うわー" rescue :fuga puts "ぬわー" end
ラベル付き汎用例外、みたいな
>>784 Rubyにおける例外クラス定義とraiseとrescueはおおげさでもなんでもない
Javaのように管理しようとすると破綻するぞ
濫用するとかっこわるいぞ、みたいなことは言われてるがな アプリケーションエラー以外の例外クラス名を思いつかなくて事前にifで避けられるならifで避けたほうがマシ
>スロー&キャッチ case exp = catch(:exp) do throw(:exp,:hoge) if hoge throw(:exp,:fuga) if fuga end when :hoge then puts 'うわー' when :fuga then puts 'ぬわー' end
メッセージで分岐すれば flag='うわー' begin raise 'うわー' if flag=='うわー' raise 'ぬわー' if flag=='ぬわー' rescue Exception => ex case ex.message when 'うわー' puts ex.message when 'ぬわー' puts ex.message end end
>>790 最早なんのためになにを避けてたんだかわからなくなってるな
>>784 > ↓こんな感じで書きたい
> begin
> raise :hoge if hoge
> raise :fuga if fuga
> rescue :hoge
> puts "うわー"
> rescue :fuga
> puts "ぬわー"
> end
元がコレだからな
なんで例外使いたいんだか
気を遣って単純な例示にしようとしたら「これならそもそもいらないんじゃね??」みたいな反応を返される悲しい例
gotoが有れば解決
class SymbolException < Exception attr_reader :sym def initialize(sym) @sym = sym end end class Symbol alias old_match === def ===(obj) return old_match(obj) unless SymbolException === obj obj.sym == self end end def raise(*args) Kernel.raise *args unless args.length == 1 && Symbol === args[0] raise SymbolException.new(args[0]) end begin raise :hoge rescue :fuga p "fuga" rescue :hoge p "hoge" end こんなの実装できるとかRuby変態だろ…
>>795 >こんなの実装できるとかRuby変態だろ…
偽装Lispだからな。
おまいらの会話、高度過ぎて付いていけない。 おまいらなら、余裕でRuby GOLDが取れそうだな。
sendメソッド使いまくるソースが嫌い なんでもかんでも重複を省こうとする アホちゃうかと 読みやすさ、メンテのしやすさ、手間、バランスを考えろ
再利用するってことは、依存が増えるってことだからな。 そこが分かってない。
Rubyって def doya if a == 1# えー || b =~ /hoge/ # びー || c !~ /moge/ # しー || d.empty? # でー || !e.nil? # いー then puts "わーい" else puts "ぐはあ" end end とか書けないんだ。
↓だと各条件にコメントが書けない 一行で書けるブロックコメントも無いしなぁ def doya_sub if a == 1 || b =~ /hoge/ || c !~ /moge/ || if d.empty? || !e.nil? puts "わーい" else puts "ぐはあ" end end じゃあ↓こうする? こりゃりたーんりたーん五月蝿いなぁw def doya puts doya_sab ? "わーい" : "ぐはあ" end def doya_sub return true if a == 1# えー return true if b =~ /hoge/ # びー return true if c !~ /moge/ # しー return true if d.empty? # でー return true if !e.nil? # いー return false end
>>800 はい、Ruby的には判断できませぬ
インデントとか揃わなくてかっこ悪いとたいへん不評なのですが
if
cond1 || # when 1
cond2 || # when 2
cond3 # when 3
then
のようにorを後ろに書いてくだされ
あ、ifで改行しちゃった if cond1 || # when 1 cond2 || # when 2 cond3 # when 3 then
rubyのbegin-endが嫌いで{}に変われば良いのにって思ってたけれど、 groovyと比較するとbegin-endの方が目に優しいね
わざとレトロなトークンを使うことで 記号含有率を下げると同時に、`波括弧を目立ちやすくする という設計意図があるらしい
文句のほとんどがifの部分で、文句の本質は「俺の知ってるCと違う」なので、礼儀正しく無視されてきたという経緯はないでもない トークンとして長くて大きくて実質"予約語"として命名余地を圧迫してることは否定しないが、使用中の見易さそのものは大差ねえよ
インデントがひどいと{}のほうがbegin-endよりまともに読めそうだけどまともにインデントすればいい話か
rubyのbegin-endは、Javaのtry〜、であって、{} じゃないぞ。
rvmで1.8系と1.9系といくつかのバージョンをインストールしてみたんですが スクリプトから特定のバージョンを指定で実行するようにしたい時は #!/Users/username/.rvm/rubies/ruby-1.9.2-p290/bin/ruby とかしないといけないんでしょうか。 これだとバージョンを上げるとスクリプトを修正しないといけないので、 #!/Users/username/.rvm/rubies/ruby-1.9 とかで指定できて、rvmで自動的に最新の1.9系へのシンボリックリンクがはられる、 みたいのができると便利だと思うんですけどできないですか?
810 :
デフォルトの名無しさん :2012/12/16(日) 13:24:54.53
>>809 rvm に 1.9系の最新 みたいな概念はないんじゃない?
Ruby1.9.3です 定数のように値を後で変更できない配列やhashを作成することはできませんか?
irb> a = [1,2] irb> a.freeze irb> a << 3 RuntimeError: can't modify frozen array irb> p a [1, 2] ただ、実際のところはそれほど強制的な効果はなく、わりと嫌われてもいる ユーザーに値を変更して欲しくないのなら、マニュアルにそう書くか、そもそも自己責任で放置するほうがよい
Rubyではクラスやメソッドやデータ構造を他人が変更しうるのは「当たり前」で、 変更したらうまく動作しない可能性があるのも「当たり前」 「これを外部から変更されたらプログラムが誤動作するので変更を禁止したい」 とか過保護または過敏に考える必要はない
禁止したいときはドキュメントに書く
Refinementsが入れば改善されるんじゃないの?
酷い知ったかを見た Railsのソース見てもfreezeぐらいたくさん出てくるのに。
817 :
デフォルトの名無しさん :2012/12/18(火) 04:35:32.86
私は宝石を作っている。私はSTDLIBにだ "multi_json"依存関係の代わりに "json"を使うべきでしょうか?
>>811 こういうのじゃダメなの?
class << FOO=Object.new
def bar
1
end
def baz
2
end
end
自分の用途ではfreezeでよさそうです、ありがとうございました
ここを参考にして
ttp://qiita.com/items/348195ef6f797af08010 class Counter < BasicObject
def initialize
@count = 0
end
def plus(n)
@count += n
end
def method_missing(*a)
@count.send(*a)
end
end
みたいな感じのクラスを作って思い通りの動作は得られたのですが、
インスタンスの.classがFixnumになってしまうのがどうにも・・・
他にうまい実装方法ありませんかね?
ところで、対応するのは class メソッドだけでいいの? ancestorsは? kind_of? は? instance_methods で plus が出ないけどいい? ということで選んで移譲するのがいいように思う てゆーか Object や Module のメソッドを使いたいなら BasicObject の直接継承なんてやってはいかんぜよ
実際問題としてやりたいのは class Counter attr_reader :count def initialize @count = 0 end def plus(n) @count += n end end こういうクラスがあったとして counter = Counter.new counter.count #こうじゃなくてcounter単体で@countの値を得たい つまり.countを省略したいと言うだけのことなのです 委譲を使って下記のようにも書けたのですが・・・そういうことではないんですかね? class Counter < DelegateClass(Integer) def initialize super 0 end def plus(n) __setobj__ self + n end end
便乗して質問になるんですが pでの表示はinspectとか、文字列に埋め込んだりするとto_sとかが呼び出されて変換されますが 足し算などでは勝手に何かメソッドを呼んでくれたりはしないんでしょうか?
824 :
デフォルトの名無しさん :2012/12/19(水) 23:57:44.76
足し算に使うと整数100のように振る舞うクラス。 class C # C.new + 10 #=> 110 def +(other) 100 + other end # 10 + C.enw #=> 110 def coerce(n) [n,100] end end
825 :
823 :2012/12/20(木) 01:35:31.25
>>824 なるほどcoerceというのが呼ばれるんですね
ありがとうございました
826 :
デフォルトの名無しさん :2012/12/20(木) 22:53:23.66
分散並列処理フレームワークありませんか?
しょうもない質問で申し訳ないのですが、スクレイピング出来るコードをサーバー上に起きました。 ruby ファイル名.rb で必要な情報一覧はLinuxコンソール上から叩くと取得出来ています。 これをブラウザ上にテキスト形式でどの様に表示させればいいのか解らず、sinatraと言うフレームワークもためしましたが上手く行かず、、、 多分凄い簡単な気もするのですが全くわかりません。 テキストにしたいと言う理由は実行結果をjson形式の書式に無理やり変えている為です。require jsonは利用してません。DBは利用してません。 プログラミング自体初心者です。。
君は日本語も初心者のようだね
>>829 有り難うございます。
:4567で起動はしてるのですが、Linuxのコンソール上には結果は出ていてエラーもありません。
ですがブラウザは真っ白な状態になっていてソースを表示しても何も入ってないと言う感じです。
スクリプトの結果をコンソールと同じ様にしたいだけなのにそれがどうしても出来ません。
>>829 ちなみにコードは
get '/' do
ここにまるごと張り付けてます。
end
ハッシュを利用しないといけないのであればなぜそうなのかが公式見ても理解出来ません。。。
クラスタマシン使った方が安上がりになりそうなことまで、hadoopつかってる企業とかありそう
>>831 コンソールへの出力にputsとか使ってるんだろう?
putsは引数の文字列をlinuxコンソールに出力するメソッド(本当は違うけど)
今現在コンソールに出力されてる文字列をブラウザに送るにはどうすればいいかは
829に書いてくれてあるのをみればわかるだろわかるよなわかってくれよそんくらい
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
gs = TCPServer.new(12345) s = gs.accept() s.puts("あ") でクライアントに"あ"が送信されますが送信文に改行\nを加えるとそこで送信文が終わってしまします つまりs.puts("あ\nい")とするとクライアントは"あ"しか受信してくれません なんとかなりませんか
windowsコマンドプロンプトirbで無限ループに入るとCtrl+C押しても止まりませんよね 皆さんどうしていますか
いままで見たことない exit も打てなくて C-c も使えないということ? じゃ、GUIのタスクマネージャから終了させる コマンドラインだったら、別の DOS プロンプトから tasklist で 実行時期が早めの DOSプロンプト(cmd.exe)の pid を調べて kill する
840 :
デフォルトの名無しさん :2012/12/23(日) 08:32:59.15
>実行時期が早めの DOSプロンプト(cmd.exe)の pid を調べて kill する 嘘を教えるな irb.exe もしくは ruby.exe の pid を調べて kill する
841 :
839 :2012/12/24(月) 00:28:12.80
素で間違えてしまった フォローありがとう
require 'net/smtp'
してrubyでメールを送ることに成功したのですが、宛先がgmailのときだけ
/usr/lib/ruby/1.8/net/smtp.rb:942:in `check_response': 553 5.7.1 <
[email protected] >... Relay operation rejected (Net::SMTPFatalError)
from /usr/lib/ruby/1.8/net/smtp.rb:911:in `getok'
from /usr/lib/ruby/1.8/net/smtp.rb:854:in `rcptto'
from /usr/lib/ruby/1.8/net/smtp.rb:835:in `rcptto_list'
from /usr/lib/ruby/1.8/net/smtp.rb:833:in `each'
from /usr/lib/ruby/1.8/net/smtp.rb:833:in `rcptto_list'
from /usr/lib/ruby/1.8/net/smtp.rb:654:in `sendmail'
from ./mailtest.rb:26:in `sendmail'
from /usr/lib/ruby/1.8/net/smtp.rb:526:in `start'
from /usr/lib/ruby/1.8/net/smtp.rb:463:in `start'
from ./mailtest.rb:25:in `sendmail'
from ./mailtest.rb:68
となって失敗してしまいます。対処法をご存知のかたは教えて下さい。
843 :
842 :2012/12/28(金) 11:51:38.09
すみません smtpの認証パラメータを設定していなかったのが原因でした
ファイルを読み込んで特定の文字列を別の文字列に置き換えるようにしたいです。 test01 うんこ うんち う○こ のように書かれているとします。 このうち「う○こ」を「うんこ」に置き換えたいのですがどうすればいいですか? ファイルに直接変更を加えるということです。
845 :
デフォルトの名無しさん :2012/12/31(月) 10:37:49.71
ruby -i -p -e '$_ に対する置換処理' 対象ファイル
>>844 例
1.ファイルを一時ファイルにコピーする。
2.もとのファイルの名前で新しいファイルをつくる(書込み用)
3.一時ファイルを1行ずつよんで、該当する部分を変更して書込み用ファイルに出力する。
sub(pattern, replace) 文字列中で pattern にマッチした最初の部分を文字列 replace で置き換えた文字列を生成し返します gsub(pattern, replace) 文字列中で pattern にマッチする部分全てを文字列 replace で置き換えた文字列を生成し返します リファレンスマニュアル
`sed -i -e "s/う○こ/うんこ/g" #{ファイル名}`
行中の文字列置換だったらsedがばっちりその用途じゃん rubyで考えるよりも早いんじゃない
とおもったらすでに書かれていた
Windowsにはsedはないから
>>847 の方法を使う必要がある
フィルタ的に使うのに意外と
手間がかかるよねrubyは
windosでのsed実装を探したほうが早くねってなる流れ
時代はWindowsw
>>852 Windows版なんて聞いたことないし、あったとしても
どこの馬の骨が作ったかわからないフリーソフトレベルだろうから
大事なテキスト処理は任せられないなあ
多くのユーザーに揉まれたUnixツール群は偉大だ
855 :
デフォルトの名無しさん :2012/12/31(月) 20:36:15.57
cygwinくらい知ってろよ。
rubyでコピーしないでrenameできる
>>854 windowsでコンパイルすればいいだろ。バイナリしか提供されないノンフリーソフトじゃないんだから。
GNU sedみたいなオプソのsedがあるからな
シフトJISとおもってたら、機種依存文字、外字が混在してたりする
860 :
デフォルトの名無しさん :2013/01/01(火) 03:45:47.57
死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が 死ねゴミ共が
あけおめ
862 :
【大吉】 :2013/01/01(火) 08:47:45.99
Python 最強
>>859 俺も今そこで手が止まってる
nokogiriで特定の動的ページから複数のサイトをランダムにスクレイピングしたくて
パースする時にファイルの宣言文を見てエンコードする文字コードを自動で決めてくれるnokogiriの仕様に依存してるわけだけど
shiftjisエンコードされてて機種依存文字が入っていた場合だと何故かエンコードエラーが出るんだよなー
解決策として
・nokogiriが使ってるiconvを機種依存文字対応のものにする
・Mechanize経由でパースすれば多分大丈夫
みたいのが調べて出てきたけどiconvってそもそも何ぞや?
標準添付か組み込みのライブラリで解決できる方法は無いんか?とか
理解しないといけないことが多すぎて何か腑に落ちなくてもやもやイライラしてる
三が日までに何とかしないと社内で無能扱い確定だ
年明けに何でこんなことやってるんだろ…
あけましておめでとう
日本 Perl 海外 Python 何でこんな中途半端なRubyなんて使ってるクズがいるんだろうな
LL戦争前のMatzの布教と宗教性だな Ruby厨がMacBook持って萌えアニメやOSS信仰してるあたりで反吐が出る iphoneいじってRuby会議ですか? くだらねー小さい技術ネタで盛り上がって何も生産性のない話題っすよね railsもオワコンだし Rubyはオワコンなんだよ その現実を受け止めよう 現実が変わることはない
867 :
デフォルトの名無しさん :2013/01/05(土) 11:34:12.67
反吐吐いて脱水症状でそこらへんで一人で野垂れ死んでれば? ここでそうやっていくらdisっても、現実は変わらないよw 現実を受け止めようw 現実が変わることはないw
↑w
アプリ起業 iPhone C#まとめ Ver 1.5 http://tinyurl. com/9w97424
870 :
デフォルトの名無しさん :2013/01/06(日) 17:04:45.07
自
871 :
デフォルトの名無しさん :2013/01/06(日) 17:05:16.48
分
872 :
デフォルトの名無しさん :2013/01/06(日) 17:24:46.14
で
873 :
デフォルトの名無しさん :2013/01/06(日) 17:25:26.68
調
874 :
デフォルトの名無しさん :2013/01/06(日) 17:25:57.72
べ
875 :
デフォルトの名無しさん :2013/01/06(日) 17:27:08.68
ろ
876 :
デフォルトの名無しさん :2013/01/06(日) 17:42:53.52
ゴ
877 :
デフォルトの名無しさん :2013/01/06(日) 17:43:40.64
ミ
878 :
827 :2013/01/11(金) 21:44:54.56
879 :
827 :2013/01/11(金) 21:46:29.62
長過ぎて書き込めず上記の続きです。 href = alink.attribute("href") URI.parse(href).query.split(/&/).each do |str| strs = str.split(/=/) link = strs[1] if strs[0] == "q" "asdfasfdasfdafd" end html = alink.inner_html end next if "#{href}" !~ /^¥/url/ @@_beg ="{" @@_dom = "¥"domain¥":¥"#{link.split("/")[2]}¥"," @@_url = "¥"url¥":¥"#{link}¥"," @@_t = "¥"title¥":¥"#{html}¥"" @@_clo = "}," end @@_null = "{¥"null¥":¥"null¥"}" @@_close = "]" res =[start,@@_url,@@_t,@@_clo,@@_null,@@_close] end 笑っちゃう様なコードかもしれませんが、ここまで来るのに一苦労でした。難しいですね。 またこの状態だと1ペアの結果しか返せずコンソールに表示される10ペア全ての結果を返したい感じです…
880 :
デフォルトの名無しさん :2013/01/11(金) 22:27:09.41
sinatraだっけ? rackup すると vendor/bundle/ruby/2.0.0/gems/rack-1.4.3/lib/rack/builder.rb:129: in `to_app': missing run or map statement (RuntimeError) って言われるんだけど? あと、なんでクラス変数(@@....)を使う?
>>880 はい、sinatraで試しています。
私の環境ではエラーが出てないのですが、、
クラス変数ですか、
インスタンス変数?を使ったつもりでした 汗
>>881 URI.parse....each のブロックで @@_xxx に結果を放り込んでるけど、これが毎回上書きされてるから最後に解析された結果しか出力されな
い。
a = 0; 10.times { |i| a = i }; [a]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
にならないのと一緒で。
思い通りの動作にするなら
a = []; 10.times { |i| a.push i }; a
みたいに配列に放り込むようにすればいい
あと、今回の場合、クラス変数(@@foo)は勿論、インスタンス変数(@foo)も使う必要ないで
>>882 有り難うございます!
ここのブロック周りはコピペを弄ってる状態に近くてアドバイス内容の意味までは的確に理解出来ませんが今から解読しながら頑張ってみます。
全く先に進めなかったのでこれでまた前進できるかもしれません。
884 :
827 :2013/01/12(土) 01:35:21.11
>>882 今ソースを見ながら考えてます。
ですが具体的にどこに何を書くのかさっぱり分らず
この感じだと今迄と同様一日以上悩んでもよく分らないパターンになりそうです。
もし宜しければ、参考になりそうなホームページ等あったら教えて頂きたいです。
今まで調べたキーワードは以下で、それに関連するページは一通り見てきました。
変数 式展開, インスタンス変数 展開, 配列展開, 連想配列, 配列 変数 展開
既に関連ワードがあったら見たけど理解出来てないと言う感じです。
何が分らないのかが分らない感じも多少あります。Orz.
885 :
827 :2013/01/12(土) 04:50:36.39
こんなのサラサラ書ける人達は凄いな。。 今日は寝よう。。
コピペして動いたら満足して次にいくんじゃなくて 何故それで動いてるのか1行1行理解して進まなきゃダメやで
いちばん大事な ・ メソッドの作り方使い方 が入ってない気がする 行数が10行超すか、製作日数が1日を超したなら、一見冗長になったように感じたとしても最低限メソッドにするべき def ユーザー入力からキーワードを抽出して返す end def ぐぐってHTMLを返す(keyword) end def HTMLをNokogiriでパースして生データにして返す(html) end def HTML由来の生データをHTML出力用に整形する(data) end def 受け取った文字列をRackで表示するだけ(output) end keyword = ユーザー入力からキーワードを抽出して返す html = ぐぐってHTMLを返す(keyword) data = HTMLをNokogiriでパースして生データにして返す(html) output = HTML由来の生データをHTML出力用に整形する(data) 受け取った文字列をRackで表示するだけ(output) なんも考えてないメソッド構成だが、これのいいとこはスクリプト作成中にいちいちブラウザから入力したりGoogleにアクセスしたりしなくてもいいように作るのが簡単なとこだ # keyword = ユーザー入力からキーワードを抽出して返す # html = ぐぐってHTMLを返す(keyword) html = File.open(事前にHDDに保存していたHTMLファイル,'rb'){|f| f.read} Nokogiriのパースの部分がうまくいってない気がするなら、スクリプト途中でdataをpなりputsなりして表示させて確かめ、exitで終了させればいい data = HTMLをNokogiriでパースして生データにして返す(html) p data exit
モヤモヤした脳内からこねくり回すんではなく、処理を小さな単位の"言葉"でまとめる癖がつくので メソッドの作成はRubyの基礎覚えたら極力早いうちからやるのがおすすめ
10行で1メソッドってやり過ぎじゃない? メソッドだらけになっちまう。せめて100行で
クラスやモジュールの作成云々はずっとあとでいいな
「自作メソッド多過ぎ! わけわからん! 耐えられん!」とか思ってから勉強すると
実際の困難を解決する手段としてすんなり覚えられる
オブジェクト指向とかインスタンスとかそのへんの概念はとりあえず飛ばす
ひとまず、メソッドをまとめて一気に(または場合分けで)順次起動するシステムとしてクラスを使う
>>889 >>887 も言ってるが、処理がごっついかどうかにもよるかと
自前で正規表現して自前で埋め込み文字列するだけならメソッドにする必要はないかも
今回のようにopen-uriでWebアクセスしたりNokogiriで面妖な抽出をしたりHTMLの変なデータ作ったりRackでDSL()する場合は
元スクリプトが10行程度でもいくつかメソッドにしたほうが気楽かもしんない
本当の"書き捨て"のスクリプトなんてのはそうそうあるもんじゃない、特に初学者
結果でなくてまず設計でメソッドわけろよ。
昔はコンソールの行数で25とか40行が基準だったな。
>>892 コメント、def、内容、endを1行で書くのか。
896 :
デフォルトの名無しさん :2013/01/12(土) 16:40:11.08
「行数が多くなったからメソッドに」なんてのは分かってない証拠
その通り。プログラミングは情報科学課程必須。素人が作っていいものではない。
>>894 いやattr_readerの本質的な動作を知らなかった頃にはやった事はあるけど、そういう意味じゃねえw
設計関係なくスクロールしなきゃいけないくらいだったら、内部的にわけられそう。
ツクラーですが やっと・・・やっとeach文が使えるようになった すごい便利、すごい嬉しい、 一個づつ処理していた悪夢からやっと開放された達成感夢がひろがりんぐ! でもreturnがワケワカメ どう便利なのかもワカラン けど沢山つかわれてるから便利そうな感じはする eachの比じゃないくらいそこらじゅうで使われてる。でも意味わからん。 return分の魅力を教えてください・・・やり方は自分で調べます未知すぎてモチベが
RGSSはRubyだけどRubyじゃないからなあ 扱う環境が特殊でちと説明し辛い
eachは値返すんだからおおむね文とは呼べない(式と言われてもうーんって感じだが) とりあえず、Rubyでeach文と書いてある解説があったらそれは似非で君にとって有害文書だから即燃やせ each文という言葉を知っているということは他の何らかのプログラミング言語を知っているということだ それでいて式と文と制御構造の違いに関心を払わないということは、あまりに危険な兆候
return文が分からないというのは構造化プログラミングのメリットが分からないってことじゃないの?
必要性を感じないならそのまま使わずに書き続けていけばいいと思う
そのうちちょっと長いプログラム書こうと思ったらすぐ欲しくなるだろうし
あとRGSSはこっちで聞いたほうがいいんじゃない?
http://www.tekepon.net/fsm/modules/reqbb/ まあ言語からちゃんと勉強しようという意気を持った人をスクリプト乞食の掃き溜めに送り込むのは心苦しいけどw
904 :
デフォルトの名無しさん :2013/01/12(土) 21:43:45.66
やりかたが分からないと言ってみる
905 :
デフォルトの名無しさん :2013/01/12(土) 21:45:03.70
二ちゃんねる初心者だから来たけど全くやりかたわからないです (´;ω;`)
>>901 RGSSだけやりゃ十分的な話はよく聞きます
>>902 手当たりしだいググって○文という表現が脳に浸透してしまたヨ
>>903 はいメリットというか何してんの状態で、必要性以前の問題ですハイ
でも理解してないとスクリプト改変する時とかに何してるかさっぱりで
必要性としてはそこらへんの理由です。なにが良くてreturn乱発してんの?という疑問が糸口になるかなぁと
>>906 メソッド内で最後に評価された式が戻り値となるRubyにおいて
returnの存在理由はメソッドの中断、もしくは式が戻り値であることの明示にある
returnは「戻す、返す」という意味でもあるので戻り値の明示としやすい
例えばただ変数だけ書かれたなら戻り値だと皆判るが
最後の式が代入式など、副作用を伴う場合には
副作用だけが目的なのか、戻り値まで意図してるのか判りにくい
なので最後でも敢えてreturnと書いて
「この式は戻り値まで意図してこの式を書いたのですよ」
との意思表示としたりとかね
また他の言語出身者なら、他言語には戻り値にreturn必須の言語もあるので
return書かないと自分で分からなくなる、という人もいると思う
中断については、Rubyには処理の中断方法が様々にあって
場面に応じて使い分けるものだと思う
・ループやイテレータを終了するbreak
・式を評価しそれを戻り値としてメソッドを中断するreturn
・例外を発生させて処理を中断するraise
・例外を使わないことで「異常ではない大域脱出」を行わせるcatch/throw
ネストした外側のループを抜けるのはcatchで事足りるが ネスとした外側のループをnextしようとすると途端に酷いコードになる。
mod_rubyってどこで手に入りますか?
910 :
デフォルトの名無しさん :2013/01/13(日) 18:43:00.41
rubyのencodeではまった invalid、undefオプション指定してるのに何故かArgumentError invalid〜が出る 色々調べたらどうやら文字列の文字コードとencodeで指定した文字コードが同じだったら変換処理してくれないんだな サポート終了したiconvで事なきを得たけどこの仕様はちょっと酷すぎだよrubyたん…ふぇぇ
911 :
デフォルトの名無しさん :2013/01/13(日) 20:50:36.67
どなたかRuby 1.8.7で1.9.xのString#encodeとか String#force_encodingを使えるようにする方法をご存じない ですか?。スクリプトを1.8系にも対応させたいのですが、 修正が要るのはそこだけなので。
>>912 特にはないです
if str.respond_to? :force_encoding
str.encode(...)
else
require 'nkf'
NKF.nkf(...)
end
のようにひとつひとつ自前で書くしかない
実際は MyModule::Util.encode_string のようにメソッドにしてそれに任せるが、
エンコーディング処理したいとこ全てに挟むという本質は同じ
かなり醜くなることを覚悟する必要がある
半年まって、1.8.7サポートを切りすてるのが楽なのでは。どうせもうすぐ終わりだし。
915 :
912 :2013/01/14(月) 14:35:37.27
>>913 , 914
どうもです。1.8.7に対応させておくとMac OSXに標準で
入っているから、コマンドラインアプリとして使ってもらい
やすいんですよね・・・。
やっぱり汚くいくしかなさそうです。
916 :
デフォルトの名無しさん :2013/01/14(月) 15:31:50.86
MyModule::Utilとかに置くよりはStringにencodeメソッドを追加してしまうのが Ruby的ではあろう。(当然必要な範囲での実装に限って)
917じゃないけど、encode を見てるライブラリが発狂するとか、そーゆう系で苦労するので小手先な回避はやめてほしい…。
920 :
827 :2013/01/14(月) 21:11:34.56
回答頂いた方有り難う御座いました。すぐにはnokogiri周りを理解してやるのが難しく他の やり方を模索し一旦ファイルへ書き出す所まで出来ました。メソッドも一つ作ってみました。 今はそのファイルの中に入ったものを表示させようとしてます。 # 前回の続きです。 next if "#{href}" !~ /^¥/url/ @@_beg ="{" @@_dom = "¥"domain¥":¥"#{link.split("/")[2]}¥"," @@_url = "¥"url¥":¥"#{link}¥"," @@_t = "¥"title¥":¥"#{html}¥"" @@_clo = "}," @@_file_name = "result.txt" File.open(@@_file_name, 'a'){|file| file.write "#{@@_url}#{@@_t}¥n" } end def res f = open ("result.txt") puts f.read f.close end "#{res}" end 最後に開いたファイル内確かに文字列あるはずなのですが、相変わらずブラウザが真っ白です。 メソッド内でputsを外しても同様の結果になってしまいます。
だから…って誰も言ってないか とりあえずはSinatra使うな そのせいで(あなたにとっての)ブラックボックスになっている まず、スクリプトに値を変数でベタ書きしておいて、それの加工データ文字列をコンソールに表示するスクリプトを作れ 完璧に動作することがわかったら、次は、Sinatraによる、Webブラウザ経由のユーザー入力をそのまま出力するスクリプトを作れ それもできたら、そのSinatraスクリプトのユーザー入力データをコンソールスクリプトのベタ書き変数に代入し、 コンソールスクリプトの加工済みデータ文字列をSinatraの出力に渡せ 「ユーザーの入力をSinatra経由で受け取り、内部で加工して、SinatraでWebブラウザに表示する」スクリプトの完成だ
>>920 どこぞから拾ってきたソースつなぎ合わせてプログラム作るのは結構だが
言語の基礎くらいは理解しておかないと動くものは作れないよ
Sinatraは HTTPとCGIに熟知した人が「手順めんどくせえ!」と思って楽するために使うものであって HTTPとCGIを知らない人が「勉強めんどくせえ!」と思って楽するために使うものではない
924 :
827 :2013/01/14(月) 22:10:29.00
皆さんレスありがとうございます!
>>921 Sinatraは
>>923 さんも言ってる様にちょっと私のレベルで使うべきものではない
んですね。汗 後は文字列周りの処理も全然理解出来てないと痛感します。
以前他の方には変数を文字列として展開、で前回表示出来る様になったものの今回
メソッドを作って展開しても全く文字が出て来なくて違いも分らない感じです。
今の自分にはおっしゃる通り1つずつつくって試していくしかないですね。
>>922 まず先にやりたい事がどうゆう方法で出来るのか見て後から1つずつ読み解いて行こうと考えてました。
基礎は本も買って学習してますが、今回やろうとしてる事はちょっと今のレベルからだとかなり難しい
状況なんだなと思ってきました。
>>923 それは貴重な意見です。railsだと当然難しすぎるし、もっと簡易な感じでと探しまわった結果
sinatra見つけたのですが、本来知ってる方が使うべき物だったんですねありがとうございます。
925 :
827 :2013/01/14(月) 22:46:49.57
すいません、報告です。基礎…基礎…と色々考えてたら昔は基礎と言えば掲示板 と言うのは聞いた事あるな…と思い掲示板の作り方を見ていた所そこにヒントが ありました。 f = open ("result.txt") msg = f.read f.close "#{msg}".to_json msgを用意してその中に f.read を入れて最後(ここは適当になんとなく入れました) .to_jsonとこの様な記述に変えたところ正常にデータを取得する事が出来ました。 どんどん上書きされてかない様に一時ファイルに作成するようにすれば一旦は意図した 動作出来そうです!皆さんから色々言われてここに行き着けたので有り難う御座います。 これでやっと時間が取れるので指摘頂いた全てバラして順に処理をさせるやり方等 これから順に学習して行こうと思います。 (この期間でどんな形でもいいからやりきる!と当初自分へ言い聞かせてプログラミングを開始した為)
いつも逃げてるといざというときに踏ん張りが効かない
>>915 その調子だと将来OSXのRubyが1.9に移行したとき地獄を見ると思う
今からrvmを入れてでも1.9で書いてみるべき
PHPのpukiwikiかdokuwikiが定番ですが Rubyで定番のwikiを教えてください
定番でもなんでもないが、しばらく無くなりそうにないのはGollum Githubのwiki部分だ Ruby/Railsでwikiエンジンってあんまり活発じゃない印象
なるほど、おとなしくpukiwikiで乗り切ります
931 :
デフォルトの名無しさん :2013/01/15(火) 13:24:20.32
一時期hikiがよく使われてたけど最近放置されてるしなー
"Rubyにまつわる"からといって、Ruby製のものを使わなければならないということはない PHP製が機能的で便利なのなら、PHP製のアプリケーションを使えばいい なんでもかんでもRubyというのは残念な人のやること
まあ、研究目的というか、とりあえずRubyで作ってみようぜみたいなのはアリだと思うけど、 自作でもないものを無理して使う必要はないよね 地元の農作物で無理しておいしくない加工品作ってる自治体のようだ 農作物は品種によって「向く料理」「向かない料理」があるので、素直にそれに従え
そして最終的には「Ruby製は全く役に立たない」という結論に至らせようとするのが
>>932
935 :
デフォルトの名無しさん :2013/01/15(火) 18:51:38.34
なに見えない敵と戦ってるの。
>>935 Rubyスレにはプログラミングをしたことのない人が居座っています
自分がレスできる話題や流れを虎視眈々と狙っています
いいかげん慣れてください
938 :
デフォルトの名無しさん :2013/01/16(水) 01:51:41.33
Rubyに固執する必要はないってのは正論中の正論だけど 初心者が最初に触った方がいいって意味での優劣だったらPHPよりRubyじゃねーの PHPって楽だけど型付け糞だし書いててストレス溜まるしコード書く楽しみが得られない といいつつ仕事ではRubyは滅多に使わずPHPの案件が多いというジレンマ
939 :
デフォルトの名無しさん :2013/01/16(水) 05:04:46.80
windows版rubyで、特殊フォルダのパスを取得するにはどうすればいいのですか?
>>938 どの言語がいいか、というのは不毛な罵り合い(論争ですらない)になりやすいから余り関わりたくないが、
言語xxxが気に入ってる者の数 * 初心者をアシストする者の割合、が多いかどうかが結構重要だと思う。
かく言う自分も、日常的に使う言語は5~6種類あるんで、時々初心者スレ見て、疑問への回答を書き込んでる。
理解していたつもりのことが、サクッと説明出来なかった時なんかは、結局は自分にも役立ってる。
お仕事で人気がある点、書いてて楽しくないし実にならない点で PHPとVBは双璧ですからな
具体的にRubyのどこが楽しくてPHPのどこが楽しくないの? こういう話はたまにネットで流れてるけど具体的に聞いた事が一度もない
そりゃ具体的に説明しても難癖つけられるからみんな諦めたんだよ
944 :
デフォルトの名無しさん :2013/01/16(水) 13:05:23.00
変数にいちいち$、センスが驚くほどない関数名、メンバアクセスの面倒さかっこ悪さ、 デザイン兼用のPHPerの尻拭いをさせられる…細かいけどこういうとこでいちいちストレスが溜まる
>>943 難癖(本人的には論破)するのが目的だからな
する気も起きんわ
>>945 >難癖(本人的には論破)するのが目的だからな
そういうのを惨めだと感じない人は、感覚が違うんだから無視推奨。
なにか得られるかもと思ってスレ覗いてる大勢が居るだろう、ぐらいの気持ちで普通に書き込めばいいんじゃまいか?
phpとか後付けオブジェクト指向言語は不完全で使いにくい。オブジェクト指向設計しない人にとっては何の問題もないんだろうけど。
PHPの$の存在価値がイマイチ解らない Perlは記号別に意味を持たせちゃったりリファレンス絡みとかで そもそもアレがないと根本的にデータ構造が表せなくなってるから仕方ないが
構文解析するときに$があったほうが楽なのではないかという想像
Rubyが使われているブラウザゲームを教えてください
ありません
…まあ、もしかしたらあるかもしれないけど、Rubyだというのが見えるわけでもRubyが使えるわけでもないのでなんとも
もしかしなくてもサーバ上のRubyで動作するCGIゲームの配布を求めているのなら、
一般的にそういうものはないと記憶してるので、ゲーム製作板あたりにでも行って作ったりねだったりするとええ
ゲ製作技術
http://toro.2ch.net/gamedev/
バックはRubyで作るのが流行っているって聞いたのでそういうブラウザゲームを作っているゲーム会社に就職したかっただけなんです
一緒に作ろうぜ
本当に一緒にやりますか?
>>952 Rubyの経験はぶっちゃけ不要です
なぜなら、Rubyは"簡単"だから
就職してから社内での使い方を学んでも充分間に合う
どうせならHTTPとかCSSとかFlashとか顧客対応とかレベルデザインとかの、Rubyより数倍数十倍の時間がかかる技術の経験を積んできてください
もっぺん書くけど、Rubyの事前経験は不要です
ブラゲ製作運営会社に就職するのに必要な言語? 中国語と韓国語に決まってるだろうが
うちの会社来たら好きなだけ無給でやらせてあげますよ
なぜそこでHTTPとCSSが出てくる
半年でなくなる会社に就職する理由もないけどな ケーキ食べるのが好きだからってヤマザキパンに就職したって意味ねえ
ブラゲは見た目の瞬間的な収入額は多いけど、出ていく初期費用や維持費用も大きいから見た目ほど儲からないんだよな コンビニで現金収入が1日60万あっても手元には5000円くらいしか残らないのと似たような感覚 あのお札の束はどこ行っちゃったのみたいな
>>952 そういう目的だったら、Pythonの方がマシ。
Rubyは偽装Lispだから、アプリ言語が必要なときは便利。
まじすか でも日本でPython使ってる仕事って見た事ないんですよ求人とかで
探し方が悪い
CoffeeScriptでブラゲ開発してるとこが、開発環境のバックエンドにrubyだかrailsを使ってるとか聞いたことがあるな ただこの手のケースではrubyのコード自体を書くことはほぼ無いし、 本番環境ではrubyはほぼ仕事してなかったりする そして実際重要なのは、CoffeeScriptのコードでもなく、絵を書くデザイナーだったり
そういうとこではRubyプログラマは「足りてる」のよね コード書き担当はみんなRubyが使える状態であることが多い(Excelのマクロ状態) 人員募集するとしたら、Rubyコーディング以外の業務や役職でだろうな
>>939 探したらgemとかあるかもしれませんが
require 'win32ole'
shell = WIN32OLE.new("WScript.Shell")
puts shell.SpecialFolders("MyDocuments")
puts shell.SpecialFolders("Desktop")
使用できる特殊フォルダは
http://msdn.microsoft.com/ja-jp/library/cc364437.aspx とか参照
Win32APIでがんばっても取れます
Shell32.dllのSHGetFolderPath関数を直接call
しかし、面倒くさい
ボールを投げて地面に落下するまでを計算できるライブラリってありませんか? 物理学?落下学?数学に疎くてなんてググっていいか分からず探しきれません
落下学ってなんですか?
Windowsで動かしてます system("notepad") というコードを コマンドプロンプトで ruby test.rb でrubyスクリプトを実行すると メモ帳が起動しますが、メモ帳が閉じるまでrubyスクリプトが待機しています メモ帳を終了すると実行したrubyスクリプトも終了します。 待機せず、メモ帳が起動したかどうかは知らなくても良いので、コードを実行したらそのままrubyスクリプトを終了させる方法はございませんか?
spawn("notepad")
できました!ありがとうございます
system("start notepad")
974 :
デフォルトの名無しさん :2013/01/17(木) 21:13:18.49
>>968 ぐぐるなら 弾道計算 とか 放物線 とか 自由落下 とかかなぁ
計算するだけなら keisan.casio.jp に式もいろいろあるぞ。
初心者なため以下の理由からIDEから入ろうと思うのですが Ruby1.9.3に対応した定番のIDEというのはありますか? ・requireする名前が分からないため ・メソッドに必要なrequireがわからないため ・オブジェクトのメソッドを把握してなくても補完から補いたいため
特にはないです もしあなたがなにかIDEを既に利用していて、そのIDEがRubyに対応しているのなら、そのIDEでRubyプログラミングをするとよいでしょう
>>975 ある程度のRubyの知識がある上で使うならともかく
そこまで依存出来るようなのはないと思っていい
素直にエディタの隣にマニュアル広げてたほうが信頼出来る
オライリーの初めてのルビーが良本すぎて濡れてきた 抑えるとこちゃんと抑えてるわ
ruby会議に出席できるぐらいのスキルはどのくらいのものですか?
ユーザーがいる自作ライブラリをGithubで公開して適度に質疑応答やPullRequestやforkがあり、 ブログもなんかてきとーに技術関連のを書いてなんとなくアクセス数もあり、 メーリングリストで検索すると自作ライブラリや投稿者名が何回か出るくらい が妥当 ただ出席して見るだけならそんなんでなくてもOK
登壇者になれるかどうかなんて、CFPへの応募が通ればOK、だけじゃねーの
gem installしたライブラリが読めません require "rubygems" require "fcgi" ここでエラーになります。 irbからはrequireできるのですが、、、
最近Rubyの案件へって来た希ガス
Rubyの資産(数万行)を引き継いだ初心者です。 2.0で試したところ、動作しませんでした。 1.8は余命半年とのことでちょっと焦ってます。 今のところ、こんな対応を考えているのですが、 (1)地道に2.0対応する (2)JRubyの1.8互換モードで動作させる 実は自動変換するツールなどあれば教えていただきたいです。
Ruby2.0ってもうすぐ出るんですか? これから勉強しようと思って1.8を入れたところなんですがショックです
>>979 あれは喋るネタがあってなんぼであって、登壇する事が目的じゃないような
でないと、就活・売名のためのステージになってしまうよ
>>985 ツールは知らないが
・JRubyで動作させる場合のリソース(構築時間、費用、互換性問題の評価、性能)
・Ruby2.0以降が多くなってきても、今のままで使えるか?(機能・性能の改修が必要か)
で判断すればいいんでは?
フルスペックでの動作必須、or技術へのキャッチアップが必要なら、今のうちに2.0対応を始めたほうがいい。
一部動かなくてもいい、or長期間使わないなら、互換モードで。
できるだけ数値化しての比較が吉。
ローコストで済まして、足りない機能はRuby以外(手動も含む)で補うという発想もある。
>>987 Rubyコミュに限ったことじゃないけど
ボッチだのフリーターだのといった弱者属性を
ファッショナブルに利用する馬鹿を許している時点で
意識の高いガチ無能層にタカられても同情できない感がある
就活・売名以上に重要なことって何?
Windows8対応(たぶん)てふざけてんなー 遊びでやってんのか?
そこそこには動くはずだけど、どっか細かいとこで誤動作とか残ってるかもしれないからごめんね、という程度の意味だろう 情けない表現であればあるほど、業務で使う人はいなくなるはずだから、業務的な被害も減る
マルチプラットフォームで動かない言語ってkz
Windows で作業してくれる人が少ないんでしょ
VB Delphi
Windows で C# が普及している時期に Rubyは 1.8 から 1.9 の移行期に遭遇した Windows で Ruby を使う意義が薄れている
C#とRubyは分野が違うのでは?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。