1 :
デフォルトの名無しさん :
2013/11/06(水) 21:52:55.22
2 :
デフォルトの名無しさん :2013/11/06(水) 23:19:23.87
イチオツ
4 :
デフォルトの名無しさん :2013/11/07(木) 07:50:07.68
webrickでhttpサーバ(UI)を組んで、そこに表示される内容をtkで組んだGUIで 変更するにはどうすればいいのでしょうか? 具体的に言うと、「webrickのstartとtkのmainloopを同時に実行して、お互いに 同じデータを共有する1つのプログラムを組みたい」です キーワードかヒントをお願いします
(1) WeBrickでHTTPサーバを立て、ネットワークを介して Xxx/TkによるHTTPクライアントからアクセスしたいのか、それとも (2) WeBrickでHTTPサーバを立て、その運用操作(起動/停止/設定など)の UIをRuby/Tkで実現したいのか、 (3) その他 どれよ?
環境 Windows8 コマンド入力画面が、ズレて表示されてます。 助けておくんなせえ。
>>7 それじゃさっぱりわかんない
再現手順を書くかスクリーンショットでも撮って貼っておくれやす
>>6 今のところ(2)の方で考えています
(1)でHTTPサーバ経由で運用操作できる機能を付けるって方法も
あるのか、普通はその方がリモート操作も含め応用利きそうですね
運用操作時はSSLにすれば安心だし
>>9 案(2)の基本的な流れ
(a) 起動したメインスレッド様々な初期化(設定ファイル読み込み等)
(b) メインスレッドでWeBrick向けのマスタスレッドを1個生成
(c) Ruby/Tkのウィジェットを組み立て、ループに入る
(d) (b)で生成されたマスタスレッドでWeBrickを起動(start)しループに入る
この後、HTTPリクエストを受け付けるたびにスレーブスレッドが生成される
スレッド構成を以下にまとめる:
・メインスレッド(1個):Ruby/Tkのメインループ
・マスタスレッド(1個):WeBrickのメインループ
・ワーカスレッド(n個):HTTPリクエスト処理
課題はいくつかあるけど、最も重要なのが
>>5 にもある「共有データ」の排他制御
・間違っても、ワーカスレッドから直に(メインスレッドが管理する)Ruby/Tkの
ウィジェットに描画操作をしてはいけない
・ワーカスレッドで発生した描画イベントは、必ずスレッドセーフな共有オブジェクトに
書き込み、それをメインスレッドで読み取って描画するように設計する
・メインスレッドでは、Tkの提供するタイマ機能を利用して、定期的に
共有オブジェクトへの追記の有無を確認する(いわゆる「ポーリングをかける」)
今日gem update --systemってやったら gem SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed って表示されるようになってアップデートもパッケージのインストールもなにもできません 昨日まではできてて設定とかなんもいじってないです 今日急につながらなくなりました 対策教えてください
エラーの全文を張ります
Updating rubygems-update
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif
icate verify failed (
https://rubygems.global.ssl.fastly.net/gems/rubygems-update -2.1.10.gem)
WindowsのRubyInstaller2.0.3を使ってます
なんか調べたらSSL証明書のバグっぽいですね
>>10 Ruby/Tkのメインループスレッド外のスレッドからの処理依頼は
自動的にメインループスレッドに送ってシリアライズして実行するように裏で管理してるはず。
依頼した側のスレッドは、Ruby/Tkの処理完了まで待ちに入って結果を受け取る仕組み。
でなきゃ、irbでThread.new{Tk.mainloop}してインタラクティブにウィジェット操作なんてできない。
んなわけで、描画操作についてはスレッドセーフなはずなので、
ワーカスレッドから直に呼んでも問題ないし、ポーリングのような面倒な手間も不要じゃないかな?
共有データがどんなものでどんな処理が必要なのかは知らないけど、
処理時間がかからないものなら、TkVariable#traceの他、色々とあるコールバック処理を使って
Ruby/Tkのメインループスレッドに処理を任せるって手もあるかも。
排他制御を考える必要がなくなる分、少し楽ができるかもしれないけど、
時間がかかる処理だとGUIの反応が鈍くなるかもしれない点は要注意かな。
必要時以外はGUIを非表示にしておいて共有データ処理に専念させ、
GUI反応が鈍るのを隠すというのも一つの考えかもしれないね。
標準時+2の日時を表示したくて require 'date' d = DateTime.now d2 = d.new_offset(2) p d2.to_s って書いてみたんですが、UTCの時刻が表示されてしまいます どうやって書くと良いか教えてください
*[1,2,3] 配列にくっついてる*は何を意味してるんですか 名前を教えてください
18 :
デフォルトの名無しさん :2013/11/10(日) 14:15:02.06
>>15 日本時間の DateTime なら offset で 3/8(=9/24) が返ってくるよね。
ドキュメントには明示されていなかったような気がするがRationalなのだ。
d2 = d.new_offset(Rational(2, 24))
>>16 リテラルで言うと、 1,2,3 と書いたのと同じ扱いになる。
メソッドに引数を渡すときや、多重代入で使う。
ymd = [2013, 11, 10]
Date.new(ymd) => # エラー
Date.new(*ymd) => Date:2007-01-01
正式名称はないが、よく splat 演算子と呼ばれている。
a.txtをa/b/a.txtに移動したくて File.rename('a.txt', 'a/b/a.txt') ってやってもFile.renameは再帰的に動作しないから例外が発生します FileUtils.mkdir_pはディレクトリを再帰的に作れますがファイルを移動するわけでもないので用途が違います こういう場合はどうやるのですか?
>>15 なんかよくわからんが文字列なら通った
d2 = d.new_offset("+2")
>>18 「こんなこともあろうかと、2.1では有理数リテラルを用意しておいた」
か、どうかは知らないが
d2 = d.new_offset(2/24r)
で通った(要Ruby 2.1以上)
offsetがなんでRationalで返ってくるんだろう
これは、ドキュメントが悪いよなぁ
と、ri DateTime#new_offset してみたら
使用例では引数が文字列なのであった
------------------------------------------------------------------------------
d.new_offset([offset=0]) -> date
------------------------------------------------------------------------------
Duplicates self and resets its offset.
d = DateTime.new(2001,2,3,4,5,6,'-02:00')
#=> #<DateTime: 2001-02-03T04:05:06-02:00 ...>
d.new_offset('+09:00') #=> #<DateTime: 2001-02-03T15:05:06+09:00 ...>
Ruby2.0を使ってるんですけど Dir.globとかDir::globって二種類の書き方があるんですけど .と::どちらに合わせて書けばいいのでしょうか?
22 :
デフォルトの名無しさん :2013/11/10(日) 16:56:18.66
>>19 ディレクトリ掘ってから移動するしかないんじゃない?
FileUtils.mkdir_p File.dirname(dst)
File.rename(src, dst)
再帰的にやる機能があるmkdir_pのほうが特殊といえば特殊。
基本的に、 unixの同名シェルコマンドを越える機能は再現してないと思う。
>>21 :: は C++ プログラマなどに馴染みがある記法でも使えるように
配慮してあるだけで、通常は . を使う。
要するに Dir オブジェクト(Classクラスのインスタンス)に対する
メソッド呼び出しなのだから。
splat演算子とか知らなんだ リファレンスもっかい読みなおそう
この度Rubyを始めようかと思いましたが、 バージョンってどれが良いんでしょう? 1.8xや1.9xが現役の環境も多いみたいなのですが…
おれもはじめたばかりだけどさ2.0からでいいよ 1.8はもう切り捨てられてるから覚えるだけ無駄 1.9やるなら2.0でも同じだし2.0のほうがいいよ それに覚えたところですぐそれを仕事にするってわけじゃないならなおさら2.0からはじめるべきですよ 2.1もでるしね
有難う。 じゃあ2.0をインスコしてくるか…
rbenv使って複数バージョンを共存させるのがトレンド
WindowsのRubyInstallerのGemのSSLがおかしいんで Gemだけ手動で入れなおしたいんですが Gemってどこにありますか?
いま入ってるバージョンが2.1.9なんですが リンク先のバージョンは1.8.25って書いてありますがこれgemのことでしょうか? とにかSSLエラーでupdateすらできない状態です
OpenSSL 入れてないとか
ああすいませんrubygems.orgのほうにダウンロードファイルがおいてありました これを入れたらupdateすることができました これでようやくWindowsでもgemが使えました
いまRubyInstallerに置いてあるバージョンに含まれるgemにはSSLの鍵に関する参照先が固定されているようなのでバグがあります なのでrubygems.orgからgemをダウンロードしてruby setup.rbすると新しいgemが入るのでそれで直ります
c:\usr\local\ssl に *.cnf をコピーするだけでよかったのに
それじゃ動かない ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' ↓ "C:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows/op enssl/1.0.0k/ssl/cert.pem" gemにこのパスが埋め込まれてるから
37 :
デフォルトの名無しさん :2013/11/14(木) 17:53:06.04
死ねバカwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww 死ねゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww 死ねコラゴミwwwwwwwwwwwwwwwwww
38 :
デフォルトの名無しさん :2013/11/14(木) 23:31:43.47
一行ずつ読み込んでは処理するスクリプトで、高速化のためにぜんぶ 最初に配列に読み込むとするじゃないですか? で、 f=File.open(hoge.txt) f.each |line| do word[i] = line i = i+1 end とかしますよね。でもなんか配列で添字をいちいち1足したりするのって なんかカッコ悪いですよね。 もっとRubyっぽいかっちょいいやり方で代入できないんですか? やっぱりいちいち添字を増やして行く原始人みたいなやり方しなきゃダメですか?
readで読み込んでsplit
lines = File.readlines("hoge.txt")
lines = File.open("hoge.txt").each_line.to_a
一行ずつ配列に追加するのは添え字使わずに word << line で。
File.read("hoge.txt").split("\n")画最強
>>43 "foo\n\n\n\n" みたいなデータだと、後ろの改行達が全て無くなってしまうからキモい。
47 :
46 :2013/11/15(金) 00:56:48.11
あ、改行達じゃなくて空行たち。
48 :
46 :2013/11/15(金) 00:58:44.05
あ、なので、自分なら File.read("hoge.txt").split(/^/) とするかな。
Ruby神の俺からみるとまだまだ冗長なのばかりだな。 もっと精進せよ。
51 :
46 :2013/11/15(金) 02:09:39.84
配列に入れるのに改行が含まれるのは気持ち悪い
.map(:strip) .map(:chomp)
Windowsでコマンドプロンプトの表示幅を得るにはどうすればいいでしょうか io/consoleやio/console/sizeはうまくいきませんでした
chompって何て読むの? ちょんぷ?
56 :
デフォルトの名無しさん :2013/11/15(金) 21:36:35.36
>>55 手元の辞書に /tʃɑmp|tʃɔmp/ とある。ちょんぷでいいんじゃね。
58 :
デフォルトの名無しさん :2013/11/16(土) 12:14:53.91
REXMLは他に何も入れたくないってときしか使わないなあ nokogiriもあるし
やっぱりRuby使ってる人はREXMLじゃなくてnokogiriをつかうのが慣習になっているんでしょうかね?
XMLなんかには近寄らないというのが正しい
61 :
デフォルトの名無しさん :2013/11/16(土) 13:34:00.09
漏れもそう思いかけた
使って天国、作って地獄
Rubって単体で動くExeファイル作れるの?
バイナリファイルを読んで1byteずつの配列に格納したい。
このソースはもっと簡単になりますか?
a = []
open "hoge", "rb" do |f|
f.read(256).unpack "n128" do |i|
a.push i
>>8 a.push i&0xff
end
end
p a
a = IO.read("hoge.jpg").each_byte.to_a p a
buf.chars
68 :
デフォルトの名無しさん :2013/11/17(日) 01:39:26.35
binread使おうよ…
>>65 >>66 byteで操作するメソッドがあったのですね。
もう少しがんばって探せばよかった。
>>67 2.0だとchars(とbytes)はobsoleteになってますね。
>>68 特異メソッドというのがよくわからないのでとりあえず保留してました。
勉強になりました。みなさんありがとう!
70 :
デフォルトの名無しさん :2013/11/17(日) 13:11:48.59
オクラととろろご飯食べたい
test
74 :
デフォルトの名無しさん :2013/11/17(日) 23:45:21.68
そもそも、 bytes はともかく chars だとバイト単位にならないので論外だがな。
>>54 mode conとか呼び出してみるのはどうだろう
`mode con`.each_line.to_a[4][/\d+/].to_i
RubyでCやJavaのvolatile相当のモノってありますか?
78 :
デフォルトの名無しさん :2013/11/19(火) 08:33:21.65
>>77 Rubyはコンパイル言語ではないのでCの様に最適化抑制は必要ないです
もう一つはCの様にプリミティブ型が無いので、全てのオブジェクトは内部的にはヒープ領域で確保した構造体がレシーバーとなり処理をしてると思います。そのため処理はアトミック(遅延代入などない)なことが保証される。
上記2点よりRubyではvolatileは仕様上必要ないのだと思います。
>>78 ちゃんとした説明もせず暴言を吐くのはやめましょうよ
>もう一つはCの様にプリミティブ型が無いので、全てのオブジェクトは内部的にはヒープ領域で確保 Fixnum とか FixedInt ってもうなくなったんだっけ
Fixnumもオブジェクト
通常はスタックには参照だけ置いてヒープにはオブジェクトを置くけど Fixnum など小さいオブジェクト関しては参照に埋めこまれるのでヒープには置かれないと思うよ
Ruby2.0以降の64bit版だと Floatの一部も埋め込まれる
84 :
デフォルトの名無しさん :2013/11/19(火) 22:07:33.28
そういえば、flonum導入で一部のobject_idが変わったな。 >> nil.object_id => 8
redmine2.3.xから2.4.0にアップグレードしたらログインできなくなった なぜか?
86 :
デフォルトの名無しさん :2013/11/20(水) 02:52:48.15
死ねバカwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww 死ねゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww 死ねコラゴミwwwwwwwwwwwwwwwwww
redmine専用スレってなかったっけ
89 :
デフォルトの名無しさん :2013/11/20(水) 16:56:30.00
質問です。 コマンドラインで設定したパラメータって配列に分解されてARGVに格納されますが、 文字列を、この仕組みで配列変数に変換する、何かうまいやり方ってありますでしょうか? 例えば、 str = "test1 test2 'test3 test4'" これを、 strv = ["test1", "test2", "test3 test4"] このようにしたいです( ' や " を考慮して配列に変換したいです)
ruby a.rb 1 "2 3" p ARGV # ["1", "2 3"]
91 :
89 :2013/11/20(水) 17:23:02.18
>90 コマンドライン文字列がARGVに変換されるのと同じ仕組みを rubyで実現したい、という意味です。 str.split(/\s+/) だと、' や " で囲まれた部分にスペースがあった際に、 期待する結果とならず、頭をひねっているところです…
require "shellwords" 'a.rb 1 "2 3"'.shellsplit # => ["a.rb", "1", "2 3"] クォートのバランスが取れてないと例外が出るので注意 'a "b'.shellsplit # => Unmatched double quote: "a \"b" (ArgumentError) こんなライブラリあったのね 知らなかった
93 :
89 :2013/11/20(水) 19:29:23.91
>>92 ありがとうございます!
自分の力では、このライブラリを見つけれなかったです…
大変助かりました。
>>92 CSVを読み込むのにも似てると思ったけど、それはそれであるんだね。
95 :
デフォルトの名無しさん :2013/11/20(水) 22:59:38.27
shelljoinで、コマンドライン文字列を組み立てる方にも使える。
「初めてのRuby」読み辛い わかってる人がわかってる人に向けて書いてる感じで 何であんなに尼の評価高いの?
自作jっうっ、ぐふっ・・・
>>96 評価してるのが「判ってる人達」だからじゃね?
尼のレビューを見る限り「プログラミング経験者かつある程度Rubyを知ってる人にはオススメ」って感じだから それでいいんじゃないの? いや読んだことないんだけどさ ちょっと古いけど、今でも充分通じる?
入門者には RHG が良いよ
Rubyの勉強というよりはC言語の勉強ですよね?
なにが?
lambdaとか黒魔術の説明はほとんどないけど基本的なところはあらかた網羅されてるよ 十分良本の部類に入ると思う
4版ってmix-inの説明がなくなってたな
105 :
デフォルトの名無しさん :2013/11/22(金) 22:23:37.89
初めての なんてつけるから紛らわしいんだよ
107 :
デフォルトの名無しさん :2013/11/22(金) 22:27:10.42
「他の言語経験があるがRubyは初めて」という意味には取れないよな。
対象読者は本買う前にチェックすべき項目のひとつ チェックせずに自分に合わなくても文句は言えないだろう
「Rubyは初めて」というタイトルならよかった。
でもまあ初心者が挫折しやすい本だから別にいいと思うよ 挫折したらもうRubyに関わろうとせんでしょ
111 :
96 :2013/11/22(金) 23:04:43.41
他言語の経験は一応あるぞ? それでもなお読み辛いってだけで
112 :
デフォルトの名無しさん :2013/11/23(土) 00:16:18.32
よく出てくる顔のデカい女何なの?
PHPerです。 たのしいRuby→パーフェクトRuby の順に勉強するのがベストですか?
Rubyには初心者用の本が全然ない たのしいRubyが一番初心者向けとは言われてるけど 結局Ruby熟練者が初心者目線で書こうとして 子供だましの説明に終始しててお茶を濁してる感じ
pythonとかphpやってろってことじゃないの。
>>109 本のタイトルは出版社が勝手に(売れそうなタイトルを)付ける、というのが出版業界のコレまでの常識。
初めてのRubyの作者の自演宣伝うぜえよ
他言語経験者なら Ruby言語ミニマム→RubyAssociationのチュートリアルとか? オブジェクト指向がわからないなら「オブジェクト指向でなぜつくるのか」 PythonとCommonLispの経験があればかなり楽そう
何を見ても宣伝にしか見えない奴は嫌儲にこもってろ。出てくるな
宣伝がバレたら暴言か たまげたぜ
Cでゴリゴリ書いてた人、 Javaでバリバリ設計してた人、 VBでペタペタ貼りつけてた人、 他言語経験者でひと括りにするのは無理があるんじゃないか。
Ruby2.0とSqliteかMySQLでサイトを作れるようになりたいと思っています。 SinatraとPadrinoの違いがよくわからないのですが、どう違うのでしょうか?
まずはそれぞれのフレームワークを使ってからにしましょう 使ってもないのに質問するのはマナー悪いです
なんで
>>125 ではSinatraを使い始めてから質問してみようと思います。
128 :
デフォルトの名無しさん :2013/11/23(土) 17:38:28.97
PadrinoはSinatraを構成要素として使っている。
>>128 ありがとうございます。
冷たくあしらわれて諦めていましたので助かりました。
そうすることによって何が便利になるのでしょうか?
SQLの接続が楽になるとかですか?
聞く前に指を動かせよカス
普通「手を動かせ」じゃね?
>>129 Padrinoは構成の柔軟性がウリだが、逆に初心者にはどう構成するかを選ぶハードルがある
大人しくRails使っておいた方が無難
133 :
デフォルトの名無しさん :2013/11/28(木) 00:00:59.60
死ねゴミwwwww
なんか明日あたり新聞に載ってそうなのがひとり居るな
Ruby使いにも133みたいな奴がいるんだなw
>>135 WebProg 板の Rails スレなんてひどいもんだよ
PythonスレとRubyスレは割りと平和
コインを投げての裏表みたいな1/2の確率で1,0を出したいとき、 rand()で出た数字をif文で0.5以上、未満みたいに切り分けて1,0にするのが 良いのか、rand(3)にして1と0を取り出すのかどっちがより一様乱数に 近くなるんでしょうか?
プログラミング自体の初心者少ないからかな。知名度低くて。
どっちもだめだけど 二つしか方法が選べないなら 前者の方がマシ
141 :
デフォルトの名無しさん :2013/11/29(金) 01:57:50.57
>>109 Rubyは初めてか?
力抜けよ……
のほうが
そらアセンブリよ
カーネルのrandじゃなくてRandom使ってゴニョゴニョすればいいんでない
分かりやすくするために、0から1まで0.1刻みで乱数が出力されるとすると、 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 これを0.5を境に大小にわけると6:5になる。つまり1/2とは程遠い。 一方rand(3)にした場合は、0から3未満の整数が出力されるので、1/2の 確率で1,0が得られる。
rand(65536) にして途中の 1bit だけ利用する
[0,0.5) と[0.5,1.0) 0-0.4999 : 0.5000-0.9999 0.4999 : 0.4999 1:1 と思うのだが何か間違ってるのだろうか? c = {true=>0,false=>0} 10000000.times{c[rand<0.5] += 1} a = c.values.reduce(:+)/c.values.size puts ((c[true]-a)*100).abs.quo(a).to_f.to_s+'%'
rand(2).to_i じゃ駄目なん? 0〜1未満が0 1〜2未満が1 だから一様だと思うけど
rand(2)が正解
乱数で 0.5 が出て来るのは見たことがあるが 0.0 が出て来るのは見たことがない
なぜ目で確かめようとするのか
浮動小数点数は誤差があるからな 0.5を正確に比較出来るのか?
>>148 rand(x)は 0以上x未満のIntegerを返すから
>>149 でいい
>>138 はそれよりも、もっと一様な乱数にする方法があるのか聞きたいのだろう
あまり数学はわからんのだけど
線形合同法とかの乱数だと特定のビットだけを抜き出すと周期が極端に短かったりする
らしいし
過去にコンシューマーゲームでタコな乱数の使い方してて、問題になったことがあったような
ま、Rubyはメルセンヌツイスタなので
ややこしく考えなくても
たいした問題は出ないのじゃないのかな
パチスロの裏ROMですねわかります
155 :
デフォルトの名無しさん :2013/11/29(金) 21:46:14.32
出目の奇遇が固定されてしまうバグがあったのは カルドセプトの何作目かだったかな。
Rubyアソシエーションのチュートリアルわかりにくいところにあるけどわかりやすい
さんせいの反対なのだ
多次元ハッシュ使ってデータ(インスタンス)格納したいんだがどういうのがベストなのかわからない こんな感じに入れてlist[ id1 ].eachで使えればいいんだけど list = { id1 => { instance1, instance2, instance3, … }, id2 => { instance1, instance2, instance3, … }, }
list = { id1 => [ instance1, instance2, instance3, … ], id2 => [ instance1, instance2, instance3, … ], } でいいんじゃないの?
listに空配列入れてinstanceの配列でeachすればいいんじゃないの
データの内容と使い方によるとしか・・・
引数ってなんやああああ!!!!
163 :
デフォルトの名無しさん :2013/12/03(火) 02:15:10.88
引用させる数
164 :
デフォルトの名無しさん :2013/12/03(火) 03:36:42.40
引数(ひきすう)
165 :
デフォルトの名無しさん :2013/12/03(火) 03:37:21.50
C, C++なら引用じゃなくて、コピーされるよ!
166 :
デフォルトの名無しさん :2013/12/03(火) 03:42:44.76
reference 参照 argument 引き数 parameter パラメーター variable 変数
167 :
デフォルトの名無しさん :2013/12/05(木) 20:50:55.92
ドン引きされる数
class Klass 〜ここ〜 def method end 〜ここ〜 end Rubyのクラスでは、クラスのメソッド以外のところはいつ実行されるのでしょうか? class Klass @x = "Hello" def method p @x end end このコードは@xがnilのままです JavaとかC#だとクラスの外に書いたものはコンストラクタの前後で実行されるのですが・・・
>>168 クラスがパースされたときに実行される
メソッドの外と中じゃselfが違うから@xは別のものを指す
class A
p self
def b
p self
end
end
A.new.b
=>
A
#<A:0x401bfb44>
へー評価自体はされてるのね
Rubyではクラスもオブジェクトだからね class A @x = 1 def self.b p @x end end A.b # => 1 もっとも、この例の場合ならクラス変数使った方がいいだろうけど
まぁ普通アクセサもしくはクラス変数だわな
質問です。 一時間ごとのデータが入ったテキストファイル読み込んで、年、月、日、日平均値、日最大値をファイルに出力したいです ファイルは年、月、日、時刻、人数でタブ区切りされていて、約50万行あります 1-12月、1-31日、1-24時のデータです awkでかけたのですが、処理速度が遅くて困っております
>>174 解決方法をレスする前に、2つ質問がある
Q1. データファイルは時系列の順にソートされているか?
=> もしソートされているなら、日付が変化した時点で集計できるから、
処理速度が遅いのは単なるCPU/IO処理能力不足であると判断できる
もしソートされていないのなら、
ファイルを最後まで読み込まなければ集計処理を開始できないから、
バッファ上に集計カウンタを設けなければならない
Q2. プログラム実行中にスワップは多発しているか?
=> もしQ1.のバッファをメモリ上に設け、かつデータの分布が大きいのなら、
実メモリの不足によるスワップの多発が性能劣化の原因となっている可能性が高い
>>175 Q1 時系列順にソートしてあります
Q2 それほどおおくありません
>>174 データが約50万件ということは約60年分のデータということ?
179 :
175 :2013/12/06(金) 22:27:21.51
>>176 入力データがソートされていて、なおかつプログラムが(
>>175 で書いたように)
前回処理した行(レコード)日付との違いを契機に日毎の集計処理を実行しているのなら、
ただ単にCPUやI/Oの処理能力が不足しているのだと思う
しかも単なる集計であって複雑な計算をしているわけではないみたいだから、
性能ボトルネックはCPUよりもI/Oにある可能性が高いだろう
これは、awk を Ruby へと、あるいはたとえC言語へと書き換えたとしても、
その労力に見合った性能改善は期待できないことを意味する
I/Oの性能改善方法は、たとえばHDDをSSDへ置き換えるのが現実的かつ効果的だろう
処理速度が遅い理由はわかりました。ありがとうございます。 でも、そろそろ新しい言語を学んでみようかなと思ってたので、 もしよろしかったらどなたかプログラム書いていただけませんか 手順でもいいので
> もしよろしかったらどなたかプログラム書いていただけませんか まずは自分で書こう それを添削してもらった方が身につく
いまどきawkでやってるとか原始人かよ
ものすごく一般論として、gawkやmawkで遅い場合はRubyでも遅い
ただしきちんとawkスクリプトとして完結していることが条件
シェルスクリプトからawkをパイプで呼んでるとかだとアホみたいに遅い
これはawkが悪いんじゃないんだけども
とりあえず
>>182 に一票
>>184 さんがいうようにシェルスクリプトも使っています。いい忘れていました
それが原因ですかね
プログラムはこれです
http://ideone.com/rKMwoE これにうるう年などの日にちの考慮や、最大値と最低値がでた時刻も
だす予定なのですが、それ以前に処理が遅すぎるのでとまってます
人数のエラー値は99999で、もし一時間でもエラーがあったら平均値、最大値、最小値は99999を出すことにしてます
つたないプログラムですが、ご助言お願いします
186 :
デフォルトの名無しさん :2013/12/07(土) 01:29:54.24
これ、1日分ごとに、該当日のデータが見つかるまでファイルを最初から舐めてる?
リンク先見てきたが なんのためにそのリンク貼ったのか理解に苦しむ
出典以外の何があるってんだ
出典なら肝心なのは >「UNIX シェルスクリプト・コマンドブック 第2版」 山下哲典、2012 >この本は良書です。この本によると、 の部分であって あえてそっちをカットして しかもリンク先見れば済むのに 本文をコピペして 色々ちぐはぐだぞ
>>191 ありがとうございます。
ところどころわからないとこあるんですが、独学してみます。
同様な処理を今後していくので、非常に助かります。
皆様、どうもありがとうございました。
if not って書き方は何か python っぽいな 嫌いじゃない
unlessは付帯する条件やネストの具合によっては逆にわかりづらいことが判明している 「否定の分岐はunlessだろ」などと枠に嵌めて考えるのではなく、判断のしやすさと読み下しやすさを優先するべき
method(&:&)みたいに引数に「&:&」を渡すって何をやってるんですかね? :&というシンボルのprocオブジェクトを渡してるってことですかね。。 :&が組み込みシンボルっぽいかなあと思ってるのですが、記号文字を検索しようとしても なかなかヒットしませんね・・・
>>196 シンボルに前置&をつけると、to_procが呼び出されるってやつですよね。
その使い方に慣れていないせいで、組み合わされた&に混乱していたのですが、
冷静に考えてみると二項演算子&を渡したい操作だったようです。
否定に not を使ってることについてだったんだけど…まあいいや
199 :
デフォルトの名無しさん :2013/12/08(日) 12:08:47.71
! より見落としづらいかもね。 個人的には ! を使うときは !foo ではなく ! foo と書くようにしている。
Rubyでしばらくやってたら、 久々にCで書いた時、switch文のbreak;忘れに一時間くらい気づかず ずっと悩んでしまった。 辛い。
それはよかった
203 :
デフォルトの名無しさん :2013/12/10(火) 01:21:29.51
ruby on rails3アプリケーションプログラミングという書籍を読んでruby on railsの勉強を始めたのですが マイグレーションで詰まってしまいました rake db:migrate を実行しようとすると'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead. となりrakeのバージョンが新しすぎるとのことなので一度アンインストールして0.8.7を再インストールしました すると今度はCould not find rake-10.1.0 in any of the sources となってダメでした railsのバージョンは3.0.5です
途中送信とsage忘れ申し訳ありません アドバイス頂けたら嬉しいです よろしくお願いします
>>203 Railsが古い
今どき3.0で勉強するのはおすすめしない
4.0か、最低でも3.2でやるべき
206 :
デフォルトの名無しさん :2013/12/10(火) 08:14:28.62
どうしても古いrakeを使いたいのなら bundle を再実行しないと いつまでも rake 10を使おうとするぞ。
メタプログラミングRubyの表紙に「メタプログラミングは魔術みたい なもので、ビックリすることができるようになる。」って書いてあるけど どんなビックリするようなことができるの?
メタプログラミングRubyの表紙に「メタプログラミングは魔術みたい なもので、ビックリすることができるようになる。」って書いてあるけど どんなビックリするようなことができるの?
153 デフォルトの名無しさん [sage] 2013/12/14(土) 12:19:00.50 ID: Be: メタプログラミングRubyの表紙に「メタプログラミングは魔術みたい なもので、ビックリすることができるようになる。」って書いてあるけど どんなビックリするようなことができるの? 154 デフォルトの名無しさん [sage] 2013/12/14(土) 12:22:45.87 ID: Be: 乾電池がお尻の穴に入ります 155 デフォルトの名無しさん [sage] 2013/12/14(土) 12:25:58.56 ID: Be: それは誰でもやっていることで、ビックリするようなものではない 156 デフォルトの名無しさん [sage] 2013/12/14(土) 12:26:57.60 ID: Be: 正規表現のメタ文字に * があるのはそういうことだったんですね(カンペ棒読み) 157 デフォルトの名無しさん [sage] 2013/12/14(土) 12:52:39.63 ID: Be: プログラミングできなくても乾電池はお知りの中に入るだろ っていうか液漏れしたら命に関わるからやるな
そもそもメタプログラミングってなに? Rubyでないとできんの?
馬鹿には無理
馬鹿には無理
214 :
デフォルトの名無しさん :2013/12/15(日) 12:56:22.15
>>211 簡単に言うとプログラムのコードを実行中に覗き見るような行為が可能になる。
ルービー以外の言語でもできるけど、昔の言語はできなかった。
Lispが昔の言語じゃない……だと……?
x = * [1,2] これでxに配列が普通に代入されるんですが、この場合*はパーサーにはどう解釈されるのでしょうか? nilが*を実行してるわけではないですよね?
Smalltalkが昔の言語じゃない……だと……?
>>217 splatだと思う
直後の配列を展開し順にメソッドの引数として扱う
irb> a = 1,2
irb> p a
[1, 2]
220 :
デフォルトの名無しさん :2013/12/16(月) 10:26:09.18
Smalltalk は終わったけど Lisp は今のところまだ現役です (キリっ
221 :
デフォルトの名無しさん :2013/12/16(月) 19:21:19.92
lisp は emacs とともに
rubyforgeが止まっているようです。終わってしまったのですか? 1.9以降消えたリポジトリやソースもあります。rubyから手を引いた人も多いんでしょう。 コア部分は古いバージョンや互換性は大切しないといけないと思います。 新しいバージョンを追いすぎるのも疑問。経済の先行の見通しが不安であるのに、いつまでも コミュニティベースのオープンソースな体制は維持できないかもしれませんが。 肥大化したLinuxカーネルだって高齢化と経済危機で終わるかもしれませんよ。
俺もrubyforgeの寂れ具合に驚いたけど要するにgithub行けってことでしょ
rubygemsに移行するみたいな話じゃなかったっけ あとはgithubとかgoogle codeとかと競合する部分はそちらへどうぞ的な
rubyforgeはrubygemsに移行した
http://status.rubygems.org/ gemコマンドの参照先もrubygems.orgに何年も前からなっている
もしrubyforgeを紹介しているサイトや書籍があるなら、その記述はおそろしく古い
rubygems.orgにはgemコマンド用の配布ファイルだけ置いて、バグトラッキングや開発版関係はgithubに置くのがトレンドではある
githubってrubyのみならず人気あるけど、何でだろうな 他のレポジトリに比べて何か特にいいところがあるの?
>>227 あなたが書き捨て以上のプログラムを作ったことがあるならたぶんわかります
そうじゃないならそもそも必要ないしわけわかんなくなるので、必要になるまで遠巻きに眺めておくのが賢明
煽りでも腐しでもなんでもなく、gitもgithubも必要ない人には必要ないからな 「なんか流行ってるから」で手を出してもなにが楽しいんだかさっぱりわからん損した、ということが多々
フォークやプルならbitbucketでもできないっけ?
233 :
デフォルトの名無しさん :2013/12/17(火) 08:24:24.72
質問です。 require_relative で取り込んだファイル内にあるクラス定義の 一覧を取得することはできますでしょうか? 例えば, ---- lib/c1.rb ---- class C1; end ------------------- ---- lib/c2.rb ---- class C2; end ------------------- みたいになっていて, Dir::glob("lib/*.rb") do |rs| require_relative rs 何か魔法 end みたいなことをすると [C1, C2] が得られる,みたいなことをしたいのです。
235 :
234 :2013/12/17(火) 09:07:16.74
なお,本当にやりたいことは,それらクラス内に定義した同じ名前の クラスメソッドを順に自動的に呼んで行きたいのです。C1.test; C2.test; ... みたいにです。
>>229 gitとかまるで必要ない日曜プログラマだけど、githubで皆さんのソースコードを検索するためにアカウント登録してますん
>>227 他のリポジトリって何?
多分、目的の違うものを比べようとしてるんだろ。
Q ○○と××の違いは何ですか? A 目的です 初心者に対する質問は全部これでいいなw
歴史的経緯で置き換えられただけとかもあるぞ。
Ruby2.0で、文字列操作だけでJsonを作りたいのですが、エスケープ文字が置換出来ずに悩んでいます。
X.to_jsonだと更にエスケープ文字が増えてJsonとして読み取れませんでした。
MySQLからデータを取得し、取得したデータは現在hash型です。
これを個々に変数に入れて文字列にキャスト。
繋げて1つの文字列(Json)にしているところでJsonのKEYとVALUEはダブルクォーテーションで括る必要があるので
括るのですが、出力結果を見ると\で勝手にエスケープされます。
で、エスケープ文字を置換で消そうと思っているのですが、上手くいきません。ご教示願います。
http://ideone.com/ge5WXB
>>241 ファ!?
マジで上手く取れた…
putsって何だよコレ…最後に改行コード入れるって説明しかないのに、何でJsonで返すって分かったんですか?
そーゆーモノって事なんですかね?
jsonが云々ではなくて、putsは普通の出力でpはデバッグ用出力だからだよ このぶんだと他の基本知識も危うそう
244 :
デフォルトの名無しさん :2013/12/17(火) 20:52:13.76
>>234 inherited メソッドについて調べてみるといいかも。
245 :
デフォルトの名無しさん :2013/12/17(火) 21:02:51.77
Railsの仕事ってあるの?
246 :
234 :2013/12/17(火) 21:12:56.07
>>244 うおーできました! 素晴らしすぎる!! Ruby万歳!
inherited は Classクラスのメソッド...なるほど。
クラスに関係した悩みについては,Classクラスをあたってみれば
良かったのですね。勉強になりました。
247 :
デフォルトの名無しさん :2013/12/17(火) 21:16:58.95
すみません、初心者です。 Rubyでの仕事の作り方を教えてください。
>>243 > putsは普通の出力でpはデバッグ用出力だからだよ
どこに書いてありますか?
> このぶんだと他の基本知識も危うそう
Ruby歴2日目です
>>223 福祉大国の北欧にコミッタが居るので、流出は避けられない
>>251 Unicode 使えばいいんじゃないの?
というかすみません、utf-8ってunicodeですね
Hoge::new Hoge.new 違いはなんですか? 定数の呼び出しは::だけですが、クラスメソッドはどうして両方で呼べるのでしょうか
256 :
デフォルトの名無しさん :2013/12/18(水) 00:00:50.25
>>255 スコープ区切りが :: でメソッド呼び出しが .
クラスメソッド呼び出しに :: が使えるのは、C++がまだ活気があった頃の名残。
257 :
デフォルトの名無しさん :2013/12/18(水) 12:28:46.29
てs
258 :
デフォルトの名無しさん :2013/12/18(水) 18:47:43.28
C++はほとんどRubyに駆逐されたね。
mrubyの登場が大きかった あれで完全にC/C++の息の根が止まった
るびーでとめられるのは役所の時計くらいだろ
262 :
デフォルトの名無しさん :2013/12/18(水) 20:36:19.73
mrubyによる組み込みOSのプロジェクトが立ち上がりました。
N個の配列の中に5個のハッシュをもったオブジェクトがあって、 それら全てにアクセスする繰返し文を書く方法が分かりません…。 for文を入れ子にすればいいのは何とか分かりますが、ハッシュのキーや値の取り方が分かりません。 ご教示願います。
arys.each{|h| h.each{|key , value| puts key.to_s + value.to_s } } こういうこと?
mrubyでAUTOSAR仕様を全て完璧に網羅したプラットフォーム作ろうぜ! 誰も使わないだろうけど!
Rubyが唯一jsに勝つ要素。それ即ち、ブラウザがない場所で闘うこと。
267 :
デフォルトの名無しさん :2013/12/18(水) 23:27:16.74
JSの欠点を補うためHTML5でRubyタグが復活しました。
OcraでRuby/Tkを起動した時の遅さが半端じゃないんですがどうにかなりませんか?
269 :
デフォルトの名無しさん :2013/12/19(木) 00:05:04.25
/fastオプションをつけて起動すると改善されます。
>>269 すみませんもう少しヒントをください
fastはocraのオプションですか?
それともRuby自体の?
>>261 mrubyで動いてたんだろうな
きっと
以降はサポートしない意向
というか1.9.2ってけっこう最近のイメージがあるんだが、そうでもないんだな
Linux(CentOS)上で、Windowsのocraみたいに、 rubyがインストールされていない環境で動作可能な実行ファイルを作成するものって 何かないでしょうか?
横ですが、ついでにMac環境の場合もオススメの方法があったら教えて下さい…
あ、MacならデフォルトでRuby入ってるだろとかそういう意味じゃなくて
279 :
デフォルトの名無しさん :2013/12/19(木) 23:55:37.88
サポートライブラリを同時に配布する必要がありますが、mrubyでELFバイナリを 作ってはどうでしょう。
1から100までの数を50ずつランダムに配列に振り分けてください。 例: a = [2 , 3 , 5 .... 99] b = [1 , 4 , 6 ... 100]
↑いろんな解答待ってます
>>276 依存ライブラリ全部入れてパッケージ作ればいいだけだが
yumやhomebrewみたいなパッケージシステムが用意されてあるわけだからそれ使えばよくね
必要ないから存在しないわけでおまえの考えが根本的に間違ってる気がする
283 :
277 :2013/12/20(金) 01:08:42.84
>>282 なるほど
ありがとん
ちなみに276は別の人ね
>>280 (1..100).to_a.shuffle.take(50)
a = [*1..100] b = a.sample(50) a -= b
クラスではなくクラスの特異クラスにバインドされているメソッドなので特異メソッドで問題ないんじゃないでしょうか?
昔のリファレンスはクラスメソッドだった
なるほど Rubyにはクラスの特異メソッドとインスタンスの特異メソッドがあって、前者が通称クラスメソッドなんですね ありがとうございました
>>280 a = [*1..100]
b = []
50.times {|i| b << a.delete_at( rand(100-i) ) }
b.sort!
50.times{ b << a.delete_at( rand(a.size) ) }
292 :
デフォルトの名無しさん :2013/12/20(金) 21:04:28.96
>>289 クラスの特異メソッドではなく、Classクラスのインスタンスの特異メソッド
英語の教科書に書いてある "meta class is awesome"って、あれです。
クラスとは分類です。 過疎地でもなければ小学校でクラスに分けられたのではないか。
クラスの知識なんて暮らすのには必要ないよ
Class classのインスタンスがクラスなんだからクラスのメソッドでいいじゃないかという話になってた気がする
298 :
デフォルトの名無しさん :2013/12/21(土) 12:38:07.29
>>293 仕事の内容毎に、部署を作るようなもの
ゲーム作るとして、味方キャラを制御するクラス、敵キャラ制御のクラス、画面表示やエフェクト制御のクラス…て感じで担当分けたりする
全部ごちゃ混ぜだと管理大変だから
階層構造をもって分類したもの
階層構造は本質じゃないし必ずしも要らないよ。
>>298 物じゃなくて仕事ごとに分けているんですか。
ruby使っててもオブジェクト指向使わない人もいるんですね。
クラスを作る対象は別にモノに限られているわけではない
do endと{}の使い分けをアホに分かるように教えて下さい
1行なら{} 複数行ならdo end 10.times.countのようにdoの前に動詞がくるなら複数行でも{}
File.openの引数 "a+" "w+" は初期化してから書くかファイルの末尾から書くかの違いとして "+r" これはなんですか?
そもそも10.times.countで複数行またがることなんて
>>306 ファイルの内容を保持したまま読み書きとか上書きするのに使う。
irb(main):001:0> File.read "hoge"
=> "foobar\n"
irb(main):002:0> File.open("hoge", "r+") {|f| f.write "baz" }
=> 3
irb(main):003:0> File.read "hoge"
=> "bazbar\n"
irb(main):004:0> File.open("hoge", "r+") {|f| f.seek 3; f.write "qux" }
=> 3
irb(main):005:0> File.read "hoge"
=> "bazqux\n"
テキストファイルだとあまり御利益ないかもしれないけど、
固定長バイナリファイルの操作などでは使い出があると思う。
>>303 foo arg {} の場合ブロックはargが取り、foo arg do ... end の場合ブロックはfooが取る
>>309 ありがとうございます。
そもそもw+だと全て消えてしまうんですね
wは別プロセスがflockしてても消してまうでな
そのへんはもう、いわゆるRuby関係ない話になってしまうな OSに依頼してるだけだから、OS(ファイルシステム)がどう動作するかという話に
flockはadvisory lockだからflock使わないアプリケーションから消せるのは当たり前
class A class B < A alias fuga hoge end def hoge end end で undefined method 'hoge' となってしまいます。 def hoge を class B を定義する前に書けば問題ないのですが、 a.rb a/b.rb とファイルを分割していて a.rb の先頭で a/b.rb を require するとこうなってしまいます。 なにか上手い解決法はないでしょうか。
def fuga; hoge; end とか
書き方か分割のしかたかどっちかが本質的にヤバいと思われる エラーを消すことを目的に小細工すると早晩破綻が来そうだ
>>315 問題は、以下に示す依存関係の矛盾にある
・クラス継承 A::B < A は、サブクラス A::B が存在するには
スーパークラス A が必要である、いいかえると
「A::B は A に依存する」ことを意味する
・ファイルrequireは、require元ファイル a.rb が存在するには
requre先ファイル a/b.rb が必要である、いいかえると
「a.rb は a/b.rb に依存する」ことを意味する
矛盾の解消には:
サブクラス A::B がスーパークラス A を必要とし、かつ
これらクラスが個別のファイルで定義されているならば、
A::B を定義する a/b.rb が A を定義する a.rb をrequireすべきである
という原則へ立ち返ることが出発点になる
(
>>318 の続き)
更に付け加える
(
>>318 が原則 MUST であったのに対し、これは推奨 SHOULD になる)
モジュール構成とクラス継承の違いを意識してコード設計すべき
・モジュール構成は名前空間を定義する
・クラス継承はデータ型の依存関係を定義する
>>315 の例において、もしも名前空間が不要であれば、
そのコードは以下のように添削できる
class A
def hoge; end
end
class B < A
alias fuga hoge
end
もし名前空間が必要であるなら、以下のようになる
class A
def hoge; end
end
module M
class B < A
alias fuga hoge
end
end
rubyでfloat型を宣言する方法って 1.0とする以外にもなにかありませんでしたっけ fつけたり
>float型 そんなものはない Floatオブジェクトにしたいならto_fでいいんじゃなかろうか 例外出したかったらFloat()
ありがとうございます。 fをつけて宣言することはできないのでしょうか
324 :
315 :2013/12/23(月) 17:36:08.12
ありがとうございます。 class B は名前空間が必要で、その名前が思いつかなかったため、 サブクラスだからという理由でAの中に定義したのが間違いだったのだと思います。 A を名前空間のためだけのモジュールにして、メソッドを別に切り出し、B からそれを require する事にしました。
325 :
デフォルトの名無しさん :2013/12/24(火) 09:52:39.17
繰り返し文がいろんな種類があって何から覚えていいのか分からない。 JavaとかJavaScriptとかPHPみたいな for(i=0;i<MAX;i++){ //処理 } ってRubyで、どう書けばいいのですか?
MAX=10なら 10.times { #処理 } 実行中に愛が欲しければ 10.times {|i| #処理 }
ただし本質的な例外があって、「x個のモノ(配列など)すべてにアクセスするループ」の場合は arr.each do |e| # e をどうにかする end というeachによる繰り返しを【必ず】使う 極めて稀にこれでどうにもならないのがあるんだが、おそらくそれにぶち当たることは初心者ではないはず 要素が10個ある配列arrから要素を取り出して表示したいときに 10.times do |i| puts arr[i] end と書いたらグーで殴られても文句言えない 普通はこうする arr.each do |e| puts e end
pets =['イヌ', 'ネコ', 'タヌキ', 'タヌキ2'] pets.each {|pet| puts pet + 'が俺を見つめている!' }
329 :
325 :2013/12/24(火) 12:54:31.28
>>327 おお!凄いありがとうございます!!!
N個の配列に全アクセスする場合必ず使うって部分でようやく理解、納得できました!
>>326-327 さんがいなければ私はRubyを挫折していたかもしれないです。
本当にありがとうございました!
どのサイト見てもピンとこなかったので嬉しい限りです。
>>326-327 はEvernoteにブチこんでおきます!
2chにていねいな説明は似合わないな
そんなに丁寧でもない
def importData(file, persons) id = 1 file.each_line do |line| array = line.split("\t") persons.push Person.new(id, array[0], array[1], array[2], array[3]) id = id+1 end end タブ区切りのファイルを読み込み、id、名前、職業、身長等のメンバ変数を持つPersonオブジェクトを作り それをpersonsという配列にプッシュするメソッドなのですが わざわざeachの外でカウンタ変数を宣言してカウントアップするという方法がかっこ悪い気がします Rubyっぽくカッコイイ方法で書く方法を教えていただけないでしょうか Rubyはさっき始めました
>importData オーケー、まずやるべきことはその参考書なり参考サイトなりを焼き捨てることだ
with_index
RubyだとLCCはホントに人気ないよね
336 :
332 :2013/12/24(火) 23:57:00.51
>>334 ありがとうございます
出来ました
>>335 特に何か参考にして名前つけたわけじゃないですけど
何か変な所ありますか?
337 :
332 :2013/12/24(火) 23:58:21.86
安価間違えました
>>335 じゃなくて
>>333 でした
ついでに
>>335 を見て意味が分かりました
CとJavaしかやってないのでrubyっぽい命名が分かりませんでした
クラス名はcamelCaseなんだけどね
>>332 それ繰り返し呼んだらid被るよな。
その時のarrayのlengthから算出すべきじゃ。できればロックもかけて。
>>339 ありがとうございます
とても参考になります
>>400 今はこのようになっております
これだと大丈夫でしょうか
def import_data(file, persons)
id = 1
file.each_line.with_index do |line, index|
id = index + 1
array = line.split("\t")
persons.push Person.new(id, array[0], array[1], array[2], array[3])
end
end
間違えました def import_data(file, persons) file.each_line.with_index do |line, index| id = index + 1 array = line.split("\t") persons.push Person.new(id, array[0], array[1], array[2], array[3]) end end
with_index(1) で 1 からになるよ。
>with_index(1) で 1 からになる 質問者じゃないが知らなかった ありがとう
Ruby作者はBasic厨だからあんな気持ち悪いendとかいうのをプログラマーに強制的に書かせる使用にしたのだ 括弧使わせろよ
347 :
デフォルトの名無しさん :2013/12/25(水) 15:34:15.15
>>346 Rubyのbegin-endはEiffel由来だし
matz自身が{}を使った文法に変えようとしたことがある
"use strict"を宣言したときだけに限りprivateとprotectedをJavaやPHPにあわせろ!
いっそのこと新しい括弧文字を発明しちゃいなよ
特異クラスの特異クラスはあるでしょうか? アクセスの仕方がわからず、どのようにそれを確認したらよいのかわかりません。 またアクセスできないのならば、それはどのような意味を持つのでしょうか。 何らかのセオリーに裏打ちされた仕様の帰結なのでしょうか? obj = Object.new class << obj def self.f() ...
スマホはAndroid ブラウザはPCもスマホもChrome IMEもPC、スマホ共にGoogle日本語入力 メールはGmail クラウドはGoogleDrive スケジュール管理はGoogleカレンダー 撮った写真はPicasaに自動アップロード の俺に死角は無かった Googleがお漏らししたら完全に詰むわ
誤爆した
354 :
デフォルトの名無しさん :2013/12/26(木) 10:18:52.84
>>351 >> 5.times.reduce("") {|o| o.singleton_class }
=> #<Class:#<Class:#<Class:#<Class:#<Class:#<String:0x007f9ae5016508>>>>>>
作ることはできるみたいだけど、使い道を思いつかない。
RubyはどのLinuxと相性がいいですか? Ruby開発者の多くが使っているLinuxのディストリはなんですか?
結局はrbenvとか使ってパッケージシステムをガン無視して手元でコンパイルして使うことになるので 相性ってのは特段ないと思うが、どうしてもと言うならDebianかUbuntuのどれかだと無難かもしれん いわゆるRedHat系を使ってるコアユーザーはあんまり見ない
Ruby2.1のRubyinstallerはいつでますか?
リリースされた時です
Ruby2.1はリリースされたのでRubyinstallerでいつ出るのか聞いているのです
日本語が理解できないバカ回答者
361 :
デフォルトの名無しさん :2013/12/26(木) 16:29:29.73
ミックスインと継承はどのように使い分ければ良いのでしょうか。 多重継承が出来ないからミックスインというのは分かるのですが、 だったら全部ミックスインじゃ駄目なんでしょうか。
スーパークラスのインスタンスも作りたい場合は継承しかない
jekyllrbって新規・更新分のファイルのみコンパイルする方法ってありませんか? ファイル数が多くなると毎回コンパイル時間がかかるので不便です
>>364 使ったことないけど、サイト見れば --watch で何とかなりそうな気配
都合の良い部分だけを恣意的に引用して何がしたいのやら
>>343 の元記事でやってるようなスクレイピングに文字列処理に CSV といった
スクリプト言語の昔からの主戦場にまで来られるとやだなあ
>>362 ミックスインと継承は、どちらも既存の部品を拡張して新しい部品を作るという意味で似ている
ただし拡張元の部品がミックスインではモジュールであるのに対し、
継承ではクラスであるという点で、両者は異なるもの
そしてRubyのクラス(=Classクラス)はモジュール(Moduleクラス)のサブクラスであり、
モジュールとクラスの違いがミックスインと継承との違いをもたらす
そんな(モジュールには無くて)クラスにある特徴の一つが、属性(=インスタンス変数)を持てる事
たとえば「箱(Box)」クラスを継承すれば:
・「色(color)」属性を持つサブクラス「色付き箱(ColoredBox)」や
・「角度(angle)」属性を持つ「回転可能な箱(RotatableBox)」を
定義できるけど、ミックスインでは
新しい部品に「振る舞い(=機能)」は追加できても、属性を付け加えることができない
370 :
デフォルトの名無しさん :2013/12/27(金) 01:12:47.30
"aaaa\nbbbb\ncccc".split($/) => ["aaaa", "bbbb", "cccc"] こんな感じのソースを見たのですが、$/の部分が理解できません。 正規表現でもないし文字列でも無いし何なんでしょうか。 "aaaa\nbbbb\ncccc".split("\n") => ["aaaa", "bbbb", "cccc"] 同じ結果になりますが、これなら分かります。
371 :
デフォルトの名無しさん :2013/12/27(金) 01:14:01.35
わー自己解決しました!まさかのグローバル変数w
362です。ありがとうございます。
>>363 なるほど。ミックスインだとミックスインする前の
クラスのインスタンスは作れないってことですね。
>>369 Class.new.methods - Module.new.methods
=> [:allocate, :new, :superclass]
これがモジュールとクラスの違いでしょうか。
モジュールはインスタンスを作成できない(属性をもてない)、継承できない。
でも属性をもてないモジュールでも、ミックスインではクラスに属性を追加できますよね。
最近それを知って、継承とどう違うのか、どう使い分ければよいのか疑問に思ったのでした。
javaのインターフェースみたいなもん
rubyのブログってjavaに比べて少ないけどどうして?
人気がなくて死にいく言語だから
ジャバはオワコンって噂ですがルビーはとっくのとうにオワコンだったんですね ルビーにセカンド・チャンスは訪れないんですか?
rubyです
>>376 Struts, Perl CGI -> PHP -> RoR, Django, Grails, Play, Lift, Wicket -> node.js -> PHP
最近は分散環境とかモバイル環境とかで言語は何も流行ってないんじゃない。 敢えて言えばjavascriptが流行っている気はするが、リスクしか感じない。
node.jsで十分だろうけど、Apacheが消えないのでPHPは不滅 node.jsが普及した頃合いにdart,golangが流行りだす。恐らく大人の事情 言語の学習コストなんて何かの負債が積もるだけなのでプレーンな言語しか触らないのが吉 突き詰めていくと、htmlだけでも詰め込むことは沢山ある
phpがrubyのライバルだとするとサーバーサイドの要望を満たすようなrubyフレームワークがあればrubyのセカンド・チャンスになるでしょうか rubyの課題としてはノンブロッキングとマルチコアの強化とそれを利用したフレームワークの整備ですかね 正規表現はjavaの方が強力なので、最近のrubyは複素数などちょっとした計算用途でしか使ってなくてあまり出番はないんですけど
>>354 ありがとうございました
入れ子にしてもアクセスできました
o.singleton_class.superclass => String
あるインスタンスの特異クラスのスーパークラスは、そのインスタンスのクラスになっていて
クラスとインスタンスの間に割り込んでいるような印象でした
o.singleton_class.singleton_class.superclass => #<Class:Sstring>
o.singleton_class.singleton_class.superclass.superclass => #<Class:Object>
一方特異クラスの特異クラスは、スーパークラスの特異クラスと継承関係がありますね
祖先はいるけれども子は残せないというところに飲み込みがたいものを感じました
node.jsがこれから流行るわけないだろ なんか今日このネタどこかでみたなブログかTwitterで もしかしてそういうのを鵜呑みにしちゃったバカなのかな
Thinでアクセス制限する方法を教えてください 127.0.0.1以外の接続を遮断したいです
386 :
デフォルトの名無しさん :2013/12/27(金) 12:58:29.06
>>383 "メタプログラミングRuby" でオブジェクトの関係を図解しているあたりを
(立ち読みでも)チェックしてみるといいかも。
>>385 Thin も Rack アプリだから、Rack レベルで遮断すればいい
388 :
デフォルトの名無しさん :2013/12/27(金) 17:44:06.90
死ねゴミ共がw
>>372 >でも属性をもてないモジュールでも、ミックスインではクラスに属性を追加できますよね。
いや、単純なミックスインでは、クラスに属性は追加できないよ
「属性を追加する振る舞い(=機能)」をクラスに追加することならば可能だけどね
>最近それを知って、継承とどう違うのか、どう使い分ければよいのか疑問に思ったのでした。
ミックスインだと、
>>369 の例はどう書けるのかな?
継承ならば、初歩的な以下のコードになる:
class Box; .... end
class ColoredBox < Box
attr_accessor :color
end
class RotatableBox < Box
attr_accessor :angle
end
RubyはやっぱRailsがあって良かったよな Pythonはそれがない
Djangoもそうだけど、後発のRails風フレームワークってRailsを超えられないよな Railsは最初に作られたときからもどんどん発展し続けてるし 最初に作る、というのがいかに技術的にすごいことか、という例だな
越えられないというのはどの項目に対していっているのか?
>>392 目的によるだろう。
Djangoはユーザ管理が標準であるからログインシステムではRailsを超えてると思うぞ。
手数少なくって意味ならCMSの方がいい。
Rubyはプログラミング言語の中で最も簡単な言語のうちの一つ。 だから最近では小学校でRubyから始めるプログラミング学習を導入してたりする。 わかりやすいのは勿論メリットだが、ゴミのようなコードや情報が溢れるのは問題である。
中学校で「ぱそこん」とBASICが蔓延したときもゴミのようなコードや情報が溢れた 高校大学で「ぱそこん」とほめぱげへようこそが蔓延したときもゴミのようなサイトや情報が溢れた つまり気にする必要はまったくない
BASICでもVBでもC89でもF77でもTurboPascalでもDelphiでもPerlでもJavascriptでもC#でもRubyでもPythonでも結局は同じだよね
>>395 そもそもRubyって本当にそんな簡単な言語か?
誰が書いても同じようなクソコードになるJavaより全然難しい印象があるんだけど
個人的にC#、Java、VB、JavaScriptより難しいとは思う
ナニをどんなふうに作るかによるんだよね よく考えるまでもなく当たり前の話ではある
読みやすいけど、難しい 奥が深い・・
簡単の定義にもよるけど とりあえず何か動くものを作る、という意味では コンパイル必要なJavaなんかより遥かに簡単 正しいコードを書く、という意味ではJavascriptよりずっと簡単 言語仕様を踏み込んで理解しようと思っても(実装の汚さは別として)表向きはシンプルで分かりやすい C全く分からんって人にも理解できるはず。 パーフェクトRubyあたりの本は小学生でも理解できる。Cの本は無理。 バランスよく簡単だとは思う。
Javaなんて手動でコンパイルするやつなんていないだろ IDEなりで自動でビルトして起動だよ
>>402 IDEは分かって使ってる人には便利だが、初心者には分かりにくくさせてしまう
コンパイルという動作が必要ということは理解する上でも避けて通れないからな
いやどのC#やVBの本もVisual Studio前提だし、Javaの参考書なんか少しでも実践的なものはEclipseやプレアデスのインストールからはじまってるだろ 自分でコンパイルすることにどれだけ意味があるのかわからんわ
自分でコンパイルすることではなく、コンパイルしなければ動かないという点がハードルになるんだよ もちろん、分かってる人間にはらくらく超えられるハードルなんだが、初心者はつまづきやすい部分でもある PHPみたいなクソ言語がもてはやされてるのもその辺に理由があるのだろう
>>397 それって誘導的に反証のレスを期待してるの?
>>400 Rubyの難しさはJava,PHPの難しさとは別のところにあるよ
>>402 javac, antからやれ
>>405 文法がc/c++にそっくりだしWeb上の情報量が多い
自己解決より誰かが解決してる情報量が圧倒的に多くて効率が良い
Ruby暦1ヶ月程度だけど何の障害も無い俺にRubyの難しさを教えてくれw
rubyは短く書くのが簡単。 pythonは書き方揃えるのが簡単。 Javaは読むのが簡単。 長所を活かせるかは使い手次第。
>>397 のラインナップを見てわからない人がいるのか
これ全部「中高や大学教養の教育現場で導入がもて囃されたことが(瞬間最大風速的に)ある言語」だぞ
C89とF77は言語というかバージョン名だったりコンパイラ名だったりするがぬ
言語がなんであろうとライブラリがどうであろうと「ふつうのひと」が初心者時間内や授業時間内に作れるプログラムはクソである
ところでそれは Ruby 初心者スレッドで話すようなことなのか
Rubyに妙な期待や過剰なDisを持ってる人への牽制にはなるんじゃないの
>>411 国語の作文ですらそうだから仕方なかろうて
恥ずかしいので自分のメイン言語がRubyだなんて言えない。 すっげー頭悪そうだし、流行に乗せられた馬鹿みたいだから。 Pytyon使いならカッコイイので堂々と言える。
明確な目的がないと何つかってもバカだと思うよ もっといえば、目的もなくプログラミングをやるのは最高に頭が悪いと思う 中高生がオレ、ギターやってるんだぜ!ぐらい、ちょっと遠くから見たい存在
むしろ PC を持っててちょいオタならプログラミングをかじらない理由がない
サービスが作りたいのか、ゲームが作りたいのか、言語処理系が作りたいのか Softwareが作りたいのか、テキスト処理したいのか、データマイニングがしたいのおか みんな、自分自身がわからないままプログラミングをしているって言うんだ
設計、デザパタ、リファクタリング、再帰 GC付きの言語で、独自のイケてるコードを書くなんて2の次 コーディング規約でも読んでりゃ良い
そのメインの言語を使って、何をやったかが大事だ。 俺? エロ画像集めに決まってるだろ。
エロ画像集めは無理なく自然に実力がつくと聞いている 本能が強力にあなたをサポート 嫌だと思っても、ついついコードを書いてしまう まさに、最強の学習法である でも女の子である俺はそんなはしたない事はしないけどね
俺もwinnyを必死に勉強してパケット解析の能力が付いたっけなぁ
ザッカーバーグも画像集めてたな
初めての言語が Java メビウスみたいなシューティングゲームを作りたくて覚えた 付随して高校数学をやり直したぞ
Webでのゲーム、アプレット
426 :
デフォルトの名無しさん :2013/12/29(日) 01:04:08.09
class Test def a= a @a = a end def a puts @a end end t = Test.new t.a = 'hoge' t.a これが通る理由を教えて下さい。 定義したメソッドは a=であり a = ではありません。 Rubyではメソッドに半角スペースは使えないのではなかったのでしょうか。
t.a = は Test#a= を呼び出す糖衣構文である それだけの話
リクエストURI
http://xxx/xx/xx.php [truncated] request={"header":{"api_version":"x.x.x","packet_unique_id":xxxx},
"get_abc":[{"id":xx,"data_0":xx,"data_1":xx,"data_2":xx,"data_3":xx},
{"id":xx,"data_0":xx,"data_1":xx,"data_2":xx,"data_3":xx},
このように
http://xxx/xx/xx.phpに送信されると思うのですが "id":xx,"data_0":xx,"data_1":xx,"data_2":xx,"data_3":xx
このパターンが例だと2つですが
5つにして送信したいのです。
置換ではなく変更したものを"追加"にするにはどうすればよいか教えて頂けませんか?
url = gr.get_url()
if(!gr.is_match(url,"^
http://xxx/xx/xx.php "))
return
end
ここから色んなコードを組んで試してはみたのですが
考えれば考えるほど混乱し失敗して
質問させて頂きました。
よろしくお願いいたします。
>>427 つまりパーサーレベルで=が後についてるメソッドは空白が無視できるように特別扱いされてるってことですか?
>>429 ま、だいたいそんなところ
そのため、以下のような罠がある
class A
def b=(v)
@b = v
end
def f
b = 1
@b
end
end
a = A.new
a.b = 2
a.f => 2
これは、f というメソッドの中の b = 1 がメソッド扱いされず、ローカル変数への代入として
扱われてしまうことによる
これを回避するには、self.b = 1 と書かなければならない
432 :
デフォルトの名無しさん :2013/12/29(日) 14:32:57.05
Rubyのハッシュって数字をキーには持てないのでしょうか p {1=>:a} コンパイル通りません
>>432 ハッシュじゃなくてブロックと解釈されてる
p({1=>:a})
なら通る
ありがとうございました
435 :
デフォルトの名無しさん :2013/12/29(日) 16:16:06.22
>>432 もてる。
ただし、pメソッドに渡すなら p({1=>:a}) ( あるいは最後の引数の{}を省略してp(1=>:a) ) としないと駄目。
p {1=>:a} という書き方は、pメソッドにブロックを付けた形となり、中身がブロックとしては構文エラーになる。
p {'a'=>:a} でもエラーになるよ。
436 :
デフォルトの名無しさん :2013/12/29(日) 16:17:00.79
あれ、さっきリロードしたときは
>>433 以降なかったのに…
どこかにRubyのTrapが詰まったサービスってないの?
Rubyネタをつぶやくと教祖がリツイートして晒しあげるからうぜえ
>>439 今後、聖地ではメタプログラミング騎士団たちによる魔女狩りや、
ジャック・ド・マツェーの異端審査すら起こるだろうが、
コアコミッタたちの魔女化、所謂、ワルプルギスの夜に比べると
ヒッチハイカーたちにとって瑣末な問題である。
そして、トロールなんて被害のない場所でボヤいている。
IT系の糞記事を書く記者とか。私とか。
魔女を生み出すぐらいなら健全な精神を持った子供たちは、
pypyがはやいとかcincoがオープンになったとかで騒ぐより、
manコをなめたりFAQした方がよっぽど良いと思う。
わたしのたった一つの友達言語
渾身のダジャレをスルーされたっ!
>>444 きっと書いたやつは何かのパラノイア持ちだと思うね.
わたしってホント、バカ。とか、もう誰にも頼らないとかクダ巻いてるぜ
446 :
デフォルトの名無しさん :2013/12/30(月) 23:43:00.64
BerkshelfとかChefとか本当に便利なのか立ち止まって考えよう
2013年12月29日 04:54
http://dqn.sakusakutto.jp/2013/12/berkshelf_chef_gem_ruby.html >berkshelf便利だから使うべき、みたいな記事がいっぱいある。
>ChefとかBefkshelfとか組み合わせて便利便利鼻血ブー、みたいなやつ。
>私はこういう「gemのライブラリを組み合わせて作られたサーバ構築ツール」を手放しで礼賛する風潮に違和感を感じる。
>みんなが便利便利言ってるから自分も便利便利と言ってしまっているだけではないのか。
>王様がステキな服を着てるとみんなが言ってるけど、あなたにはその服が本当に見えているのか。
>本当にこれらのソフトウェアを使って私たちは幸せになれるのだろうか。
>ちょっと冷静に考えてみてほしい。
えらく納得してしまったこの記事。
Rubyは開発環境・実行環境が貧弱でバージョン間の互換性がないから初心者にはお勧め出来ない 数年前に刊行されたRuby入門本やRails入門本なんて今では役に立たないしな
インスコまでの苦労話で1mmも関係ない記事だから読むだけ無駄だよ
初心者がそういうのではまって長時間無駄にするって多いんじゃないの? というか初心者じゃなくても。
>>447 どっちかって、プログラミングの入門書全部が役に立たなくって
概要だけ掴んで本家のマニュアル読むしかない
Ruby初心者だけどRubyの何が奥深いのかマジで分からん メタプログラミングのこと?? あんなもん最初見た時ちょっとトリッキーに見えるだけで何の奥深さも感じない。 Javaの方が100倍は奥深いわ
Javaの奥深さは奥が深い症候群(a.k.a バッドノウハウ)というものでは Ruby is an accepable Lispと言われるくらいだからLispを奥深いと思わないならはいそうですねとしか
うーん だってruby使ってると子供が使うオモチャのようにしか感じない。 Cのような繊細なスキルやプログラミング知識は不要だし、Javaのような経験も要らない
初心者でも奥が見える言語Java。
最近こういうネタもすっかり減ってしまった・・・
Rubyの奥の深さは、歴史に潜む影の存在が見え隠れすることだよ。 これは2000年前に始まったChristian文化の復活だろうね。 Javishとか呼ばれるゴスリンからの選民思想を引き継いだ旧支配者たちが Strutsの包茎手術ついて真面目に議論していたり、 プロプライエタリのゴロツキたちがSoftwareパテントの徴税しにくる時代にDHHって救世主が現れたんだ。彼は大きな偉業と奇跡をやってのけた。 社会的弱者たちを救ったRoRとウェブアプリ文化。 すべてのモノがCloudに救いを見た。 だけど、実際は歴史の影に潜む影の存在によって全てが仕組まれていたんだ。 その痕跡は、そこらじゅうに見え隠れしている。 いわゆる、魔法少女たちの希望と絶望の相反転によって、 人類史における文化的な発展を促進させる触媒だったんだ。ぞっとするね。 どこかで計算機科学のバックグラウンドを持った人類史学者が、 「Ruby社会と基督文化ー超弦理論的視点による考察」 って論文でも執筆してるんじゃないかな。
またまた凄いやつが棲みついちゃてるんだなこのスレはw
キャリア持ちがRubyistになるなんて、Larryが天国へ行くより難しい
>>446 ChefとBefkshelfを使うことに対してじゃなくて
インストールに戸惑ったから愚痴ってるだけの記事
中身がない
最近流行の釣りで注目をあびようとかんがえてるきちがいが書いた記事
Will Code Ruby For Food
WindowsでRubyというのがまず間違いだ
だよね。スタバでMac book Airなんて流行遅れ 通は吉野家で中古ノートにGNUStep
Objective-CがApple以外で使えないのは困ったもんだ ってRubyのスレだろここは Ocraにはいつもお世話になっています
>>447 >バージョン間の互換性がないから初心者にはお勧め出来ない
互換性がないってのは、たとえばこういふ話のことかな?
> 940 名前: デフォルトの名無しさん Mail: sage 投稿日: 2013/12/31(火) 03:44:40.65
>
>>939 エラーにならなくなった理由は別にある。
>
> 2.x
> range -> リストを作る。OverflowErrorでなくとも、大きなメモリを確保しようとして
> MemoryErrorになることもなる。
> xrange -> range型のオブジェクトを返す。
> rangeオブジェクトの各属性は 構造体で (Cの)long型で宣言されてるので、値が範囲外だと
> OverflowError
>
> 3.x
> range -> range型のオブジェクトを返す。rangeオブジェトの各属性の型はPyObject。
> pythonの数値(多倍長整数)を持つようになったので、2.xの時の制限はなくなった。
>>466 2時間前にカキコされた1つ前のスレさえ読んでいないのか、
それとも読んではみたものの無知故なのか......?
ちなみにGNUstepとRubyとのバインディングは存在する
・RIGS: Ruby Intrerface to GNUstep
http://www.gnustep.org/experience/RIGS.html 位置付けとしては(MacRubyではなく)RubyCocoaに近い
以前にDebian上でインストールに挑戦してみた時には
Obj-Cコード上へ修正が必要で、誰もが安心して使える状態にはなかった
でも、一度インストールしてしまえば、GNUstepのフレームワークは
OS X でいうところの10.3に相当する素朴な仕様なので、
その知識があれば普通にRubyスクリプトだけでGUIアプリが気軽に作れる
メソッドの外でインスタンス変数?を使っているコードを見ました。 class Hoge @hoge = "hoge" end この@hogeにはHogeのインスタンスからもアクセス出来ないのですが、 特異クラスってとこに定義されてるからという理解であってるでしょうか。
前にも出てたけど、クラスとはClassクラスのインスタンスであるというお話だ irb> class C; @hoge=1; end irb> p C.instance_variables [:@hoge] irb> p C.instance_variable_get(:@hoge) 1 "普通"にプログラムしているぶんにはあんまり使わない機能 メタプログラミングとかプログラムするプログラムとか作るときに使うことがある
クラスインスタンス変数で調べるとよい
>>469 >>470 ,471で正しいけど、あえて蛇足する
Rubyではあらゆるすべてがオブジェクトだから、Hogeクラスもオブジェクトになる
で、Hogeクラスは:
・「スーパークラス - サブクラス 関係」における、Objectクラスのサブクラスである
BasicObject --> Object --> Hoge
irb(main):002:0> Hoge.superclass
=> Object
irb(main):003:0> Object.superclass
=> BasicObject
irb(main):004:0> BasicObject.superclass
=> nil
・「クラス - インスタンス 関係」における、Classクラスのインスタンスである
Class --> Hoge --> hoge
irb(main):002:0> hoge = Hoge.new
=> #<Hoge:0x1a59f0>
irb(main):003:0> hoge.class
=> Hoge
irb(main):004:0> Hoge.class
=> Class
irb(main):005:0> Class.class
=> Class
> 特異クラスってとこに定義されてるからという理解であってるでしょうか。 あってない
ありがとうございます。 ClassクラスのインスタンスであるHogeのインスタンス変数という事ですね。 class << Hoge def get_hoge @hoge end end とすると参照できるので、特異クラスってところに定義されてるのかと思いました。 class << Hoge @kore = "kore" end こうやると特異クラスのインスタンス変数になるのかな。
Kona Linux2.2(Debian wheezyベース)で mikutterに画像投稿プラグインを導入しようと 思ったのですが、twitter gemのインストールが うまくいきません。以下のようなエラーが出ます。 /usr/bin/ruby1.9.1 extconf.rb /usr/local/lib/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mkmf (LoadError) from /usr/local/lib/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require' from extconf.rb:1:in `<main>' extconf failed, exit code 1 rubyのバージョンはruby 1.9.3p194、 gemのバージョンは2.2.0です。 どなたかよろしくお願いいたします。
aptでruby-devかruby1.9.1-dev入れとるか?
>>475 コンパイラが入ってないようにも見える
Rubyをパッケージで入れてるなら
>>476 で、devも入れてるならgccでも入れるがよろしい
>>476-477 ありがとうございます!
gccは入っているようですがdevが入っていませんでした。
しかし今度は~/.mikutterディレクトリにpluginディレクトリを作ったら
mikutterが起動しない…?
479 :
478 :2014/01/01(水) 20:56:08.55
スマソgit使ったらいけました。スレ汚し失礼。
Windowsで環境ごとにgemを分けることってできませんか? Pythonでいうvirtualenvみたいな感じでgemを環境ごとに分けたいんです
こんにちは、Ruby初学者です。教えてください。 いまとある入門書を読んでいて、組み込みクラスの継承関係のところなのですが p Object.is_a?(BasicObject) を実行すると true と表示されてこれはOKなのですが、 p BasicObject.is_a?(Object) も実行すると true となります。これはどうしてなのでしょうか?
482 :
デフォルトの名無しさん :2014/01/02(木) 20:10:20.64
> Object#is_a? > オブジェクトが指定されたクラス mod かそのサブクラスのインスタンスであるとき真を返します。 なので、 Object.is_a?(BasicObject) #=> true ObjectはClassクラスのインスタンスであり、ClassクラスはBasicObjectクラスの子孫なので、true BasicObject.is_a?(Object) #=> true BasicObjectはClassクラスのインスタンスであり、ClassクラスはObjectクラスの子孫なので、true 以下とは意味が違う Object.new.is_a?(BasicObject) #=> true Object.new.is_a?(Object) #=> true BasicObject.new.is_a?(Object) #=> error
>>482 なるほど!よくわかりました!ありがとうございましたm(_ _)m
あと、三人称を使った表現は避けるようにしよう、という理由で、 今は is_a? よりも kind_of? を使うほうが良い、とされている。 それと BasicObject はいろいろ特殊なので、初心者が実験とかに使うのは避けたほうが良い。
>>480 rvmとかrbenv入れてみたら?
winで使えるかはわかりませんが…
Windowsって元からgemは分かれてる気がするが
BasicObjectは「存在しないもの」として扱うといい いろいろ考えても無駄なので Kernelと同じ
ふたたび481なんですが、これは質問ではありませんで、つぶやき。 自分、仕事でjava歴10年、プログラミング歴はCとPascalから 入った25年のオサーンなんだけど、Rubyっていいねー。 まだ入門書半分読んだだけなのだけれども。 ある問題を解くプログラムをjavaで書こうとすると、その問題を解くのに 本質的ではないというか核ではないコードをモリモリ書かなきゃいけないけど Rubyだと、核になるコードだけ書けばよさげ。
そう言ってもらえてルビーも嬉しい
>>491 難しい。
>>489 に
>よさげ
と書いたのは予感レベル。
ただjavaだとこんなにベタに書かなきゃいけないけどRubyだとこんなに綺麗に
書けるよっていう例を作るのって、かなり頭良くないと出来ないだろうな
っていう気はする。
自分で作ったクラスの二項演算子や単項演算子、添字メソッドを
定義できるのが萌えた。
何か数学的なモデル(群とか)を基礎にしたシステムを簡潔に書けそう?
いやまあ、テキトーにヨタ話をしているだけなので流してw
自分はそれができるまでまだRubyに熟達してない。
まだ、「たのしいRuby」の半分までいっただけだから。
楽しそうだなw
横から。 オブジェクト指向でないのにJava使わされると、余分なコードが多いと感じる。 rubyなら、そうはならない。
余計な物など無いよね すべてが君と僕との愛の構えさ
たとえばダイクストラ法を書くときJavaとRubyで変わりますか?
変わるとも言えるし変わらないとも言える
>>497 アルゴリズムは変わらない。だからダイクストラ法って言う。
記法は変わる。だからJavaとかrubyって言う。
ソートがオシャレに書ける。ブロック付きメソッド、いいね−
>>489 RubyはBasicの皮を被ったLispだから。
PHP+Apacheでmod_phpみたいに homeディレクトリを作れば再起動しなくてもURLが公開されるようにしたいんですが なんかそういうのないですか? いまはthinを使ってるんですけどwebアプリごとにサーバを立ち上げるのが面倒くさいんです 常時5サイト程度は立ち上げてるのでタスクバーにたまっちゃうし
Ruby Windows サービス でぐぐればやってる人はいるけど面倒くさいだろうなあ
>>501 なるほど〜
>RubyはBasicの皮を被ったLisp
に関係あるのかもしれないけど、(またテキトー言いますが)
この言語を作った人は
プログラムを書く快楽
をよく知ってる人なんだろうなという気がした。
Ruby on Railsとかいう人を馬鹿にするフレームワークに5年ぐらいどっぷり浸かってたらRails以外マジで何もできなくなってた。 PHPすら難しく感じるレベル。フレームワーク無いと何も作れない。 ちょっとしたシェルスクリプト書くのも難しい。昔よく書いてたvim scriptも難しくてお手上げ
ブロック使ったソートってそんなおしゃれかなぁ・・ UFO演算子使うのってわかりづらいしダサいような
入門者オサーンです。 いまProcオブジェクトをcallで呼び出すところまで きたんだけど、Procオブジェクトって、JavaScriptのクロージャーっぽいね? (JavaScriptの、は不要か) なんかブロック付メソッド、core rubyのけっこうヤマだね。
nil.to_i => 0 この仕様は何か意図があるのか? to_iやto_sを多用するのがいけないのかもしれないが、この仕様が酷く見つけ辛いバグを生むんだ。 例外投げてほしいんだけど。
>>508 irb(main):001:0> class NilClass; undef :to_i; end
=> nil
irb(main):002:0> nil.to_i
NoMethodError: undefined method `to_i' for nil:NilClass
from (irb):2
from /opt/local/bin/irb:12:in `<main>'
Integer(nil) # => TypeError
511 :
508 :2014/01/04(土) 00:56:10.15
口応えするようで申し訳ないが、解決方法があるのは分かるんだけど nil.to_iが応答する仕様に何か意図があるのかが知りたいんです。 NULL値にメッセージを送れば例外発生すると思うのが普通だと思うので。
>>507 ようこそ、Rubyの世界へ
>Procオブジェクトって、JavaScriptのクロージャーっぽいね?
クロージャっぽいと言うよりも、Rubyのブロックはクロージャそのものだよ
クロージャは Proc.new で動的に生成できるけど、
リテラルとして静的に生成するのがブロック記法になる
で、JavaScriptではクロージャを function(x) { ..... } と書くけど、
メソッドの引数としてクロージャを渡す場合には、
Rubyならばブロック記法で { |x| .... } とコンパクトに書ける
JavaScript:
[1, 2, 3].filter(function(x) { return x > 1; }); // => [2, 3]
Ruby:
[1, 2, 3].select { |x| x > 1 } # => [2, 3]
Rubyに慣れてくると、JavaScriptの function/return といったキーワードや、
メソッド引数カッコ、そして行末のセミコロンがウザク感じられるようになるので、
くれぐれも用法/用量を守ってRubyを服用するように心がけてくださいませw
>>511 #define NULL 0
が由来ではないかと思われ
(個人的には、例外発生が正しい振る舞いだと思うけどね....)
Integer(nil) # => TypeError String(nil) # => "" これも意味不だよな
>>508 nilはundefではない
nilはnullでもない
「空」を表す概念であって、特定のオブジェクトに(ルーズに)変換したら
そのオブジェクトの空っぽの状態/初期状態になることが強く期待されている
例外が起きることを期待するのがそもそも誤り
irb> nil.to_s
=> ""
irb> nil.to_i
=> 0
irb> nil.to_f
=> 0.0
irb> nil.to_a
=> []
irb> nil.to_h
=> {}
Obj.newの引数にしたときどう振舞うかは好きにせえ
こっちは例外が起きるパターンが多いが
あと
>>514 に関してはわりとブレてる
ラムダの矢印リテラル -> (x) {x+1} とカッコはくっつけないとエラーという仕様はいつ治るんですか?
と思ってたら2.0で直ってたんですね。 当分1.9で行くしlambdaリテラルの方を使うのでまあいいんですけど。 それとprocインスタンスのコールは、f.call(42)ではなくf[42]という構文もあるみたいですが知りませんでした。 新機能紹介や2.x向けのチュートリアル(英語可)はないでしょうか?
もう一つ f.(42) ドキュメントどこだろう? ローカル変数宣言がなければ、引数の括弧は省略してしまえるとか そもそもブロックパラメータでのローカル変数宣言とかもドキュメントがないような f = -> x,y=1,z:2 do x+1 end # do endでもいいとか
520 :
デフォルトの名無しさん :2014/01/06(月) 00:51:02.86
Enumerableのメソッドで、 中身を先頭から評価していって、truthyな最初の値のみを得るいい方法ってありませんか 外部リソースの取得をするので、無駄な評価するのは避けたいです Enumerable# lazy.map.select.first という形で実装はできましたが、 2.0.0以降となってしまうので、lazyを使わずにもう少しRubyらしくできればと思いました
Enumerable# find でよい?
522 :
デフォルトの名無しさん :2014/01/06(月) 01:34:17.92
Enumerable#findはブロックの評価結果が真になったときの「元の要素」なのでだめでした これのブロックの評価結果を返す版が欲しいんですが
each と break を組み合わせるぐらいかな [nil, nil, 2].each {|i| break i if i } # => 2
A::B::C という定数?から A::B とひとつ上の階層の定数を得たいのですが、 文字列にしてごにょごにょして eval するのが普通なのでしょうか?
twitter, github, rails, Mongel, redmine, RSpec, cucmberと、 いつだって時代の最前線にいて、 いつも後から他言語に似たようなツールが出来上がるのは何でしょうか?
>>525 eval よりも Module#const_get のほうが、
意図が明確になってベターではないかと
>>489 仕事で使われない理由も、是非、考えてみてね
>>529 Ruby on Rails で仕事をしている人が
世界中にいる理由も、是非、考えてみてね
日本ですら、あんまり使われてないよね Rubyハッカソンに参加したら社会的追放者みたいなのしかいなかったよ 刺青と鼻ピアスとモジャモジャした長髪が印象に残ったぐらい いや、むしろ君らにぴったりかもね
企業文化ではリチャード・ストールマンは受け付けられないだろうな
日本では所詮サラリーマンなんだろ? システム上のワーカーとしての生き方について何か不満でも見つけたのか?
使われてない、使われてない、と連呼することで、脳内妄想を強化してるんだろうなぁw
最初は皆、美しくて書きやすい印象を持つ 次に、美しくも壊れたコードに出会って絶望する
実際Rubyあまり使われてないけど、 使われてるかどうかと、言語そのものの良し悪しは ビックリするほど無関係ってことはObjective-Cで実証済みだしな
Array( { 'a' => 1 }) #=> [['a', 1]] この糞仕様を何とかしろ
[{'a' => 1}] あれ、こうなってほしいのは俺だけ?
RoRバージョン上がって肥大化しすぎだろ もうコレ駄目だわ
PHPなんてフレームワークが増える一方で、それが枯れてるのか分からない
>>537 ,539
Array(obj) に渡す引数 obj は列挙可能(enumerable)なオブジェクトであり、
obj を列挙した各要素から構成されるArrayオブジェクトを返す
結果として、引数 obj がハッシュの場合には:
{'a' => 1}.each do |x| p x; end # => ['a', 1]
となり、要素 ['a', 1] は概念としてはペア(pair, 対)である
従って Array({'a' => 1}) が [['a', 1]] を返すのは仕様に沿った正しい振る舞いである
ここで、もしも Array({'a' => 1}) が {'a' =>1} を返すことを期待したとすれば、
それは「ハッシュを列挙した要素はそのハッシュ自身である」という要求仕様になる
すなわち:
{'a' => 1}.each do |x| p x; end # => {'a' => 1}
である
そして、この要求が糞仕様であるというのは誰の目にも明白だろう
>>537 ,539には、るりま等でHashクラスとEnumerableモジュールを復習されることを助言する
>>542 を訂正
誤:>ここで、もしも Array({'a' => 1}) が {'a' =>1} を返すことを期待したとすれば、
> ....
> {'a' => 1}.each do |x| p x; end # => {'a' => 1}
正:>ここで、もしも Array({'a' => 1}) が [{'a' =>1}] を返すことを期待したとすれば、
> ....
> {'a' => 1}.each do |x| p x; end # => [{'a' => 1}]
Array( { 'a' => 1, 'b' => 2 } ) だったら [{'a' => 1, 'b' => 2}] になってほしいのか? [{'a' => 1}, {'b' => 2}] じゃないよな
「不確定なオブジェクトを自動で配列にする」は判断と説明がけっこうめんどくさい
多少ご面倒でも自力で書くのがベター
irb> Array( 'abc' )
=> ["abc"]
irb> Array( 12 )
=> [12]
irb> Array( {'k'=>'v'} )
=> [["k", "v"]]
なんでやねん! カッコで括れや!
>>544 たぶん、でっかい要素1の配列になることが結構期待されてると思う
def Array(o)
if o.kind_of?(Array) then o else [o] end
end
こんな処理
546 :
539 :2014/01/07(火) 23:29:08.39
>>545 うん、その通り。
配列を作りたい時の元ネタって
配列か、そうでないか、の2種類しか気に留めないわけで
intだろうがハッシュだろうが余計なことせずに要素1の配列にしてほしい。
いや、どんな配列か気に留めるだろ普通・・・ pythonじゃないんだから余計なことせずにto_aを呼べばいいんだよ
なんでそこでto_aが出てくるの?頭大丈夫?
型を変換しようず -> k,v構造は維持、Ordered に〜
データが変換されろよ -> [o] もしくは o.flatten
みたいな期待の違いはあるんじゃない?
>>547 同じものがないから比較できない
d = {'a': 'val-a', 'b': 'val-b', 'c': 'val-c'}
l = list(d)
print l;
=> ['a', 'c', 'b']
TypeError出ると思ったが
個人事業者の同業者組合としてのRuby
スタートアップ専用言語と言い換えるとかっこいいぞ
そもそもプログラマーズベストフレンドですし
554 :
デフォルトの名無しさん :2014/01/08(水) 21:48:26.60
メソッドをドキュメントで書くとき Class#methodと書くのはRubyの独特の記法ですか? 他の言語に似たような文化はありますか? またRubyの場合メソッドとプロパティの境界が曖昧ですが Class#Propertyとは書かないのですか?
> またRubyの場合メソッドとプロパティの境界が曖昧ですが Rubyにプロパティはない
556 :
デフォルトの名無しさん :2014/01/08(水) 22:31:42.28
>>554 Javadoc の @see や @link も似ていると思う。
文化じゃなくて規定と言うべきだろうけど。
557 :
デフォルトの名無しさん :2014/01/08(水) 22:55:02.96
# =>
C#mはYardとかが後追いした感じ
require "cgi" cgi = CGI.new # ここでコケる。 ブラウザからのアクセスでは問題ない。 RESTツール使うと200返ってくるけど以下のエラー。(webrick) ERROR CGIHandler: /Users/hisanaoichikawa/Sites/work/hoge.cgi: /usr/local/Cellar/ruby/2.0.0-p353/lib/ruby/2.0.0/cgi/core.rb:663:in `Integer': can't convert nil into Integer (TypeError) from /usr/local/Cellar/ruby/2.0.0-p353/lib/ruby/2.0.0/cgi/core.rb:663:in `initialize_query' from /usr/local/Cellar/ruby/2.0.0-p353/lib/ruby/2.0.0/cgi/core.rb:827:in `initialize' from /Users/hisanaoichikawa/Sites/work/hoge.cgi:11:in `new' from /Users/hisanaoichikawa/Sites/work/hoge.cgi:11:in `<main>' ERROR CGIHandler: /Users/hisanaoichikawa/Sites/work/hoge.cgi exit with 1 192.168.10.160 - - [09/Jan/2014:16:14:39 JST] "POST /Sites/work/hoge.cgi HTTP/1.1" 200 0 何か見直すところありますか?
require "cgi" ここ
>>561 cgiってブラウザだけのアクセスしか認めていないとか?…ですか?
663行目見たらすぐ見当付いたが
>>563 見ましたが、良く分からないです。
Integer型にキャストできませんでした。って事は何となく分かりましたが、POST時に何も値を渡さなくても同じエラーになります。
あ、でもPOSTでなくGETにしたら、通ったみたいです。
うーん、何がいけないんですかね…
>>564 リクエストを見てみればいい。
ruby中でやってもいいが、俺は手軽にこうやる。
$ nc -lp 8888
566 :
デフォルトの名無しさん :2014/01/09(木) 20:37:50.55
>>564 cgi/core.rbの663行目
stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or ''
POSTリクエストのときは環境変数CONTENT_LENGTHの値を読んで整数に変換しようとしてるやん。
>>567 何言ってるんだ、CGIってプロセス(この場合ruby)を起動するときに、httpリクエストに応じて環境変数によって受け渡しする約束のことだろ。読まずに何しろと。
POSTなのでContent-lengthはあって欲しいが、なくても警告程度で補ってほしいとは思う。
>>567 1.9シリーズのバージョナップ自体は今年の2月で終わりなのよね
さあみんな2.0をつかうんだー
rfc的にはwebrickが初期化するか411返しているべきなんじゃないかなあ まあ0 bytesと見なしても動くと思うけど
571 :
560 :2014/01/10(金) 13:21:58.82
正直webの仕組み?も余り分かってないのでアレですが、原因はRESTツールの設定で Payloadに引き渡すデータを入力してPOSTするところをHeadersに設定してPOSTしていたのが原因でした。 Rubyと関係ないにも関わらず、ご回答下さった方、有難うございました。 因みにRESTツールはChrome ExtensionsのAdvanced REST clientです。 失礼しました。
また、質問なのですが…以下の配列をJson形式にしたいです。 [{"a": 1,"b": 1,"c": 88},{"a": 1,"b": 2,"c": 82},{"a": 1,"b": 3,"c": 79}] こんな感じにしたいです。 {"array": [{"a": 1,"b": 1,"c": 88},{"a": 1,"b": 2,"c": 82},{"a": 1,"b": 3,"c": 79}]} どうやったらできますでしょうか?
574 :
デフォルトの名無しさん :2014/01/10(金) 21:04:37.55
# また、質問なのですが…以下の配列をJson形式にしたいです。 a = [{"a"=>1,"b"=>1,"c"=>88},{"a"=>1,"b"=>2,"c"=>82},{"a"=>1,"b"=>3,"c"=>79}] p a p "array"=>a #こんな感じにしたいです。 p ({"array"=>[({"a"=>1,"b"=>1,"c"=>88}),{"a"=>1,"b"=>2,"c"=>82},{"a"=>1,"b"=>3,"c"=>79}]})
575 :
デフォルトの名無しさん :2014/01/10(金) 21:07:40.25
require 'json'
>>574 お、ちょっと前進しました!
配列だから緩い参照?(名前忘れました)で以降で参照した時にarrayキーが抜けてしまいます。
arrayキーを入れた配列を参照するにはどうしたらいいのでしょうか?
p "array"=>a.to_json #それっぽいJsonになった感じですが、
puts a #振り出しに戻る…
577 :
573 :2014/01/11(土) 12:33:16.49
すいません、
>>573 ,576は撤回します。
以下の配列をJsonとして扱いたいです。(ループで各値を取りたい)
aj=[{"a": 1,"b": 1,"c": 88},{"a": 1,"b": 2,"c": 82},{"a": 1,"b": 3,"c": 79}]
p aj[0]["c"] # 88
みたいに取る方法ないですしょうか?
578 :
デフォルトの名無しさん :2014/01/11(土) 12:35:44.80
b = ({"array"=>a})
Rubyには全く興味がなくて、あるデータをJsonに変換したいだけだと見た
580 :
デフォルトの名無しさん :2014/01/11(土) 12:40:01.93
>>577 一応rubyのハッシュは順序を保存してるから、[0]とかfirstでも見れるけど、
殆どの言語にはハッシュに順序ないから普通はeachで廻して取り出す
aj=[{"a"=> 1,"b"=> 1,"c"=> 88},{"a"=> 1,"b"=> 2,"c"=> 82},{"a"=> 1,"b"=> 3,"c"=> 79}]
p aj.first["c"]
p aj[0]["c"]
aj.each do |m|
p m["c"]
end
1.8系にはHashに順序なくて、1.9系から順序保存してるんだっけか?
そうだった気がする
gemとかrequireとか調べた方が幸せになりそう でもその前にeachか
>>580 > [{},{},{}].class
=> Array
ok ?
585 :
573 :2014/01/11(土) 12:57:26.18
>>580 > p aj.first["c"]
> p aj[0]["c"]
上記2つとも以下のエラーが出てしまいます。
hoge.cgi:52:in `[]': no implicit conversion of String into Integer (TypeError)
元のデータ(aj)が配列になってないのかなぁ…
.to_aでキャストしてるんですけど
>>584 すまん
arrayだなそれw
Hashは[0]とかじゃ取り出せないわeachした時は順序通りってだけか
>>585 Hashじゃないから文字キーで取り出せない、と言ってるようにみえる
p aj.first
p aj.first.class
589 :
573 :2014/01/11(土) 13:19:27.56
待ってろよ、いま誰かがなんとかしてくれるからな 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦旦 旦 旦 旦 旦旦 旦 旦旦 旦 旦旦 旦 旦 旦 旦 旦 旦 旦. ∧_∧ 旦 旦旦 旦 旦 旦 旦 旦 旦 旦 旦 旦 (´・ω・`) 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦. (o旦o ) 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦 旦. `u―u' 旦 旦 旦旦 旦 旦旦
じゃあなんとか1号いきます JSON("[" + data + "]").each{|h| h.each{|k, v| puts "#{k}: #{v}" }}
反則技だが、一番楽なのは多分これ aj = eval(data)
あ、ごまん できないわ
594 :
573 :2014/01/11(土) 13:47:28.86
>>591 おおお!!
ideoneの奴は綺麗に動きました!!
自前のではダメでした…cgi.params.classしてみたらStringじゃなくてHashでした。
で、Hash型?でideoneで実行しようとするとエラーになってしまいます。
うう。
595 :
573 :2014/01/11(土) 13:52:22.63
>>595 今dataが文字列ではなくて、配列
そして、
{"a": 2, "b": 3}
という書き方はできない。
{"a"=> 2, "b"=> 3}
は可能
{a: 2, b: 3}
は可能だが、意味が少々違って
{:a=> 2, :b=> 3}
と同じ意味になる。:aはシンボル
この辺はめんどくさい
require 'json' data='[{"a": 1,"b": 1,"c": 88},{"a": 1,"b": 2,"c": 82},{"a": 1,"b": 3,"c": 79}]' JSON(data).each{|h| h.each{|k, v| puts "#{k}: #{v}" }}
598 :
573 :2014/01/11(土) 14:13:41.16
>>596 なるほど。
勉強になりました。
流石にスレの私物化になってしまうので、この辺で諦めます。
多分、Hashな配列?のデータは全体を文字列にしてどうにか処理する予定です。
スレ汚しすいませんでした。
メタプログラミングRubyはマジでわかりやすい 上級本のイメージがあったけどProcとlambdaの違いとかClassとModuleの関係とかきっちりとしたselfの意味とかそこら辺が曖昧な初心者こそ読むべき
初心者用だからね
Rubyなんて使っている奴は永遠に初心者のまま 本当のプログラマにはなれない
プログラマを奴隷かなんかと思ってないか? 楽させてやれよ
ちゃんと大学出てる一定レベル以上の奴は仕事でRubyのプログラミングなんかしてないからw
簡単なのは悪じゃない。何で馬鹿にする奴が多いの? 最近じゃ小中学生が学校でプログラミングの授業あるのも珍しくないけど C言語じゃ無理だがRubyだから実現出来てるんだよね。 教育の場にこれ以上ない貢献だよな
NIFTY-SERVER C言語のフォーラム よく機械語・MASM自慢の人が来た
プログラミングってセンスある奴が本気でやれば1,2年でそこそこになると思うけど 小中学生でそういうの滅多に出てこないよな やはりグレてないと部活とか受験優先になるのかな
自分がガキだった頃のこと忘れるともう完全に老害ですね
部活とか受験勉強した方が確実に人生にプラスになる
必要な前提知識が多すぎる あと最初の言語の選び方とか いきなりオブジェクト指向言語選んでひどい目にあったし
gem install sinatra としてsinatraをインストールしたのに $LOAD_PATHにsinatraのパスが出てこない。 なのにrequire 'sinatra'でちゃんとsinatraを読める。 じゃあrubyは何を元にsinatraのパスを探してるのですか? そもそも、$LOAD_PATHに出てくるgemと出てこないgemがあるのも謎です。。
rubygemsはrequireを差し替えてる
614 :
612 :2014/01/13(月) 12:37:05.35
>>613 なるほど!rubygemsがsinatraのパスを持ってたのですね。ありがとうございます。
>そもそも、$LOAD_PATHに出てくるgemと出てこないgemがあるのも謎です。。 これは具体的に何?全部gem installで入れた?
>>602 何かの病気でプログラマになるんだろ。中ナントカ病ってヤツ
>>608 誰も最初の入り口と方向性を見つけられない。
何が酷いかって、最初の入り口にc++やHSPという罠が張りめぐらしてある
>>610 甲子園を目指していた知人は、今では自動販売機のジュースを詰替えているよ
ファイルから内容を読み出しつつ字句解析したいんですが、何かもっと簡単にやる方法ってないでしょうか? 今は以下のような分割方法を考えています pattern = /^(\c+)\s+/ #パターンは例 ARGF.each_line{|line| while line.size > 0 if line =~ pattern puts $1 line = line[$1.size..-1] else raise "parse error :"+line end end }
ブラウザのformからPostしたcsvファイルを読込みたい。 # -*- encoding: UTF-8 -*- print "Content-Type: text/plain\n\n" require "csv" file = cgi.params["csv_file"][0] p file #ファイル名がちゃんと取れてる CSV.open(file,"r") do |row| #ここでエラー p row end エラー内容は ruby/2.0.0/csv.rb:1254:in `initialize': no implicit conversion of StringIO into String (TypeError) from /ruby/2.0.0-p353/lib/ruby/2.0.0/csv.rb:1254:in `open' 何がいけないんですかね?
mime-multipart
>>622 html側で以下のように指定してるのですが、
<form method="post" action="csv_import.cgi" enctype="multipart/form-data">
ruby側でも何か設定する必要があるんですか?
print "Content-Type: mime-multipart\n\n"
では、何も変わりませんでした。(同じエラーになった)
p rowでTypeError出てるようにしか見えないなあ それ1.8のサンプルコードじゃない? 現行の奴だとブロックに渡されるのは行じゃないよ 行が欲しいならopenじゃなくてforeach使って
ごめんStringIOがpできんとかありえんわ マニュアル引いたら、cgi.params["csv..."][0] でかえるのはファイルパスじゃなくIOオブジェクトだってさ > the value is not a string, but an IO object, either an IOString for small files, なのでこれをCSV.open()するとてエラーになる 小さいファイルに関しては、CSV.parse(file.read) do |row| p row end が一番近い
>>625 おお!ありがとうございます!
以下で、それとなく出力できてるみたいです。
file = cgi.params["csv_file"][0]
CSV.parse(file.read) do |row|
p row
end
が、2バイト文字が16進数?になってしまっていて、こいつはどうしたらいいですかね…
627 :
626 :2014/01/15(水) 13:15:35.89
>>626 は
pの部分をputsにしたら正常値が取れました。
失礼しました
配列とかハッシュの全件処理でN件目は別の処理をしたい、って場合どうすればいいんでしょうか? eachの中でif文入れればいいんでしょうけど、N番目ってどう取ればいいのやら arr.each do |e| puts e end
each_with_indexとかいうのがあるけど
>>620 字句解析用のライブラリが入っていたとは・・・
まさしくこれが欲しかったです、ありがとうございます
honya ||= 5 とかヘンな演算子あったんですけど、なんですかこれ?
honya = honya || 5 の略 honya が真ならば honya の値が honya に代入される そうでないならば、5 が代入される。 ruby の初期化の流儀 しかも、戻り値を考慮した場面が多いかな def honya @honya ||= 5 end とか 必要になったときに、値を生成する原則というか
>>632 honya = 5 if honya.nil?
真のときなのかnilのときなのかはっきりしなさいよ
636 :
uy :2014/01/16(木) 01:44:11.28
a ||= 5 # nil , false a |nil|= 5 # nil a |false|= 5 # false a |true|= 5 # true キリッ
threadとqueueの使い方がわからない。 良いサンプル教えて下さい。
imgur.comくらいお手軽にrubyなんかのコード貼り付けて そのコード公開して出力結果とかも得られるサイトあったんですが どこでしたっけ
RubyでS-JISのCSVってパースできますか?
>>639 ideone.com
641 :
デフォルトの名無しさん :2014/01/16(木) 15:11:20.47
バコナロ「ンーwwwwwwwwwwww」
643 :
640 :2014/01/16(木) 20:46:30.91
CSV.parseのところでエラーになります。 何か良い方法ないでしょうか? # -*- encoding: UTF-8 -*- print "Content-type: text/html\n\n" require "cgi" cgi = CGI.new require 'rubygems' require "mysql" require 'mysql2' require 'json' require 'json/pure' require "csv" require 'nkf' begin file = cgi.params["csv_file"][0] #CSV.parse(file.read) do |a,b,c,d| CSV.parse(file.read, :encoding => Encoding::UTF_8) do |a,b,c,d| p a.force_encoding("utf-8") p b.force_encoding("utf-8") end block in <main>': incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError) from /usr/local/Cellar/ruby/2.0.0-p353/lib/ruby/2.0.0/csv.rb:1717:in `each' from /usr/local/Cellar/ruby/2.0.0-p353/lib/ruby/2.0.0/csv.rb:1296:in `parse'
思いっきりUTF_8を指定してるやん
ワロタ
windows-31j とかいうのがめんどくさい いつもkconvで手動でtosjisやtoutf8とかしてるけど内部エンコーディング、外部エンコーディングについて勉強したら幸せになれますか?
何を言いたいのか全然わからん
>>646 windowsを捨てれば幸せになれます。
さすがrubyスレ レベルが異様に低いw
初心者スレなんだが
>>646 面倒も何も
そういうのはRubyに限らずどの言語を扱うにしてもぶち当たる問題という常識レベルの話。
つまりスマートな解決策があるわけではないということですね
それぞれメリットデメリットがあるからね。 ただ、sjisやらeuc-jpにutf16は終焉だね。
フィボナッチ数を表示するプログラム def fib(n) return n if (0..1).include? n fib(n-1) + fib(n-2) end print fib(5) は上手く動きますけど、 メモ化を使ったプログラム def fib2(n) @series ||= [] @series[n] ||= fib2(n-1) + fib2(n-2) end print fib2(5) は5でもstack over deepみたいなエラーが出てしまいます? なぜなんでしょ?
なぜって…そのままソース追えば分かるだろ。分からない理由が分からん その再帰関数はいつ再帰が終わるの?
初心者スレ
_____ / ̄ ̄ ̄ ̄ . / \ . .:.:=ニ| 本 す | 何 お お | /.:.:.:.:.:.:.: | 当 : | で .か : | /.:.:.:.:.:.:.:.:.:.:.| す す | で し |/:.:.:/:.:./:.:.:.:.:.:.:| み み | し い /:.:.:/:.:./\:.:.\:| ま. ま | ょ な |:.:./:.:./ : : |:.:.:.: || せ せ | : |:.〈\|: : : :|___|\ ん ん | |:.:i|≧、: : : :/二L_\_ __ . \___ /L:]「以:, : 〈付 ア |:.:」/ハ:.: \( |:.:.|:. :/ `^ = |:.:.:|[//.:.| 〃 _ |:.:.|i:. ` _ J _|:.:.:|{/.:i.:.| | 、\ |:.:.l|iヘ ー┘ u _ -ニ|:.:.:|.:.:.:l.:.| | \_〉 、:.:.:|く\` _ -ニΞ ]|:.:.:|i:.:.:|レ 厂\{_ /\| \ ̄}=ii=====|:.:.:||// / \ 〉 ]/ \ \ ∨ }{ :|/ /
658 :
uy :2014/01/17(金) 05:43:47.72
俺様は文字コード関連はtoutf8等で解決できない時は諦める事にしてる toutf8 , tosjis , toeuc で動かなかったら諦める事が決定されてるから 文字コードで詰まる事は無いな
一般的にはその「諦める」ことを「詰まる」と言うんだがな。
ほとんどの秀才ができないとあきらめたことを天才は、突破する
秀才は無駄な努力をしたがらないからあきらめも速い 天才は実現までのコストを度外視するから成功する
文字コードの天才、100年に一度の設定の天才、昨年と同様に万能な雑用
663 :
デフォルトの名無しさん :2014/01/17(金) 15:33:26.58
突破してUnicodeが実現された。
ハッカー連中にトリッキーなコードを書かせないだけでも、PHPには素敵な価値がある
トリッキーなコードを作るには、いきなり出来るんじゃなくて、初めにif,for,eachで作ってだんだんとトリッキーにして作っていくんでしょうか?
666 :
640 :2014/01/17(金) 18:00:06.15
ぐへぇ CSV.parseってcsvのデータがダブルクォーテーションでくくられてないとダメなのでしょうか? CSV.parse(file.read, :row_sep => :auto, :col_sep => ',') do |a,b,c,d| end /ruby/2.0.0/csv.rb:1849:in `block (2 levels) in shift': Unquoted fields do not allow \r or \n (line 2). (CSV::MalformedCSVError)
どちらかというとそんなデータを「勝手」にCSVにするほうが悪い なぜかいつも解析側が文句言われるんだけど、筋違いだからね本来
669 :
640 :2014/01/17(金) 18:46:12.62
データの中に改行あるんでしょ?ダブルクォーテーションなきゃダメじゃん
671 :
640 :2014/01/17(金) 18:56:52.01
>>670 ないですよ。レコード分ける改行コードはCRLFですけど…
まさか、これが悪さして…いや、row_sep => autoにしてるか。
バックスラッシュ+改行文字は続きとみなす流儀もある RFC4180的にはアウトだが、CSVは既に莫大なデータやジェネレータが存在するのでどうにもならん
>>666 ではフィールドに CR か LF があるって怒られてる
もし Shift_JIS のまま CSV ライブラリに食わせてるんだったら
UTF-8 に変換してから食わせたほうがいいと思う
有り得ないわ
675 :
640 :2014/01/17(金) 19:50:56.84
怒らないで聞いてくれますか?
すいませんでした。
>>673 を見て思うところがあってバイナリエディタでcsvファイル見たら余計な0Dとかありました。
取り除いたら
>>666 で普通に動きました。
Rubyのバグとか言って申し訳ございません。
バグは私でした。
ダブルクォーテーションはなしでできました。
本当にすいません…。
676 :
uy :2014/01/17(金) 20:12:11.56
ざっけんなマジもうム板やめるからじゃあな
677 :
デフォルトの名無しさん :2014/01/17(金) 20:17:06.70
明日からココはプ板ですね。
678 :
640 :2014/01/17(金) 20:17:59.36
>>676 ワロタw
CSV.parse(file.read, :row_sep => :auto, :col_sep => ',') do |a,b,c,d|
p a.forceencoding("utf-8") #S-JIS -> UTF-8エンコしたいけどエラー
end
from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
# -*- coding: shift_jis -*-って指定してるのですが…ASCII-8BIT?
どうすりゃいいのでしょうか?
いくらなんでも教えて君すぎるお
680 :
640 :2014/01/17(金) 20:44:16.35
失礼しました
>>678 は多分解決しました。
p a.forceencoding("utf-8") #S-JIS -> UTF-8エンコしたいけどエラー
この部分でなく、それより下でs-jisと上でエンコしたutf-8を繋げているのが原因っぽいです。
s-jisのやつもutf-8にしたらいけました。失礼しました。
681 :
デフォルトの名無しさん :2014/01/17(金) 21:35:17.46
どうでもいいけど、force_encodingは文字コード変換をしない。押し付けるだけ。
>>654 >def fib2(n)
>@series ||= []
>@series[n] ||= fib2(n-1) + fib2(n-2)
>end
これってオライリーの「Rubyベストプラクティス」のp153にあったのですが、
それが間違ってるってことなんですかね?
間違ってるよ。例文なんてそんなもんだよ。概要伝えるのが主なんだから。 コピペして確実に動く例文ばかりじゃないから。
英語の参考者じゃないんだから「例文」ってのは違和感あるな
>>638 自己解決。
デザインパターン スレッド ruby
でグーグル先生に問い合わせしたら幸せになれた。
690 :
デフォルトの名無しさん :2014/01/18(土) 12:33:35.87
typoしてるな。 そのコード自体は読者による指摘だから、実際には反映後の書籍を見ないとだめだと思う。
手元の日本語版のベストプラクティス見たが、それを参考にしたのか def fib(n) @series ||= [] @series[n] ||= fib(n-1) + fin(n-2) end になってるね。 finの間違いもそのまま。 まあ、オライリーの質的低下は昔からだけど、いろんな意味で雑だなあ。 fibにしたところでやっぱり動かないわけだし、こんな短いコードぐらい 訳者も手を抜かずにテストすればいいのに。
692 :
デフォルトの名無しさん :2014/01/18(土) 12:51:53.49
オライリーはゴミ
typo直しても動かんよね 指摘を反映すらし切れないのか
typo直したら動くぞ @series=Array.new @series[0] = 0 @series[1] = 1 def fib(n) @series ||= [] @series[n] ||= fib(n-1) + fib(n-2) end puts fib(10) # => 55
なるほどね。でももうTypoってレベルじゃないよねw オリジナル英語版ー初期化がなかった オリジナルErrataー初期化コードを入れたつもりだけど、不完全。おまけに関数名を間違える新たなバグ混入 日本語版ーオリジナルErarraを検証もなしにコピペ さすが、オライリーの「ベストプラクティス」は見習うべき点が多いなあw
def fib(n) @series ||= [0,1] @series[n] ||= fib(n-1) + fib(n-2) end print fib(10) # => 55 とか
def fib(n,series = [0,1]) series[n] ||= fib(n-1,series) + fib(n-2,series) end print fib(10) # => 55 マジで焼け石に水 本燃やせ
オライリーはRubyあんまり好きじゃないみたいなんだよね
>>694 これfib(1000)とかでも一瞬で結果が表示されるな。
どういうマジック?
memoじゃないの
うちのノートパソコンだと958まではok 959から先はstack level too deepが出るな
tail call で包めばよろし
>>704 rubyの再帰の上限は調べても意味ない
適当に前後で変数宣言したり、
しばらく時間経ってからもっかいやれば再帰できる上限変わってるよ
その程度の再帰でスタックオーバーフローか つかえねーな、Rubyはやっぱり
708 :
デフォルトの名無しさん :2014/01/19(日) 12:33:58.25
前に末尾再帰最適化パッチなかったっけ?
>>707 ruby1.8とかの話だろ多分
1.9以上ならもっといけるはず
Rubyは初心者用言語だから再帰の最適化なんて要らんよ
711 :
デフォルトの名無しさん :2014/01/19(日) 13:26:54.35
中国発の言語、ダイアモンドに負けてる。
ダイアといえば金剛石、つまり英国産なのデース
714 :
デフォルトの名無しさん :2014/01/19(日) 13:42:37.50
韓国発の言語、OCamlに負けてる。
なんでも自分とこのお手柄にするのはやめてください
716 :
デフォルトの名無しさん :2014/01/19(日) 13:49:10.17
銀座に日本支社がある時点で負けたと思った。 Rubyは徳島にすらないのに。
717 :
uy :2014/01/19(日) 15:32:12.09
rubyで末尾再帰は2種類方法がある
VMインストラテーションセウエンスコンパイルオプションの
タールコールオプチミゼーションをTRUEにして
トラースインストルクションをFALSEにして
エバルで包むやり方と、tcoを定義する方法な
http://ideone.com/5ajcVd
718 :
デフォルトの名無しさん :2014/01/19(日) 15:43:14.69
# stakki ovver flow # stakki ovver flow # stakki ovver flow # stakki ovver flow
721 :
uy :2014/01/19(日) 17:58:32.30
俺様にとってはもっと高尚な事についての活動の 合間に行うストレス発散がruby
高尚な活動ってOS作成とか?
724 :
uy :2014/01/19(日) 19:19:43.75
俺様はPGというカテゴリーの中の人物ではなく、高度なプログラミングの出来るネット右翼 活動の内容は言えないが高尚な活動である
uyはmetasploitをご存じかな?
今は田母神砲の操縦でいそがしい
uyさんROの装備余ってたら何かください
Ruby使いたちはLL使いたちの中でも特に怨恨と劣等感の塊なんだ どの言語だって得意なドメインを実績として持っている。 Pythonなら科学技術計算、Perlなら*nixにワンライナー、PHPならWebサイト作り。 けれど、特に何かに向いてたわけでもないのにRubyってコミュニティは膨らんでいった。 Rubyを使うなんて理由が既成ルールへの不満と社会への反逆を意味するんだ。 Rubyって言語は、いつだって目先の利益に忠実で最先端な機能が実装されている。 何の肩書も華やかな経歴もないけれど自分には才能があるとか、 他の連中とは違うなんて考える人たちが、Googleが使っているからとか、 大規模サイトでの実績があるからとか、アカデミックな理論やバックボーンなんて理由で、 それらの言語を使うはずがない。連中にとって、それらは本来的に憎むべき敵だから。 むしろ、そうした華やかな経歴がないからこそ彼らはRubyを使ったのではないか? Rubyってコミュニティは、今後もアンダーグラウンドな性質を持ち続けると思うね
>>729 結局何が言いたいのかな?
TOIBE Jan 2014 で 12位でPerlより1つ上。
アングラどころかどメジャー言語ですよ。
アナタの中での脳内コミュニティ批判したかっただけかな?
1.9のString仕様で日本語がやっとまともになったからちゃんと勉強するようになった awk,bc,grep,tcsh,bashなどのposixの代わりと複素数・行列・テキスト処理で使うことが多いね 次はlength,sizeとかcollect,mapとかアクセスが一つではなく複数あるのはどちらかにしてリファクタリングして欲しい
>>728 CやJavaの得意なドメインって?
汎用というのもあるし、それが必要なこともある。rubyが何にでも向いてるというつもりもないけど。
言語によって、length, size や collect, map のどっちかを使うことに慣れる。 どんな言語経験者でも Ruby で慣れた名前を使えるように、複数個提供されているんだ・・・ と思っていた。
簡単に言えば日頃size,reduce,mapでなれてるのにrubyのソースみたら実はただの別名だったら、こまかい仕様までチェックするための時間が全部無駄になるし、ソースを追いかけるのがそこで止まるでしょ あと1.9だけどputc(int)の仕様だけ他と違うから、これはバイナリ(ascii-8bit)専用としてputc(int):obj; get(void):int に変更して、cと同じく1バイト(unsigned char)処理用のapiにして欲しい
バイナリ(ascii-8bit)専用 putc(int):void getc(void):int cと同じく1バイト(unsigned char)処理用のapiが欲しい rubyでバイナリ処理はなれてないと少し難しいから
えんこーでぃんぐ指定すりゃいいじゃん
RubyにはRailsという最強のドメインがあるよ それ以外価値が無いとも言える
737 :
デフォルトの名無しさん :2014/01/20(月) 15:02:10.62
㏾ฺ
shift_Jis -> utf-8コンバートについて質問です。
以下のコードはコンバートできていると思っているのですが、文字化けしています。
これはブラウザのエンコード設定がutf-8だからでしょうか?
エンコードコンバート方法は間違っていないでしょうか?
http://ideone.com/YIvMcr
>>738 What encoding is used in the source code and in the input stream?
UTF-8.
740 :
デフォルトの名無しさん :2014/01/20(月) 16:24:28.91
rubyじゃ無理
コードポイントも表示してみれば? p id.codepoints p dst.codepoints
742 :
738 :2014/01/20(月) 16:51:49.79
rubyのソースコード内でのコンバートはできるけど、外部ファイルなどの入出力のコンバート制御まではできないということですか!?
743 :
738 :2014/01/20(月) 17:15:38.42
s-jis文字列を1文字ずつ取り出してバイナリ化して、文字列戻す際にutf-8化とか…できないか…な…
>>741 こんなんなりました。
#<Enumerator: "\x{E382}\x{82E3}\x{8282}\x{E381}\xA1":codepoints>
#<Enumerator: "繧ゅb縺。":codepoints>
ソースコードを書くときの文字コードセットとファイルの先頭のcoding:の指定は合わせといた方がいいよ
>>743 ソースコードが UTF-8なんじゃないの?
むしろソースがUTF-8じゃないと
>>743 にならないよ
747 :
uy :2014/01/20(月) 19:11:01.06
三 さ ,.-‐-、 Ξ バ て ,.-─-、 / ! 三 グ ` / i ',__,,,,.....i i | Ξ が ま i /、_,!::::::::::::'-'、___,.ノ、 三 で た ヽ、__,./ ;::::i::::;:::;: :;::::::ヽ. × Ξ た R × ,.イ::::/:::::レ::ハ:!、!__,.ハ::ル:::::', × 三 訳. U レ::::::レ:'r‐'i´ レ',!'-'、。o:::::::::ヽ Ξ だ. B ハ::o。!'⌒ " ハ:::ハ::::,.-'、. 三 が Y .゜i:::::7" i' ̄`i /:::!::::::::/ @i 彡 の イ:::人 ヽ ノ i::::ハ::::/ /、 / 川 l | l l | l | V::ハ::>ー-r‐='T´V,.イ ー、/`ヽ × ` ,.く,.〈〉、_,.イ ヽ、___ノ、/ノ × r〈 ! ヽ、___二ン 7ヽイ__,.'-っ、 〈 ,,.. 〈  ̄ ノ 、 `ヽ ゛ `ー7''" ̄´ ヽ
748 :
738 :2014/01/20(月) 19:11:23.92
どこを見てs-jisと主張しているのかね?
決して難しい変なことをしているわけではないのだが、 Ruby1.9/2.0の文字エンコーディングの指定と変換においては「適当にやる」と全く動作しない 完全に学習してマスターするといい もう一度だけ言うけど、適当にやると絶対に動かない
751 :
738 :2014/01/20(月) 19:38:28.80
自己解決しました。
ideoneでなく自前の環境で上手くいきました。
ideoneの環境の問題のようです?
>>749 4行目の出力結果なんですけど、間違ってますか?
ideone のサーバには UTF-8 でエンコードされたバイト列が渡されてるんじゃないかと e38282 e38282 e381a1 でなく e382 82e3 8282 e381 みたいな変な区切り方されてるし
753 :
738 :2014/01/20(月) 19:46:19.62
>>750 まさにおっしゃる通りでした。
無勉強でコピペで解決できる問題ではなかったです。
>>752 やはりそうですか。
お騒がせしました。
(_ _).。o○(今日もスレの流れは滝のようだったなあ早過ぎてついていけねェ
%w()で空文字("")を含む配列を定義できますか?
>>756 多分無理じゃないかな
%Wなら
%W(a #{} b)
でいけるけど。
10〜30までのランダムな偶数が欲しいんですけど もう少し良い書き方ってないですか? a = (10..rand(10..30)).reject {|m| m.odd? }.sample p a
(10..30).select(&:even?).sample
>>759 ありがとうございます!
自分の書き方だとrandとsampleで2回もランダム呼び出していたか・・・
0から10の乱数を2倍して10たす
>>756 %w(a \ b) #=> ["a", " ", "b"]
↑\の後ろは空白2つね
空白をエスケープすればできるよ
764 :
デフォルトの名無しさん :2014/01/21(火) 16:37:23.38
こんにちは。 私はRailsなどを使わずにスクラッチでcgiでやろうと思っているのですが、 Webrickでhtmlアクセスして、あとはAjaxでRuby側はcgiでやります。 しかし、Ajax先のアドレスは.rbと.cgiどちらがいいですか? ありがとう。
いえいえ、こちらこそありがとうございました^^
可能なら.cgiの方がいいと思う Rubyで作ってることを隠蔽した方がいい
767 :
デフォルトの名無しさん :2014/01/21(火) 20:18:35.10
.cppにしとけば?
.htaccessファイル使えばCGIのファイル名も隠匿できる
Rubyとしてはサーバがきちんと返事返してくれればどうでもよろしいので、 システムが許す範囲内で好きにするといい 「Rubyでは○○でなければならないor△△が好ましい」というようなことはない
例えばRubyに重大な不具合が発見された時、拡張子が.rbだと標的にされる恐れがある
771 :
デフォルトの名無しさん :2014/01/21(火) 21:19:54.55
そんな小さすぎるセキュリティ意識どーでもいいよ
イマドキの2chだと、初心者でもコテハンを名乗るのか?w
隠せるものは隠す。 鍵穴だろうが入口だろうが隠す。 秘密基地とはそういうものだ。
秘密基地(笑)
情報を隠すのはセキュリティの基本だな。 あとURLは実装に依存しないようにした方が寿命が長くなる。
昔のほむぺは一番下にpowered by Apache 1.x.xとか表示するもんだったなぁ
rssでプロキシー使えるの?
>>777 わざと違う情報を出したりして。
httpヘッダにもある。
各用紙は.htmlにしてもいいし Railsみたくディレクトリで routingもどきにしても良い
(_ _).。o○(今日もRubyスレの流れは風のようだったなあ早過ぎてついていけないぜぇ…
782 :
デフォルトの名無しさん :2014/01/22(水) 12:16:31.59
rails使うほどの規模じゃないのでsinatraで開発してたがちょっと機能増えただけでパンクしたのでpadrinoに切り替えたらただの劣化railsだったでござる rubyのwebプログラミングはRails以外本当に糞。
Railsだけがあればいい ほんとうにベストなものが一つあるなら、他に意味はない
サムスンだけがあればいい ほんとうにベストなものが一つあるなら、他に意味はない
Microsoftだけあればいい ほんとうにベストなものが1つあるなら、他に意味はない Javaだけあればいい ほんとうにベストなものが1つあるなら、他に意味はない MySQLだけあればいい ほんとうにベストなものが1つあるなら、他に意味はない
787 :
デフォルトの名無しさん :2014/01/23(木) 03:07:41.43
ほんとうにベストなものは、プログラミングじゃない可能性もあるから それを突き詰めていくとプログラミング自体いらなくなっちゃいますよ
ダメだぞ、おまいらが本気で起業したらMicrosoftもOracleも潰れちゃうんだから
そりゃ、皆、PHPにPostgreSQLつかうからな
790 :
デフォルトの名無しさん :2014/01/24(金) 03:49:23.29
100年後も数学は健在だろうけど100年後にプログラミングって作業は残っているのか? 多分わざと残そうとしない限り研究職しかやらない感じになってくるよ プログラムの命令を原子記号だとするなら、組み合わせは無限だけれど 鉱山に行って鉄や銅を掘り起こすような作業はいつまでも人が人力でやることじゃない 鉄を掘り出すのは、やろうと思えば機械でやれるさ、 で、最終的なところだけ人の手が加わるだけ プログラミングにしても、スクラップのようなネット上にある膨大なソースから 色んなものをピックアップして 加工するまではAIにやらせて、最終的なところだけ人がやる スタイルになると思う
>>790 それをプログラミングと云うようになるだけかもよ。
俺にとってプログラミングとはコンピュータに対する教育。
792 :
デフォルトの名無しさん :2014/01/24(金) 03:56:09.10
例えば、 入力データ 2 3 を入れたら 6 を 7 8 を入れたら 56 を こんな感じに、入力データと、出力データのサンプルをいっぱい要素として与えて ソースコードを、総当たり的な感じでAIに作らせる事は可能だと思う それを鉱山から採掘した鉄を加工した段階だとすれば 最終的に人の手が加わるのは、加工されたそのソースコードを どんな用途に使うか? が、AIには考えられない事だから、人の手が加わる場所
793 :
デフォルトの名無しさん :2014/01/24(金) 03:58:59.84
組合せ爆発を知らんのか
794 :
デフォルトの名無しさん :2014/01/24(金) 04:04:27.46
出来上がりのものをテンプレートにするなら、ウィザード形式で開発を支援するものはすでにある
795 :
デフォルトの名無しさん :2014/01/24(金) 04:09:37.72
で、ここをもっと進化させるなら 入力データ: 「2 , 3」 とか数値を入れるんじゃなくて 入力文章:「○○行程度のRubyで書いた電卓のソースが欲しい」 等を伝える で、文章を読み取ったAIにソースコードを出力してもらう ここまで出来れば、 「○○なメソッドが欲しい」「△△なメソッドが欲しい」を、伝えて ソースをメタして貰って、自分は一切ソースコードを書かずに、何かを作る あとの問題は、ソースコードのメタから作れる範囲のアプリだけで 人が満足出来るかどうかにかかってる「まぁこんなもんでいいかな」ってなれば その時にプログラミングは終了
世界最強のウィザードを雇いたい
797 :
デフォルトの名無しさん :2014/01/24(金) 04:13:06.11
>>794 テンプレートじゃなくて
「2*4」 → プログラム → 「8」
ブルートフォースのように総当たりでソースコードを生成する
最初はブルートフォース、そこで作れるようになったら辞書アタックに進化させていくだけ
>>797 絞りこみが出来なければ組合せ爆発で死ぬ
生きてる間に実現しないものは気にしなくていい 脱原発もな
800 :
デフォルトの名無しさん :2014/01/24(金) 04:19:34.28
例えば、 1*1 ...1*2...9*9 の九九の結果を出力プログラムのソースコードのメタをして貰うとする そのソースコードは別に、中で「九九の計算」とかやってなくてもいいんだよ if argc[0] == 5 && argc[1] == 4 then print "20" end とか、こんな バカげたソースでも別に良い そういうごっちゃごちゃの状態でも、とりあえず条件として 「1*1..9*9が上手く行くソースコードください!」 の条件を、ブルートフォースでソースコード生成して貰えれば、それで俺の勝ち 一般PCではソースコードの自動生成に処理速度が間に合わないだけで 京(スパコン)だったら出来るスペックはあるさ
801 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/24(金) 04:19:57.52
例えばコンピュータは文字列の意味もあまり知らない。 人間が「この範囲が整数を表してる」と教えないと無意味な計算で組合せ爆発で死ぬ。
続きは人工知能スレで
803 :
デフォルトの名無しさん :2014/01/24(金) 04:23:34.18
じゃあ・・・ruby流に説明しようか 「 1 と表示するプログラムのソースコードをメタしろ 」 これを最小限で行うには p 1 で良い。 つまり、アルファベット大文字小文字 + 各種記号 + 数値で 100くらいあるか? だから 「p 1」は3文字しかないから 100^3 回ループ処理してれば「p 1」というソースコードにブルートフォースでも辿り着く スパコンだったらもうちょっと行ける
805 :
デフォルトの名無しさん :2014/01/24(金) 04:27:27.53
組み合わせ爆発て、最初にメタされるものは無意味な計算だらけでも良いんだよ 出力までが出来たら、今度はそれを最適化する為の学問を発展させる のと あと、所詮はプログラムの入力と演算結果なんて、 突き詰めればハッシュと変わらないので、メモリを参照するだけで答えが出てもいいはずだ どのくらいHDD容量が必要か知らんけど、無計算で結果出力は出来る
806 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/24(金) 04:29:25.04
ごら、まだやるのか? 指数関数的に爆発するから、まったくのランダムで複雑なプログラムを生成するのは、実用上無意味。 単純な入出力関数なら実用化可能。
807 :
デフォルトの名無しさん :2014/01/24(金) 04:36:03.92
もういいや 4,5年前に自分が辿り着いた答えと今考えても同じになった
808 :
デフォルトの名無しさん :2014/01/24(金) 04:42:55.87
>>806 量子力学を理解してるか?
量子コンピュータは作れる
けど作れたからといって、それをすぐに広めちゃいけない状況にある
ITバブルがはじけるから
100年じゃ広まらないだろうけど
段階を通じてITバブルを縮小化させながら量子コンピュータを広めてプログラミングは終了
完全な陰謀論ですお疲れ様でした。 そのまま妄想に耽って車にでも撥ねられろ。
プログラミングやってみよう ↓ まったくわからない ↓ プログラムなんていずれなくなるから無意味(`・ω・´)キリッ たぶんこんな感じ
量子計算のできるPHPや量子計算をもとにしたWeb広告ができるのか 胸が騒ぐな
>>810 新しい反復作業→自動化の流れはなくならない
水時計は理由があってそういう風に何段にもなってるんだけど...
>>814 反復作業(同じ勢いで水が出るように水を加える事)を自動化したつもりでも実は修正が必要で、
さらにその修正作業を自動化するために、2番目の自動化を付け加え、
さらには3番目の自動化を付け加えるっていう感じが何となく似てると思ったんだよ
Rubyで画像検索するとセクシーなお姉ちゃんがたくさんヒットするのは何故ですか?
あるgemに依存しているgemを調べる方法ってありませんか?
>>817 // local
$gem dependency hoge
// remote
$gem dependency hoge --remote
Ruby1.8.7とRuby/gtk2-1.1.4を使った環境を仮想マシンのubuntu上で動かせるようにしたいのですが、Ruby1.8.7とgem1.3.7をインストールしてgem install gtk2を実行するとsegmentation faultとなってしまいインストールできません。 どうすれば解決できるのでしょうか? 最終的に、Rubyでrequire'gtk2'をしてうまく動くようにしたいです。
Ruby1.8.7はもうメンテされてないよ
>>820 大学の課題で渡されたコードが1.8.7準拠で作られているんです…
新しいRubyでやる方がいい 古いRubyとの差はその都度読みかえろ
>>819 他のヤシラが言うように、Ruby2.x(または1.9)で試すことを勧める
多くのケースで、Ruby1.8.7向けに書かれたコードはそのまま動くし、
たとえ動かなかったとしても僅かな修正で済む
もし問題が起きたなら、ここで質問すればいい
どうしてもRuby1.8上へインストールしたいのなら、
Ruby-GNOMEプロジェクトのsourceforgeサイトから
tar.gzアーカイブをダウンロードして手作業でインストールする
http://sourceforge.net/projects/ruby-gnome2/files/ もし使いたいGUI機能がGTK2だけでUnix環境(OSX or Linux)ならば、
それほど苦労することなくインストールできるはず
(ただし、最低限の英語読解とUnixの知識は必要)
この場合、ダウンロードするのは ruby-gtk2-2.1.0.tar.gz だけでいい
824 :
デフォルトの名無しさん :2014/01/27(月) 00:34:43.39
>>818 hogeを使うような屑にきいてないから書かなくていいですよ。
いちいち手間を取らせるのも悪いですし。
どういうことだ
コマンドラインにhogeという貶し言葉を入れてると思ってるなら池沼だし hogeがfooやらと一緒だって分かってていってるならキチガイだし
>>826 いつ退院したの?
ネットは精神病によくないって言われなかった?
かまっちゃいけない奴だこれ
>>816 光の加減や睡眠不足等の諸事情によっては男の娘もオカズになるとは思う
>>826 Rubyで画像検索した結果で一発抜いてきたらイイよ
hogeって書くとどこからともなく沸いてくる不思議な人 ゴミ連呼とは別人なのかしら?
それだけ疑問を持ってる人が多いということだろう。 むしろこういう不特定多数の目に触れるところに平気でhogeとか書ける精神構造のほうが不思議。
hogeに親でも殺されたのか
ほげほげ
捕鯨反対の人か
だれうま
838 :
デフォルトの名無しさん :2014/01/28(火) 01:04:04.03
作りたいもの作れって言われるけど特に作りたいものがない 入門レベルのちょっと上くらいの難易度のものって何かある? Rubyではじめるゲームプログラミングはいい本だった。 あんな感じで作りながら学んでいきたい。
>>838 作りたいものがないんなら何も作らなきゃいいんじゃないのか?
何が作れるのかわからない、というのなら別だが。
840 :
デフォルトの名無しさん :2014/01/28(火) 01:12:51.02
>>839 何が作れるかわからないのです
なので選べない
841 :
デフォルトの名無しさん :2014/01/28(火) 01:16:37.58
もっと言うと何でも作れるようになりたいってのが本心 だけど、何が作れるかわからないから どうしたらいいのかって思ってしまう Rubyで何かつくろうと思ったらrailsは必須なの?
君の目的も興味もバックグラウンドも分からないからアドバイスしようがない。 勉強が目的なら適当なgemのソース読むのは勉強になる。 web系に興味あるなら、何よりもまず、どんな糞サイトでもいいので作って公開すべきだ。 ゲームとかスタンドアロンなプログラムに興味があるなら、アルゴリズムの勉強とか? 個人的には昔オセロゲーム作ったのは難しかったが楽しかった。
>>838 > Rubyではじめるゲームプログラミングはいい本だった。
この本がどういうレベルなのかよくわからんが、
おそらくグラフィカルなゲームを、ロジックだけ自分で書けば作れるような本なのかな?
だったら、たとえばCUIのオセロゲームとか作ってみたら?
>>842 お、カブった。
>>841 railsは初学者に向いてるとは俺は思わないな。
最初はむしろHTMLの勉強になっちゃうし。
845 :
デフォルトの名無しさん :2014/01/28(火) 01:31:09.07
一番は勉強かな。 プログラミングでこういうコード書けば 変数をここで連携してこういう物が出来るんだってのが体系的に知りたい。 そのためにも形あるものが一番具体的でいいのかなっていうのは思ったんだけど じゃあ、具体的に何よって感じ。 >おそらくグラフィカルなゲームを、ロジックだけ自分で書けば作れるような本なのかな? あの本はまさにそんな感じ。 CUIのオセロ! おお、まさにそういうのがやりたい。 じゃんけんゲームとか、ゲームブックでも面白かった。 ただ、ぐぐったら出てきたコードが長そうで理解ができないかも…。 オセロについて細かく書いてある本とかない? トランプゲームとかのアルゴリズム(?)みたいなのはどうやったら学べる?
>>838 GoogleのWebspeech apiでもいじってみたら
接続すればいろいろ遊べるぞ
あとは遊ぶならRobot関連が面白いと思う
Amazonの自動配達も始まるし
これからブームが来るよ
http://artoo.io/
847 :
デフォルトの名無しさん :2014/01/28(火) 01:37:41.54
>>846 ごめん、言ってる意味がわからない
Webspeech apiとは何?
検索したらロボットにしゃべらせる?とかそんな感じ?それがRubyでかけるの?
あとartooって何?
アホなんで英語読めないんだ…。
プログラミングやるなら英語は必須かな?
848 :
デフォルトの名無しさん :2014/01/28(火) 01:40:07.58
Google翻訳でちょっとわかった Rubyでロボット動かせるの? 組み込み系って奴? それって相当難易度高いんじゃないの?
>>848 組み込み系じゃなくて他人のgemやソースを盗用するだけ
遊ぶ程度なら全く難しくない
オセロのプログラム作る方がよほど難しい
もっともWindowsを使ってる人だと色々と厳しいが…
LinuxやMacなら適当なバインディングで各種ソフトをつなぐだけでかなり遊べますよ
851 :
デフォルトの名無しさん :2014/01/28(火) 02:02:06.68
ありがとう 分からなかったらまた質問させてもらいます しばらくはオセロとこれをやってみようと思います
オセロよりペイントやCADの方が応用効くんじゃねーの Rubyで作るとコンピュータの思考ルーチンがめっちゃ遅そう
ゲーム木と評価関数を書いて何になるんだろう
>>851 英語できないってことは学生だと思うけど、
>>850 のいう事は正しい。
俺なんか日曜プログラマだから遊んでるだけだけど、プログラミングで食ってくことと、遊ぶことは全く違うわな。
RaaR(Ruby as a Religion)
artooって具体的にはどんなことが出来るの? androidみたいなもん? ラジコン動かすとかそういう系?
Artoo is a micro-framework for robotics. It provides a simple, but powerful Domain-Specific Language (DSL) for robots and physical computing. With Artoo, you can easily connect multiple, different hardware devices together at the same time into a single solution. Artoo makes telling robots what to do incredibly simple and fun. ArduinoやBeagleBoneがRubyで制御できるんだろう
日本のRubyコミュニティって...
>>838 現時点で作りたいものがないなら今すぐプログラミング言語のことは忘れろ
時間の無駄なんで
DIY症候群ってのがいちおうあって、釘とかハンマーとかの使い方覚えたパパが
日曜になるたびに家の中徘徊して自分で作れるもの直せるもの探してホームセンター行って
酷いときには隣近所にまで聞いて回るような症状だ
作るものがないときは作成手段を持っていることはすっぱり忘れて日常生活に戻るといい
必要になったらそのときふっと思い出したり
「自作することもできます」→「あっプログラミング言語勉強すれば自力でいけるのか」
という流れでやる理由ややる気が出るから
ある程度学ばないとなにができるのかわからないというのは確かにあるが、 「参考書の1ページ目からやっていく」タイプの勉強はプログラミングには向かないな それは半年後なり1年後なりに業務プログラムを作ることが既にわかってる社会人研修の理屈
4,5冊ほど、一気に読んで中身を忘れるの繰り返し そして、大したものも作れない。これが職業プログラマの運命
生活費になっているならそれで充分(世の中の95%はたいしたものじゃなくても用が済む) 少なくとも読取速度と精度は上がっているから言うほど完全無駄でもない
たいしたものじゃないものを作るのに人生の大半の95%を費やして、大したものも作れない。これが職業プログラマの運命
>>818 ありがとうございます。
でもこれってhogeが依存しているgemを表示してるような・・・
hogeに依存しているgemを知りたいのですが、無理なんでしょうか
867 :
デフォルトの名無しさん :2014/01/28(火) 05:56:25.89
&:って?
>>866 お前には無理だからさっさと回線切れ。
身の程知らず。
ふがーふがー
>>869 &:は独立した記号
&(:hoge)ということ
:hogeというsymbolをブロックとして渡す
symbolをブロックに変換するのはto_procが使われる
あとはぐぐれ
>>866 少しは頭使え
(必要な範囲の)全部のgemに対してgem dependancyしてリスト作ればいいだけだろ
一気にやるとえらい負荷がかかるが、この情報が欲しいのならどっかで誰かがやらんといかんからな 一発で出るようにするにはどんな些細なバージョン違いのgemでも登録時に自動で登録分類しておいて 莫大な情報として誰かが貯めておいて適宜返事しないといけない 自力でブン回したほうがマシである
それを事前にやっておくのがRubygems.orgの役目なんじゃないの、とは思うが 全gemの全バージョンに対してremote調査かけられていい気はすまい
--reverse-dependencies の話かと思った
頭の足りてない
>>866 惨めだな
生きてて惨めな気持ちにならない?
頭が足りてないからならないかw
879 :
デフォルトの名無しさん :2014/01/28(火) 16:52:06.72
死ねゴミ
4時半頃にム板でつけられたレスを俯瞰してみるとたいへん興味深い
881 :
デフォルトの名無しさん :2014/01/28(火) 18:17:03.71
hoge厨とuyの二極構造になりつつあるね
hoge厨はマジで結構迷惑だよな。
Cやらperlやらのスレもhogeがらみで荒す奴が出現したよね。 hoge使う奴に対しては「hoge使うな」 hoge注意するスレではhoge使って神経逆撫でる。 コード一行も書けない奴の荒しの常套手段。
嵐とかじゃなくて、単なる本物の精神病の人だと思うけどな まあ、どうでもいいよ お大事に
885 :
デフォルトの名無しさん :2014/01/29(水) 01:31:55.04
チャイニーズ雪かき チャイニーズ雪かき チャイニーズ雪かき チャイニーズ雪かき
886 :
デフォルトの名無しさん :2014/01/29(水) 09:39:19.61
Rubyってrails使わないと何が出来るんですか? 何でも出来るって言われるとイメージが湧かないので 具体例を上げてくれると嬉しいです。
>>886 検索すればいろいろ出てくるだろ。
migemoってオリジナルはrubyだよな。よく使ってる。
俺はこないだ2chクライアント作ったぞ。
888
>>887 横からで悪いけどGUIってどれ使った?
tk?gtk?
>>889 使ってない。
GUI使うときはJava使ってる。
どっちも、tcl/tkとかC/gstreamerでちょっと使ったことあるけど、rubyからはない。
>>891 プロだが仕事で作ったので、それはあげられないや
そっか残念だな 昔は設計がハンパだったし、いまならカッコよく作れるはずなんだが アマは設計についての理解が後回しになるんよ いそがしくて、時間がないんだよな・・・
>仕事でGUIじゃない2chクライアントを作った 真実はいつもひとつ!
本業が忙しくてプログラミングの時間が取れないのはアマ共通の悩み
896 :
デフォルトの名無しさん :2014/01/29(水) 12:22:34.87
2chってちょっと荒らしが増えるたびに微妙に仕様変えてくる それについて行かないとダメだから結構しんどい
897 :
デフォルトの名無しさん :2014/01/29(水) 12:42:07.73
>>891 ちなみに俺様がム板で使ってるゴミみたいなスクリプトはこれ
http://ideone.com/HzgIRf ・・・ゴミみたいなコードだな
ちなみにwatirはrequireした時ではなく
Watir::Browser.new :ie
↑この時点でクラス宣言をしてしまう為
本来IEは非表示実行が可能なオプションがあるにもかかわらず、デフォルトで表示されてる状態になる
newした後に
agent.visible = false
で、一応非表示にできるが一瞬ウィンドウが見えてしまう
これがやめさせる場合はライブラリ側の ie-class.rb で
def visible
@visible ||= false # true
end
これをする必要がある
>>896 おまいが仕様作る側に廻れば良い
待ってるぜ
899 :
デフォルトの名無しさん :2014/01/29(水) 15:05:16.34
俺様は手段を沢山持ってるから むしろwatirに対してどういった規制を2chがやってくるか見ものだね 検知出来るかな
>>886 なんというか、釘セットの用途を門外漢が聞くようなもので、正直それにはあんまり意味がない
わかんないならわかんないで別にいいじゃん
釘なんてもらってもハンマー持ってないし上手な打ち方もわからんし板自体持ってない上に壊れたものも家にねえ、
というなら釘は無用の長物であろう
意味不明
昔は「Rubyは誰でもなんでもできる!すげえ!」という痛い人が出張ってたんだけど
最近はさすがにそんな突飛な人も見なくなってたいへん使いやすくてよろしいです
>>886 RubyでなにするのかわからないのならRubyでなにもしなくてよろしおすえ
>>886 ホモサピエンスの小さい頭脳を、抽象的な概念でいっぱいにすることができる
は?
>>902 今でも、山に向かって湖に飛び込めってRubyistは居るはず
>>904 おまえがRubyを使ってるわけじゃない
Rubyがおまえの頭脳にアクセスして、具体的な形を与えてもらってるんだよ
貴方がRubyを選ぶのではない。Rubyが貴方を選ぶのだ。
ネコと人間の関係みたいだな
その場合、人間の方がRubyで、ネコの方がプログラマという意味ですよね
array = Array.new(10) array.each { |x| array(x) =rand(10) } とかやると、nilにinteger入れちゃだめ、みたいなエラーが出るけど、どうして そういうルールにしてるの? 配列初めて作ったら、nilに決まってるじゃん。じゃあ最初に入れたデータの 型にすればいいじゃん。普通の変数みたいに。
そのコード何がしたいの? array[x]=rand(10)のtypoだとして array[nil]になるんだからどうしようもないでしょ nilは整数に変換できないよってエラーだ
もしarrayの中身を乱数にしたいのなら array.map!{rand(10)} eachの中でレシーバ自身を変更しちゃいけない
ar =[] 10.times { ar << rand(10)} とか
こう ar = [] [] while ar.<<(rand 10).size < 10 p ar
あっぶねぇ、色々わけわかんなくなったけどやりたかったのはこれかな array = Array.new(10) array.each_with_index { |x , i| array[i] = rand(10) } p array あるいは 10.times do |i| array[i] = rand(10) end けどrubyだとこういうコードはあんまし書かないけどな p ar = 10.times.map{rand(10)} 俺ならこうやる
Array.new(10){rand(10)}
一番駄目な回答じゃねえか
何で駄目なん?
>>897 自前でやることばかり考えていました
watir 参考にさせてもらいます
Array.new(10, rand(10))と勘違いしたから
あれー!
Rubyを勉強してみたいのですがとある筋から手に入れた「たのしいRuby」が1.8です 1.8→2.0で「変わった!」とはっきりしてる所などありますでしょうか? たとえばPHPならmagic_quotes_gpcがディレクティブから削除されたとかヌル文字の扱いの変更とかです 教えて頂ければ幸いです
1.8の本は最初に読んではいけないレベルで変わってるよ
926 :
924 :2014/01/31(金) 04:56:41.99
うーん、そうですか 質問しといてあれなんですがWeb漁ってきたら、文字エンコーディング関連も変わってることがわかりました 「たのしいRuby」は基本文法のことしか記載されてないので問題ないかもしれません とりあえずこれをパラパラと読み、Rubyの雰囲気を感じておこうと思います 次のステップで購入する本は間違いなく2.0を意識したものにします。返信ありがとうございました
全員が「問題ある」って言ってるのになぜ初心者が「問題ない」と判断するのか
本当に欲しかったものが 「あなたは間違っている」という事実に基いたアドバイスではなく 「あなたは間違っていない」という承認だったから プログラミングとかにはあんまし向かない人っすな
シャドウィングとEnumerableが一番変わってる あとcharsとかsplitとか 他には標準ライブラリの戻り値が結構違ってるはず で、そういうのが変わってると 「推奨すべき書き方」が違ってきちゃうから 1.8で覚えても、古いあまり良くない書き方を覚えてしまう ネットでもそこそこ調べられるよ
930 :
924 :2014/01/31(金) 08:03:32.67
>>927 パラ読みすると、どのプログラムにもある共通の制御文やファイルの入出力の方法などシンプルな内容の書籍だったからです
よくよく考えると「そういった根本的な所まで変わらんよな」と質問してから思ってしまいました
確かに初心者なのに調子のりました ごめんなさい
>>928 頑張ってご飯食べていきます
>>929 戻り値が変わってるような変更は知っておきたいですね
ありがとうございます 良さそうなサイトをみつけたのでそこで調べてみます
死なないようにお薬出しておきますね
1.8と1.9の並立時代ならまだよかったんだけどね 1.9.xすら御役御免のレールに乗った現状、初心者が1.8を学ぶ理由はゼロどころかマイナス もちろん1.8.6とペアで保守するローカルなスクリプト群があるとかなら必須だろうし妥当だけど、 ぶっちゃけそんなんレアだろう
934 :
デフォルトの名無しさん :2014/01/31(金) 20:28:22.44
レアといわれようが、おれは、つかうよ。もちろん、1.9も2もします
そういえば、大学で古典ギリシャ語の授業がなぜか超満員で、教員が 「君たち、この授業をとっても現代のギリシャ人とはお話しできないよ? ソクラテスとかアリストテレスとかそんなに好きなの?」 って言ってたの思いだした
書籍は長く残るから初心者が手に取ってみたら1.8用だった、というのはよくある話だな Javaとかいまだに1.4用が残ってたりするからな
Rubyアプリケーションプログラミングも最新バージョン対応版が出たら絶対買うのに
マイナスっつってもrubyの進化の過程を知ってるのも一つの知識だけどね 1.8の構文も知ってるとrubyの言語仕様の失敗例が学べる 雑学レベルだが
それはRubyを学んでからで充分 Rubyを学ぶ前に学んでも意味がない 小学生に古典ラテン語を教えるようなものだ
今は小学生が学校でruby勉強する時代 俺なんて、今中高生ぐらいの若手が社会に出てきたときに絶対用無しになるわ 嫌な時代になった
>>922 >Array.new(10, rand(10))
これじゃ10個とも同じ数が入っちゃうからダメじゃん
>>942 単なるメソッド plus の引数であり、ローカル変数になる
データ型としては、他のPointオブジェクトを期待している
つまり、座標の加算式 <1, 2> + <10, 20> = <11, 22> は
Point.new(1, 2).plus(Point.new(10, 20)) とコード化する
あと、この著者さんはまだRuby慣れしていないようで、
メソッド名として getX みたいな命名しているけど、これはJava流
Rubyらしい作法は、単に x だけ
つまり、point.getX() ではなく point.x と書くのがRubyの作法
真似しないようにね
>>940 そいつらが社会に出る頃には、Rubyや今の潤沢なWeb業界は失くなっているに1ペリカ
回答ありがとうございました
Java の getter/setter 書いてしまう病だな・・・ アレ抜けるの大変
C#のプロパティの方がなんぼかRubyっぽいよな
>>944 Web業界はあるだろうが、決してホットな分野ではないだろうね
>>942 ですが、もう一つ疑問点が出てきました
def ==(point)
return (@x == point.getX()) && (@y == point.getY())
end
これはいったい何なのでしょうか?
全体的に別に利用されていない気がするのですが、Rubyの特殊メソッドか何かなのでしょうか?
関数名に==などと使っているのは初めて見ました
function _()などは見たことありますが
a == b ↑ この時に呼ばれるメソッド とりあえずこれ実行して見りゃわかるんでは class A def ==n p self , n end end a = A.new a == 4
>>942 このサイトだめだわ
class Point
def initialize(x, y)
@x = x
@y = y
end
attr_reader :x, :y
def ==(point)
(x == point.x) && (y == point.y)
end
end
>>940 >>944 日本は中国の植民地になってて
公用語も北京語になるだろう
今から中国語覚えなさい
>>949 Rubyでは「演算子」に見えるもののいくつかもメソッド
a==b としたとき、Rubyはaのインスタンスメソッド == に引数bを渡している、つまり a.==(b) を行なっている
オブジェクトaの == の結果を自分で定義したい場合は == メソッドを定義する必要がある
似たような頻出ものに [] メソッドと []= メソッドがあり、たとえば x[key]=val は x.[]=(key,val) を呼んでいる
なお、中国語が少なくとも英語並の公用語になるなると30年以上言われ続けてるが全然そんな気配もないな
returnも「極力書いたほうがいい」という時期と「書かなくていいなら書かなくてもいい」という時期が錯綜するんだよね Rubyの流儀に追い付くのは後者なんだけど
955 :
uy :2014/02/01(土) 06:33:22.49
出、出現〜wwwww 小日本的変态的言语Ruby使用奴〜wwwww
a.method( arg ) ↓ a.==(b) ↓ a == b だからrubyは四則演算とかも実は 1 + 2 これが 1.+(2) ってかける
でも、1 + 2 と 1.+(2) は等価じゃないから 気をつけろってばっちゃは言ってた。
>>957 等価じゃないの?
演算子の優先度とかの関係?
961 :
デフォルトの名無しさん :2014/02/01(土) 13:20:30.40
今更だが、 addend は「加えるもの」だな。 検索もいいが英和辞典も引こう。
962 :
デフォルトの名無しさん :2014/02/01(土) 13:48:52.48
augend 被加算数 addend 加算数
963 :
デフォルトの名無しさん :2014/02/01(土) 13:49:52.45
operand 演算対象
普通の英和や英英では addend, augend は載ってない気がする いずれにしても勉強になる話だった
966 :
デフォルトの名無しさん :2014/02/02(日) 21:38:06.44
def push s = St.new St& ref = s すみません、これの最後の文、St& refはどういう意味なのでしょうか?
何か変になってますね ampは不要です 空白スペースです
その質問は、そのコードを書いた人に訊いてくれw もしここで質問したいのなら、ソースになったページのURLも添えるか、 あるいは、せめて付近のコード断片を貼付けるかしなさい
>>968 すみません、そうなのですか
Rubyの標準的な書き方かと思っていたのですが、違うのですね
直リンク禁止中なのでScheme抜きますが、
www.diana.dti.ne.jp/~katta/tdd/stack.html
のサイズ関数の項に書かれています
これまちがえてC++のコード書いたことないか?
971 :
デフォルトの名無しさん :2014/02/02(日) 23:06:02.58
C++のリファレンス初期化コードだね。
Rubyに限った話じゃないかもしれないですが 正規表現で改行を見つけて置換するのって どうやって書くとよいでしょうか? str.gsub(/(\r|\r\n|\n)/){"置換対象"} 上記のように書くしかないでしょうか? やりたいのはC言語のプリプロセッサのように\に続く改行を取り除くことです
CRとかいう邪悪なものをかんがえなければいい。 というのはおいといてstr.gsub(/\\\r?\n?/, "")でよくね
>>971 なるほど、C++なのですか
挙動としては基本的にref == s(ref === s?)と考えていいのでしょうか?
リファレンス初期化というものが分からないのですが、アドレスが同じと考えて良いのならば、
下に書かれている、
assert_equal(8, s.top)と assert_equal(8, ref.top)は同じ事をしていると思うのですが...
>>974 C++では意味のあったコードが、Rubyにしたから意味不明になってるだけだと思うよ
なるほど、ではrefに関連する部分は無視しても問題ないという事ですね
>>969 このサイトに、参考にしていい箇所はひとつもない
というかわざわざ駄目なところばかり貼ってなんなのって感じなんだが
>>973 ありがとうございます
でもそれだと\のみにもマッチしちゃいますよね
たしかにCRのみの場合を無視すれば
/\\\r?\n/でよいですね
Rubyにおいては正規表現はそのままユーザーが記述したように動く どういうサポートを望んでるのかは知らんけども
最初の \\ は要らなくない?
「通常は改行を取り除くが、引数に文字を指定するとその文字に続く改行を取り除き、別なオプションを指定すると連続する改行を全て取り除く」 みたいなメソッドを望んでるんじゃないでしょうか(適当)
まだ自分の知らない正規表現の表記とかメソッドがないかなあと思ったわけです CR LF のパターンによらず改行を対象に何かしたい、というのはよくありそうだと思ったので何かすでにないかな、と
>>978 おっと、すまそ。
str.gsub(/\\$\r?\n?/, "")だな
あ、そうか、これだとOSの改行コード依存になるか。失礼。
986 :
uyu :2014/02/03(月) 02:34:26.17
p b = "abcd\n" p b.chomp + "_nanikasudeninaikana,to_" " afa f wa w fas dfsa " .each_line.map(&:chomp).each_with_object("_nanikasudeninaikana,to_").map(&:+) .display
それっぽく表示されてるけど別物だからね それっぽい方にあわせると本来の意味の方で不整合が起きる
具体的に言えハゲ
すいません、centos6を利用しているのですが、更新されているruby2のrpmはありませんか? 標準で入っているのはruby1.8で、社内の審査で一次利用が禁止されてしまいました
990 :
デフォルトの名無しさん :2014/02/04(火) 00:10:10.96
rubyじゃ無理
CentOS 7 が出るのを待ってみるとか・・・
そもそもrbenvとかで必要なバージョンを用意して使うのが大多数だと思うんだが……
n=true toggle = ->{ n=!n } p toggle.call p toggle.call p toggle.call p toggle.call こういう風にメソッドを呼び出すたびにtrue,falseが入れ替わるものが欲しいんですけど 標準Libには無いですか?
そんなヘンなもん俺の知るかぎり無いけど。 っていうか内部状態を持たせたいならなぜObjectにしないの?
995 :
uy :2014/02/04(火) 04:16:31.84
toggle=->n=true{->{n=!n}}.call
996 :
uy :2014/02/04(火) 04:19:47.88
>>993 toggle = [true,false].cycle
p toggle.next
p toggle.next
p toggle.next
p toggle.next
997 :
989 :2014/02/04(火) 04:43:30.08
難しいようですね
客先のサーバで、RPM以外でツールをいれるのは、客毎、サーバ毎にサーバ管理に承認取らなければいけないのです
RPMだとレポジトリの承認が取れてると楽だったのですが…
pythonやphpだと最新版が普通にあるのでそちらを使うしかなさそうですね
rubyは客先で使うのは難しいよと先輩に言われた意味がやっとわかりました
ありがとうございました
>>992 社内のrailsを使っているサーバはrbenvを使ってます
サーバ管理が部内だと楽なんですけどね
998 :
uy :2014/02/04(火) 04:45:14.17
質問です ソースコード内の文字列からファイルストリーム作って print while r.gets を動かすにはどうしたらいいですか? やりたい事はこんな感じですが、IO.pipeからストリーム作るとgetsで$_に格納されていません r, w = IO.pipe w << "abc\ndef\n" print while r.gets
>>998 StringIO
っていうか暗黙の$_はあまり使わないほうがいいとは思うが。
io.readlines.each{|l| print l}でいいじゃん
1000 :
uy :2014/02/04(火) 05:02:59.78
>>999 U。・ω・。)ノノthank you...☆
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。