Ruby 初心者スレッド Part 51

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 50
http://toro.2ch.net/test/read.cgi/tech/1343539588/

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
2デフォルトの名無しさん:2013/01/20(日) 08:18:01.48
【RoR】Ruby on Rails Part15
http://kohada.2ch.net/test/read.cgi/php/1341589839/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://toro.2ch.net/test/read.cgi/tech/1155031689/

書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け)
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」 (同上)
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」(脱初心者向け基礎テクニック集、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/

現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.3 の2系統が存在。
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。
1.8 用のスクリプトやライブラリは 1.9.3 では動作しないので注意。
1.9.3 用の教科書があるなら 1.9.3 から始めても構わない。

Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在。
http://rubyinstaller.org/downloads/
chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利
http://www.ruby-lang.org/ja/documentation/
Rubyリファレンスマニュアル chm版リミックス
http://ruby.morphball.net/refm-remix.html
3デフォルトの名無しさん:2013/01/20(日) 08:26:56.03
・いつものエディタとターミナルという普段着でお越し下さい
・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない

Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A.好きにしろ

※RubyやRuby使いに対する不満や愚痴などは「Rubyについて」スレや「バトルロワイヤル」スレなどをご利用下さい
4デフォルトの名無しさん:2013/01/20(日) 12:30:00.29
いまから勉強する場合Ruby2.0のほうがいいですか?
5デフォルトの名無しさん:2013/01/20(日) 12:30:45.01
SublimeText2を使ってる人に質問です
標準だとRubyの補完が弱いのですが、それを補ってくれるプラグインってありませんか?
6デフォルトの名無しさん:2013/01/20(日) 12:34:51.75
>>4
ruby 1.9.3がいいとおもいますよ。
一般論として、あたらしいやつは、人柱になる覚悟がいります
7デフォルトの名無しさん:2013/01/20(日) 12:39:36.85
わかりました1.9.3から公式のマニュアル見ながらやっていきます
8デフォルトの名無しさん:2013/01/21(月) 04:59:35.64
そもそも7以前でもRubyはWindowsには完全には対応していない
9デフォルトの名無しさん:2013/01/22(火) 18:40:28.19
ファイル名がうまく扱えないのが致命的なんだよね
Dirクラスなんかは1.9.3でだいぶ良くなったけどコマンドラインは昔のまま
"マ"を含むファイル名がワイルドカード展開できなかったり
UNICODE(SJIS外)が?に置換されてワイルドカード扱いされたり
10デフォルトの名無しさん:2013/01/22(火) 18:51:04.16
なにそれこわい
11デフォルトの名無しさん:2013/01/22(火) 19:02:34.06
コマンドラインのファイル名展開とかWindows環境以外は必要ないからなあ
12デフォルトの名無しさん:2013/01/22(火) 19:32:49.76
RubyってDLLで拡張するタイプの言語じゃないって認識で良いですか?
基本はGEMで拡張するタイプですか?
13デフォルトの名無しさん:2013/01/22(火) 19:45:55.04
なんかめんどくさそうな認識だが、いちおうはそんな感じでよい
スクリプトのユーザーが、そのスクリプトに必要なgemライブラリを自力でダウンロードして事前にインストールして設定しておくタイプ
14デフォルトの名無しさん:2013/01/23(水) 10:36:09.97
めんどくせーな
15デフォルトの名無しさん:2013/01/23(水) 12:11:07.12
Bundler使って使用ライブラリを細かく調整できるのはいい
16デフォルトの名無しさん:2013/01/23(水) 12:16:32.96
なにも知らない人にカタマリとしてどーんと渡して速攻ピコーンと動作する、というようなことは苦手
もしそういう、PCスキルが不定な不特定多数の人にも使ってもらいたいソフトウェアを作りたいのなら、Rubyは不向き
17デフォルトの名無しさん:2013/01/23(水) 12:38:07.80
HSPからRubyに移行しようと思うのですがRubyを使うメリットとデメリットを教えてください
18デフォルトの名無しさん:2013/01/23(水) 13:08:56.66
HSPからRubyに移行するメリット
 ・ (PC-)Unix系列OS上でよく動く
 ・ Webサーバで仕事をさせても(負荷と初回起動とメモリが他サーバ稼働言語より多いが)よく動く
 ・ HSPができますというよりは業務寄りな顔ができる

HSPからRubyに移行するデメリット
 ・ Windowsで効率よく動かない
 ・ Windowsで効率よく配布できない
 ・ HSPではなんなく作れたものがRuby単体では作れず、外部ライブラリを駆使しても非効率

結論、HSPを便利に使っている環境にいるのなら、HSPを捨てる理由はなにもない
今までHSPでやってきたことをRubyで置き換えるのは、理屈では可能だが現実的ではない

なんかこう、レンタルサーバとか借りたり仮想マシンや別マシンでLinux入れたりしてそこでRubyを別途使ってみるというのが妥当
HSPとRubyの二刀流というのは、それはそれで死角減って結構便利だと思うよ
19デフォルトの名無しさん:2013/01/23(水) 13:35:46.00
うん、Windowsでなにかひとつやれって言われて、コマンドプロンプトで用が済まず、なおかつC#に触ると死んでしまう呪いがかかっているのなら、俺はHSPを選ぶ
20デフォルトの名無しさん:2013/01/23(水) 14:19:40.93
いや面接に行ったんですよプログラマーやりたくて
そしたらスキルシートみたいなのを書かされて言語リストにHSPがなかったわけで
手書きでその他にHSPを書いてきました
そしたらHSPって何?と聞かれたのでGUIを作る言語ですっていったんですが
他にできるものはありませんか?ときかれてないですと答えたら気まずい空気になってきて
先ほど不採用通知のメールをいただきました
なのでRubyに移行しようかなと思った次第です
21デフォルトの名無しさん:2013/01/23(水) 14:20:37.75
とりあえずRubyに移行して18番先生のメリットを勉強していきたいと思います
22デフォルトの名無しさん:2013/01/23(水) 15:02:54.09
rubyはAndroidやiOSスマホでも動きますか
23デフォルトの名無しさん:2013/01/23(水) 16:02:22.32
はい
24デフォルトの名無しさん:2013/01/23(水) 18:45:45.30
東京で初心者向けのRuby勉強会とかありませんか
25デフォルトの名無しさん:2013/01/23(水) 18:46:22.31
ちなみに仕事でやってないのでそういう人でも参加できるとこございませんか
26デフォルトの名無しさん:2013/01/23(水) 20:55:31.45
>>20
わざわざRubyに「移行」って書くところが不安でしょうがない
HSPのことを全部忘れるつもりなんだろうか
27デフォルトの名無しさん:2013/01/23(水) 23:51:27.20
>>20
そりゃHSPはそういう対象じゃないからな
あれの立ち位置はNScriptとかの仲間であって、いわゆる「プログラミング言語」ではない
というかHSPしか知らないのにマの面接とか勇敢だなお前

ちなみにそこでRubyを選んだ理由は?
HSPからRubyって全然必然性が見えない選択なんだけど
28デフォルトの名無しさん:2013/01/23(水) 23:53:39.84
いけませんか?
29デフォルトの名無しさん:2013/01/24(木) 00:01:34.11
はい

江戸前寿司屋の板前の募集で「クッキーなら作ったことがあります!」と答えるようなもんだ
それは単体ではいいのかもしれんが、働くところとさっぱり関連性がないし、板前の仕事を研究理解してないのではないかという危惧がある
30デフォルトの名無しさん:2013/01/24(木) 00:32:54.40
ということでHSP勉強した人間はRubyを勉強してはいけない事になりました
31デフォルトの名無しさん:2013/01/24(木) 00:44:29.12
RGSS使いたくてRubyの勉強始めたいと思ったけどネットも書籍もナメてんのか
その羅列が意味わかんねーから教えを請いに来たのに例をポンポン載せてもわかる訳ねーだろ
加減乗除すらおぼつかない小学生に因数分解やらせるようなもんだよ
32デフォルトの名無しさん:2013/01/24(木) 01:55:21.87
>>31
基礎からやれよ。
33デフォルトの名無しさん:2013/01/24(木) 01:55:38.27
irbからサブirbを起動したいんだけど、
irb(main):001:0> irb を入力すると
ArgumentError : wrong number of arguments (0 for 1)というエラーが表示される
原因を教えてください
34デフォルトの名無しさん:2013/01/24(木) 02:17:30.76
>>33
引数が足りないみたいやけどバージョンなに?
% ruby -v
ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-darwin12.2.0]
% irb
irb(main):001:0> irb
irb#1(main):001:0> irb
irb#2(main):001:0> irb
irb#3(main):001:0>
35デフォルトの名無しさん:2013/01/24(木) 03:29:20.41
>>28
いいと思います。

HSPとrubyは使う分野が相当(まったく)異なるので、
都合で転身せざるを得ないのは仕方ない。
36デフォルトの名無しさん:2013/01/24(木) 11:16:43.88
>>34
バージョンは1.8.7です
引数は何を入れればいいのでしょうか
3736:2013/01/24(木) 11:36:36.28
>>34
サブirbでローカル変数とグローバル変数に別の値を代入すると、
メインirbに戻したときにグローバル変数は変更されるが、ローカル変数は変更されないということを
確かめたいのです


irb(main):001:0> fruit = 'apple'
irb(main):002:0> $fruit = 'banana'
irb(main):003:0> irb
irb#1(main)001:0> $fruit = 'orange'
irb#1(main)002:0> fruit = 'peach'
irb#1(main)003:0> fg 0
irb(main):004:0> p fruit
=> "apple"
irb(main):005:0> p $fruit
=> "orange"
38デフォルトの名無しさん:2013/01/24(木) 16:19:34.52
>>37
うちの1.8.7でも同じエラーになった
リファレンスマニュアルより
> irb(obj)
>  新しいサブ irb インタプリタを起動します。
>  オブジェクト obj が指定された時はその obj を self にします。
なので、適当なオブジェクトを生成して渡してやれば良いと思う
irb Object.new
irb self.dup
39デフォルトの名無しさん:2013/01/24(木) 22:40:16.20
>>38
調べていただきありがとうございます

自分でも試したところ、上の3行目を
irb(main):003:0> irb self
にすればirb#1(main)になりました
40デフォルトの名無しさん:2013/01/25(金) 19:16:15.06
Windows上でワイド文字のコマンドライン引数を取得するにはどうすればいいですか?
41デフォルトの名無しさん:2013/01/25(金) 19:57:36.28
GetCommandLine()
42デフォルトの名無しさん:2013/01/25(金) 20:00:33.35
CommandLineToArgvWで解析する。
43デフォルトの名無しさん:2013/01/25(金) 20:18:04.26
すみません。言葉が足りませんでした。
Windows上で動作するRubyでワイド文字のコマンドライン引数を取得するにはどうすればいいですか?
44デフォルトの名無しさん:2013/01/25(金) 21:30:08.28
ARGVに入ってる
ARGVはString型の配列で
そのString型のエンコーディングは
chcp 932 であれば Windows-31J
chcp 65001 であれば UTF-8
のように端末のロケールが使われる
スイッチによる解析は
require 'optparse'
してやればいい
45デフォルトの名無しさん:2013/01/25(金) 22:01:04.23
46デフォルトの名無しさん:2013/01/25(金) 23:32:44.11
>>44
確かにそうすればARGVはUTF-8になりましたが、>>9 の症状が出て?に文字化けします。
47デフォルトの名無しさん:2013/01/26(土) 00:03:49.16
48デフォルトの名無しさん:2013/01/26(土) 00:13:31.47
Rubyって日本で流行ってるから勉強しようとは思いますが
英語フォーラムってないんでしょうか?
なんか日本人だけで勝手に進化してるのか気のせい?
49デフォルトの名無しさん:2013/01/26(土) 00:17:50.37
英語フォーラムって、たとえばどんなの? どんな人がどんな話してることを想定?
50デフォルトの名無しさん:2013/01/26(土) 00:23:19.53
いろんな国の人の共通言語としての英語です
やっぱり日本語わかるRuby開発者は少ないと思うんですよ
51デフォルトの名無しさん:2013/01/26(土) 00:31:24.18
ぞんぶんにruby-coreを購読してくれたまえ
52デフォルトの名無しさん:2013/01/26(土) 13:50:49.29
死ねゴミ共がw
死ねゴミ共がw
53デフォルトの名無しさん:2013/01/26(土) 14:14:25.42
phpのhtmlspecialcharsみたいな便利なやつはRubyではなんていうのでしょうか?
54デフォルトの名無しさん:2013/01/26(土) 16:13:37.22
>>53

細かい挙動の差は知らんけど

# require 'erb'
ERB::Util.html_escape # hにエイリアスされている。

# require 'cgi'
CGI.escape_html

なんで逆なんだw
55デフォルトの名無しさん:2013/01/26(土) 16:36:06.98
str.encode(:xml => :text)辺りも
56デフォルトの名無しさん:2013/01/26(土) 17:56:39.21
>>55
ちょwそんなのあったとはww
57デフォルトの名無しさん:2013/01/26(土) 22:39:26.64
>>31
俺はネットとたのしいRubyとツクールのマニュアルで曲がりなりにも素材を公開できるレベルにはなった
つまりお前の言い分の正当性は低い
58デフォルトの名無しさん:2013/01/27(日) 03:16:38.07
>>31
プログラミングの基礎が出来てないだけだと思う
59デフォルトの名無しさん:2013/01/27(日) 10:01:37.64
SublimeText2使ってるんですけどやっぱりVIM使ったほうが良いですか?
60デフォルトの名無しさん:2013/01/27(日) 10:04:43.97
好きなの使ってください。まじで
61デフォルトの名無しさん:2013/01/27(日) 10:05:46.74
使ってみて不自由なければメモ帳でもいいよ
62デフォルトの名無しさん:2013/01/27(日) 10:14:42.05
UTF-8で書くときってBOMはつけるの?つけないの?
63デフォルトの名無しさん:2013/01/27(日) 10:23:44.60
>>62
UTF-8はつけんでいいんじゃないかね
64デフォルトの名無しさん:2013/01/27(日) 10:24:50.55
なるほど
RubyはBOMを考慮してくれるのかと思ったけど層じゃないんですね
65デフォルトの名無しさん:2013/01/27(日) 11:01:47.72
>>31
これを貼れと言われた気がして。
電話サポートでのやりとり。
客「小学生でも判るように説明しろ!」
サポート「判りました。…ボク、お母さんと代わってくれるかな?」
66デフォルトの名無しさん:2013/01/27(日) 11:04:32.80
その前にどこがわからないか説明させる機会を与えるべきだろうなー
67デフォルトの名無しさん:2013/01/27(日) 11:34:53.39
UTF-8のBOMは、仕様上はあってもいいことになっている。
Rubyでは、読む時だけはエンコーディングに BOM|UTF-8 を指定することで
BOMを読み飛ばせる。
68デフォルトの名無しさん:2013/01/28(月) 15:08:21.31
722:nobodyさん :2013/01/27(日) 22:37:47.20 ID:??? [sage]
我がRuby軍の圧倒的勝利だ!
PHPを完膚無きまでに叩き潰したぞ!
69デフォルトの名無しさん:2013/01/28(月) 17:16:14.25
このスレの住民が向こうのスレを荒らしてますよ
70デフォルトの名無しさん:2013/01/28(月) 17:42:36.02
>>69はレスがないのを2時間しか我慢できなかったのか
71デフォルトの名無しさん:2013/01/28(月) 18:28:47.05
>>40は自己解決しました
72デフォルトの名無しさん:2013/01/28(月) 18:32:42.31
解決したらなら解決方法を書いてください
73デフォルトの名無しさん:2013/01/28(月) 18:43:03.33
Ruby初心者はこれを見てください。

松江から世界へ!プログラミング言語Ruby
http://sc-smn.jst.go.jp/playprg/index/3170
74デフォルトの名無しさん:2013/01/28(月) 18:56:24.51
RubyInstalerのexeファイルからRuby1.9.3をインストールしたんですが
新しいバージョンが出たのでバージョンアップしたいと思います
この場合いま入ってるRubyはアンインストールしてからインストールするべきでしょうか?
75デフォルトの名無しさん:2013/01/28(月) 18:57:35.71
あ、はい。
76デフォルトの名無しさん:2013/01/28(月) 19:31:47.50
古いほうがもう不要ならアンインストールしてから新規インストール
古いほうがまだ必要なら別のフォルダに新規インストール
既にインストールされているRubyを不要とみなして上書きインストールするようなモードは残念ながらない
プログラミング言語本体だしある程度は仕方ないのだけども

gemはなにも指定していなければRubyフォルダの中に入るはずなので、アンインストールで全部失われる
77デフォルトの名無しさん:2013/01/28(月) 19:46:41.74
Ruby初心者はこれを見てください。

邪魔しないで (Matz)
http://sc-smn.jst.go.jp/playprg/index/3170
78デフォルトの名無しさん:2013/01/28(月) 21:20:34.16
たすけてください
WindowsにRuby1.9.3とredmine2.2をインストールしました
webrickはやめたほうがいいってことでmongrelを入れたんですが動かないようでググったらruby1.9.3には未対応らしい(開発版は動くらしい)ので消しました
そこで
http://higashinakatsu.com/%E6%8A%80%E8%A1%93%E6%83%85%E5%A0%B1/redmine/windows7%E3%81%A7ruby1-9-3redmine2-2-0%E3%82%92thin%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E5%8C%96%E3%81%99%E3%82%8B/
をみてthinを入れてみたんですが
redmineをカレントディレクトリにして
ruby C:/redmine/script/rails server thin -e productionってやると
C:/redmine/redmine/config/application.rb:59:in `instance_eval': undefined methodってエラーがでて
thin -e production startってやってみても
C:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.2.3/lib/bundler/runtime.rb:31:in `block in setup': You have already activated rack 1.5.0, but your Gemfile requires rack 1.4.4. Using bundle exec may solve this. (Gem::LoadError)
ってエラーになります

redmineをインストールしちゃったのですが再インストールせずに動かすとこまでアドバイスお願いします
79デフォルトの名無しさん:2013/01/28(月) 21:53:51.08
>>75-76
そうします
しかしこれは・・・gemを入れなおすのが面倒ですね
80デフォルトの名無しさん:2013/01/28(月) 22:55:19.37
>>78
後ろのエラーメッセージは「rackのGemfileのバージョンが合ってないので合わせろ」ってエラーっぽい
ttp://stackoverflow.com/questions/7323357/problem-with-rack-1-3-2-you-have-already-activated-rack-1-3-2-but-your-gemfile
によれば「bundle update rack」しろとのこと

前半のエラーについてはギブ
81デフォルトの名無しさん:2013/01/28(月) 23:12:20.38
なんとかインストールできましたありがとうございます
webrickと比べると速度が速いんですねthin
本当はrainbows!を入れてみたかったんですがkgioが必要らしくてこれはwindows未対応なので残念です
82デフォルトの名無しさん:2013/01/28(月) 23:52:36.47
ruby は windos で使うと苦役っぽいよな
楽ができない
83デフォルトの名無しさん:2013/01/28(月) 23:53:04.68
>>81
それはなによりです
bundle update rackで二つのエラーとも解決したって感じですか?
84デフォルトの名無しさん:2013/01/28(月) 23:55:32.83
何をやってもダメで結局全部最初からいれなおしました
85デフォルトの名無しさん:2013/01/29(火) 01:19:53.07
>>72 失礼しました
>>40はWin32APIでGetCommandLineWを呼び出しました
86デフォルトの名無しさん:2013/01/29(火) 11:41:39.78
87デフォルトの名無しさん:2013/01/29(火) 11:47:50.23
↑エスパー求む
88デフォルトの名無しさん:2013/01/29(火) 11:51:52.98
89デフォルトの名無しさん:2013/01/29(火) 11:53:32.12
>>88
ニュース貼り付けるだけのスレ紹介してどうすんの?
90デフォルトの名無しさん:2013/01/29(火) 11:57:10.90
レンタルサーバとVPSの違いで話してたつもりだったんですが
91デフォルトの名無しさん:2013/01/29(火) 11:57:05.26
ああそうだったね
だが板違いであることには変わり無い
92デフォルトの名無しさん:2013/01/29(火) 12:00:04.49
11:57:10.90

11:57:05.26

何この過去
93デフォルトの名無しさん:2013/01/29(火) 12:27:10.64
同時に書き込まれてロックが掛かって後回しにされたんだろうな
たまにあるよ
94デフォルトの名無しさん:2013/01/29(火) 20:27:54.76
rack枯れてないなぁ。。特にCGIモードで動かしたりするときとか。。
95デフォルトの名無しさん:2013/01/29(火) 22:34:49.58
>>82
今時まともな開発者はみんなMacを使っているよ。
96デフォルトの名無しさん:2013/01/29(火) 23:09:39.50
>>94
config.ru必須なのが萎える>rack
97デフォルトの名無しさん:2013/01/30(水) 05:29:34.54
rackってruby1.9の事を考えていなくて、sjisなCGIを書こうとするとmultibyte周りではまる。。
98デフォルトの名無しさん:2013/01/30(水) 07:10:38.27
Rackでsjis(cp932じゃなくて)でCGIとか2chでしかとれない貴重なサンプルだな
99デフォルトの名無しさん:2013/01/30(水) 10:18:09.76
rubyの利用って大抵webサイト構築ですよね?
100デフォルトの名無しさん:2013/01/30(水) 10:23:32.19
いちばん多い用途を上げると言われたら、自分(の所属組織)が使うパソコンまたはサーバ内で動作する
さまざまなメンテナンスまたは便利スクリプトだろうと思う

Webサーバでサイト閲覧者のアクセスに対してページを生成して返すというような用途は、
割合としては2番目くらいで、絶対数としても低めなんじゃないかな
101デフォルトの名無しさん:2013/01/30(水) 11:16:02.41
Webページが表示するのに使うデータファイルをバックグラウンドで生成しまくる、みたいなスクリプトはRuby
ユーザーが触れる表示プログラム自体はPHP

がおそらくいちばん楽
102デフォルトの名無しさん:2013/01/30(水) 11:24:42.04
その>>100先輩の用途で勉強したいと思います
とりあえず
ソースコードを毎日バックアップしたrMysqlのデータをバックアップするスクリプトとかが定番なんでしょうか。そこからはじめてみます
PHPは触った事ないのでわかりませんがJSPでやりたいと思います
103デフォルトの名無しさん:2013/01/30(水) 11:39:33.26
予算とか業務効率とかが関わってるんでなけりゃ、全部Rubyでやったって構わんけどね
104デフォルトの名無しさん:2013/01/30(水) 12:50:16.23
>>102
RailsでWebアプリケーションを一から作れる開発者と、何か知らないが役に立たないツールを作っている開発者のどちらが評価されると思う?
MySQLのバックアップツール?そんなものはHerokuにやらせれば良いよ。
105デフォルトの名無しさん:2013/01/30(水) 13:50:14.23
そう、社内アプリなのでSJISで、ASP.Net や Rails で書くと後任者が引き継げなさそうだから、
zip ball を展開するだけで動作する anhttpd + cgi というショボイ環境に。PHPは嫌いだし
106デフォルトの名無しさん:2013/01/30(水) 13:51:48.03
気取ってRack使うものじゃないな、、標準添付CGIライブラリに戻ろうかな
107デフォルトの名無しさん:2013/01/30(水) 23:14:11.69
>>95
Linuxのが楽じゃないか?
108デフォルトの名無しさん:2013/01/31(木) 10:35:01.00
[速報]RubyGemsハッキングされる
109デフォルトの名無しさん:2013/01/31(木) 10:53:10.71
2日前にgem update --systemしたんですけどやばいですかね?
110デフォルトの名無しさん:2013/01/31(木) 16:06:24.10
いずれかの変数が条件に該当した場合,
該当した変数に指定した処理をする,っていう場合のスマートな書き方はありますか?

if a == 1
a == 10
elsif b == 1
b == 10
end

とかけばできるのですが,なんかもっとまとめられないのかと思って。
111デフォルトの名無しさん:2013/01/31(木) 17:07:50.68
a = 1==a?10
b = 1==b?10
112デフォルトの名無しさん:2013/01/31(木) 17:09:01.92
>>108
そのニュース年に一回は聞くな
113デフォルトの名無しさん:2013/01/31(木) 17:59:24.24
既に恒例行事っぽい感じはするね

>>110
条件による変数代入または変更はきちんと書いてくれ
テクニカルには書けるが、読みにくくわかりにくくなってバグの元だ
たとえばそれは a が 1 じゃなくて b が 1 だったときには a も b も変更されないし、
a と b が共に 1 だったときは a しか変更されないけど、それでいいのかとか

Ruby だと case を使うことが多いような気はする
114デフォルトの名無しさん:2013/01/31(木) 18:15:54.12
初心者はムダにスマートを気にする
意味ないのに
115デフォルトの名無しさん:2013/01/31(木) 19:00:19.71
その意欲と衝動は得難いものだけどな
向けるべき方向性がちょこっと違う
キレイに書くもっとよく書くというのは重要で素晴らしいが、そっちじゃねえ
116デフォルトの名無しさん:2013/02/01(金) 00:45:17.44
でも、rubyってスマートに書けるのが売りなんじゃないの?
117デフォルトの名無しさん:2013/02/01(金) 01:04:11.37
いい指摘だ
それはその通りで、"昔ながら"の言語よりは確実に、"今風"の言語とは同程度に、スマートに処理を記述可能

ただしそれは全部Ruby wayで書くことが許されたときという条件つきのことでしかない
今回のように「排他的に値をチェックしていって該当のときだけなんかしたい」みたいな泥臭い処理の部分だけ切り出されたら、そりゃドロドロ書いてみせるしかないよ
もうちょっと広めに聞かれたら、それごともうちょっとよく書けるかもしれないけど

a, b = case
when a == 1 then [10, b]
when b == 1 then [a, 10]
end

書けてこんなもんだろうか
118デフォルトの名無しさん:2013/02/01(金) 01:32:29.44
>>117
すごい、そんな書き方ができるのか

しかし後で読むとわからなくなりそう
可読性は >>110 が上(あくまで私レベルで)

実行速度はどうなのだろう
119デフォルトの名無しさん:2013/02/01(金) 07:04:29.84
そもそも等価じゃない
120デフォルトの名無しさん:2013/02/01(金) 07:25:50.05
>>119
当たり前だ
完全に同じことが起こる完全に同じ負荷の記法なんてのがそうそうあってたまるか
121デフォルトの名無しさん:2013/02/01(金) 07:28:07.64
そもそも論理的にも等価じゃない
122デフォルトの名無しさん:2013/02/01(金) 07:29:35.10
if a == 1
  a == 10
end

if b == 1
  b == 10
end
123デフォルトの名無しさん:2013/02/01(金) 07:30:14.72
if a == 1
a = 10
end

if b == 1
b = 10
end
124デフォルトの名無しさん:2013/02/01(金) 08:27:16.79
>>117と論理的に等価なのはこうなるよね?

if a == 1
a = 10
elsif b == 1
b = 10
end

>>117のほうが、何が起こるのかを明確に記述できてて良いと思うけどな
125デフォルトの名無しさん:2013/02/01(金) 13:43:16.98
Module Hoge
class A
処理1
end
class B
処理1
end
end

処理1をカプセル化したい場合どうすればいい?

@Hogeに処理1を特異メソッドとして定義(Hoge::処理1みたいに使う)
Ahoge内に新しいクラスを作って処理1をインスタンスメソッドとして定義(class A < Cみたいに継承して使う)
B新しいモジュールを作ってクラス毎にinclude
C組み込みのクラスに処理1を定義

が考えられるけど

@→毎回Hoge::書くのがめんどいダサい
A→毎回継承するのがめんどいダサい
B→毎回includeするのがめんどいダサい
C→何か怖い

何か他にいい方法はないんだろうか?
126デフォルトの名無しさん:2013/02/01(金) 14:06:07.73
Aというクラス自体には関係するんだけどAのインスタンスそのものには無関係な処理をメソッドとかにしたい場合、
クラスAのクラスメソッドにするのが妥当であり、そこで変に凝ってあったらむしろ殴る
ということで (1)

A.hoo と記述するのは別にダサくはない
めんどいが
127デフォルトの名無しさん:2013/02/01(金) 14:13:10.86
>>126
ありあり
そんじゃ@にするわ
128デフォルトの名無しさん:2013/02/01(金) 14:15:30.34
クラスAとクラスBで同じ処理が必要ってことは二つのクラスは似たようなクラスなの?
だとしたら元からクラスCを継承する形になってるだろうからA
129デフォルトの名無しさん:2013/02/01(金) 14:24:16.91
ユーティリティモジュールを作ってincludeするのがいちばんいいと思う
名前考えるのめんどくさいんだけど

>>128
機能追加のために継承してはいけない
MIx-inなら多重してもいいのかという話は確かにあるが
130デフォルトの名無しさん:2013/02/01(金) 14:25:10.42
>>128
Aはカプセル化のために拡張用のクラスを作るって意味で元々は存在してない
131デフォルトの名無しさん:2013/02/01(金) 14:32:45.99
>>129>>130
全く違うクラスで同じ処理が必要な場合のイメージ沸かなかったから言ってみたんだ・・・

元々存在してないのであればBだわ
132デフォルトの名無しさん:2013/02/01(金) 14:36:01.61
inspectみたいなものならCしたくなるのを我慢して@かな
133デフォルトの名無しさん:2013/02/01(金) 14:37:25.61
ちょっとそれるけどモジュールAがモジュールBをincludeしたら
モジュールA内のクラス内でincludeせずにモジュールBのインスタンスメソッドって使えたっけ?
134デフォルトの名無しさん:2013/02/01(金) 14:37:49.56
module Hogeの全classに処理1が必要なら@
いくつかで良いならBかな
135デフォルトの名無しさん:2013/02/01(金) 14:38:30.54
>>133
使える
136デフォルトの名無しさん:2013/02/01(金) 14:54:49.11
>>132
inspectみたいなものだわ
open_uri使って複数のサイトをスクレイピングしてページを解析するアプリなんだけど
ヘッダに文字コード情報ついてない場合はopen_uriがASCII-8BIT返すからその時にNKFとかkconvで適切な文字コードをセットしてやる必要があって
処理1はそのためのもの
137デフォルトの名無しさん:2013/02/01(金) 14:56:01.93
>>135
ありあり
138デフォルトの名無しさん:2013/02/01(金) 15:02:30.24
そういうのはuri_read相当のメソッドの中に入れとけ
クラスとか関係ねえ
139デフォルトの名無しさん:2013/02/01(金) 15:09:46.13
>>138
煽りとかじゃなくメソッドの中に入れるってどういうこと?
140デフォルトの名無しさん:2013/02/01(金) 19:34:35.52
すいません至急>>109のアドバイスお願いします!
141デフォルトの名無しさん:2013/02/01(金) 20:00:03.61
142デフォルトの名無しさん:2013/02/01(金) 21:02:54.49
まじすか安心していいのですね
Windowsの再インストールするべきか悩みました
143デフォルトの名無しさん:2013/02/01(金) 22:15:58.37
んなもん知らんがな
ちょっと調べりゃ出てくるもんを丸投げしてなんちゅう言い草だ
144デフォルトの名無しさん:2013/02/02(土) 00:20:54.09
サクラエディタでシコシコ日本語を含むプラグラム書いていざロードしたらinvalid char云々のエラーが大量に出ました
文字コードだと思いutf-8で保存してプログラムの最初に#! ruby -Ku書きましたが依然として同じエラーがでます
どうすればよいでしょうか
ruby1.87です
145デフォルトの名無しさん:2013/02/02(土) 00:24:02.74
外部エンコーディングじゃないの?
146デフォルトの名無しさん:2013/02/02(土) 00:31:20.92
1.87
147デフォルトの名無しさん:2013/02/02(土) 00:36:16.70
BOMつきで保存してるんじゃね
148デフォルトの名無しさん:2013/02/03(日) 10:58:53.10
RubyInstallerで1.9.3を入れたんですけど
ファイルにrequireでtkをインクルードしてもそんなのないよってエラーがでます
149デフォルトの名無しさん:2013/02/04(月) 00:04:49.00
>>148
これも定期的にくるな
ActiveTcl((だったかな?)をインストールしてくれたまえ
詳しくはググれ
150デフォルトの名無しさん:2013/02/04(月) 00:38:54.42
あれ、最近のRubyInstallerはActiveTcl入れなくても
標準でRuby/Tk使えるはずだよ
現に俺の環境だとActiveTcl入れてなくても require 'tk' ができる
(mswin32版では、自分でActiveTcl入れないといけないとかあるけど……)

もしかしてmsi(Windowsインストーラ版)を使っていて
なおかつインストール時に「Tcl/Tkサポートをインストールする」に
チェックを入れなかったのでは?
(これにチェックを入れた場合か、もしくはzip版の場合のみTcl/Tkが使える)
151デフォルトの名無しさん:2013/02/04(月) 06:04:08.59
RubyってQt使えるんですか?
152デフォルトの名無しさん:2013/02/04(月) 09:34:15.95
馬鹿には無理
153デフォルトの名無しさん:2013/02/04(月) 12:42:30.03
equal?  についてお伺いします。

以下のコードで、 a.equal? c がtrue になるのはなぜでしょうか。
a = 10  を a="10"
b = 10  を b="10" に変えれば、予想通りa.equal? c がfalseになってくれるのですが・・・


===使ったコード===

a = 10  #aはオブジェクト10を指す

b = 10  #bは、オブジェクト10(aが指すのとは別のオブジェクト)を指す
c = b    #cは、bが指すオブジェクト10を指す

print("a==b is " )
puts a==b
print("a==c is " )
puts a==c

print("a.equal? c is " )
print a.equal? c


===実行結果===
a==b is true
a==c is true
a.equal? c is true
Complete(0)
154デフォルトの名無しさん:2013/02/04(月) 12:46:53.94
>>149-150
たぶんインストーラーでそういうのあったかもしれません
どうしましょう!
もうgemとかdevkitとかインストールしたのでまた再インストールとかパネェことできないです
一回案インストールしないでインストーラー使っても大丈夫ですかね?
155デフォルトの名無しさん:2013/02/04(月) 13:14:44.10
Rubyでオブジェクト動作の調べ事をするときはその対象に整数を使ってはいけないということはどんな参考書にも書いてあるはず
なぜなら、同じ整数値であるならばオブジェクトIDが常に同じという特殊な存在だから
(何百万回と整数が呼ばれるたびにいちいち新規オブジェクトを生成なんてしてたら負荷で死ぬわボケという理由による)

このへんのこと書いてなかったら、いい機会だからその本捨てろ
156デフォルトの名無しさん:2013/02/04(月) 14:54:06.27
RHG 最強ですねわかります
157153:2013/02/04(月) 16:26:21.79
>>155
ありがとうございます
例外的に、整数値(10)は同じidで管理されるということですね

本は、今のとは別の本を探してみます ありがとうございました
158デフォルトの名無しさん:2013/02/04(月) 16:37:22.23
>>144ですがwindowsでロードするとinvalidchar云々出るんですがubuntu環境では正常にロードできます
どういう問題が考えられますか?
ruby1.8.7でした
159デフォルトの名無しさん:2013/02/04(月) 16:58:42.97
>>158
>>145-147はチェックしましたか?
160デフォルトの名無しさん:2013/02/04(月) 17:17:35.69
なんかわかりませんが一度BOM付きで保存してから再びBOM無しで保存するとロードできるようになりました
最初はBOM付きで保存するのチェック外してたんですけどね
すいませんでした
161デフォルトの名無しさん:2013/02/04(月) 23:51:46.04
>>157
正確にいうと、整数(Fixnum)、Symbol、nil、true、falseは即値として扱われる

でも、この事実書いてる記事や本ってそんなにあるかなー
俺はリファレンスマニュアルの用語集ぐらいでしか見たことないんだが
162デフォルトの名無しさん:2013/02/05(火) 00:14:09.59
>>154
とりあえず試さずに書くけど
zip版を落としてきて、フォルダごと上書きすればいけるんじゃなかろうか
この方法なら少なくとも、一度インストールしたgemとdevkitは
おおむねそのまま残るはず

やる場合は、念のためバックアップをとってからやってね
163デフォルトの名無しさん:2013/02/05(火) 00:15:58.02
>>162
了解です
親に怒られるので明日学校終わったら試してみます
164デフォルトの名無しさん:2013/02/05(火) 09:58:45.05
>>161
本も書かわずにウェブだけでてきとうに調べて
習得した気になってる俺でも知ってるようなことだし「でも」って言うほどでもない気はする
165157:2013/02/05(火) 12:28:01.13
>>161
教えて頂き、ありがとうございます。
今使っている本よりもっと詳しい本・ウェブを探してみます
166デフォルトの名無しさん:2013/02/05(火) 13:11:55.06
どなたかMeCab-rubyを使っている方はいらっしゃいますか?

MacOSX 10.6.8
ruby1.9.3p374
MeCab0.995
MeCab-ruby0.99

という環境なのですが、途中で停まってしまいます。
irb(main):001:0> require "MeCab"
=> true
irb(main):002:0> str = "¥u592a¥u90ce¥u306f¥u3053¥u306e¥u672c¥u3092¥u4e8c¥u90ce¥u3092¥u898b¥u305f¥u5973¥u6027¥u306b¥u6e21¥u3057¥u305f¥u3002"
=> "太郎はこの本を二郎を見た女性に渡した。"
irb(main):003:0> mecab = MeCab::Tagger.new
(irb):3: [BUG] Segmentation fault
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin10.8.0]

何か良い方法があれば、ご教授願います。
167デフォルトの名無しさん:2013/02/06(水) 13:13:13.15
0 < x < 1の一様乱数を発生させるメソッドは無いの?
0 <= x < 1はあるみたいだけど。
168デフォルトの名無しさん:2013/02/06(水) 13:45:32.85
用途がマイナー過ぎるので標準ではついてない
169デフォルトの名無しさん:2013/02/07(木) 07:47:29.16
Ruby-mswin32 or ftpの更新が止まっちゃっているんだけど
最新安定版のmswin32バイナリのアーカイブが落とせる所って無いの?
ActiveScriptRubyはmsiだし余計な物が一緒になっているみたいだし・・・
170デフォルトの名無しさん:2013/02/07(木) 07:58:12.74
>>169
「mswin32版」というところにこだわりがなく、Windowsで使えればよいのであれば
RubyInstallerのzip版がオススメ
導入が楽、ファイルサイズが軽い
devkit導入でネイティブgemがインストールできるといいこと尽くめ
171169:2013/02/08(金) 06:59:24.27
>>170
レスthx
mswin32を使っている理由はWindows上で実行速度が一番速いためです
・・・自分でビルドするしかないのか?orz
172デフォルトの名無しさん:2013/02/08(金) 19:10:44.95
mswin32版よりmingw32版の方が速いよ(マイクロベンチでは)
1998年のVC++6と最新のGCCじゃ最適化能力が違う
RubyがGCC向けにコーディングされているとかもあるかもしれないけど

ActiveScriptRubyの1.9.2以降はVC++10でコンパイルされてるのでGCCに迫るけど
ランタイムライブラリが違ってしまうので、バイナリライブラリの互換性が無い
それと、Windows2000以下では実行できない

MingwのラインタイムライブラリはVC++6と同じものを使ってるので
mswin32とmingw32では(Ruby1.8からは)バイナリライブラリに互換性をもたせている

どうしてもmswin32版がよくてVC++6があるのなら自分でビルドするのがいいのでは
今となってはVC++6が入手できないそうなので(有料だし)
173デフォルトの名無しさん:2013/02/08(金) 19:31:30.31
The Computer Language Shootout Benchmarksのマンデルブロを引数1000で実行
実行ファイルのロードも含んだ実行時間、単位は秒
たぶん浮動小数点数の計算能力をみるベンチマーク
41.766 ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] (う)さんの
32.406 ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32] 自分でビルド
26.828 ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32] (う)さんの
15.078 ruby 1.9.3p374 (2013-01-15) [i386-mswin32_100] artonさんの VC++2010製
13.188 ruby 1.9.3p327 (2012-11-10 revision 37606) [i386-mingw32] 自分でビルド

14.453 ruby 1.9.2p0 (2010-08-18 revision 29036) [x64-mswin64_80] (う)さんの VC++2005製
14.313 ruby 1.9.3p327 (2012-11-10) [x64-mswin64_100] artonさんの能楽堂に入っているVC++2010製
09.719 ruby 1.9.3p286 (2012-10-12 revision 37165) [x64-mingw32] Mingw64のサイトにあるやつ
05.578 ruby 2.0.0dev (2012-11-01 trunk 37411) [x64-mingw32] Mingw64のサイトにあるやつ
つい最近Windows8(64) を導入したので調子に乗ってマイクロベンチしてみた
Ruby2.0 64bit版だけの新機能 Flonumのパワーを見たかった
174デフォルトの名無しさん:2013/02/10(日) 22:07:56.75
Rubyってマック専用言語なんですか?
175デフォルトの名無しさん:2013/02/10(日) 22:51:35.92
メインターゲットはUNIX系OSね。
結果的にMacもその一家に。
176デフォルトの名無しさん:2013/02/10(日) 23:39:00.76
Matzは、Debian Linuxをつかってるよ
177デフォルトの名無しさん:2013/02/10(日) 23:41:27.77
>>174
androidで動いた。
178デフォルトの名無しさん:2013/02/10(日) 23:43:39.71
Re: Best Linux Distro for Ruby?
Posted by Yukihiro Matsumoto (Guest) on 2011-01-03 03:51
Hi,

I use Debian sid, and see no problem developing in Ruby.

       matz.

ww.ruby-forum.com/topic/785744
179デフォルトの名無しさん:2013/02/11(月) 07:30:01.74
単にWindowsではそれほど効率的には動作しないという程度の意味しかない
Windowsで効率よく動作しないと家族が危険に晒されるというのなら、Rubyを使うべきではない
180デフォルトの名無しさん:2013/02/11(月) 10:30:47.18
Ruby使える人って他にも何の言語使える?
181デフォルトの名無しさん:2013/02/11(月) 11:20:40.72
perl
182デフォルトの名無しさん:2013/02/11(月) 11:59:41.04
haskell
183デフォルトの名無しさん:2013/02/11(月) 12:35:26.33
coffeescript
184デフォルトの名無しさん:2013/02/11(月) 12:46:18.72
Japanese
185デフォルトの名無しさん:2013/02/11(月) 12:48:06.77
モッモル
186デフォルトの名無しさん:2013/02/11(月) 14:39:47.81
Cがいいよ
187デフォルトの名無しさん:2013/02/11(月) 14:47:36.54
Rubyは、バージョンごとにスクリプトを用意しなければならない
188デフォルトの名無しさん:2013/02/11(月) 18:15:30.12
開発者は本当もうすこし互換性を気にしてくれよと思う
189デフォルトの名無しさん:2013/02/11(月) 18:17:29.99
あと名前からこれはなにをするのかさっぱりわかんないようなネーミング
pとかね
190デフォルトの名無しさん:2013/02/11(月) 18:58:06.09
ほう、他には?
191デフォルトの名無しさん:2013/02/11(月) 19:05:56.30
UnixとCをある程度知っているという初期の大前提に立つと、…pくらいだろうか
あれは「pというメソッドを他人が読むことは絶対にない(デバッグ以外の使い方をしてはならない)」という意図もあるな
192デフォルトの名無しさん:2013/02/11(月) 19:29:43.69
>>189
お前がRubyのこと何一つ知らないで書き込んだってことだけは伝わった
193デフォルトの名無しさん:2013/02/11(月) 19:33:30.73
一人で組む分には個人的に最高なんだけど
仕事では使えんのよなー
194デフォルトの名無しさん:2013/02/11(月) 19:55:19.28
世の中にはソースコードを納品する仕事しか存在しないわけではあるまい
195デフォルトの名無しさん:2013/02/11(月) 19:58:24.34
>>194
そゆことっすなー
あらゆることをRubyで行なえないのは、まあ、残念ではあるんだけど、適材適所ということでひとつ
196デフォルトの名無しさん:2013/02/11(月) 21:03:17.35
>>192
じゃあ教えてくれよ
197デフォルトの名無しさん:2013/02/11(月) 21:04:12.98
pじゃxmlオブジェクト見えないしデバッグにも使えない
198デフォルトの名無しさん:2013/02/11(月) 21:19:37.72
なんのXMLオブジェクトかは知らないがto_s相当のメソッドがあるだろうから
それ呼んでpすればいい
199デフォルトの名無しさん:2013/02/11(月) 21:35:10.62
>>197
それはそのxmlオブジェクトというもののクラスを作った人が悪いな
Rubyのあらゆるクラスはinspectを適切に定義することということになってる
あるオブジェクトをpで表示してみてなにがなんだかわからない(内部変数丸見えのままの)表示だったら、クラス作成者に文句言うといいぞ
200デフォルトの名無しさん:2013/02/11(月) 21:38:25.55
大抵の場合はppがかろうじて読めるレベルにしてくれる
201デフォルトの名無しさん:2013/02/11(月) 21:38:33.19
あ、p自身がオブジェクトを解釈して表示してるわけじゃないので、pのほうに文句言わないように
p hoge は inspect メソッドを呼んで puts hoge.inspect とほぼ同じ動作をしているだけに過ぎない
202デフォルトの名無しさん:2013/02/11(月) 21:57:07.22
処理側は呼ぶメソッドが決まってるというだけで、
実際には引数オブジェクト側というかクラス側がいろいろ用意しなければならないというのがオブジェクト指向的なのかもしれん
p は 引数オブジェクトの inspect メソッドを、puts は 引数オブジェクトの to_s メソッドを呼ぶということが決まっている
このへんのことを書いていない解説書や解説サイトがあったら今後も役に立たない可能性が大なので投げ捨てろ
203デフォルトの名無しさん:2013/02/11(月) 22:15:09.86
>>199
inspectはデバッグ用だからオブジェクトの文字列表現を返すものとはいえ
ある程度は内部状態を見せてくれたほうがユーザは助かるんじゃないかと
to_sと同じもの見せられても嬉しくない

irb(main):002:0> a = Nokogiri::XML("<a>apple</a>")
=> #<Nokogiri::XML::Document:0x55d55c name="document" children=[#<Nokogiri::XML::Element:0x62aa34 name="a" children=[#<Nokogiri::XML::Text:0x629fbc "apple">]>]>
irb(main):004:0> a.to_s
=> "<?xml version=\"1.0\"?>\n<a>apple</a>\n"

irb(main):005:0> require 'rexml/document'
=> true
irb(main):006:0> doc = REXML::Document.new("<a>apple</a>")
=> <UNDEFINED> ... </>
irb(main):008:0> doc.to_s
=> "<a>apple</a>"
204デフォルトの名無しさん:2013/02/11(月) 22:33:56.30
>>203
君のXMLの知識はゼロだということがよくわかった
205デフォルトの名無しさん:2013/02/11(月) 22:44:51.81
>>204
どのへんでゼロだと判断したの?
206デフォルトの名無しさん:2013/02/11(月) 23:57:49.80
>>179
でもWindowsで効率的に動作しない(というかインストールすらままならない)というのは
大半のコンピュータで効率的に動作しない、というのと同じことでは?シェア的に考えて。
207デフォルトの名無しさん:2013/02/11(月) 23:59:13.14
サーバ用途ならそうでもない
208デフォルトの名無しさん:2013/02/12(火) 00:01:51.87
シェア的にはもうWindowsが大半っていう状況でもなくなってきたな
209デフォルトの名無しさん:2013/02/12(火) 00:10:23.79
え?
210デフォルトの名無しさん:2013/02/12(火) 00:28:46.26
macで動けば充分
211デフォルトの名無しさん:2013/02/12(火) 00:32:56.10
島根県民専用言語になるのも時間の問題だしな
212デフォルトの名無しさん:2013/02/12(火) 00:56:48.19
Windowsがいいにきまってるでしょ。それがわからんのが信じられないよ
213デフォルトの名無しさん:2013/02/12(火) 01:01:10.28
Windowsは、オープンソースでない
214デフォルトの名無しさん:2013/02/12(火) 01:03:29.33
RubyのWindows用の作業環境を自分で作れないような奴がソフトウェア開発とかするなよ迷惑だから
215デフォルトの名無しさん:2013/02/12(火) 04:03:15.31
いつも態度がでかい
216デフォルトの名無しさん:2013/02/12(火) 05:32:24.48
windowsならpytonの方が相性良い
217デフォルトの名無しさん:2013/02/12(火) 11:10:22.90
0 < x < 1の一様乱数の作り方がわかんない…
218デフォルトの名無しさん:2013/02/12(火) 11:13:59.00
0 ≦ x ≦ 1 で生成して、0 と 1 が出たら捨ててやり直しすればいい。
どうせ確率的にはほとんど出ないんだから。
219デフォルトの名無しさん:2013/02/12(火) 14:03:55.88
えー…
220デフォルトの名無しさん:2013/02/12(火) 14:46:27.60
C, C++

/* generates a random number on [0,0xffffffff]-interval */
unsigned long genrand_int32(void)
(中略)

/* generates a random number on (0,1)-real-interval */
double genrand_real3(void)
{
return (((double)genrand_int32()) + 0.5)*(1.0/4294967296.0);
/* divided by 2^32 */
}

mt19937ar.cpp
221デフォルトの名無しさん:2013/02/13(水) 00:41:46.55
>>220
4294967296.0って何?意味わかんない。
どこのトーシロが書いたプログラムだよ…
222デフォルトの名無しさん:2013/02/13(水) 06:28:38.91
Pythonのが五倍速いんでしょ?
223デフォルトの名無しさん:2013/02/13(水) 09:28:47.88
何ってコメントにも書いてある通り2の32乗だろ
224デフォルトの名無しさん:2013/02/13(水) 10:57:24.59
マグニチュードが 0.2 上がると地震の規模は 2 倍になります
つまりマグニチュードが 1.0 上がると地震の規模は 2 の 5 乗で 32 倍になります
なんとマグニチュードが 2.0 上がるだけで地震の規模は 1024 倍にもなるのです
225デフォルトの名無しさん:2013/02/13(水) 13:05:30.46
>>214
他の開発環境がないと構築できないスクリプト言語とか^^;
Rubyはオワコン
226デフォルトの名無しさん:2013/02/13(水) 14:39:08.38
他の開発環境ってなんだ?
227デフォルトの名無しさん:2013/02/13(水) 19:08:14.48
Rubyに翻訳しろよ
CならできるのにRubyでできないの?
228デフォルトの名無しさん:2013/02/13(水) 19:27:58.30
>翻訳
229デフォルトの名無しさん:2013/02/13(水) 22:38:41.00
アクセス制限ってこういう風に書くしかありませんか?
class Test
def abc()
end
private :abc
end
こうかくと2度もメソッド名を記述しないといけないので効率悪いと思うんですが何故こういう仕様なんでしょうか?

private def abc()みたいに書ける方がらくだと思うんです
230デフォルトの名無しさん:2013/02/13(水) 22:46:36.72
「ruby private」でググレば出てくると思うが・・・

class Test
private
def abc()
end
end
231デフォルトの名無しさん:2013/02/14(木) 13:03:28.16
rexmlで空要素が閉じられてないHTMLを読み込むとエラーが出るんですが
html5は空要素を<img〜 />って書かなくてもOKなので<img〜>でも取得できたら良いんですが方法ありませんか?
232デフォルトの名無しさん:2013/02/14(木) 14:04:16.46
自分の好きなようにXMLを定義すればいい
233デフォルトの名無しさん:2013/02/14(木) 14:08:28.28
>>232
そりゃその通りなんだが回答レベルとしてどうよという

rexmlでXMLとして解釈してるんじゃないかね
空要素が閉じられてなくてもいいHTMLのDTDを明示的に指定するとたぶん文句言わないぞ
234デフォルトの名無しさん:2013/02/14(木) 14:20:02.33
re = REXML::Document.new(url)
re = REXML::DocType.new('html', PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"')
空要素をとじる必要なhtml4のdtdを読み込んでみましたがダメなようでした
235デフォルトの名無しさん:2013/02/14(木) 14:27:19.80
そもそもエラーってなんだ
他人に解決求めるならそのへんは勝手に解釈省略すんな
236デフォルトの名無しさん:2013/02/14(木) 14:50:00.25
XHTML5は閉じタグ必須だぞ
REXMLでXHTMLじゃないHTMLは読めない
237デフォルトの名無しさん:2013/02/14(木) 15:23:31.07
>>231
>>236とかぶるけどHTMLを読みたかったらHTMLパーサを使う
REXMLはXMLパーサでHTMLパーサじゃない
NokogiriはたしかXML/HTML対応だからそっち試してみては
238デフォルトの名無しさん:2013/02/14(木) 15:33:36.83
XHTML5ってなんだ?XHTML5なんて存在しないぞ?
239デフォルトの名無しさん:2013/02/14(木) 16:18:23.32
本家より「5倍速い」PythonベースのRuby実装が登場
http://developers.slashdot.jp/story/13/02/08/061220/
240デフォルトの名無しさん:2013/02/14(木) 16:59:55.07
3倍でいいのに
241デフォルトの名無しさん:2013/02/14(木) 17:55:34.72
>>238
HTML5仕様書ではHTML構文のHTML5とXHTML構文のXHTML5を定義している
http://www.w3.org/TR/html5/introduction.html#html-vs-xhtml
>This specification defines version 5 of the XHTML syntax, known as "XHTML5".
242デフォルトの名無しさん:2013/02/14(木) 17:58:35.55
known as
243デフォルトの名無しさん:2013/02/14(木) 20:55:30.78
HTML5のXMLは互換のために残してるだけ
244デフォルトの名無しさん:2013/02/16(土) 01:45:53.31
1度SJISで書いてしまったテキストのエンコードをUTF8に変えるにはどうすればいいのでしょうか
小一時間ほど文字化けが不可避なんですけど全部打ち直しですか?
245デフォルトの名無しさん:2013/02/16(土) 03:58:56.38
馬鹿はそうする
246デフォルトの名無しさん:2013/02/16(土) 07:17:04.31
SJISで読み込む→エンコーディング変換→UTF-8で保存 でおk
247デフォルトの名無しさん:2013/02/16(土) 07:37:45.52
>>244
1.8だとこんなとこ
require 'kconv'
File.open(utf8file,'w'){|f| f.write(File.read(sjisfile).toutf8) }
248デフォルトの名無しさん:2013/02/16(土) 17:42:33.55
>>244
たとえば、どの文字が文字化けを生じたの
249244:2013/02/16(土) 18:06:23.00
色々試したんですが単にコマンドプロンプトではUTF-8での表示ができないだけっぽいですね
windowsだけならShiftJISで問題ないんですけど今度はubuntuで実行した時に文字化けしまくるから嫌なんですよね
皆さんはどうしているのでしょうか
250デフォルトの名無しさん:2013/02/16(土) 18:20:48.40
あきらめて、ファイルを生成して、そのファイルをエディタでひらきます
251デフォルトの名無しさん:2013/02/16(土) 18:35:41.61
>>249
windowsではmintty
252デフォルトの名無しさん:2013/02/16(土) 18:54:16.14
253デフォルトの名無しさん:2013/02/16(土) 21:02:56.01
Rubyエンジニアって具体的にどういうコード書いてるの?
254デフォルトの名無しさん:2013/02/17(日) 00:08:59.66
俺は、PCを起動したらいつもirbも同時に起動しているよ。
こいつをフロントエンドにして、いろんなことするんだ。
255デフォルトの名無しさん:2013/02/17(日) 00:52:12.82
>>249
OSがなんだろうとその上でutf8を扱える同じソフトを使ってれば問題ない。GNUアプリケーション群とかサポートするOSも多くて良い。
256デフォルトの名無しさん:2013/02/17(日) 13:15:17.41
ruby1.8.7sw
open("hoge.txt", "a"){|f| f.write("hoge")}
を実行するときに別のプログラムでhoge.txtを開いているとエラーが出ますが、どのように回避出来ますか?
257デフォルトの名無しさん:2013/02/17(日) 13:30:41.43
>どのように回避
こっちのセリフだw
書き込んでしまいたいのかリトライさせたいのか強制終了させたいのかお前の希望をまず言えよ
258デフォルトの名無しさん:2013/02/17(日) 13:33:55.92
エラーが出るとプログラムがそこで止まっちゃうので、「書き込みに失敗しました」とか表示でもして次の命令に進んで欲しいですね
書き込んでしまえるのならそっちのほうがいいですが
259デフォルトの名無しさん:2013/02/17(日) 14:14:39.55
>>256
別のプログラムでそのファイルをロックしない。
260デフォルトの名無しさん:2013/02/17(日) 14:15:34.26
>>258
try
261デフォルトの名無しさん:2013/02/17(日) 14:39:01.02
Rubyのこれ探してます

1.定番のテンプレートエンジン
2.PHPのCodeIgniterのような軽量フレームワーク(RoRほど高機能なものは必要ないため)
3.Ruby使うならこれはいれとけっていう定番のgem
262デフォルトの名無しさん:2013/02/17(日) 22:30:21.88
>>261
1. 定番はない。まあまあメジャーなのはERB(とその後継のErubis)、次いでHamlあたり
2. Sinatra or Padrino
3. (Ruby 1.9系列であれば)ない。たぶん100人に聞いたら100人とも微妙に回答が違う
個人的にはBundlerは入れるべき
263デフォルトの名無しさん:2013/02/17(日) 23:02:34.16
1.8なRailsアプリを維持しています。2.0もでるし、時間がたてばたつほど移行が大変になりそうなので、
さっさと移行計画立てたいのですが、上司は移行コストは無駄だと怒ります。どうすれば上司を説得できるでしょうか。
264デフォルトの名無しさん:2013/02/18(月) 00:31:58.89
>>263
移行するって何にですか? 1.8のまま維持するのがなぜ駄目なんですか?
265デフォルトの名無しさん:2013/02/18(月) 01:25:32.92
上司に同意だな
266デフォルトの名無しさん:2013/02/18(月) 05:42:37.83
>> n=Time.now
>> n.year*365+n.month*30+n.day
=> 734823
という感じの毎日1ずつ増えていく数値が欲しいんですが
もうちょっと厳密でまともな書き方あったら教えて下さい
267デフォルトの名無しさん:2013/02/18(月) 07:32:31.37
>>263
そりゃ移行コストに見合うだけのメリットを示せないと説得はできないだろう

時間がたてばたつほど移行が大変になる、ってのはそうだと思うが
「だからといって敢えて今やる必要はない」ってのが上司の理屈だ
だから今やっておかないと、後でこんなに困るんです!っていうのを具体的に示せないと
説得はムリ

ちなみに、企業的に今一番説得力があるであろうと思われる理由は
「2013年6月でRuby 1.8.7のサポートが切れる予定なんです」
http://www.ruby-lang.org/ja/news/2011/10/07/plans-for-1-8-7/

>>266
n.year*366 + n.yday
うるう年があるので366じゃないとダメ
268デフォルトの名無しさん:2013/02/18(月) 07:34:26.43
>>266
ぱっと思いつくのはこれくらい

Time.now.to_i / (60*60*24) # 1970年1月1日午前0時から

require 'date'
(Date.today - Date.new(0,1,1)).to_i
269デフォルトの名無しさん:2013/02/18(月) 08:29:31.30
>>268
Date.today.jd でいいんじゃ?
270デフォルトの名無しさん:2013/02/18(月) 09:08:21.98
いいのかな?いいのかも?よぐわがんね
マニュアルのユリウス日の説明見るとスゲー日付が基準になってるからさ
266の目的にあえばいいんじゃないかな
271デフォルトの名無しさん:2013/02/18(月) 19:30:59.70
rubyのwindows版にあるコマンドラインのマルチバイト文字を正しく解釈できないバグは2.0では直りますか?
272デフォルトの名無しさん:2013/02/18(月) 20:56:09.07
Windows版の1.9.3は日本語を含むパスにあるファイルがrequire出来ない
1.8.xや1.9.2の頃は出来るのに
273デフォルトの名無しさん:2013/02/18(月) 22:01:09.76
>>270

いいんだよ。
通日数が分かればあとは特定の起点に対する相対値にするだけだ。
274デフォルトの名無しさん:2013/02/18(月) 22:57:52.23
>>249
Ruby 1.9系なら、プロンプトへの出力時に自動で
適切なエンコーディングに変換してくれるようになっている
WindowsならShift_JIS(Windows-31J)に、UbuntuならUTF-8に、というように
275デフォルトの名無しさん:2013/02/18(月) 23:23:39.12
>>263
上司にRails Castのそれ関係のビデオ見せる。
276uy:2013/02/20(水) 07:49:50.11
>>271
1。93で直ってなかったっけ
277uy:2013/02/20(水) 07:54:26.86
>>272
WindowsがUTF8じゃないからだろ
今pcないから感だけど
ソースコードの文字コードをシフトジスにして実行したら読めるんじゃね?
やめたほうがいいけど
278デフォルトの名無しさん:2013/02/20(水) 13:47:09.21
PHPにしとけばいいのに
279デフォルトの名無しさん:2013/02/21(木) 00:29:22.37
>>272
Windows をやめる。
以上。
280デフォルトの名無しさん:2013/02/21(木) 03:49:21.67
Goldに受からなければ会社クビだって言われている
281デフォルトの名無しさん:2013/02/21(木) 08:08:45.10
Goldってまあまあ難しいけど大丈夫なのか
282デフォルトの名無しさん:2013/02/21(木) 08:33:02.29
goldってなんですか
283デフォルトの名無しさん:2013/02/21(木) 09:41:09.53
ゴールド!金!
284デフォルトの名無しさん:2013/02/21(木) 18:55:34.18
Windows7でrubyを使っていますが少々不便に感じるところがあります。
コマンドプロンプトでスクリプト名を入力してEnterを押すとそのスクリプトが実行され、
エクスプローラーでスクリプトファイルをダブルクリックすると関連付けたエディタで開く
というようなことはできないでしょうか?
285デフォルトの名無しさん:2013/02/21(木) 19:14:57.50
>>284
たぶんできる

> コマンドプロンプトでスクリプト名を入力してEnterを押すとそのスクリプトが実行され、
環境変数PATHで指定したディレクトリにスクリプトを置く
> エクスプローラーでスクリプトファイルをダブルクリックすると関連付けたエディタで開く
関連付け Win7 でぐぐる
286デフォルトの名無しさん:2013/02/21(木) 19:43:32.14
コマンドプロンプトでエンターもエクスプローラーでダブルクリックも
そのファイルタイプの規定のアクションが呼び出されるような気がするから
それぞれで違う動作は無理かもしれないしできるかもしれない。分からん
287デフォルトの名無しさん:2013/02/21(木) 19:46:07.37
答え: 出来ない
288デフォルトの名無しさん:2013/02/21(木) 19:55:10.57
>>286
ああそういうことか。PATHとかの問題じゃないね

*.rbはエディタに関連付けるとして
コマンドプロンプトからはruby hoge.rbのようにインタプリタと
スクリプトを陽に指定すればいけるだろうか
289デフォルトの名無しさん:2013/02/21(木) 20:26:12.65
ahk使ってExplorerで^eしたら右クリ|編集(&E)を呼び出すことならできる

#include ime_func.ahk

#IfWinActive, ahk_class CabinetWClass

^E:: ; 選択ファイルを編集する
 if IME_CHECK("A")=0
 {
  Send,{AppsKey}E
 }
 return
290284:2013/02/21(木) 22:05:55.87
出来ないが結論っぽいですね
皆さんありがとうございました
291デフォルトの名無しさん:2013/02/21(木) 22:09:58.17
>>284
NYAOSなどの代替シェルを使う
292284:2013/02/21(木) 22:29:47.89
ちょうど代替シェル探してたんですよ
UNICODEは扱えるのかな
293デフォルトの名無しさん:2013/02/21(木) 22:54:32.18
nyaosは使い物になりません
標準入力ができないのでやめましょう
294デフォルトの名無しさん:2013/02/21(木) 23:24:29.10
というか、コマンドプロンプトからスクリプト名のみ指定で実行という場面があまり思いつかない
どうせ hogehoge.rb って rb まで書かないといけないんだし、俺ならそういうのは特別にbatファイルを作っておくかな
エクスプローラからダブルクリックで実行は危険過ぎるので編集に切り替え
295デフォルトの名無しさん:2013/02/22(金) 00:54:58.80
sh使って、一行目にrubyのパス書いとけばいいだろ。というかそれが普通だろ?
296デフォルトの名無しさん:2013/02/22(金) 02:38:49.26
>>294
pathext指定しろ
297291:2013/02/22(金) 07:56:06.28
>>292
UNICODEは残念ながらムリ

ちなみに293が「標準入力できない」と書いているが
少なくとも俺がみた限りでは普通にできる
298デフォルトの名無しさん:2013/02/22(金) 21:39:10.74
Net::HTTPを使って、リクエストパラメータを送るにはどうしたらいいですか。
http://doc.ruby-lang.org/ja/1.9.2/class/Net=3a=3aHTTP.html
を見ていますが、
get(path, header = nil, dest = nil) -> Net::HTTPResponse
とあるけどリクエストパラメータがありません。
path?x=1 のようにしないといけないのでしょうか。
299デフォルトの名無しさん:2013/02/22(金) 21:58:21.39
はい

というか Net::HTTP の get は「最終送信メソッド」であり、それ以前にクエリ文字列は完成されていなければなりません
なんか Hash とか配列の配列とかからてきとうにクエリ文字列を作るのは他のライブラリやメソッドの仕事
300デフォルトの名無しさん:2013/02/23(土) 16:28:55.27
Goldゲットしたー
これでクビにならずに済んだ。ホッ
301デフォルトの名無しさん:2013/02/23(土) 16:32:12.92
WindowsでRuby2.0で勉強したいんですけどいつでまうsか?
302デフォルトの名無しさん:2013/02/23(土) 18:16:33.38
ソースは明日リリース予定だから、Windows用バイナリはその
数日あとじゃね?
303デフォルトの名無しさん:2013/02/25(月) 03:12:31.27
str.encode('UTF-16','EUC-TW') とかエラーになるけど、encodeの直交性ってどうなってるの?
304デフォルトの名無しさん:2013/02/25(月) 04:15:06.78
エラーっていうなエラー名を書け
305デフォルトの名無しさん:2013/02/25(月) 05:12:51.37
ncoding::ConverterNotFoundError: code converter not found (EUC-TW to UTF-16)
306デフォルトの名無しさん:2013/02/25(月) 06:54:43.49
Windows用バイナリ出たね
307デフォルトの名無しさん:2013/02/25(月) 10:05:56.46
ruby2.0でredmineとrailsは動きますか?
308デフォルトの名無しさん:2013/02/25(月) 10:11:07.59
pikで1.9と2.0をwindowsに入れる場合rubyinstallerで両方のバージョンをいれると環境変数のpathは壊れませんか?
309デフォルトの名無しさん:2013/02/25(月) 10:36:20.40
>>303
RubyはEUC-TWを扱えるけどEncodingによる変換はできない
バグトラッキングに上がったことがあったけど「このへんどうすればいいかよくわからんのでパス」という理由でリジェクトされたはず
※ より正確にはlack of feedback、EUC-TWがどうあるべきかについて詳しい人がいなかった
「本当に」EUC-TWで書かれたテキストが必要なのならIconvを使う
310デフォルトの名無しさん:2013/02/25(月) 10:43:57.08
文字エンコード関連をWIkipediaとか見ながら想像で実装するとあとあと酷い目に遭う…
311デフォルトの名無しさん:2013/02/25(月) 10:48:22.97
redmine2.3っていつ出ますか?
312デフォルトの名無しさん:2013/02/25(月) 11:19:15.60
bundlerでインストールしたgemを全て削除する方法を教えてください
313デフォルトの名無しさん:2013/02/25(月) 11:52:04.53
ひとがいない
314デフォルトの名無しさん:2013/02/25(月) 12:41:24.85
Ruby2.0とredmine2.2.3で
ruby script/rails server webrick -e productionってやると
以下のエラーがでます
どう対処したらいいでしょうか?

Unable to load the EventMachine C extension; To use the pure-ruby reactor, requi
re 'em/pure_ruby'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/eventmachine-1.0.0-x86-mingw32/lib/
rubyeventmachine.rb:2:in `require': cannot load such file -- 2.0/rubyeventmachin
e (LoadError)
315デフォルトの名無しさん:2013/02/25(月) 16:25:42.99
>>309
ありがとう。 iconvは削除されたので、iconvgemを使えということですね。

しかし、Iconvはbig5-UAOとか新しめのはサポートされてない・・・
ここでも条件分けですかね。 
316デフォルトの名無しさん:2013/02/25(月) 17:43:00.31
>>314
EventMachineのバイナリライブラリがないのじゃなかろうか
2.0は1.9とはバイナリ互換性がないので
別途2.0用にコンパイルされたライブラリが必要になるはず

gem fetch eventmachineってしてダウンロードしてみたら
eventmachine-1.0.0-x86-mingw32.gem には
1.8と1.9用のバイナリしか入ってなかったよ

エラーメッセージで「EventMachineC拡張がロードできないので pure-ruby版を使え」
って言われてるのでeventmachine の代わりにem/pure_rubyをrequireすればいいみたいなので
どこかrequire 'eventmachine'よりも先にrequire 'em/pure_ruby'を書けばいいのだろうけど
Railsはわからん

RubyInstaller Development Kitもインストールすると
2.0用バイナリのコンパイルとか出来るのかな?試さないけど
317291:2013/02/25(月) 23:31:37.63
>>308
基本的には壊れないはずだけど
(pikはあくまで、プロセス内限定でPATHを変更するものなので)
何か気になるところがある?

>>312
http://keijinsonyaban.blogspot.jp/2011/12/bundler-11_24.html
bundle cleanコマンドの説明のところ
318デフォルトの名無しさん:2013/02/26(火) 15:16:34.86
まじっすか
やっぱ2.0でredmineはあきらめたほうがよさそうですね
ひょっとしたらem/pure_ruby書いたら良いかもしれませんがもう何回もRubyを再インストールとgemでupdateしたらbundlerでgem入れるの繰り返しをしてたのでHDDをいためそうなので2.0でredmineするのはあきらめて1.9でやることにします
1日以内に範囲を絞ってググってみても誰もwindowsでruby2.0でredmineを動かす記事書いてないから厳しいですね
319デフォルトの名無しさん:2013/02/26(火) 16:11:09.20
初心者スレでRuby2.0インストールする人はほとんどいないんじゃないかな
やるとしたら2.0.1だろう
320デフォルトの名無しさん:2013/02/26(火) 17:10:29.30
Ruby2.0.0でプログラミング始めようと思ったけど
まずcファイルをコンパイル?(ビルド?)できない
バイナリ出るまで待とう。。
321デフォルトの名無しさん:2013/02/27(水) 00:09:41.65
>>320
ruby 2.0.0のバイナリ、もうRubyInstallerに出てるよ
322デフォルトの名無しさん:2013/02/27(水) 08:04:19.55
早く枯れると良いな
323デフォルトの名無しさん:2013/02/27(水) 08:25:06.75
そうそう、Ruby2.0を使おうとするのは初心者

   初 心 者 ス レ で し た

>>322
1.9よりかは早いと思うよ、あれは変更が大胆で面倒過ぎた
半年もすれば解説なり説明なりが増えて使えるようになるんじゃないかな
俺らはライブラリ作成者とか先っぽの人たちが頑張るのを応援してればいい
324デフォルトの名無しさん:2013/02/27(水) 10:00:45.72
なんか似たことをものすごく前にも言った気がするんだが、
とりあえず今は1.9.3を使って、んで2.0の解説が山盛りになってからおもむろに2.0の新機能を勉強するといいぞ
1.9.xの解説なら山のようにある(希望)し、1.9.1で使えて2.0で使えない考え方というのもrequire_relativeを除いてないといっていい

require_relativeは1.9.1→1.9.2で唯一激変した「カレントディレクトリにあるrbファイルをbasenameでrequireできない」にまつわるもの
もともと筋がよくなかったし、require './hoge.rb' と書く人も当時の時点で多かったから、それほど問題はなかったんだけど

1.9.1対応の解説で、カレントディレクトリの自作rbファイル hoge.rb を require で読みたいときに
require 'hoge'
と書かれているものがあったら、それは現在の1.9.3および2.0では間違いで
require './hoge.rb'
とパスつきで書くか
require_relative 'hoge'
と相対requireしなければなりません
相対パスで書くのは1.9.1でも1.8.7でも(カレントディレクトリさえ妥当なら)動くので、こっちが人気
325デフォルトの名無しさん:2013/02/27(水) 16:13:57.92
一方 CoffeeScript は・・・
326デフォルトの名無しさん:2013/03/01(金) 16:39:27.07
質問です。rubyのバージョンは1.9.3p125です。
rubyでgetsを使うとコマンドプロンプト上で実行すると大丈夫なのですが、RDEで実行すると入力要求のタイミングがおかしいんですがなぜでしょうか?
例えば
puts "あ"
b=gets.chomp
puts"い#{b}"
実行すると画面に”あ”が表示される前に入力が要求されます
327デフォルトの名無しさん:2013/03/01(金) 18:29:47.84
ストリームがフラッシュされないとかじゃない?
328デフォルトの名無しさん:2013/03/01(金) 18:50:26.65
それはRDEの設定を弄れば直るものなんでしょうか?
もしそうならどう設定すればいいか教えていただきたいです。
329デフォルトの名無しさん:2013/03/01(金) 20:29:55.66
まつもとさんに直接質問したらやっぱり怒られますか?
330デフォルトの名無しさん:2013/03/01(金) 20:48:52.67
そうだろうね。あの人、瞬間湯沸かし器で有名だから。
331デフォルトの名無しさん:2013/03/01(金) 21:46:56.81
それ以前にRDEについて聞かれたって知らんとしか答えられんだろう
332>>328:2013/03/01(金) 21:57:15.53
いや、>>329さんとは別人です
333デフォルトの名無しさん:2013/03/01(金) 22:06:13.03
res328.ip_addr == res329.ip_addr
=> true
334>>328:2013/03/01(金) 22:15:24.83
お、おう
335デフォルトの名無しさん:2013/03/01(金) 22:28:41.41
無理やり
STDOUT.sync = true
puts "input"
puts(gets)
とかやると"input"までは出力されるけど、改行はつかないね
変なの
336デフォルトの名無しさん:2013/03/01(金) 22:46:03.28
RDEはRubyの動作に熟練した人が使う
Ruby初心者は決して使ってはいけない
だからたとえば>>326のようなトラブルには絶対に遭遇しないし、誰も直す気もアドバイスする気もない

なぜなら、Rubyでgetsなんて使わないからだ
あるいは、使うとしてもこれにぶち当たった時点でスクリプトの動作を一旦変える
どうせ文字列がどこから来るかの違いなんだし
337>>326:2013/03/01(金) 22:55:45.54
>>336
了解です、素直にコマンドプロンプトでやります
どうもでした
338デフォルトの名無しさん:2013/03/02(土) 01:10:23.62
:piyo-piyoって書きたいのに、
:'piyo-piyo'ってしなきゃダメなのはどういう理由?
339デフォルトの名無しさん:2013/03/02(土) 01:31:57.65
:piyo - piyo って解釈されるから
340デフォルトの名無しさん:2013/03/02(土) 01:32:51.93
解釈しないようにすれば良いのに
解釈しなきゃいけない理由があるの?
Ruby言語的に。
341デフォルトの名無しさん:2013/03/02(土) 01:40:50.46
逆に:piyo - piyoって解釈してほしいときと区別が難しいだろ
空白の有り無しとか言い始めるのか

大体の言語で変数名は英数字と_のみじゃないの
342デフォルトの名無しさん:2013/03/02(土) 08:50:16.10
LispとかForthとか変なのを除けば、だいたいそうだな
343デフォルトの名無しさん:2013/03/02(土) 09:18:10.73
>>338
-のほうが"優先順位"が高いから

演算記号の"優先順位"を低くするというルールを作ると :a-b というシンボルや変数名が一発で書けるようになるが、
そのかわり「:aからbを引く(思いつかないならaからbを引く)」と書きたい場合
  「3-2って続けて書けるからa-bって書いたらエラーになった、
  そういやこれ変数として解釈されるんだっけ、変数と解釈される要素の前後には空白を【絶対に書かなければならない】のね」
という新しい(そして、明らかに煩雑な)ルールが別途できてしまう
344デフォルトの名無しさん:2013/03/02(土) 10:25:04.68
○○すれば良いのに
とか言っちゃう奴は何も考えてない奴が多いから参考にならない法則
345デフォルトの名無しさん:2013/03/02(土) 11:16:54.45
このへんのパーサやトークン解釈については、自分で疑問持たないと進歩しないので、
なんでこんな動作なんだこっちのほうがいいのに、と思ってもらうこと自体はなにも問題がない、というか思ってもらったほうがいい

納得してもらえるかどうかだけが問題
346デフォルトの名無しさん:2013/03/02(土) 11:56:05.01
すいません、今の場合は何も問題ないです

分かってない奴に「すれば良いだけだから簡単でしょ」
と言われ続けたストレスをついここで発散してしまいました
347デフォルトの名無しさん:2013/03/02(土) 11:59:44.87
1.9.3 の Zlib::GzipReader ですが、readline() でencoding が指定できず、set_encoding()も
受け付けないのですが、自分で更にラッパーをかけて使っているのでしょうか?
348デフォルトの名無しさん:2013/03/02(土) 13:11:44.52
いい加減privateとprotectedの仕様を他の言語に合わせろボンクラ開発者!!!!!!!
349デフォルトの名無しさん:2013/03/02(土) 13:13:28.83
それではもうレスもらえないと思う
350デフォルトの名無しさん:2013/03/02(土) 13:25:52.83
>>349>>347宛ね
351デフォルトの名無しさん:2013/03/02(土) 13:41:57.06
とまあ、技術的な話題についていけずレスだけ欲しい人がム板にはこびりついています
1週間もすれば自分の身にも振りかかってきてわかってくることではあるけど、
これから入学就職のシーズンでプログラミングに触れる人も増えるだろうし、まったくの新参の人は注意
352デフォルトの名無しさん:2013/03/02(土) 19:02:10.46
技術的な話題についていけない人はいつまでもprivateとprotectedに対する議論を避ける傾向にある
353デフォルトの名無しさん:2013/03/02(土) 20:59:11.51
>>352
どうでもいい事だからってだけ

まあ確かに紛らわしいのはわかるが
今その辺を変えて、後方互換性が爆死するのは困るから
正直今変えてほしくない
354デフォルトの名無しさん:2013/03/02(土) 22:46:19.76
というか誰もアクセス制御なんて使ってないし気にしてないから話なんて振られても困るし、
「誰も気にしてないということがわからないような位置にいる人」が言ってるんだろうという確証になるから余計スルー
355デフォルトの名無しさん:2013/03/02(土) 23:08:24.16
誰もというのはどの程度の母集団なんだろうかね
気にしない人って所詮その程度のものなんだろう
君(もしくは少数)の意見が全員一致の意見だと思わないほうがいい
356デフォルトの名無しさん:2013/03/03(日) 00:45:20.81
どうせオープンクラスだからどうにでもできちゃうからな
357デフォルトの名無しさん:2013/03/03(日) 04:02:54.61
元々Matzは変えようとしてたけど、互換性を大事にする方針になったから、もう変えないでしょ
358デフォルトの名無しさん:2013/03/05(火) 07:18:25.08
「_」という変数ってなんか言語的に特別な意味はあるん?
それとも、普通の変数と同じで、無名変数的に扱う場合にこうしてるだけ?
359デフォルトの名無しさん:2013/03/05(火) 08:27:01.19
>>343
hoge?fuga:hage
360デフォルトの名無しさん:2013/03/05(火) 11:16:38.72
>>358
特別な意味はないよ
361デフォルトの名無しさん:2013/03/05(火) 18:07:00.77
Windows版で**/がうまく動きません
フォルダ名が日本語のフォルダが無視されます
362デフォルトの名無しさん:2013/03/05(火) 20:34:54.56
2.evalby( :Math#sqrt )
=> 1.4142135623730951
こういった風にオブジェクトを指定の方法で処理する書き方ってありますか?

もちろん上のは Math.sqrt(2) と同じ結果ですが、
someobj.を〇〇する.それを△△する.さらに□□する.
といったように加工の順番どおりに記述できないのかなぁということです。
363デフォルトの名無しさん:2013/03/05(火) 20:53:31.84
Numericなどを独自拡張するしか無さそうな気がするんだけど
364デフォルトの名無しさん:2013/03/05(火) 21:31:02.00
>>363 なるほど拡張ですか
class Object
def evalby(&blk)
blk.call(self)
end
end

2.evalby{|x| Math.sqrt(x)}
=> 1.4142135623730951

2.evalby{|x| Math.sqrt(x)}.evalby{|x| x**2}
=> 2.0000000000000004

見よう見まねで試してみましたが、もっとましな実装方法があれば教えてください
365デフォルトの名無しさん:2013/03/05(火) 21:47:50.85
別バージョン
class Object
 def evalby(code)
  code.call(self)
 end
end

2.evalby(Math.method(:sqrt)).evalby(->x{ x**2})
=> 2.0000000000000004
この辺で自分的には満足ですが拡張無しでも出来るのなら知りたいです。
366デフォルトの名無しさん:2013/03/05(火) 22:07:25.46
>>361
Dir.glob(**/)なら動かない環境があるよ
367デフォルトの名無しさん:2013/03/05(火) 23:51:06.10
>>365

>> 2.instance_eval(&Math.method(:sqrt))
=> 1.4142135623730951
>> 2.instance_eval(&Math.method(:sqrt)).instance_eval(&->x{x**2})
=> 2.0000000000000004
368デフォルトの名無しさん:2013/03/06(水) 00:18:54.23
>>367 ありがとうございます
やはり素人が思いつくような機能は大抵は備わっている感じですなんですなあ・・・
369デフォルトの名無しさん:2013/03/06(水) 00:20:36.41
そりゃそうよ、開発効率重視の言語なんだからさ
PHPみたいなゴミとは訳が違う
370デフォルトの名無しさん:2013/03/06(水) 00:28:48.66
>>362
メソッドチェーンのことだったらRubyでもPHPでもできる
371デフォルトの名無しさん:2013/03/06(水) 00:51:09.59
メソッドチェーンが主目的ではなくて

objが○○する.成果物が△△する
ではなく
objに対して(xxxが)○○する.成果物に対して(yyyが)△△する
的な事をしたいという話でした
372デフォルトの名無しさん:2013/03/06(水) 02:58:45.17
そういうの前から欲しいと思ってた
2.sqrt ==> x # 代入のつもり
x**2.puts(file)
みたいな
373デフォルトの名無しさん:2013/03/06(水) 10:48:48.62
>>361
RubyをWindowsで使っちゃうひとって
374デフォルトの名無しさん:2013/03/06(水) 11:12:29.20
上にも似たようなことがあったが、WindowsでRuby使う人はRubyに慣れてる人なんだよね
Linux(いやMacOSXでもいいけど)上では普通に動くのにWindowsではなんか変だな、しゃあないかわりに○○するか、で終了
迂回できる知識があるので「困ってない」、から、いつまでたっても直らない

今回だとDir.globの*はあんまりにも他の部分と動作解釈が違うので、Linux上ですら意図的に避けられていることが多い
Dir.entriesを正規表現で掬い上げるとか、そっちのほうが単純確実
375デフォルトの名無しさん:2013/03/06(水) 11:36:54.71
初心者や Ruby に慣れてない人や Linux に慣れてない人は、
Windows ではなんか変だな、しゃあないかわりに Python するか、で終了。
なのにね。
なんでわざわざ障害の多い Ruby 使おうとするんだろう。
376デフォルトの名無しさん:2013/03/06(水) 13:25:04.44
Windowsがいいにきまってるでしょ
377デフォルトの名無しさん:2013/03/06(水) 17:20:02.85
RubyをWindowsで使っちゃうひとって
378デフォルトの名無しさん:2013/03/06(水) 20:28:24.38
LinuxでRuby使っちゃうひとって
379デフォルトの名無しさん:2013/03/06(水) 21:42:44.64
最新のハッカーは、Windowsw、だぜ。
380uy:2013/03/07(木) 14:17:09.66
ウィンドウズでルビー使うには最低限パスと文字コードわかってないと無理
それ知らずにルビーONウィンドウズしてるとパンチングマシーンとかで普通に100とかでるようなる
381デフォルトの名無しさん:2013/03/07(木) 14:39:07.14
それはどの言語にも当てはまる事でRubyに限った話じゃない
382デフォルトの名無しさん:2013/03/07(木) 14:50:55.76
"abcd" を ["a","b","c","d"] にするには?
383デフォルトの名無しさん:2013/03/07(木) 14:53:32.95
"abcd".split ""
384デフォルトの名無しさん:2013/03/07(木) 15:17:11.07
お恥ずかしい。そんな簡単でしたか・・
しばらく独学します。ありがとうございました
385デフォルトの名無しさん:2013/03/07(木) 15:25:55.38
例えば「ruby 文字列 一文字ずつ」とググれば出てくる

自分のやりたいことが何なのかをコードではなくて
日本語で(別に英語でも良いが)表現できれば検索できる
386デフォルトの名無しさん:2013/03/07(木) 15:29:51.23
>>384
別に簡単ではない
これは通常のString#splitの動作とは違う特別に設定されたものだから、マニュアルを見ないと絶対にわからない
というわけで、とりあえずダメもとでいいからマニュアルは見とけ
ttp://doc.ruby-lang.org/ja/1.9.3/method/String/i/split.html

半分くらいの割合で初心者的によくわかんないことが書いてあるが、ときどきやりたいことがそのまま書いてあったりもする
当たればラッキーだ
387デフォルトの名無しさん:2013/03/07(木) 15:33:41.92
>>386
> これは通常のString#splitの動作とは違う特別に設定されたものだから、マニュアルを見ないと絶対にわからない

そうですよねえ、やっぱり
ゲームでいうと秘密の入口みたいなもの

そういうのだけ集めた裏技集があると便利
388デフォルトの名無しさん:2013/03/07(木) 15:40:04.50
文字列をどうにかしたいんだからStringのマニュアル読んで探すのがベストというか唯一解
しょっちゅう言われてるが、StringとArray(Enumerable)とHashのマニュアルは流し読みして、代表的な動作を記憶に留めておくといい(具体的な細かい動作は不要)
それ以外のクラスは操作対象になってから読むほうがいい(膨大だし面倒だし忘れちゃうから)

今回だって「文字列を配列にするメソッドはどっかにあったなStringだっけ?」程度の記憶はあって欲しいところ
389385:2013/03/07(木) 15:41:07.19
そうだよねマニュアル読むほうが教育的だよね余計なこと言ってすいませんでした
390デフォルトの名無しさん:2013/03/07(木) 15:45:55.69
時間操作したいと思ったとき、TimeとDateとDateTimeのどこにどんなメソッドがあってどんな動作してたかなんて1ミリも覚えてない
ものすごく何度も使っていればそのうち覚えるだろうけど、そんなん無理する必要ないよな

最近やっとstrftimeの綴りを覚えたが、引数をどうやって書くかは覚える気ゼロ
391デフォルトの名無しさん:2013/03/07(木) 15:47:16.00
splitはperlの猿真似
392デフォルトの名無しさん:2013/03/07(木) 21:12:50.84
文字単位に分解するなら String#chars を勧めたいが、
配列として得たい場合は

1.9.3までなら "abcde".chars.to_a
2.0以降なら、"abcde".chars

としないといけないんだよなー。
393uy:2013/03/08(金) 02:31:20.11
394デフォルトの名無しさん:2013/03/08(金) 07:59:53.19
何が?
395デフォルトの名無しさん:2013/03/08(金) 10:26:57.23
>>393
http://doc.ruby-lang.org/ja/search/class:String/
こことか引用箇所の切り取り方が酷すぎるなあ・・・
要点箇所を自動で抽出しようとして失敗してる感じかね。
そういう話ではなくて?
396デフォルトの名無しさん:2013/03/08(金) 10:57:28.56
何で原文の該当箇所にすら飛べないんだ
とは思う
397デフォルトの名無しさん:2013/03/08(金) 11:47:39.52
>>394
1.9.3と2.0でString#charsの動作が違うということだろ
398uy:2013/03/08(金) 13:26:55.11
もう404になってたから何でもない
399uy:2013/03/08(金) 14:49:44.15
class&nbsp;A
&nbsp;&nbsp;attr_accessor&nbsp;:x
&nbsp;&nbsp;def&nbsp;initialize&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;@x&nbsp;=&nbsp;2
&nbsp;&nbsp;end
&nbsp;&nbsp;@x&nbsp;=&nbsp;4
end
p&nbsp;A.new.x

ruby2.0でもう仕様固めちゃうって事はこういうのもずっとこのままなのかな
このネームスペースはやばいと思ってたからいつか整理されて変わるものと思ってた
クラスの中にあってメソッドの外にある@xみたいなのの呼び方ってクラスメンバ変数でいいんだっけ?
これ使いどころとかあるの?
400uy:2013/03/08(金) 14:50:28.43
なんか貼り付けミスってやばい事になった
class A
attr_accessor :x
def initialize
@x = 2
end
@x = 4
end
p A.new.x
401デフォルトの名無しさん:2013/03/08(金) 20:43:51.30
クラスインスタンス変数でしょ。
特異クラスのインスタンス変数だから、インスタンス横断的に情報を共有したいときに使える。
402デフォルトの名無しさん:2013/03/08(金) 23:54:54.64
すごく初歩的な質問なんですが…
starrubyを利用して画像を表示するウィンドウを作成させます。
そのウィンドウ内をクリックすると外部リンク、例えばgoogleのトップページ
をブラウザで開かせるようなコードを考えていますがどうにも手づまりです

具体的にはこのようなコードになっています。
最後のif文に何を入れていいかがさっぱりです…何か良いアイディアはありますか?
不明瞭な内容かと思いますがよろしくお願いします

require "starruby"
include StarRuby
texture = Texture.load("ruby.png")

Game.run(640, 480) do |game|
game.screen.clear
game.screen.render_texture(texture, 8, 8)
mouse = Input.keys( :mouse )
mouseLocat = Input.mouse_location()
if mouse.include?( :left )

end
end
403デフォルトの名無しさん:2013/03/09(土) 00:08:27.74
「規定の(関連付けられた)Webブラウザを起動しURLを渡して表示させる」は
・ 動作対象のOS
・ 動作対象のシェル
・ 動作対象のWebブラウザ
の3つに依存する

WindowsならShellExecuteを呼べばいいんだけど、どっかにメソッドあったっけ? Win32OLEで直書き?
404uy:2013/03/09(土) 00:26:10.99
ライブラリは色々あるだろうけど
素のrubyでやるならこれがベターじゃね
http://jp.rubyist.net/magazine/?0008-Win32OLE
405デフォルトの名無しさん:2013/03/09(土) 01:15:16.36
winだったらstartでいいべ
406デフォルトの名無しさん:2013/03/09(土) 01:20:05.90
launchy
407402:2013/03/09(土) 01:32:02.17
みなさん様々なアドバイスありがとうございます
OSはwindowsになります

元々はインターネットのページ内に
特定のページに飛ぶようなリンクを持たせた画像を埋め込む
という機能を持ったWEBrickを利用したプロキシを作成しようとしていました

しかしリンクを持たせた画像を埋め込む方法がわからず
>>402のような形になりました…まだまだ勉強不足ですね…
408デフォルトの名無しさん:2013/03/09(土) 01:42:03.11
WEBrickをHTTPプロキシにするんならWEBrick側で受けとったHTMLに
<a href="..."><img src="..." /></a> を挿入すればいいんじゃない?
409uy:2013/03/09(土) 03:05:04.11
nankaブラウザを別途起動じゃなくて
ウィンドウ内にページ表示みたいな話に聞こえる
それだったら.NETのほうが簡単
410デフォルトの名無しさん:2013/03/09(土) 06:07:31.52
ruby捨ててjavascriptに汁
411デフォルトの名無しさん:2013/03/09(土) 06:30:59.81
>>410
馬鹿じゃねーの?
412デフォルトの名無しさん:2013/03/09(土) 07:21:51.66
本当は何がしたいのかってのが見えないからなあ
もしかしたら410の言う通りrubyでやる必要ないかもしれないし
413デフォルトの名無しさん:2013/03/09(土) 17:54:41.37
プログラミング初心者です
まずはじめに簡単だと聞いたRubyを学ぼうと思っているんですけど、おススメの参考書とかありますか?
414デフォルトの名無しさん:2013/03/09(土) 18:23:35.58
あなたがWindowsユーザーならRubyはおすすめしません
415デフォルトの名無しさん:2013/03/09(土) 18:37:04.65
高枝切りバサミはとても簡単で便利で使いやすいけれど、鼻毛切りには残念ながら向きません
なにを作りたいと思っていますか?

もしWindows上でのなにかゲームや便利プログラムなのなら、C#かHSPをおすすめします
もしブラウザ上でのなにかマウスでやるゲームやスマホなどで遊ぶものなのなら、Flashをおすすめします
もしどこかのサーバを借りてユーザーに楽しい体験をさせるサイトを作るのなら、とりあえずはPHPをおすすめします
416デフォルトの名無しさん:2013/03/09(土) 18:50:40.04
Flashなんか勧めんなよ
将来性なさすぎるだろ
417デフォルトの名無しさん:2013/03/09(土) 18:51:36.03
高枝切りバサミとして見ても
javascriptのがオヌヌメ
418402:2013/03/09(土) 18:59:07.89
http://den2sn.hatenablog.com/entry/20081031/1225431355
このブログに書いてあることを実現するようなプロキシを作りたいと考えています

具体的にはOpenIDを入力するようなページが表示されると共に
リンク付きの画像を表示。その画像のリンクをたどると常に同じOPでログインする。
というようなプロキシ作りたいと考えています
419デフォルトの名無しさん:2013/03/09(土) 19:02:40.96
イラネ
420デフォルトの名無しさん:2013/03/09(土) 19:09:42.02
>>416
では代替をどうぞ
10年後なんてどうでもいいので、今日明日使えるものをお願いします
421デフォルトの名無しさん:2013/03/09(土) 19:14:00.91
>>418
そうですか
422デフォルトの名無しさん:2013/03/09(土) 19:34:15.42
>>420
html5
423デフォルトの名無しさん:2013/03/09(土) 19:42:15.36
実質的規格も対応もバラバラなHTML5でなにか作るなんて自殺行為だな
FlashやOCで作って2年後に捨てたほうがマシそうだ
424デフォルトの名無しさん:2013/03/09(土) 19:46:55.17
どっちがマシと思うかは人によるだろ決め付けるなよ
425デフォルトの名無しさん:2013/03/09(土) 19:49:25.85
HTML5が自殺ならFlashは老衰だな
426デフォルトの名無しさん:2013/03/09(土) 20:00:33.82
ブラウザのリッチクライアントは今手を出しても無駄になりそうなので、Androidアプリとサーバサイドに注力してるよ。
427413:2013/03/09(土) 20:53:36.82
とりあえず漠然とプログラミングがどういうものか体験してみたいので、一番簡単なプログラミング言語を学びたいんですが、やはりRubyはレベルが高いですかね?
428デフォルトの名無しさん:2013/03/09(土) 21:08:12.56
>>427
興味あるアプリが何の言語で書かれているかでいいんじゃね。
429デフォルトの名無しさん:2013/03/09(土) 21:15:53.18
Rubyは実は初心者向きじゃない
430デフォルトの名無しさん:2013/03/09(土) 21:16:21.25
>>427
Windowsで手軽にプログラミングを試したいならVBでいいよ
メモ帳に

MsgBox("hello world!")

て書いてhello.vbsと言う名前で保存して出来たファイルをダブルクリック
後はVBのスレでも探してそっちで聞いてくれよん
431413:2013/03/09(土) 21:45:32.29
参考になりました
ありがとうございます
432デフォルトの名無しさん:2013/03/09(土) 22:10:18.52
ブラウザでコンソール開いてJavascript触ってみるとか >>427
433デフォルトの名無しさん:2013/03/09(土) 23:53:13.11
Rubyはプログラマが小さいプログラミングをする場合に割と簡単な言語
434デフォルトの名無しさん:2013/03/10(日) 13:50:02.56
RubyはApacheで動かすためには作られてないんですか?
WindowsでApacheで動かすためのモジュールってないんですか?
なんかRuby用の専用サーバみたいなのをgemで入れてそれをApacheのプロクシモジュールと合わせて使わないといけない漢字で面倒くさいです
435デフォルトの名無しさん:2013/03/10(日) 14:44:18.53
>>434
現在、ApacheにRubyのWebアプリを組み込んで動かしたい場合には
Phusion Passengerというモジュールを使うのが一般的
これは別名mod_railsやmod_rackと呼ばれていて
これを使えば、ほとんど面倒な設定なしに、サクッとWebアプリを動かすことができる

ところがこのPhusion Passenger、残念なことにWindowsには対応していない
そのため、あなたは以下のどれかを選択をする必要がある
1. LinuxやMac OSに移行する(推奨)
2. そもそもApacheを使うことを諦める。Apache以外にもWebアプリを動かす方法はいろいろある
3. Windows上でプロキシとか使って頑張る
436435:2013/03/10(日) 14:45:39.52
ちなみにWindows PC上で、自分のWebアプリが動くかどうかテストしたいだけなら
無理にApacheを使う必要はあんまりない
437デフォルトの名無しさん:2013/03/10(日) 14:53:30.87
なるほど、Windowsなんですが、新しいパソコンを買うまでは厳しいです
ApacheはあきらめてThinを使います
なぜかWindowsだとThin以外のサーバは動かなくて導入が難しいのでこれで作って生きたいと思います
438デフォルトの名無しさん:2013/03/10(日) 16:22:49.03
677:デフォルトの名無しさん :2013/03/10(日) 00:51:40.81 [sage]
LLでWEBならPHPを覚えとけばいいんだよ
RubyとかPythonとかPerlなんてやめとけよ

678:デフォルトの名無しさん :2013/03/10(日) 01:13:32.81 [sage]
そうそうPHPはWeb用では最も完成された言語
他は糞
439デフォルトの名無しさん:2013/03/11(月) 22:49:17.36
Rubyを使う場合ってどういうレンタルサーバを利用するんですか?
railsってcgiじゃないですよね?
440デフォルトの名無しさん:2013/03/11(月) 23:27:49.62
>>439
頑張ればcgiでも動く。遅いけど。
自鯖かVPSなら問題ないだろ。
441デフォルトの名無しさん:2013/03/11(月) 23:32:07.39
Railsに関するいろいろなライブラリのインストールや設定変更は通常コマンドラインから行う
なんで
・ コマンドラインがユーザーに解放されている
・ Rubyがインストールされているか、上記コマンドラインからインストールが可能である
が最低限

んで、前にもあったけどふつうにRailsにページ表示させると遅くてどうにもならないので、普通はmod_railsのようなものを使う
これは普通のサーバには入ってないので
・ Webサーバにmod_rails(Passenger)がインストールされ起動しているか、自前で設定可能
を推奨

だもんだから、いわゆるCGIレンタルサーバだと動作しない
1鯖30人程度のプレミアムなレンタルサーバか、それ未満のいわゆる専用サーバが適任

つまり、全部込みで借りるとわりとお高い
ふつうはサーバ本体は家や部署に置いて回線と名前だけ買う
442デフォルトの名無しさん:2013/03/11(月) 23:35:56.51
さくらでRuby使ったときはcronで静的ページ生成しまくる手で凌いだというか、それで用が足りたので借りた
Rubyはメンテナンススクリプトの役目

データを動的にブラウザにだぱあしたければPHP使えばいいのさ
443デフォルトの名無しさん:2013/03/11(月) 23:36:24.94
なるほど、ということは100円とか300円で借りられるようなレンタルサーバは無理ですね
公開目的なので専用サーバは高いのでVPSになっちゃいますね
VPSか・・・・・
Rubyを使う場合はレンタルサーバの選択肢が狭いのはなんででしょうか
444デフォルトの名無しさん:2013/03/11(月) 23:51:41.18
Rubyはユーザーが使いやすいような書き方や動作を重視した結果、スクリプトが使用するメモリやCPUは「ふつう」のスクリプト言語よりも増えた
これは普通トレードオフであって、なにかエピックでグレートなパラダイムが生まれない限り両立は不可能(量子コンピュータ?)

まあ、つまり、Rubyに対応しても儲からないんよ
Perl使わせれば30人賄えるサーバであってもRuby可にすると15人くらいでレッドゾーン突入
サーバあたりの収入が半分になってしまうのならRubyなんてやんねえバーカバーカ、という経営判断はあり
445デフォルトの名無しさん:2013/03/12(火) 00:31:07.89
>>443

herokuとか使ってみれば?
446デフォルトの名無しさん:2013/03/12(火) 02:59:39.85
>>444
単にセキュリティの問題じゃないの。別プロセスで動くcgiと違って、passegerとかは複数ユーザでメモリとか共有された気がする。
447デフォルトの名無しさん:2013/03/12(火) 08:44:55.71
だったらRubyをCGIで提供すればよろしがな
CGIですら提供されてないとしたらそれはRuby本体が引き起こす問題

これでも一時期に比べたら増えたんだよRuby可能サーバ
448デフォルトの名無しさん:2013/03/12(火) 10:12:14.02
これってPythonにも言える話ですか?
449デフォルトの名無しさん:2013/03/12(火) 11:16:18.77
django にも mod_python, mod_wsgi, django.cgi がある
450デフォルトの名無しさん:2013/03/12(火) 12:11:27.91
sinatraの質問コーナーもここでいいですか?
451デフォルトの名無しさん:2013/03/12(火) 12:38:43.96
WebProgのほうが回答もらえるかもしれないけど、ひょっとしたら誰か使ってるかもしれないので駄目もとでどうぞ
知見を元に質問しなおせば誰もマルチだとか言わんので
452デフォルトの名無しさん:2013/03/12(火) 22:15:19.15
入門書をきっちり読んだのでごく基礎的な文法のみなら覚えられたと思うのですが
これからいろいろ手を出して作ってみたいと考えるにあたり
rubyでこんなことができるよ・こんな用途があるよ的な事をサンプルと共に解説してくれるような本などありましたら
教えて頂きたく思います
453デフォルトの名無しさん:2013/03/12(火) 22:34:30.77
現時点で作りたいものがないならひとまずRubyは忘れて他のことしなさい
必要になったら戻ってくるといい
454デフォルトの名無しさん:2013/03/12(火) 22:43:50.06
>>452
・ソケット使ってコンソールチャット
・スクレイピング
・ニコ生でコメント取得
・RSSリーダー
455デフォルトの名無しさん:2013/03/13(水) 01:20:01.20
>>447
さくらの300円コースはrubyをCGIで提供してたはず。
というか需要が少ないのだろう。何かを公開したいという人でも、お前のようにcgiが何かわかってないどころか、webデザイナーにも及ばない程度の人が大多数だ。そういう人にはhtmlの拡張というイメージのphpの敷居が低いのだろう。
456デフォルトの名無しさん:2013/03/13(水) 01:31:22.46
>>453に一票
プログラミングなんて目的にするもんじゃない
ニートじゃあるまいし
457デフォルトの名無しさん:2013/03/13(水) 02:49:29.45
Rubyの文法覚えて次何するかわからないって人は
ソフトバンククリエイティブの
「作りながら学ぶRuby入門 第2版」
が良いんじゃないかな。
amazonで初版の中身少し見ることできるから見てみたらいい。
地方の本屋じゃあんまり見かけないけどね
458デフォルトの名無しさん:2013/03/13(水) 11:25:22.27
>>452
ここのRubyの項目をやるのはどう? 
http://www.codecademy.com/ja/tracks/apis

または、こことか。
http://www.learnstreet.com/cg/simple/projects/ruby 
459デフォルトの名無しさん:2013/03/13(水) 11:35:22.41
>>456
プログラミングを目的に出来ないような人は、プログラミングをしない方がいいよ。
460デフォルトの名無しさん:2013/03/13(水) 11:49:23.82
プログラミングが目的になるのは趣味の奴だけ
461デフォルトの名無しさん:2013/03/13(水) 11:52:58.22
プログラミングはただの手段であって道具
それを磨くことは大いに有用だが、それが目的になってはいけない
作りたいもの(または、作らなければならないもの)がないのならプログラミングなんて忘れて他のことに人生を使え

ム板には(時々マ板にすら)無職のニートさんや引きこもりさんがいて、プログラミングに"賭け"ている自分を否定されると発狂する人がいる
それは資格取得の勉強に似ていて、資格を取るための参考書を買い漁る行為にも似ている
勉強そのものにはなんの意味もないし、おそらくはその先の資格のようなものにもあんまり意味はないのだが
462デフォルトの名無しさん:2013/03/13(水) 12:11:15.97
世の中には
手段の為ならば目的を選ばないという様な 
どうしようもない連中も確実に存在するのだ
つまりは
とどのつまりは 我々のような
463デフォルトの名無しさん:2013/03/13(水) 12:14:07.37
そもそもこの業界が変なんだよ
命に関わる(あるいはそれに順ずる)プログラムもあるのに
開発するのに資格も免許もなんもいらん
人数水増し土方集めりゃいいと思ってる
最低免許がないと売り物開発出来ないようにするのがいい
464デフォルトの名無しさん:2013/03/13(水) 12:24:16.55
>>461
浅はかだねえ。
何でも頭だけで分かった気になって、好きな事に情熱を傾ける事すら出来ないんだね。
実に哀れな人だ。
プログラミングを手段として完全に使いこなせるようになったら
もう一度その言葉の意味を考えてみなよ。
自分の使う道具を使いこなせない、いや愛せない一流のクリエイターがいると思うかい?
465デフォルトの名無しさん:2013/03/13(水) 12:27:39.59
日本刀買ったからって試し斬りの相手を探すような行為は避けたいね

解説一通り読んでそれとなく動作と傾向を理解して、それでなお、作れそうなものや作りたいものが思いつかないんなら、
きっと今のあなたにはプログラミングは不要なのだ
たとえ趣味にしたいのだとしてもそのまま強制で続けるのはたぶん苦行だろうし、一旦Rubyから離れて別なことするといいぞ
「これちょっと困ったorこんなことしたいけど、これってもしかしたらRuby使ってプログラム作れば解決できそうかも」
と思うことができたらそのとき帰ってくればいい

Rubyとわたしたちはいつだってあなたを歓迎しよう(※バージョンアップによる記述非互換を除く)
466デフォルトの名無しさん:2013/03/13(水) 12:29:38.13
プログラミングは、たのしい
炊事をしてるときも、お風呂にはいってるときも、道をあるいてるときも
アイデアがうかびます
467デフォルトの名無しさん:2013/03/13(水) 12:37:16.94
>>465
s/Rubyとわたしたち/俺個人/
468デフォルトの名無しさん:2013/03/13(水) 14:34:39.67
>>465
何のために買うんです?
469デフォルトの名無しさん:2013/03/13(水) 16:30:31.79
日本刀なんてまず買わないしなあ
もうちょっと一般的に例えると包丁を買ってから切るものを探す?
まあそーゆー人も居るかもね
でも普通は料理する為に包丁を買うよね
どんな料理が作れるようになるかは勉強次第だよね
470デフォルトの名無しさん:2013/03/13(水) 17:26:52.38
アーミーナイフ(Army Knife )
- Wikipedia
471デフォルトの名無しさん:2013/03/13(水) 18:42:51.95
米国の全ての学校にプログラミングの授業を導入しよう」と言うNPO団体"Code.org"
ビル・ゲイツさんやマーク・ザッカーバーグさんらが登場
http://nyliberty.exblog.jp/20092968

日本もそのうち追随するのかな
472デフォルトの名無しさん:2013/03/14(木) 00:21:46.31
def f; yield; end

10.times { |x|
 f {
  puts x
  break if x > 5 … @
 }
}

@で times のループを break しようとしたのですが、
うまくいきません。どうすればよいのでしょうか?
473デフォルトの名無しさん:2013/03/14(木) 00:33:02.96
>>472
丸一の行をfのブロックの外に出す
474デフォルトの名無しさん:2013/03/14(木) 00:37:20.36
fのブロックの処理で、times を break する場合には、どうすればいいのでしょうか?
475デフォルトの名無しさん:2013/03/14(木) 00:40:47.20
catch and throw を使うか、require 'continuation' して callcc を使う。
476デフォルトの名無しさん:2013/03/14(木) 00:55:21.39
webrickが本番で使ったらいけない理由って何ですか?
477デフォルトの名無しさん:2013/03/14(木) 20:11:19.22
require 'tk'
button = TkButton.new { text "Hoge"; command->{puts "Foo"}; pack }
Tk.mainloop

この TkButton.new に与えたブロックはどうやって処理されているのか教えてください
pry(main)> show-method TkButton#initialize
でRubyソースを見ても &block のような引数も yield文 も見あたりません。
最終的には instance_eval 辺りが評価してると思うんですが、どうやってブロックを引き渡しているのか分かりません。
478デフォルトの名無しさん:2013/03/14(木) 21:27:13.58
tkutil.cのtk_s_newでinstance_evalしてるのがそうじゃない?
479デフォルトの名無しさん:2013/03/14(木) 21:44:39.51
>>478 ありがとうございます。
これっぽいですね。そういえば initialize は new そのものじゃなかったんでしたね。

tk_s_new(argc, argv, klass)
int argc;
VALUE *argv;
VALUE klass;
{
VALUE obj = rb_class_new_instance(argc, argv, klass);

if (rb_block_given_p()) rb_obj_instance_eval(0, 0, obj);
return obj;
}

ちなみにどうやって調べました? こちらの環境(Macport Ruby20) では
show-method TkButton.new
とやってもCのソースは出てきません
480デフォルトの名無しさん:2013/03/14(木) 23:01:33.15
トップレベルでfoo関数、bar関数を定義した時に、foo関数の引数としてbar関数を渡すには
どのような記法をすれば良いのでしょうか?

def foo (fn)
fn.call(1)
end

def bar (x)
1 + x
end

irb> foo(bar) ではbarが関数呼び出しと解釈されてしまいました。
barという名前から関数実体を引き出すイディオムは無いのでしょうか?
481デフォルトの名無しさん:2013/03/14(木) 23:13:43.84
foo {|x| bar(x)}
で、許してもらえませんか?
482デフォルトの名無しさん:2013/03/14(木) 23:15:47.49
>>481 を動かすには、
def foo(&fn)
とする必要があるっす
483デフォルトの名無しさん:2013/03/14(木) 23:17:04.56
def foo (fnsymbol)
send(fnsymbol, 1)
end

foo( :bar )

とか?
484デフォルトの名無しさん:2013/03/14(木) 23:18:47.76
>>480
方法はいくつかある
・method(:bar)を渡す
意味合い的には一番近いが案外面倒くさい
・:barを渡す
fooを呼んだスコープでのbarというより、fooが所属しているオブジェクトのbarを呼ぶ意味合いが強い
・barをprocやlambdaとして生成
barをそもそもデータとして取り回す前提があるならこれ
・ブロックにくるんで渡し、foo側がそれを呼ぶ
俺ならこれ。引数として渡す関数がひとつでいいなら文法的にもサポートあるし。
485480:2013/03/14(木) 23:27:10.21
>>481,483,484
いろいろな方法があるのですね!
foo(method(:bar))が一番しっくりきました。
皆様レスありがとうございました。
486デフォルトの名無しさん:2013/03/14(木) 23:39:33.37
だんだんmethodって書くのめんどくさくなってくるに100ペリカ
487デフォルトの名無しさん:2013/03/15(金) 00:14:01.09
たったの10円かよ
488デフォルトの名無しさん:2013/03/15(金) 19:19:44.58
rubyでカプセル化はあんまり書かないですか?書いてもムダですか?
489デフォルトの名無しさん:2013/03/15(金) 19:37:20.24
Rubyは放っておいてもかなりカプセル化をやらかす
どっちかというとカプセル化を破るコードを書く人が多い
attr_accessorとかpublicとか
490デフォルトの名無しさん:2013/03/17(日) 12:41:06.56
ruby test.rb などスクリプトを実行しようとするとロードエラーが発生します。
エラーメッセージは実行ごとに毎回微妙に違っていて、
下のようにファイル名部分が文字化けしているようです。
ファイル名(スクリプト本文も)に日本語は使っていないのですが、何が原因なんでしょうか?
環境は CentOS 6.3, ruby 1.9.3p194 です。

ruby: No such file or directory -- (LoadError)
ruby: No such file or directory -- (LoadError)
ruby: No such file or directory -- LoadError)
ruby: No such file or directory -- k (LoadError)
ruby: No such file or directory -- oadError)
ruby: No such file or directory -- LoadError)
ruby: No such file or directory -- (LoadError)
491デフォルトの名無しさん:2013/03/17(日) 12:47:01.22
>>490
RubyなんかさっさとやめてPHPにしろ
そうすればそんな無駄な時間を使うこともない
492デフォルトの名無しさん:2013/03/17(日) 12:52:06.35
>>490
test.rbの中身は?
493デフォルトの名無しさん:2013/03/17(日) 12:56:03.47
>>492
puts 'a'
だけです。
というか、コーディングしてて動かしたら全然動かないので、原因探るうちに実は何も実行できなくなっていました
特に環境いじった覚えもないんですけどね・・・
494デフォルトの名無しさん:2013/03/17(日) 12:57:10.59
>>490
LoadErrorならまともに動かんと思うので、ファイルを複製して半分ずつ削っていって原因解明

後半を機械的に削ってみて同じエラーならまた半分削ってみる
495デフォルトの名無しさん:2013/03/17(日) 13:21:36.19
1とだけ書いたスクリプトを実行してLoadErrorなら、Rubyコアライブラリファイルのどこかが破損している
HDDか物理メモリのどこかがまずいのかもしれない
496デフォルトの名無しさん:2013/03/17(日) 13:26:34.16
>>495
>1とだけ書いたスクリプトを実行してLoadErrorなら
LoadErrorになりました。
スクリプト指定せずにrubyだけでエンター押してもLoadErrorになることが判明したので
rubyを再インスコしたところ解決しました。
レス頂いたみなさんありがとうございました。
なんでぶっ壊れたんだろ・・・
497デフォルトの名無しさん:2013/03/17(日) 13:27:16.53
とりあえず --disable-gems -v -d とかオプション付けてみて
498デフォルトの名無しさん:2013/03/17(日) 13:28:47.46
>1とだけ書いたスクリプトを実行して

こんなところにも perl のしっぽが
499デフォルトの名無しさん:2013/03/17(日) 13:34:01.68
rubyインタプリタにうまいこと引数が渡ってなかったようにも見える
シェルがおかしかったんじゃないか
500デフォルトの名無しさん:2013/03/17(日) 14:04:27.91
別に0でもいいし""でもいいしPHPでもいいぞ
501デフォルトの名無しさん:2013/03/17(日) 16:17:04.77
ああ、requireされるファイルの最後に真を返さにゃならんので、
1;
と書くんだったな。
502デフォルトの名無しさん:2013/03/17(日) 17:04:59.80
いま流行りのソーシャルゲームが腐るほどありますが
こういうところのバックエンドはRubyが使われているものですか?
PHPとRubyどっちが多いですかね?
503デフォルトの名無しさん:2013/03/17(日) 17:24:47.79
前も同じ質問があった
答も同じ
「裏方データメンテ等に使われているかもしれませんが見えないのでわかりません、
ちなみにRubyができるからといってWebゲーム業界に就職できるというようなことは絶対にありえません」
504デフォルトの名無しさん:2013/03/17(日) 17:32:23.29
ぱっと思いつくSAPだと、ドリコムが全面Ruby採用だったはず
他にも例はいくらでもあるだろうけど、
もちろんどんな企業でも完全にRubyしか使ってないなんて事はまず無いだろう
505デフォルトの名無しさん:2013/03/17(日) 17:33:51.57
>ちなみにRubyができるからといってWebゲーム業界に就職できるというようなことは絶対にありえません
要旨としては「Rubyを勉強すればゲーム業界で働けますか!?」だろうしな
はっきり言ってあげたほうが親切
506デフォルトの名無しさん:2013/03/17(日) 17:35:46.92
誇り高い我々ルビィストが悪のガチャゲー開発なんかに加担するとでも思ったのかね
いくら札束積まれてもお断りだ
507デフォルトの名無しさん:2013/03/17(日) 17:42:57.82
>>505
PHPとFlash(「か」じゃなくて「と」)ができてPhotoshopが使えれば及第点だよね
Rubyなんていろんな意味で誰でもできるんだから就職のメリットにはならん
業務で使うなら入社してから1ヶ月なりなんなりで覚えればそれでいいわけで
508デフォルトの名無しさん:2013/03/17(日) 18:40:13.42
Rubyを1ヶ月で、か。それなりには覚えられるだろうけどね。それなりには。
誰でもできるとかナメたことをよく言うよな。
509デフォルトの名無しさん:2013/03/17(日) 18:45:31.94
できるにもピンキリあるからね
510デフォルトの名無しさん:2013/03/17(日) 18:53:01.14
>>508
それなりで充分
既存の社内Rubyスクリプトを使えれば問題ない

コア作成は社内のエンジニアが行う
業務を知らない新入社員の仕事ではない
511デフォルトの名無しさん:2013/03/17(日) 19:00:26.08
だからこそ「他のスキルを持ってることが重要」なわけよね
Rubyだけできても…という
512デフォルトの名無しさん:2013/03/17(日) 19:06:32.81
何のスキルを持っているとよいでしょうか?
513デフォルトの名無しさん:2013/03/17(日) 19:18:09.30
新卒新入社員なら体力と文書作成能力と発言伝言スキルがあれば問題なかろう、つまり普通の企業に同じ
新卒でネトゲ会社なんて自殺する気かって感じだけど

既卒やバイトならPHPとJavaScriptとFlashとなにかオーサリングツール(フォトショ、イラレ等)の経験があればいいんじゃね
あとは適宜実際に見ていってどんなことまでやれそうかで決めるってことで
いっそなくてもなんとかなる

面接でRubyならできますって言うってことはその会社の業務ぜんぜん調べてませんと高らかに宣言するのに近い、分の悪い博打
514デフォルトの名無しさん:2013/03/17(日) 21:57:24.52
ソシャゲのバックエンドはscalaとかも結構あると聞いた。
515デフォルトの名無しさん:2013/03/17(日) 21:59:12.83
>>511
Rubyやる人は、他の言語も一通りこなせた上で、普段使いの
なじんだ道具としてRubyを選んでいる人が多い印象。

5年くらい前まではこう思ってたんだけどね…
516デフォルトの名無しさん:2013/03/17(日) 22:04:51.47 BE:1840980637-2BP(0)
本格的にプログラミング言語学びたいんだけど何から学ぶのが進めなの?
簡単なのを先に学んでおけば,他の言語も吸収しやすくなると思うんだけど。どうかな?
もしかして,それぞれの言語は全く別物だったりして…
優しい人教えて!
517デフォルトの名無しさん:2013/03/17(日) 22:56:21.29
>>516
言語がたくさんあるのには意味があって、あなたがなににプログラミング言語が必要なのかによる。

>>513
ソフトウェアハウスなら業務内容は案件ごとに違うから技術売るけどね。
518デフォルトの名無しさん:2013/03/17(日) 23:03:39.10
ソシャゲは大量の単純な応答を規定時間内に安定して捌くのが重要とかで、
Node.js使ってるとこもあるらしい
519デフォルトの名無しさん:2013/03/17(日) 23:15:54.12
nodejs業務で使えるレベルか?
520デフォルトの名無しさん:2013/03/18(月) 00:18:08.95
>>516
お察しの通り全く違う概念の言語もあれば
書き方や目的が違うだけで考え方が似てる言語もある

んで今のところ主流は「手続き型」で「オブジェクト志向」を取り入れた言語だと思う
Java、C#とかね、他にも色々ある…というか
「関数型」とか「論理型」みたいな断り書きがなければ
大半が手続き型だからテキトーにプログラミング言語探せば手続き型は見つかる

オブジェクト志向は手続き型を覚えてからでも遅くないが
初めからオブジェクト志向も備えてる言語のほうが
後でオブジェクト志向部分を覚えるのが楽かもな

ちなみにRubyも手続き型でオブジェクト志向の言語だから
Rubyから学んでも構わないが、ちと入門書が少なめな感じはするかな
521デフォルトの名無しさん:2013/03/18(月) 02:40:41.72
桐島、Rubyやめるってよ
http://htn.to/9GrwNV
522デフォルトの名無しさん:2013/03/18(月) 11:52:56.88
いちいちURLを短縮するなカス
523デフォルトの名無しさん:2013/03/18(月) 15:53:41.61
>>516
理想的には、目的ーー>計算モデルーー>使用言語決めがいいんだけど、最初から独力では難しいと思う。
上記3ステップ中、計算モデルはCTMCP(コンピュータプログラミングの概念・技法・モデル)という本で学習出来るが
これも慣れがいるので、モデルが判っている人に目的(ツール作り、就活、趣味など)を伝えるのがいい。
最も、モデルが判っている人を探すのが難関か。
524デフォルトの名無しさん:2013/03/18(月) 17:33:24.50
>>516
Light Weight Languageと呼ばれる軽量言語(≒簡単な言語)を最初に覚えておくと
プログラミングの感覚と楽しさを早く掴めるのでいいと思う。俺もLLから入った。

テキスト処理から、exeのwindowアプリケーションまでこなす流行りのオールラウンダー: C#
お手軽LL言語: Ruby、Python、Perl
525デフォルトの名無しさん:2013/03/18(月) 17:45:22.13
オススメの相談回答なら適切なスレを探してそちらでお願いします
526デフォルトの名無しさん:2013/03/18(月) 19:21:29.92
ruby をソースから make, make install して、 make uninstall しようとしたら怒られた(´・ω・`)
527デフォルトの名無しさん:2013/03/18(月) 21:06:23.02
Rubyで夏時間のある国のタイムゾーンを指定して時刻を表示するっていうのは標準機能でできないですか?
gemでそういうのありませんか?
528デフォルトの名無しさん:2013/03/18(月) 23:48:51.47
>>527

tzinfo
529デフォルトの名無しさん:2013/03/19(火) 00:00:18.15
Timecopってあるじゃないですか
これ使う意味ってあるんでしょうか?
530デフォルトの名無しさん:2013/03/19(火) 00:24:55.18
>>528
どうもありがとうございます
531デフォルトの名無しさん:2013/03/19(火) 15:47:51.69
Timpocoに見えた・・・
532デフォルトの名無しさん:2013/03/19(火) 18:35:33.77
rubygemのサイトっていうのはgithubみたいな感じでなんでも登録して大丈夫でしょうか?
それとも審査に通ったものしかダメでしょうか?
hello worldを表示するgemを登録してダウンロードできるか確認したいんですが
533デフォルトの名無しさん:2013/03/19(火) 18:54:25.35
誰であげられるよ
だからテストもろくに書いてないクソモジュールが氾濫してる
534デフォルトの名無しさん:2013/03/19(火) 18:59:18.00
むしろ上げたものの削除がめんどくさい
ほぼ永遠に残るぞ
535デフォルトの名無しさん:2013/03/19(火) 20:21:15.66
RubyってMRIって用語があるよね?
Matzなんとかってやつ。
この前コンピューター関連の記事見つけてMRIと機械が〜みたいな英語の記事だったんだけど、開いて見たら医療で使われるMRIと機械についての話だった。

MatzがMRIって最初に名前つける時にあの医療でのMRIの存在しって他はずだよね?面白いと思っても付けたのかなMatzは。
結果はどうだい?
読み手の思考回路を混乱させるミスリードを誘うきっかけを作ってるわけRuby作者は。こんな良い加減なやつが作ったプログラミング言語なんて信頼できないね。

クリスチャンは良く自分がキリストとか救世主の生まれ変わりだと勘違いして全能感に浸り自分は特別だと思っておかしな行動をする事がある。
Matzも同じ事してるんじゃない?

クリスチャンを馬鹿にしてるんじゃなくてMatzの様なやつがクリスチャンを馬鹿にされる様な場面を作るきっかけを与えてるといえる。
536デフォルトの名無しさん:2013/03/19(火) 20:48:04.21
その主張はともかくMatzがMRIって名付けたかどうかは激しく怪しい
537デフォルトの名無しさん:2013/03/19(火) 20:56:17.36
「原作者の実装」という程度の意味だから、確実に第三者命名だな
538デフォルトの名無しさん:2013/03/19(火) 21:22:52.72
>>537
第三者から名付けられたら誤解が生まれるリスクは無視っすかwwww
539デフォルトの名無しさん:2013/03/19(火) 21:41:55.29
>MatzがMRIって最初に名前つける時に
を否定しただけだろう
前提はすべて崩れた
540デフォルトの名無しさん:2013/03/19(火) 22:02:21.18
rubyなんてきもい言語まだ使ってるの?
あんなの自分以外の人間は解読できないコード書いてオナニー言語じゃん。
PHPのほうがいいよ。Cやった人なら馴染みやすい。
541デフォルトの名無しさん:2013/03/19(火) 22:55:40.22
最近、メタプログラミング使いすぎだな
ソース読むとき、instance_evalやらmodule_evalやらが出てくると溜め息しかでない
542デフォルトの名無しさん:2013/03/19(火) 22:58:35.22
時代はPHP。Rubyは役目を終えた。
543デフォルトの名無しさん:2013/03/19(火) 23:01:52.34
メタプロは知性の証
544デフォルトの名無しさん:2013/03/20(水) 00:14:59.60
やりすぎるとLispのマクロを返すマクロみたいに
人智を超えた何かになる
545デフォルトの名無しさん:2013/03/20(水) 04:00:38.45
ubuntu10.04環境でruby-2.0.0p0を./configure && make && sudo paco -lD "make install"
で入れたのですが
$ gem list --remote
で数分待っても一覧が得られません
--debug 付きにすると例外が出ているようです

$ gem list --remote --debug

*** REMOTE GEMS ***

Exception `Errno::EEXIST' at /usr/local/lib/ruby/2.0.0/fileutils.rb:323 - File exists - /home/xxxx/.gem/specs/rubygems.org%80
Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block
Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block
Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block
Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block
以下延々と

原因及び対処方法を教えて下さい
546デフォルトの名無しさん:2013/03/20(水) 06:38:53.97
>>544
馬鹿には無理
547デフォルトの名無しさん:2013/03/20(水) 11:35:03.91
>>545

323 File exists が出てる報告があったけど、関係あるかのう?

http://help.rubygems.org/discussions/problems/1632-rails-installation-fails
--no-http-proxy を付けてはどうか? という意見が付いて話が途切れている

https://github.com/rubygems/rubygems/issues/487
こっちはバグに遭遇してるな。
548デフォルトの名無しさん:2013/03/20(水) 19:41:54.16
記号を配列に入れる楽な方法ありますか?
549デフォルトの名無しさん:2013/03/20(水) 19:45:59.24
そんな説明で伝わると思うような奴にとっての「楽な方法」は無いな
550デフォルトの名無しさん:2013/03/20(水) 20:00:10.01
例えば["+", "-", "*", "/"]をもっと楽に書きたいのだったら
%w[+ - * /] でオッケー
551デフォルトの名無しさん:2013/03/20(水) 20:19:58.09
こういうの
a..z
こんな感じの
552デフォルトの名無しさん:2013/03/20(水) 20:34:16.11
こうゆうことか?
Array('a'..'z')
553デフォルトの名無しさん:2013/03/20(水) 20:43:58.66
それの記号版ってことか分かんね
554デフォルトの名無しさん:2013/03/20(水) 21:15:11.97
そう、それの記号版
555デフォルトの名無しさん:2013/03/20(水) 21:15:19.22
1バイトで表示可能なコードすべて(数字、アルファベット含む)
(0..255).map{|n|n.chr}.select{|c|/[[:print:]]/===c}
556デフォルトの名無しさん:2013/03/20(水) 21:19:31.50
('a'..'q').map(&:to_sym) とか?
557デフォルトの名無しさん:2013/03/20(水) 21:25:16.41
(" ".."~").select {|c| c =~ /\W/ }
558デフォルトの名無しさん:2013/03/20(水) 21:30:06.25
ほしい記号丸ごと文字列にしておいてcharsなりsplit(//)なりでいいんじゃねーの。
559デフォルトの名無しさん:2013/03/20(水) 21:30:54.77
きめー、きめー、Rubyきめーよ
560デフォルトの名無しさん:2013/03/20(水) 21:37:57.25
例えばこういうのとか? (Ruby1.9以降で動作)
("\x00".."\x7f").grep(/[[:print:]]/).grep(/[^[:alnum:]]/)
ASCIIコード(0x00〜0x7f)から印字可能かつ英数字以外の文字を拾う

Ruby1.8 の場合は、数文字とアルファベット並びの間に分断があるようでうまくいかない・・・
>> ("0".."z").to_a
["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
561デフォルトの名無しさん:2013/03/20(水) 21:52:21.35
"9".succ #=> "10" だからどっちも "9" で止まりそうなものだが、
なんで1.9ではまで進むのだろう。

Rangeの作りが違う?
562デフォルトの名無しさん:2013/03/20(水) 22:16:56.79
[*?\s..?~] - [*?0..?9, *?A..?Z, *?a..?z]
563デフォルトの名無しさん:2013/03/21(木) 06:30:05.68
perlより汚いな
564デフォルトの名無しさん:2013/03/21(木) 16:05:45.42
たのしいRubyのp128、特別な変数selfの説明がわからないのですが、教えてください。よろしくお願いいたします。
565デフォルトの名無しさん:2013/03/21(木) 17:34:43.01
おれもわからんから、心配ない。selfなんかつかわない
566デフォルトの名無しさん:2013/03/21(木) 18:16:58.14
selfはふつうは変数だと意識する機会はないはず
「インスタンスメソッド定義内で自分のクラスのクラスメソッドを呼ぶときにself.をつけて呼ぶ」という認識程度

class C
def my_class_method; ... end
def hoge
self.my_class_method
...

ただし、本質的には変数なので、selfという名前のローカル変数を自力でつけた場合には衝突する

class C
def my_class_method; ... end
def hoge
...
self = somedata
...
self.my_class_method

とした場合には、クラスCのクラスメソッドmy_class_methodではなくsomedataの戻り値オブジェクトのインスタンスメソッドmy_class_methodが呼ばれる
たぶんsomedataはそんなメソッドは持ってないはずなのでエラーになってナニコレという話になる

読んでないけど、たぶんそんなことが書いてあるはず
selfというローカル変数は作らないほうがいいよね、みたいな話のはずだ
567デフォルトの名無しさん:2013/03/21(木) 18:27:14.26
railsを使っているのですが、ハッシュにおけるコロンとダブルコーテーションの違いについて教えてください
例えばsession[:user][:id]とsession["user"]["id"]とでなにが異なるのですか?
568デフォルトの名無しさん:2013/03/21(木) 18:36:42.45
REPLにて
irb> hoge とした時に
ズラ〜

とhogeオブジェクトの表示用の文字列が表示されるのですが、
これはなんという関数が実行されているのでしょうか?
to_sではないようでした。
569デフォルトの名無しさん:2013/03/21(木) 18:46:31.49
Hashクラスは「あるキーを用いてデータを格納し、同じキーを指定してデータを取り出す」という構造の提供が役目

h = {} # つくる
h['k1'] = 'v1' # いれる
p h['k1'] # だす

格納に使うキーのことはkey、出し入れするデータのことはvalueと呼ぶのが通例
んで、このkeyは実は文字列である必要はなく、「出すときまで不変」であるならなんでもよい

h['k1'] = 'v1' # 文字列
h[:s1] = 'v2' # シンボル
h[3] = 'v3' # 数字、紛らわしくて怒られる例

ということで、session[:user] はHashのkeyをシンボルオブジェクト:userにしたものでしかない
シンボルオブジェクトは(通例)コロンで始める文字で作成し、「ひとつしかないもの」を示すのによく使われる
sessionというHash構造のkeyに:userというシンボルデータを使うのだとしたら、おそらくそのsessionにはユーザーという"欄"がひとつしかありえないのだろう
最初はよくわかんないと思うので、無理して自分からシンボルを使う必要はない。書いてあるのを見てわかれば充分

>>568
ふつうはその(戻り値)オブジェクトのインスタンスメソッドinspectがirbによって勝手に呼ばれて表示されている(irbがやってる)
Rubyには一般的に関数と呼ばれるものがなくてメソッドだけなので、関数と言ったらこいつなにも理解してないって煽られて馬鹿にされるぞ
570デフォルトの名無しさん:2013/03/21(木) 18:56:53.03
h['k1'] = 'v1' で入れたものを
h[:k1] で参照するとどうなりますか?
逆に
h[:s1] = 'w1' で入れたものを
h['s1'] で参照するとどうなりますか?
571デフォルトの名無しさん:2013/03/21(木) 18:59:23.81
どっちかってと
「いまどきRubyのメソッドのことを関数と呼ぶような解説にぶち当たるなんてお可哀想に…」
みたいな憐みの目で見られるようかん
どっかの誰かが公式に関数やメソッドやサブルーチンを機能分類してるわけじゃないけど、
すくなくともRubyではメソッドという名前なんで、それに倣ってメソッドと呼ぶのがやっぱ妥当
572デフォルトの名無しさん:2013/03/21(木) 19:05:11.48
>>570
別にどうにもならない
シンボルと文字列は別物で、Hashオブジェクトではまったく特別扱いされない
つまり単に別のキーを指定したとみなされる

ただし、なにかのメソッドの引数内で key1:val1 のように書いた場合は、
key1 はシンボルオブジェクト :key1 と、val1 は文字列 'val1' と解釈されて、 {:key1 => 'val1'} というHashだとみなされる
でもこれHashの機能じゃないからやっぱ気にしなくてもいい
573デフォルトの名無しさん:2013/03/21(木) 19:07:54.03
誹謗中傷は本人の鏡って精神科医が良く言うけど本当らしいとここ見て判った
574デフォルトの名無しさん:2013/03/21(木) 19:27:20.50
>>569
大変丁寧に教えていただきありがとうございます
575デフォルトの名無しさん:2013/03/21(木) 19:46:10.98
>>569
なるほどinspectメソッドが呼ばれていたのですね!
呼び方にも気をつけますね。
ありがとうございました。
576デフォルトの名無しさん:2013/03/21(木) 20:51:34.36
Railsに関しては、文字列とシンボルを同一視する(シンボルが与え
られたら裏で文字列に変換している) HashWIthIndifferentAccess と
いう曲者がいるので、ハッシュのキーについての理解が初心者には
難しくなっていると思う。
577デフォルトの名無しさん:2013/03/21(木) 21:32:52.51
>>565
>>566
ありがとうございます
578デフォルトの名無しさん:2013/03/21(木) 21:36:18.16
自分自身にメッセージを送るためにselfなのですね。ありがとうございます。
579デフォルトの名無しさん:2013/03/22(金) 01:54:36.10
Rubyのことが全く分かっておらず、何をどうググれば良いのかも分からず質問させていただきます。
d.hatena.ne.jp/sugyan/20130227/1361896809
のを動かすにはなにをどうすればよいのでしょうか?
環境はMac10.8でXcodeインストール済み,
また、Rubyが使えるレンタルサーバーも契約しております。
580デフォルトの名無しさん:2013/03/22(金) 03:27:21.49
>>579
> Rubyのことが全く分かっておらず、
> 何をどうググれば良いのかも分からず質問させていただきます。
それは、ググり方が無力だということにすぎません。

まぁ、"Ruby インストール" で Ruby の使い方を勉強して、
"github" で github の使い方を勉強して、
"Gemfile" で、gem に関することを勉強すれば、
どうにかなると思いますけどw

ということで、ググり方が甘いですw
以上。
581デフォルトの名無しさん:2013/03/22(金) 05:40:13.19
selfはコンテキストによって指してるものが違うから、どこで書いてるかを意識すればよい
クラス式内に書けば、自分のクラスオブジェクトを指すし、メソッド式内に書けば実行時のレシーバーを指す
まあややこしいよ
582デフォルトの名無しさん:2013/03/22(金) 05:42:27.18
初心者にはCoffeeScript薦めるよ
583デフォルトの名無しさん:2013/03/22(金) 09:13:29.99
pgr
584デフォルトの名無しさん:2013/03/23(土) 21:52:21.23
るびいって何ができるの?
585デフォルトの名無しさん:2013/03/23(土) 22:10:35.38
なんでもできる
586デフォルトの名無しさん:2013/03/23(土) 22:24:29.50
いくぞー!!
587デフォルトの名無しさん:2013/03/23(土) 22:32:22.82
ワン・ツー・スリー・フォー!


アイウォンチュ〜
588デフォルトの名無しさん:2013/03/24(日) 00:11:15.92
洗練されすぎた言語は滅びる
時間をかけるしか能のない馬鹿が威張れないからだ
589デフォルトの名無しさん:2013/03/24(日) 01:36:31.30
日経ソフトウェア 2013年5月号 価格:1180円(税込)

特集 人気10大言語 どれでも入門
読者アンケートで人気だった10種類のプログラミング言語を、一気に解説します。
言語ごとに解説しているので、どれを読んでもOKです。それぞれ特徴や使い方
を学んで、自分にぴったりな言語を選んでください。開発環境の準備からサンプ
ルの作成まで最短で説明します。
http://itpro.nikkeibp.co.jp/NSW/image/top/Cover201305.jpg
590デフォルトの名無しさん:2013/03/24(日) 01:54:15.07
>>589
rubyとandroidが無いではないか
591デフォルトの名無しさん:2013/03/24(日) 02:03:50.46
言語っつってんのにandroidは無いだろ・・・。
592デフォルトの名無しさん:2013/03/24(日) 12:17:57.06
すんません、教えてください。phpからの乗り換えです。
溜まった動画ファイルを全部サムネイル作成してかぶっているものを削除するというものをCUIで作ってみてrubyに感動しました。
もうphpに戻ることはなさそうだ、と今まで作って来たwebアプリをrubyへ移植しようとして壁にぶつかっています。
593デフォルトの名無しさん:2013/03/24(日) 12:20:29.14
>>592 続き

railsのような大掛かりなフレームワークは初学の妨げになりそうなので
できるだけ素のrubyでwebアプリを作っていきたいと考えています。
apacheのモジュールが見つからなかったため、とりあえずpassengerを入れ、
sinatra上で動かしてみましたが、楽ですが全然素のrubyではないです。

そこで質問なんですが、
phpでいうところのmod_phpのみapacheに追加して後は何のフレームワークも使わず自力で書いていく、というスタイルを
rubyに置き換えるとどのような実行環境になるのでしょうか? 2.0です。
594デフォルトの名無しさん:2013/03/24(日) 12:40:47.67
['a'..'z']
で配列にアルファベットが入らなくて
Array('a'..'z')
って書かないといけないのは何故ですか?
595デフォルトの名無しさん:2013/03/24(日) 12:49:23.28
>>593
mod_php的なものを追加する時点で素のrubyではなくなるよ。
素のrubyがいいならcgiとして書くことになるんじゃないかなぁ。
596デフォルトの名無しさん:2013/03/24(日) 12:57:42.21
a = [1,2,3]
p a.include?(2.0)

これがtrueになるのは何故ですか?
597デフォルトの名無しさん:2013/03/24(日) 13:28:54.45
>>593
rackを生で使えばよいよ
598デフォルトの名無しさん:2013/03/24(日) 13:35:30.78
>>593
FastCGIが無難じゃないかな
599デフォルトの名無しさん:2013/03/24(日) 14:24:14.21
Net::HTTPクラスというのはクラスメソッドのことでしょうか。
たとえばArray#[]はインスタンスメソッドのことのように、Net::HTTPも何か特別な表記法なのでしょうか。
教えてください。よろしくお願い致します。
600デフォルトの名無しさん:2013/03/24(日) 14:32:35.68
::は単なるネームスペースでRubyの構文の一部
クラスメソッドとは関係ない
601デフォルトの名無しさん:2013/03/24(日) 15:21:35.78
>>592
乗り換えずに併用すればいいじゃない
602デフォルトの名無しさん:2013/03/24(日) 15:22:12.76
確かにRubyでは定数のネストの区切りにもクラスメソッドも::を使うけど、
C++ ユーザーが親しみのあるstaticメンバー関数を呼び出す
クラス::メンバー関数
と同じ記法でRubyでもクラスメソッドが呼べるようにしてあるだけ。

Ruby的にはクラスメソッド=クラスインスタンスの特異メソッドに過ぎない
ので、普通のインスタンスメソッドと同様 . で呼ぶのが本来。
603デフォルトの名無しさん:2013/03/24(日) 15:50:37.05
>>593
cgi.rb
604デフォルトの名無しさん:2013/03/24(日) 15:54:14.86
>>596
irb(main):002:0> 2 == 2.0
=> true
605デフォルトの名無しさん:2013/03/24(日) 16:21:20.75
2と2.0って型としては違いますが何で松本はこういう仕様にしたんですか?
606デフォルトの名無しさん:2013/03/24(日) 16:30:05.83
嫌なら Numeric#equal? で比較すればいい。
607デフォルトの名無しさん:2013/03/24(日) 16:44:49.17
>>605
twitterで本人に聞いてみれば?
608デフォルトの名無しさん:2013/03/24(日) 17:09:25.47
リッチーにも聞くといいよ。
#include <stdio.h>
main() { printf("%d¥n", 2.0 == 2); }
609デフォルトの名無しさん:2013/03/24(日) 17:15:05.90
>>605
むしろそこでfalseにする言語はほとんど無いはず
型を含めて同値性を比較するのは、Common Lispとかにはあった気がするが
あまり一般的だとは言えないだろう

そもそもという話であれば、浮動小数点数を=で比較する局面が
どれぐらいあるのか疑問
610デフォルトの名無しさん:2013/03/24(日) 17:20:07.80
>>594

Rangeインスタンス1つからなる配列を作っておいて
アルファベットが入っていないと文句を言っているということでよろしいか。

[ *'a'..'z' ]
('a'..'z').to_a
611デフォルトの名無しさん:2013/03/25(月) 03:27:07.64
Rangeは「叩くと次のが計算されて出てくる軽容量オブジェクト」が売りなので(語弊70%)、
Rangeで済むならRangeのままでよいというか、結構な割合でRangeのまま行ける
('a'..'z').each{|s| p s}
p ('a'..'z').map{|s| s.capitalize}
配列にしなければならないことはそう多くないはず
612デフォルトの名無しさん:2013/03/25(月) 09:10:20.43
>>595,597,598,603
いろいろありがとうございます。
とりあえずcgiでhelloworld動いたんでfastcgi入れてみようとして1日はまりました。
なんとかfcgiでもhelloworld表示できたのですが、
これってソース書き換える度にapache restartしなきゃ更新されないのですか。
あとrubyのfcgiライブラリに関する情報がほぼゼロでかなりきついです。
phpでいう$_SERVERのようなリクエストに関するものが簡単に取れると思っていたので
そこからphpの$_GET, $_POSTのようなものを作り、
自分でsinatraのようなルーティングを作ろうと思っていたのですが、ぜんぜんそこまで行けません。
fastcgi断念しそうです。
613デフォルトの名無しさん:2013/03/25(月) 09:23:38.02
rubyでrailsが流行った理由が判ったわ
他が糞すぎたんだな
614デフォルトの名無しさん:2013/03/25(月) 10:06:13.95
判ったと宣言する心境に至ってその程度の感想しか言えんのか
脳味噌に糞でも詰まってんのか
615デフォルトの名無しさん:2013/03/25(月) 10:08:24.67
CGIなんて完全に廃れた技術だから今からやる意味なんて無い
Rack勉強したほうがいい
616デフォルトの名無しさん:2013/03/25(月) 10:10:01.25
>>614
これいつものだから反応してやる必要はない
617デフォルトの名無しさん:2013/03/25(月) 19:54:32.41
>>615
Rackにしました。環境変数が簡単に取れるし、まさにこれでした。
webrickで起動するのが嫌だったのでpassengerを入れapache上で動きました。
ただ問題はリロードです。
皆さん開発中はどうやってソースを再読み込みさせてるんですか?
今のところapache restartするか、tmp/restart.txtをtouchする方法しかありません。
ぐぐっても「touchするだけでOK、カンタン!」なんて書かれてありますが、そのtouchが面倒です。
php ソース修正→ブラウザリロード
ruby ソース修正→touch restart.txt→ブラウザリロード で一手間増えてしまいます。
always_restart.txtを置けばいいということも書かれてあったのですが、同じくrestartされません。
ruby2.0、rack1.5.2、passenger4.0.0.rc5、です。
わかる方教えてください。お願いします。phpに戻りたくありません。
618デフォルトの名無しさん:2013/03/25(月) 20:00:30.08
>>617
railsしか使ってないが、デベロップメントモードでwebrickを起動させればオートリロードしてくれるよ
619デフォルトの名無しさん:2013/03/25(月) 20:05:15.43
lst = ["taro" 100 "hanako" 200 "jiro" 100 23478 200]の時に
[100, 3838, 120, 200]の配列を得るにはどう書くのがruby風でしょうか?
lst.select{|name,value| value} で出来たらかっこいいなぁと思ったのですができませんでした。
(本当に欲しいのは100 + 3838 + 120 + 200の値なのですが。)
620デフォルトの名無しさん:2013/03/25(月) 20:06:23.23
すみません、試したのはlst.map{|name,value| value}でした。
621デフォルトの名無しさん:2013/03/25(月) 20:11:38.97
def group (lst, n)
  rec = lambda { |lst, acc|
    rest = lst[n..-1]
    (rest == [] || rest == nil)?
       acc + [lst] :
       rec.call(rest, acc + [lst.slice(0,n)]) }
  rec.call(lst, [])
end

lst = ["taro", 100, "hanako", 200, "jiro", 100, 23478, 200]
group(lst, 2).reduce(0){|sum,x| sum + x[1]}

#=> 600

一旦それぞれの組みを配列にしたらうまくいきましたw
622デフォルトの名無しさん:2013/03/25(月) 20:19:06.87
>>619
irb> ["taro",100,"hanako",200,"jiro",100,23478,200].each_slice(2).map{|a| a[1]}.inject(0){|r,x| r+=x}
=> 600
623デフォルトの名無しさん:2013/03/25(月) 20:28:32.96
配列に真偽値を入れておいて
a = [true,false,true]
要素全てが真の時だけ処理したい時に
論理演算子を全部の要素に適用させて簡単に処理する方法ってありますか?
624デフォルトの名無しさん:2013/03/25(月) 20:29:06.49
Ruby風つったらこんな感じじゃねーの

lst = ["taro", 100, "hanako", 200, "jiro", 100, 23478, 200]

result = 0
flag = false
for x in lst do
if (flag)
result += x
flag = false
else
flag = true
end
end
result

#=> 600
625デフォルトの名無しさん:2013/03/25(月) 20:33:03.48
>>623
やりたいことがわからない サンプルを書いてくれ
626デフォルトの名無しさん:2013/03/25(月) 20:50:29.65
>>623

「aの要素が全部trueだったら」という条件を書きたい。
では a[0] && a[1] && ... をうまいこと書く方法はないか

という質問?

ぶっちゃけ a.all? でいいんだけど、意図そのまま書くなら
a.reduce{|result,e| result && e}
だろうか。
627デフォルトの名無しさん:2013/03/25(月) 20:53:24.79
>>623
10.times do
actions = [rand(2), rand(2), rand(2)]
puts "#{if actions.all?{|result| result.zero?} then 'ALL 0!' else 'failure' end}"
end
628623:2013/03/25(月) 20:59:55.06
>>624-627
レスありがとうございます。
>>626
all?というメソッドがあったんですね、
まさにこれがしたかったんです、ありがとうございました。
629デフォルトの名無しさん:2013/03/25(月) 21:08:19.73
[true, true, true, true, true].inject(:&)
==> true

[true, true, true, false, true].inject(:&)
==> false

この方が分かり易くない?
630デフォルトの名無しさん:2013/03/25(月) 21:09:40.09
最初は a.reduce(:&&) とか a.reduce(&:&&) とかもできるんじゃないかと
思ったけど、論理演算子はメソッドじゃないから無理だった。
631デフォルトの名無しさん:2013/03/25(月) 21:10:29.62
&ひとつの & はビット演算だからものによってはまずい気がする。
0とか。
632デフォルトの名無しさん:2013/03/25(月) 21:19:42.82
でも true/false の場合「ビット演算子」なんかではなくちゃんとしたインスタンスメソッドなんだなこれが
効果は && と同じ
だから true.&(true) とか書けちゃう

>>TrueClass
>>Public Instance Methods
>> true & obj → true or false
>> And―Returns false if obj is nil or false, true otherwise.
633デフォルトの名無しさん:2013/03/25(月) 21:20:14.33
Ruby は true というオブジェクトが返ってくるかどうかの保証が薄いから
634デフォルトの名無しさん:2013/03/25(月) 21:20:38.03
TrueClass#&とFalseClass#&が再定義されているから、
要素が true と false しかないことが保証されているなら大丈夫そう。
635デフォルトの名無しさん:2013/03/25(月) 21:40:01.41
>>633
has_foo? みたいなメソッドで真のときに Foo オブジェクトをそのまま返すのだけはやめてほしい
636デフォルトの名無しさん:2013/03/25(月) 21:46:27.83
たのしいRubyのp.160
def copy(from, to)
 src = open(from) #このファイルが開けなかったら
 begin
  dst = open(to, "w")
  data = src.read
  dst.write(data)
  dat.close
 ensure
  src.close
 end
end
コメントに書いた、fromファイルが開けなかった場合、ensure節のsrc.closeは実行されるのでしょうか。
本を読む限り、実行されるようなのですが、begin~endで囲まれてなくても実行されるのでしょうか。
637デフォルトの名無しさん:2013/03/25(月) 22:37:49.70
begin〜ensure〜endが存在する場合、beginの前に起こった例外は捕捉されません
def内部でbeginとendを書かずにensureだけ書いた場合、捕捉範囲はdef全体になるので、fromのopenに失敗してもしなくてもensureが最後に実行されます

def foo
ensure
puts "foo"
end

def bar
puts "1!"
raise
ensure
puts "ensure!"
end

foo; bar
#=>
foo
1!
ensure!
RuntimeError:

openに失敗していたときはsrcと名付けられたIOオブジェクトはensure部分で存在していないので、open失敗に関する例外よりも先にnilに対するNoMethodErrorが出ます
> in `ensure in foo': undefined method `close' for nil:NilClass (NoMethodError)
というか、openに失敗したときはIOオブジェクトが作成されないので、openできなかったIOのcloseのことを心配する必要はありません
638デフォルトの名無しさん:2013/03/26(火) 00:41:42.81
ありがとうございます
違う本探してみよう思います
639デフォルトの名無しさん:2013/03/26(火) 00:46:09.26
>>617
俺はSinatraを通してSinatra::Reloaderってのを使ってる
素のRackにもRack::Reloaderってのがあるらしいから
それを使ってみるとどうだろう
(試したことはないので、動くかどうかはわからないが)
640デフォルトの名無しさん:2013/03/26(火) 05:06:43.99
> 617
馬鹿には無理
641デフォルトの名無しさん:2013/03/26(火) 20:45:41.11
ネットに転がってたコード動かすためにRubyInstallerをインスコしたんだが
unable to convert "\x90" from ASCII-8BIT to UTF-8 for ext/RMagick2.so
ってエラー吐かれてfileutilsというgemがインスコできない 
助けて下さい
642デフォルトの名無しさん:2013/03/26(火) 21:03:53.03
>>641
gem install --no-ri --no-doc fileutils は?
うまくいかなければコマンドラインとエラーそのまま貼って
643デフォルトの名無しさん:2013/03/26(火) 21:27:46.03
>>642
レス さんくす

C:\Users\PCUser>gem install --no-ri --no-doc fileutils
ERROR: While executing gem ... (OptionParser::InvalidOption)
invalid option: --no-doc

またエラー吐かれました
644デフォルトの名無しさん:2013/03/26(火) 21:32:04.83
>>643
ごめーん。--no-rdoc でやってみて
645デフォルトの名無しさん:2013/03/26(火) 21:41:23.96
すいません またしてもエラー吐かれました
今回はエラーメッセージが長いので画像で

http://i.imgur.com/pysm2fe.png
646デフォルトの名無しさん:2013/03/26(火) 21:55:58.44
647デフォルトの名無しさん:2013/03/26(火) 23:33:36.87
>>646
入れてませんでした
その後もう一度挑戦してみたのですが

You have to install development tools first

と出ました ちなみにdevelopment kitは既にインストールしてあります
development toolsとdevelopment kitは別物なのでしょうか
648デフォルトの名無しさん:2013/03/26(火) 23:55:00.35
ImageMagick のヘッダファイルがインストールされてない
ImageMagick のインストール時に development headers and libraries に関して聞かれたはずなのでそれ許可して再インストールしろ
649デフォルトの名無しさん:2013/03/27(水) 00:16:06.09
>>645
Windows なんかで、Ruby をつかうべきじゃないよ!
650デフォルトの名無しさん:2013/03/27(水) 03:55:24.69
class E < Array
include Enumerable

def each(&b)
self.each{|v|
if !(Array === v) then
p 1
b.call(v)
else
p 2
v.each(b)
end
}
end

end


===>
$ irb
irb(main):002:0> a = [1,[2,3],4]
=> [1, [2, 3], 4]
irb(main):003:0> a.each(&:p)
=> [1, [2, 3], 4]

各要素が表示されることを期待したんですが、
そうなりませんでした。どうしたらいいのでしょうか?
651デフォルトの名無しさん:2013/03/27(水) 05:09:40.04
SQLite3から返ってくる文字列をUTF-16LEではなくUTF-8にするにはどのように書けばいいんでしょうか?
ひとつひとつ.force_encoding("UTF-8")とするしかないんでしょうか?
652デフォルトの名無しさん:2013/03/27(水) 07:44:11.44
>>650
class Eとこの二行には、なんの関係も無いけどその辺は大丈夫?
> a = [1,[2,3],4]
> a.each(&:p)

&:p で要素が表示されないのはこういう感じだから
a.each{|i| i.send(:p) }

「感じ」だからね、この通りじゃないよ
あと、どうしたらいいかは僕にもわかりません
653デフォルトの名無しさん:2013/03/27(水) 10:24:02.90
>>651
force_encodingは文字列の持つ文字エンコーディングデータの名称だけを(内容とは無関係に強制的(force)に)書き換える
変換の機能はない
巷で「SQLITE3からの文字列はforce_encodiingしろ」と言われてるのは、単にエンコーディング名称が空っぽで返ってくるからに過ぎない
変換の機能はない

で、一般論として、なにかデータ構造があって、それから文字列を取り出したい場合、
そのデータ構造の取り出しメソッドの作者が気を遣ってくれてない場合はメソッド戻り値文字列に毎回自力でencodeかける必要がある
…executeの戻り値を自動でどうにかしてくれる機能はなさそうだな
自力で毎回String#encodeで変換してくだされ
654デフォルトの名無しさん:2013/03/27(水) 11:45:49.55
Percona Server MySQLを入れてHandlerSocketを有効にした後、
$ gem install handlersocket
してHandlerSocketクラスを作成するテストスクリプトを書いて実行したら、
> ruby: symbol lookup error: /root/.rbenv/versions/1.9.3-p374/lib/ruby/gems/1.9.1/gems/handlersocket-0.0.2/lib/handler_socket.so: undefined symbol: _ZN4dena11socket_args3setERKNS_6configE
というエラーが出てきます。
解決方法ご存じの方いらしたら助言いただきたいです。
よろしくお願いします!
655デフォルトの名無しさん:2013/03/27(水) 13:12:11.66
>>649
Rubyに限らず、ほとんどの開発に向いてないなw
656デフォルトの名無しさん:2013/03/27(水) 13:30:33.65
>>654
undefined symbolは誰も解けないと思う
利用するライブラリ(のdevel)が確実に1種類しか呼べない状態で、コンパイルが成功してて、呼び出しに変な記述がなく、
バージョン互換性が保証されてる「完璧」な状況でなおそれが出たなら、バイナリユーザー側からはどうにもならない
というかrootディレクトリにモノ入れるのやめろ
657645:2013/03/27(水) 15:55:06.79
>>649
同意します 次から次へとエラー吐かれて疲れました
今度はlinuxあたりで挑戦してみて、うまくいかなければ またお世話になるかもしれません
658デフォルトの名無しさん:2013/03/27(水) 16:07:42.43
英語読めなくてぐぐる能力ないならOSがなんでも同じ
659デフォルトの名無しさん:2013/03/27(水) 16:09:43.24
windowsは最近全然使ってないけど、Rubyも普通に.exeファイルからインストーラ立ちあげてインストールするんでしょ?
そんなんでバージョン管理とかどうすんべ
660デフォルトの名無しさん:2013/03/27(水) 16:34:11.36
>>658
日本語使ってない人が作ったライブラリに日本語解説がなくて日本語エラーを吐かないという問題は我々にはもうどうしようもないからな
頑張って英語読んでもらうしかねえ

>>659
pik
661デフォルトの名無しさん:2013/03/27(水) 18:39:29.67
>>655
WindowserにはVB/VBA/WSH/PowerShellがお似合い
662650:2013/03/27(水) 18:42:24.70
すいません、v.each(&b)でできました
663デフォルトの名無しさん:2013/03/28(木) 14:30:44.41
Rubyのライブラリに標準で添付されているyamlはpythonのpyyamlみたいにyaml公式の使用に追従してますか?
664デフォルトの名無しさん:2013/03/28(木) 15:00:44.53
なんだかわかるようなわからないような微妙な表現だけど、libyaml使用以上のものはないよ
強制力はないので、あなたのバージョンのところで動作したYAMLが相手のバージョンのところでも同様に解釈される保証はない
665デフォルトの名無しさん:2013/03/28(木) 21:53:36.26
■テスト1
dir = Dir.open('C:/')
dir.each {|file|
p file
}

■テスト2
p dir = Dir.open('C:/Program Files')
dir.each {|file|
p file
}

テスト1には . と .. がありません。C:/がトップディレクトリなので .. がないのはわかりますが、 . がないのは何故ですか?
666665:2013/03/28(木) 22:21:15.61
ついでになんですが
. と .. を除外して取得する方法はありませんか?
667デフォルトの名無しさん:2013/03/29(金) 04:24:04.89
>>665
Windowsだから
>>666
Dir.globとか
668デフォルトの名無しさん:2013/03/29(金) 15:01:28.65
a = 100
を出力するとき
p a + "円"
ってやるのと
p "#{a}円"
PHPの場合はいろんなフレームワークを見ても前者が主流なんですが
Rubyの場合はどちらで書くのがいいですか?
669デフォルトの名無しさん:2013/03/29(金) 15:10:40.84
Ruby的にはどっちの書き方が気分がいいかという
自分なりの意見を持っていることが重要です
670デフォルトの名無しさん:2013/03/29(金) 15:23:51.77
Rubyの+は演算子ではなくメソッドで、a + b は a のクラスのインスタンスメソッド + に引数として b を渡している
irb> p 1.+(2)
3
つまり、a + b と書いたとき、オブジェクト a の + メソッドが b というオブジェクトの扱い方を知らなかった場合にはエラーになるし、
b というオブジェクトの扱いにポリシーがあった場合にはそれに沿った(ひょっとしたら意図しない)結果になる
irb> p 1 + "2"
TypeError: String can't be coerced into Fixnum

Rubyの式埋め込み #{} はメソッドを呼んでいて、呼ばれるメソッドは to_s だ
(とっさにいい例を思いつかなかったので省略)
つまり、 "#{a}" と書いたとき、オブジェクト a の to_s メソッドがうまく定義されてなかったときにはがっかりな表示になる

ということで両者は別物だ
最終的に文字列を得たくて、変数のオブジェクトすべてに to_s をしてもらえればそれでいいのなら、式埋め込み #{} を使うのが楽
671デフォルトの名無しさん:2013/03/29(金) 16:33:00.00
1.+(2) を 1 + 2 って省略できるってすごいよね。
頭いいな。
672デフォルトの名無しさん:2013/03/29(金) 22:41:22.73
詳しい解説ありがとうございました
673デフォルトの名無しさん:2013/03/29(金) 22:46:26.59
Ruby業界ではドキュメント生成ツールはRDocが主流でしょうか?
phpdocumentorみたいに書きたいのですがRDocに慣れておくべきですか?
674デフォルトの名無しさん:2013/03/29(金) 23:01:41.09
条件付きで置き換える場合、
例えば(-3..3)で0以上の時だけ2乗して負はそのまま出力したい場合

num=(-3..3)
result = num.select{|x| x>=0 }.map{|x| x**2 }
puts result

この2行目はもっと短くならないですか?(条件と置き換える値を近くに置きたい)
ちなみに、
result = num.map{|x| x**2 if x>=0 }

だと負の数を出力してくれませんでした。
else〜は無しでお願いします
675デフォルトの名無しさん:2013/03/29(金) 23:08:43.83
>>673
メソッドの引数や戻り値の情報をコメント部分になんとか意味のある書き方で残してマニュアルに反映させたいのならyardoc

>>674
> 0以上の時だけ2乗して負はそのまま出力したい
if x >=0 then x**2 else x end
676デフォルトの名無しさん:2013/03/29(金) 23:10:49.08
num.map {|x| x < 0 ? x : x ** 2 }

つーか上の例も負の数を出力しないと思うが
677674:2013/03/29(金) 23:32:07.91
>>676
ありゃ失礼。確かにさっきのも負の数出力しませんでした。

その ? x : の表現は初めて見ました。
できれば条件は反転させたくないけどもともと無理なんかな
678デフォルトの名無しさん:2013/03/29(金) 23:36:14.86
if then else がいちばんいいよ
初心者の人ほど変な書き方してあとでわけわからなくなる
679デフォルトの名無しさん:2013/03/29(金) 23:37:52.64
num.map {|x| x >= 0 ? x**2 : x }
num.map {|x| if x >= 0 then x**2 else x end }
680デフォルトの名無しさん:2013/03/29(金) 23:38:54.93
>>673

外国勢はrdocを拡張したyardってのを使ってる人が多い気がした。
681デフォルトの名無しさん:2013/03/29(金) 23:59:33.65
ary=(-3..3).to_a
ary.each_with_index{|x,i|ary[i]=x**2 if x>=0}

長い。。
682デフォルトの名無しさん:2013/03/30(土) 00:23:04.70
結果の配列が欲しいだけなら
(-3..0).to_a + (1..3).map{|x| x**2}
これでもいいね
683デフォルトの名無しさん:2013/03/30(土) 00:27:19.63
わかりやすい例を作って提示したら例依存の馬鹿回答が返ってきたでござる
684674:2013/03/30(土) 00:30:39.50
色々為になります。有難うございました。しばらく勉強しときます
685デフォルトの名無しさん:2013/03/30(土) 02:32:14.18
>>678
どっちかっつーとinject厨になりがちな自称中級者ぐらいじゃないか?
686デフォルトの名無しさん:2013/03/30(土) 02:39:43.83
>>683
(ASCIIコードで)連番になるのとか、英単語だけとか、数字だけとかを質問の例に使うと逆にめんどくさいことがわかっている
極力バラバラにしておくのが吉
687デフォルトの名無しさん:2013/03/30(土) 11:42:35.69
Windowsです

require 'readline'
while buf = Readline.readline("> ", true)
print("-> ", buf, "\n")
end
こうすると
DL is deprecated, please use Fiddle
って警告がでます
コマンドプロンプトからどうやって文字を入力して取得したらいいですか?
688デフォルトの名無しさん:2013/03/30(土) 11:47:51.65
a = Date.new(2012, 1, 1)
b = Date.new(2000, 1, 1)
p (b - a).to_s

これでaとbの日数の差が出ますが
こういうのはうるう年なども考慮されてますか?
689デフォルトの名無しさん:2013/03/30(土) 11:57:40.48
>>688
考慮されてるかどうか確かめてみたらどうですか?
690デフォルトの名無しさん:2013/03/30(土) 11:59:14.99
そんなことは聞いていない
691デフォルトの名無しさん:2013/03/30(土) 12:00:39.76
されてる、というか、内部では暦法関係なく単なるユリウス通日の日数差。
692デフォルトの名無しさん:2013/03/30(土) 12:01:00.99
>>688
されてる
693デフォルトの名無しさん:2013/03/30(土) 12:03:23.44
Dateとか未だに使ってるバカいるの?
694デフォルトの名無しさん:2013/03/30(土) 12:06:26.59
そんなことは聞いていない
695デフォルトの名無しさん:2013/03/30(土) 12:09:13.92
>>687
ただの警告なんで無視していいんだが、警告自体は require 'dl' を require 'fibble' に書き換えないといかんな
書き換えただけで動くかどうかよくわからん

とりあえずは irb 作ってる人のミスなので(Ruby2.0.0ではdlが使えないのを忘れている)、直るの待って欲しい、Ruby 2.0.0でしょ?
696デフォルトの名無しさん:2013/03/30(土) 12:39:38.82
a = Date.new(2012, 1, 1)
b = Date.new(0, 1, 1)
p (b - a).to_s

これでaとbの日数の差が出ますが
こういうのはグレゴリオ暦なども考慮されてますか?
697デフォルトの名無しさん:2013/03/30(土) 12:42:57.56
>>696は何でDateにこだわるのですか?
698デフォルトの名無しさん:2013/03/30(土) 12:55:09.51
>>689
環境によって実装が異なるケースがあるのかなと思いますが、自分で確かめてみます
>>691-692
ありがとうございます
>>693
Ruby1.9.3からはDateTimeとの違いはあまりないようなのでDateを使いました
699デフォルトの名無しさん:2013/03/30(土) 13:31:48.85
Rubyの逆引き時点みたいなのを作ったらみんな見てもらえますか?
700デフォルトの名無しさん:2013/03/30(土) 13:52:45.06
グレゴリオ暦は考慮されてないと可笑しいだろ。
701デフォルトの名無しさん:2013/03/30(土) 14:00:53.71
>>31
とりあえず、ぐだぐだ言わずに一回くらい苦労しとけ。
データがあってそれを操作する。これはどの言語もそうなんだからよ。
後は「どのデータをどう操作して、どうまとめてそのまとまりをどう扱うか」しかないんだよ。
702デフォルトの名無しさん:2013/03/30(土) 14:02:42.51
便乗ですいません
2001/12/1と2000/12/1の月の差を求めたいのですがこういう場合はどうやるのでしょうか?
703デフォルトの名無しさん:2013/03/30(土) 15:04:39.99
www.ruby-lang.orgをipに変換してそこからまたホスト名に変換するとcarbon.ruby-lang.orgってなるんですが
これ不正アクセスで書き換えられてるとかそういうのじゃないですよね?
704デフォルトの名無しさん:2013/03/30(土) 15:47:57.53
年月日の加減算については日本語用語が確定していない
具体的にどういう値が出て欲しいかを付記しないと誰も回答しないと思う、面倒だから
705デフォルトの名無しさん:2013/03/30(土) 15:55:32.20
>>703
>をipに変換してそこからまたホスト名に変換する
出てきて欲しい単語がひとつも出て来てもらえてないな…

ということであなたは勉強不足です
ガソリンに火をつけてみたら爆発したから自動車は危険と言っているようなものです
もーちょっと頑張ってくださいというか、なにしようとしてるのかわかりませんがそれやるのまだちょっと早いです
706デフォルトの名無しさん:2013/03/30(土) 16:56:29.00
>>703
基本的なDNSの性質だよ
プログラム技術とはあまり関係のない話なので
詳しくは「DNS設定」についての入門サイトでも見てくるといいかと
707デフォルトの名無しさん:2013/03/30(土) 17:44:04.76
たしか、他にもboronやoxygenもあったね。
708デフォルトの名無しさん:2013/03/30(土) 18:04:43.54
基本的なDNSの性質??
709デフォルトの名無しさん:2013/03/30(土) 19:56:03.02
>>708
か書いた後で変な表現だとは思ったけどさ?!
いいいんだよ、俺もそんな詳しくないし、い板違いなのは事実だから!
とにかくDNSについて調べて貰えればいいの!だよね???!
710デフォルトの名無しさん:2013/03/31(日) 00:03:16.38
>>705
では解説お願いします
知ったかで回答されても困りますしね
711デフォルトの名無しさん:2013/03/31(日) 11:57:47.54
こんにちは
シンボルはどのような時に使うのでしょうか
712デフォルトの名無しさん:2013/03/31(日) 12:03:26.36
「名前」そのものがほしいとき。
713デフォルトの名無しさん:2013/03/31(日) 12:40:36.27
>>710
自分は>>705ではないけど、おせっかいで横レスするよ。

DNSの世界では、あるIPアドレスに対して1個の「実名」と複数の「別名」を命名できる。
これら実名と別名は、一般には「ホスト名」と呼ばれている。
またホスト名からIPアドレスを得る操作を「正引き」と呼び、
その逆にIPアドレスからホスト名を得る操作を「逆引き」と呼ぶが、
慣例として逆引きではホスト名に実名を返すのが常識になっている。

で、>>703のruby-lang.orgというドメインのケースを以下に解説する。
・carbonというホスト名は実名で、wwwというホスト名は別名。
・wwwというホスト名を正引きすると 221.186.184.68 が得られる。
・このIPアドレスを逆引きすると carbon という実名が得られる。

UNIX系(LinuxやOSX)であれば、ターミナル上で dig www.ruby-lang.org という
コマンドを実行してみなさい。
実行結果の中で、 A を含む行(レコード)が実名で、CNAME を含む行が別名になる。

これらはRubyとは全く無関係な話だよ。
714デフォルトの名無しさん:2013/03/31(日) 12:43:59.30
勉強になるわ、ありがたやー。
715デフォルトの名無しさん:2013/03/31(日) 12:51:18.99
東京でRubyの勉強会ありますよね
こういうのって初心者お断りですか?
716デフォルトの名無しさん:2013/03/31(日) 12:56:01.53
>>711
あ、自分からは無理して使わなくていいです
1年くらいしたら「あーこれかもー」みたいにうっすら思いつくんで、それまで気長に待ってください
717デフォルトの名無しさん:2013/04/01(月) 18:56:33.79
2万行の1行ずつに正規表現の書かれたファイルで、7万行のファイルを処理しているのですが、
scriptの実行時間が長く困っています。
実行時間を短くするお知恵をかしてくれませんか。
ソースは以下のものになります。
def replace2
self.swap_lines.each do |sl|
self.export_c_lines.each do |el|
if(el =~ /#{sl}\s\*\/$/)
self.new_export_c_lines << el
self.export_c_lines.delete(el)
break
end
end
end
end
718デフォルトの名無しさん:2013/04/01(月) 19:24:26.79
えーと、「NGワード正規表現」が書かれた長大なデータファイルがあって、
それを使って、でっかいファイルに対して、NG表現にマッチした行を消すという処理をしたいと
それでいて、正規表現データはまったく整理されておらず、どんなのが入っているかもわからないと

遅いの当たり前だろなめんなあああああああ

短縮できるとすれば「NGデータファイルを読み込んで正規表現オブジェクトにする」の部分だけど、ほとんど誤差だと思う
超絶遅い処理の正規表現が何個か入ってるだけで超絶遅くなるはず
どうしようかな、正規表現データに書いてある正規表現ってどのくらい複雑なんだろう、joinできれば速いんじゃなかろうか

# 7万行を5周必要
text.each_line do |line|
 ['aaa', 'bbb', 'ccc', 'ddd', 'eee'].each do |re|
  skip_line if Regexp.quote(re) =~ line
 end
end

# 7万行が1周で済む
text.each_line do |line|
 skip_line if Regexp.quote(['aaa', 'bbb', 'ccc', 'ddd', 'eee'].join('|')) =~ line
end
719デフォルトの名無しさん:2013/04/01(月) 19:38:32.11
削除したファイルをもう一度読みに行く必要はないわな
720デフォルトの名無しさん:2013/04/01(月) 19:52:33.63
なんかなんとかなりそうなんだけどね
正規表現部分を弄って舐める回数減らすのが一番効果あるかもしれん
721デフォルトの名無しさん:2013/04/01(月) 20:07:57.26
A x B x F
よりも
B x A x F
の方が計算量減るんじゃね
722デフォルトの名無しさん:2013/04/01(月) 20:49:24.78
なるほど、joinですか
それでやってみます。
1行1条件なので、5万の条件のjoinになりますが、一周で済むのは早くなるのかもと思いました。

正規表現部分も工夫してやってみます。
723デフォルトの名無しさん:2013/04/01(月) 20:50:12.71
5万じゃなくて2万でした…。
724デフォルトの名無しさん:2013/04/01(月) 20:59:00.50
>>718
Regex.unionというものもあるのよ。
725デフォルトの名無しさん:2013/04/01(月) 20:59:48.46
あう、pが抜けた
726デフォルトの名無しさん:2013/04/01(月) 22:28:40.72
migemoって、正規表現の最適化を動的にやってるから、参考になるんじゃないか。
727デフォルトの名無しさん:2013/04/02(火) 00:18:28.22
拡張正規表現とかを使ってなければ
全部の正規表現をくっつけるだけでDFAに展開できるので
理屈の上では高速処理できるはず
728デフォルトの名無しさん:2013/04/03(水) 12:44:03.49
モジュール配下に定義したクラスの読み込みで質問があります。

カレントディレクトリにtest.rbとutil/helper.rbがあって、それぞれの定義を以下のように書いています。

#test.rb
$: << "."
require 'util/helper'
a = Helper.new

#util/helper.rb
module Util
class Helper
end
end

この状態で ruby test.rb と実行すると

`require': cannot load such file -- util/response_hanlder (LoadError)

というエラーになってしまいます。
test.rbからutilモジュール配下のHelperクラスにプレフィックスを付けずにアクセスするにはどうすればよいのでしょうか?
初歩的な質問で申し訳無いのですが、よろしくお願いします。
729デフォルトの名無しさん:2013/04/03(水) 12:48:56.62
>>728
`require': cannot load such file -- util/response_hanlder (LoadError)

ではなくて、

`require': cannot load such file -- util/helper (LoadError)

でした。失礼しました。
730デフォルトの名無しさん:2013/04/03(水) 13:12:21.58
ということは解決ですね
731デフォルトの名無しさん:2013/04/03(水) 13:27:15.87
>>730
test.rbに include Util を追加したらエラーが出なくなりました。

モジュール配下のクラスをプレフィックス付けずにアクセスする場合、requireでファイルを読み込んでモジュールをincludeする必用があるのでしょうか?
732デフォルトの名無しさん:2013/04/03(水) 13:41:11.64
プレフィックスとはなんぞや

Ruby1.9.2以降で「手元」の自作ライブラリ、
具体的には自分と同じディレクトリにあるutilディレクトリに入っているhelper.rbというファイル、
をrequireするにはいくつか方法がある

1)
require_relative 'util/helper'
「require_relativeが書かれているファイル」を基準にして相対パスと考えてrequireさせる書き方。Ruby1.9.2以降でしか動作しない。
Ruby1.9.2以降でしか使わないのならこれで書く癖をつけておいてもいい。
2)
require File.expand_path(File.dirname(__FILE__) + './app/hoge.rb')
なげーよその1。Ruby1.9.2以降では$LOAD_PATHにカレントディレクトリ . を含まなくなったので、フルパスを自分で作ってrequireに渡す。
ふざけてるようだがまだたくさんあるRuby1.9.1上でもきちんと動作するのでそこそこ多数派。自作派テストファイルの先頭とかでよく見る。
3)
$LOAD_PATH.unshift('.') # どこかのメインスクリプトの先頭で1回だけ書く
require 'util/helper' または require './util/helper'
なげーよその2。require_relativeって書いたらRuby1.9.1でエラーになっちゃうじゃん、という人向けの記述。
せっかくカレントディレクトリをオフィシャルで取り除いた親切を無にする行為だが、わかっててやるぶんにはRubyはなにも咎めない。
カレントディレクトリじゃなくてなんかどっかの固定のディレクトリの下にあるファイルをrequireしたいならunshiftの引数をそのディレクトリに。
$LOAD_PATHはRuby実行時に -I オブションでも指定できる。

自作gemライブラリやRailsなんかでは実行時の$LOAD_PATHにいくつか追加されるので、require 'util/helper'と書くだけで動作することもある。
$LOAD_PATHに何が入ってるかは確かめておくとええ
733デフォルトの名無しさん:2013/04/03(水) 13:42:49.99
ああ、コピペそのままだった
require File.expand_path(File.dirname(__FILE__) + './util/helper.rb')
734デフォルトの名無しさん:2013/04/03(水) 13:50:41.93
>>732
回答ありがとうございます。
パス通ってるところからrequireすれば読み込むということが分かりました。

プレフィックスは Util::Helper の Util:: の部分です。
Util::Helper ではなく Helper とだけ書いてアクセスするには include Util も追加する必要があるのかと思いまして。
735デフォルトの名無しさん:2013/04/03(水) 14:20:00.13
>>732
すいません、自己解決しました。
たのしいRubyにそれっぽいこと書いてありますね。
736デフォルトの名無しさん:2013/04/03(水) 19:59:24.43
test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。
以下コードの抜粋です。
48 res = Array.new
49 resp.each do |row|
50  puts row.class, row if $debug == 1
51  res = row
52 end
53 p res, res[0], res[1],res.class
54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then
55  res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
56  if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then
以下略・・・という箇所でのエラーなのですが、
53行のデバグ表示では
["13/03/06-17:52:00"]
"13/03/06-17:52:00"
nil
Array
このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが
入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが
冒頭のエラーで止まってしまいます。ところが、検証用に
res = Array.new; res = ["13/03/06-17:52:00"]
p res, res[0], res[1],res.class
res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
p res
以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には
"2013-03-06 17:52:00"
となり、うまい具合に期待通りの出力が返ってきます。
同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか?
もちろん実行環境は同一です。
737デフォルトの名無しさん:2013/04/03(水) 20:04:01.11
すいません、自己解決しました。
738736:2013/04/03(水) 20:11:30.24
自己解決してません
739736 ◆mksCHaGp8vaI :2013/04/03(水) 20:15:22.86
いたずらする人がいるようなのでトリップ付けて再掲します。万が一自己解決したら
このトリップ付きで再度その旨投稿します。
test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。
以下コードの抜粋です。
48 res = Array.new
49 resp.each do |row|
50  puts row.class, row if $debug == 1
51  res = row
52 end
53 p res, res[0], res[1],res.class
54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then
55  res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
56  if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then
以下略・・・という箇所でのエラーなのですが、
53行のデバグ表示では
["13/03/06-17:52:00"]
"13/03/06-17:52:00"
nil
Array
このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが
入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが
冒頭のエラーで止まってしまいます。ところが、検証用に
res = Array.new; res = ["13/03/06-17:52:00"]
p res, res[0], res[1],res.class
res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
p res
以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には
"2013-03-06 17:52:00"
となり、うまい具合に期待通りの出力が返ってきます。
同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか?
もちろん実行環境は同一です。
740デフォルトの名無しさん:2013/04/03(水) 21:07:01.61
gsub! は置換が起こらなかったときは nil を返す。
gsub にしろ。
741デフォルトの名無しさん:2013/04/03(水) 22:38:52.53
> 配列resに1個の要素"13/03/06-17:52:00"だけが入っている
ここが間違い。res[0]はStringクラスじゃないよ。
to_sが返す文字列には'/'が無い。
742デフォルトの名無しさん:2013/04/03(水) 22:50:24.21
>>740
指摘としては不適切
「戻り値を利用する場合はString#gsub!を使わない」が妥当
743デフォルトの名無しさん:2013/04/04(木) 14:39:03.84
gsub!は「ちょっとずつ置換」しているからメモリを大量に使わないとか考えてる人がいるが、本当にそういう実装になってるんだろうか
最後に中間生成物を速攻GCに回してるだけで、中の動作はgsubと変わらないんじゃないかとか思うんだが、ソース追うのめんどい
744デフォルトの名無しさん:2013/04/04(木) 17:38:17.48
trじゃダメなんですか?
745デフォルトの名無しさん:2013/04/04(木) 17:47:07.62
Rubyをインストールしたばかりの状態で
gem update --system
gem install mysql2
をしました
require "mysql2"だけのコードを実行するとエラーがでてしまいます。
mysql自体は問題なく動いてますし他の言語から利用できる事も確認できてます。
長くなるので詳細をcodepadに書きました。
どなたかアドバイスお願いします。
http://codepad.org/Tbc5xixN
746デフォルトの名無しさん:2013/04/04(木) 18:01:06.89
>>745
このへんは試した?

http://stackoverflow.com/questions/9936523/
http://stackoverflow.com/questions/5164818/

libmysql.dll を MySQL のディレクトリから C:/<Rubyのディレクトリ>/bin にコピー
gem uninstall mysql2 して gem install mysql2
747デフォルトの名無しさん:2013/04/04(木) 18:04:03.46
・ gemパッケージ作者公式で報告があるがまだ直ってない
・ バージョン下げれば動くらしい
という情報もあるな
gem uninstall mysql2 -v 0.3.11
gem install mysql2 -v 0.3.9
とかやっていって、エラーの出ないバージョンを探すとかやるといいんではないかと
なんか0.2.6まで下がらないといけないとか絶望的な話もあるけど、よくわからんな
748デフォルトの名無しさん:2013/04/05(金) 18:21:33.32
仮想属性とは何のことでしょうか。教えてください。お願い致します。
749デフォルトの名無しさん:2013/04/05(金) 22:05:59.79
仮想属性?

AWDwR 17章の "We even created a virtual attribute that is never stored in the database" のこと?
750デフォルトの名無しさん:2013/04/05(金) 22:11:06.55
聞いたこと無いな
751デフォルトの名無しさん:2013/04/05(金) 22:55:03.19
プログラミングRuby1.9のp32に載っているのですが、なんのことだかさっぱりで。流してしまっても問題ないでしょうかね。アクセスメソッドあたりの話題なのですが。
752デフォルトの名無しさん:2013/04/05(金) 22:58:54.12
obj.attr と obj.attr= で読み書き出来るものを obj の属性と呼ぶとして、
ふつうはその値はobjのインスタンス変数として持ってるんだけど、
実はそうじゃなくてもインターフェイスさえ属性の読み書きの形になっていれば、
事実上(vurtual) 属性と呼んでもいいよね、という話じゃないのかな。
753デフォルトの名無しさん:2013/04/05(金) 23:25:40.53
virtualだたorz
754デフォルトの名無しさん:2013/04/06(土) 01:38:06.02
DataMapperで
Data.all(:order => [:value.desc]).to_json
みたいに json 形式に変換したいです。どうすれば良いでしょうか?
755デフォルトの名無しさん:2013/04/06(土) 11:52:49.15
>>752
ありがとうございます
756デフォルトの名無しさん:2013/04/06(土) 17:37:46.08
Ruby大好きです^−^
757デフォルトの名無しさん:2013/04/07(日) 00:35:12.37
Windows Ruby1.9.3にthinとrails3.2をインストールしました
rails sって打つとサーバが起動するんですがwebrickが立ち上がります

rails new myapp & cd myapp &thin start
ってやったら
>> Using rack adapter
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
C://ruby193/lib/ruby/gems/1.9.1/gems/thin-1.5.1/lib/thin/backends/tcp_serve
r.rb:16:in `connect': cannot load such file -- thin/connection (LoadError)
ってエラーになりました
どうやってthinでrailsをうごかすのでしょうか?
758デフォルトの名無しさん:2013/04/08(月) 13:30:29.74
ruby1.9.3p392において、requireを呼び出すとLoadError例外が発生するのですが、どのように外部のファイルを読み込めばよろしいのでしょうか。
759デフォルトの名無しさん:2013/04/08(月) 17:46:22.75
説明めんどい
>>324でも>>732でも好きなの読め
760デフォルトの名無しさん:2013/04/10(水) 22:10:55.81
rubyでGUIを作成するというのはあまり一般的ではないのでしょうか
入門書やらruby関連の書籍をいくつか読んでみたのですがそういうものが乗っていなくて
761デフォルトの名無しさん:2013/04/10(水) 22:18:32.35
>>760
ググれよw
762デフォルトの名無しさん:2013/04/10(水) 23:07:51.14
一般的かどうかで言えば、一般的ではない
GUIのなにかを作りたいときは、他の言語を使う
Rubyでなければならない理由がなんもないから

RubyでGUIアプリケーションを作れるくらいの甲斐性のある人は、他の言語でもうまくGUIアプリケーションを作れる
763デフォルトの名無しさん:2013/04/10(水) 23:30:36.56
GUIライブラリで提供されている部品を素のまま使うような
GUIがプログラムの補助的な役割でしかないならruby/tkでも十分使える

お絵描きソフトだって作れし、多分STGやACTゲームだって作れると思う
けどその辺のGUI部品だけでどうにか出来ないGUI用途にrubyはおすすめしない
764デフォルトの名無しさん:2013/04/10(水) 23:37:13.87
>>760
以前はGUIツールキットの整備が主要なテーマとなっていた時期もあって
複数のプロジェクトが活動していたけど、
Railsの登場以降はWebプログラミングに話題が集中してため
相対的にGUIプログラミングは数ある話題の一つへと埋没してしまい、
多くのプロジェクトは活動を停止して放置されたままになっているのが現状。

ただし、今でも活動を継続しているプロジェクトもあって、
しかも日本語情報が豊富なのが Ruby/Tk、Ruby-GNOME2、RubyCocoa(MacRuby)。
個人的なオヌヌメはRuby/Tkなんで、以下にお薦めサイトを紹介しとく。

・Ruby/Tk Wiki -- Ruby/Tk作者様のサイト
 http://www.dumbo.ai.kyutech.ac.jp/nagai/RubyTk/
・Ruby/Tk入門 -- 760と同じ悩みを抱えた人物が書いたみたいで、リンク集が有用かも
 http://ronor.web.fc2.com/rubytk/
・I love CUI -- Ruby文書の一部でRuby/Tkも紹介(特にCanvasウイジェットは参考になる)
 http://www.mnet.ne.jp/~tnomura/
765デフォルトの名無しさん:2013/04/10(水) 23:47:59.01
ツールキットとしてのTkがすごいのであって、Ruby/Tkが特別使いやすいわけでもわかりやすいわけでもない
むしろそこだけRubyと相容れない世界であって、素直にTcl/Tkで書いたほうがまだマシだ

いちおう警告しておくけど、Rubyを10年使ってるような人の言うことを信じたら駄目
彼らはどこからRubyでどこからRubyでなくてどこまでRubyでやるべきかを既に知っている

あなたはRubyのことをなにも知らないし、Rubyとなにが違うのかも知らないし、GUIの標準ツールキットがどんなものかも知らない
だったら、GUIには「専用」の言語を使うべき
766デフォルトの名無しさん:2013/04/10(水) 23:52:27.42
要約すると、GUIの話題になると765みたいな馬鹿が度々やってくるので注意しろということです
767デフォルトの名無しさん:2013/04/10(水) 23:56:39.92
Rubyしか知らないような人の言うことも聞いたら駄目だよね

どちらにしても、Windowsでの話ならWindows APIの知識は必須になるので、そっちの勉強からしたほうが結局早い
768デフォルトの名無しさん:2013/04/10(水) 23:57:02.59
>>765
>素直にTcl/Tkで書いたほうがまだマシだ

ツールキットとしてのTkがすごいのであって、プログラミング言語としての
tclはレガシー(=遺跡)な設計で、データ型としては文字列しかないから、
少し複雑なデータ構造を扱おうと思うと、可読性の劣悪なコードになるよ。
それなら素直にRuby/Tkで書いたほうがまだマシだ。

>だったら、GUIには「専用」の言語を使うべき

素直にそのGUI専用言語を薦めればいい
769デフォルトの名無しさん:2013/04/11(木) 00:01:11.33
>>767
Win32とかの知識は既にあるという前提だろ
じゃないとデバッグすらできん
770デフォルトの名無しさん:2013/04/11(木) 00:02:39.81
>>760
Ruby/Tk にしても Ruby-GNOME2 にしても
汎用のGUIツールキットをベースにしているから、
アクション系のゲームプログラミングには適していない。

もしそんなプログラミングを考えてるのなら、こんなのもある。

・Star Ruby - 2D ゲームライブラリ
 http://www.starruby.info/ja/
・Ruby から DirectX を扱う簡単高速ゲームライブラリ DXRuby の紹介
 http://jp.rubyist.net/magazine/?0027-DXRuby
771デフォルトの名無しさん:2013/04/11(木) 00:18:35.34
GUIでなきゃダメなんだっていうから、webappに動くgifを入れてあげたら満足してた客がいたな。
772デフォルトの名無しさん:2013/04/11(木) 08:23:36.81
そういう客は「黒い画面」じゃなきゃなんでもいいんだよ:)
773デフォルトの名無しさん:2013/04/11(木) 08:51:01.16
Ruby10年ってよっぽどだなーと思ったけど
ピカチュウ本で始めた人はそのくらい経ってることになるんだな
こわいこわい
774デフォルトの名無しさん:2013/04/11(木) 10:18:34.64
>829 既出だったらスマソ[sage] 投稿日:2007/07/10 01:10:41
>Computer Languages History (preview)
>http://www.levenez.com/lang/history.html#11
>
> Fortranおばあちゃん 53歳
>Lispおばさん 49歳
>Basicおじさん 43歳
>
>SNOBOLおばさん 40歳
>Pascalおじさん 37歳
>SmallTalkおばさん 36歳
>Iconおばさん 30歳
>
>C(K&R)兄さん 29歳(まだまだおじさんって歳じゃねぇよwww)
>親戚のTcl/Tkお兄さん 19歳(何故かもっと年上に見られる('A`))
> Delphi兄さん たぶん17歳(TurboPascal時代から数えて)
>Java兄さん 16歳(Oak時代から数えて)
>
>長女Perlお姉さん 20歳(成人式おめでとー)
>次女Pythonさん 16歳(平成生れ)
>三女Rubyちゃん 14歳(平成生れ)
>
>お隣りのPHPちゃん 12歳(キャラ設定思い浮ばず orz)

6年ほど前に既に10年は超えてた
というか20年目に突入しつつあると思われる
775デフォルトの名無しさん:2013/04/11(木) 13:28:56.25
>>774
2月に20週年おめでとうってそこかしこでやってたじゃん
君どこ行ってたの?
http://togetter.com/li/461760
776デフォルトの名無しさん:2013/04/11(木) 13:41:38.20
Rubyユーザーとしてあらゆるコストを許容してでもそれをRubyから使うことに意義がある、みたいなのを初心者スレで勧めるのはちょっと…
ウィンドウアプリケーションが欲しいんなら素直にC#やれって言ってあげたほうがいいと思う
ある程度Rubyに習熟してる状態での質問じゃなくて、Rubyに全く触れてない状態からの質問なんだろうし
777デフォルトの名無しさん:2013/04/11(木) 13:45:17.87
自分が答えられない話題が出ると、すぐ他の言語でやれって言うよな
778デフォルトの名無しさん:2013/04/11(木) 14:16:06.80
えっ
779デフォルトの名無しさん:2013/04/11(木) 20:02:03.30
Ruby/Tk、Tcl/Tk 8.6に対応してない問題

永井先生によると
「tailcall というコマンドが実装されて
ライブラリスクリプトの複数箇所で利用されているのですが,
これが現在の tcltklib の処理と相性が悪くて,
〜中略〜
対策を考える必要がありますが,かなり面倒なことになると予想されますから,
短期で解決することはできないと思います.」
780デフォルトの名無しさん:2013/04/11(木) 20:59:05.01
新Mac板の macport スレでも話題になってた

433 名前: 431 Mail: sage 投稿日: 2013/02/26(火) 00:43:36.51 ID: ZRUYcOIu0
>>425
遅くなってすみません。さきほど修正をコミットしました。
1時間ほどしたら使えるようになると思います。

動作確認していて気付いたのですが
ruby/tkはtk-8.6にまだ対応していないようです。(ruby-1.9.3のも)
ruby +tkを使用する場合は、先にport:tclとport:tkを8.5に戻す必要があります。
781デフォルトの名無しさん:2013/04/11(木) 22:53:05.62
GUIの作成はやろうと思えば出来るといった幹事で主な使い方からは外れてしまうのですね
RGSSに興味があり、rubyを勉強していく中でGUI作りも勉強してみようかなと思ったのですが
その方面の書籍が調べた限りでは殆ど無かったので質問させて頂きました
レスしてくださった方、非常に丁寧なレスをどうもありがとうございました
782デフォルトの名無しさん:2013/04/12(金) 00:10:11.37
>>781
wxRubyとかRuby/Gtkとか、何かのbindingで取り組むのってどうですか?
783デフォルトの名無しさん:2013/04/12(金) 13:21:47.30
GUIアプリならPythonの方がいいね
ツールキットがいろいろ整備されてるしパッケージ化も簡単
784デフォルトの名無しさん:2013/04/12(金) 23:33:35.67
('(゚∀゚∩ へぇー
785デフォルトの名無しさん:2013/04/13(土) 19:15:01.21
>>617
まだ解決してない?
4.0.0からファイルの置き場所変わったらしいよ
passenger 4.0.0 always_restartでぐぐってみ
786デフォルトの名無しさん:2013/04/14(日) 06:25:38.69
>>785
あー、できました。ありがとうございます。
参考ブログにならってソース読んだらrestart.txtとalways_restart.txtの置き場所が違いました。

if (options.restartDir.empty()) {
restartFile = options.appRoot + "/tmp/restart.txt";
alwaysRestartFile = options.appRoot + "/always_restart.txt";
} else {
restartFile = options.restartDir + "/restart.txt";
alwaysRestartFile = options.restartDir + "/always_restart.txt";
}

おそらく皆さん、confファイルでrestartDirを設定してるからこの問題があまり検索で引っかからないんですかね。
分岐見比べてみても、上のempty側は "/tmp/always_restart.txt"じゃないと変じゃん、と思いました。
787デフォルトの名無しさん:2013/04/14(日) 14:35:47.62
(´・ω・`) {foo: :bar}ってなった時にカンマの見栄えがキモ〜ぃ
788デフォルトの名無しさん:2013/04/14(日) 14:56:57.98
気持ちはわかるが問題はそれが本当にカンマなのかということだ
789デフォルトの名無しさん:2013/04/14(日) 17:30:22.86
Eau de Cologne
790デフォルトの名無しさん:2013/04/14(日) 18:08:22.05
コロンにゅ
791デフォルトの名無しさん:2013/04/14(日) 18:19:15.61
いじめっ子どもめ(´・ω・`)
792デフォルトの名無しさん:2013/04/16(火) 09:31:08.07
Rubyで手書きして初めてのWebアプリケーションを
つくろうとおもっています。
手書きでしこしこやってます。

ログイン認証と、クッキー管理による
セッション維持のところは書きました。
ただユーザ判別のところがわかりません。

ログインユーザと判別した後、
ユーザ毎のコンテンツ別のアクセス認可については、
どこにキーとなるものを保持するんでしょうか。
クッキーにユーザIDをごにょごにょしたものを
保持しておけばいいのでしょうか。

それとも、IDとパスワードを保存したDBに、
ログイン時に発行したクッキーセッションIDを
保持すればいいのでしょうか?
793デフォルトの名無しさん:2013/04/16(火) 09:34:29.03
馬鹿には無理
794デフォルトの名無しさん:2013/04/16(火) 09:39:34.74
>>792
とりあえず、やってみればー?
795デフォルトの名無しさん:2013/04/16(火) 09:42:03.72
gem使えば良い
796792:2013/04/16(火) 10:34:55.98
初心者スレと聞いてやってきたのですが。。
やはりRubyはヲタが集まるところなんですね。
イケメンPythonに引越しします。有難うございました。
797デフォルトの名無しさん:2013/04/16(火) 16:02:48.92
だってrubyの質問じゃないし・・・
798デフォルトの名無しさん:2013/04/16(火) 16:08:54.46
Pythonとイケメンを結びつけるのは初心者じゃない
Python本スレに強制送還が妥当
799デフォルトの名無しさん:2013/04/16(火) 23:11:16.41
Rubyも萌え萌えおにゃのこ推しなの?
800デフォルトの名無しさん:2013/04/17(水) 01:07:53.28
日経ソフトウェア、10大言語入門特集に
rubyがないのはおかしい

会社でお仕事用言語なのかな
それならCOBOLが無いのもおかしいし
801792:2013/04/17(水) 09:01:49.52
>>796
なりすましはやめてください。
Ruby大好きでPythonはお気に召しません。

>>794
やってみることもできるのですが、
セキュリティ的な懸念とかも含めてどちらの
実装がベターのか、または他の実装がいいのか
コメントいただきたいのです。
ぶっちゃけRailsの実装はここにのってるから
これ参考にしろ、とかでもかまいません。
802デフォルトの名無しさん:2013/04/17(水) 11:58:00.54
>>801
厶板初めてか
名前欄読んでる馬鹿はいないぞ
名前欄がデフォルト以外だったら非表示で構わない
803デフォルトの名無しさん:2013/04/17(水) 12:38:04.99
>>801
セキュリティ的にはクッキーにセッションID以外の情報を入れるのは禁止
セッション情報はセッションIDをキーとするセッションDBに格納しろ
セッションDBにパスワード等のセンシティブ情報を入れるのも禁止
804デフォルトの名無しさん:2013/04/17(水) 18:57:28.85
PerlのようにRubyで複数のファイルを配列に読み込みたいのですが、
while (<>) {
@array[$i] = $_;
$i++;
}
$ perl test.pl *.c
これをRubyで書くにはsystem('ls *.c > hoge')とやって、open('hoge')でファイル名を取得し、それからひとつずつファイルを読んでいくといった方法のほかになにかありますでしょうか。
805デフォルトの名無しさん:2013/04/17(水) 19:08:22.53
$ ruby testscript.rb file1.txt file2.txt file3.txt
$ cat testscript.rb
ARGF.each{ |line| print line; }
# これで cat と同じ。
# だから以下のように書けるよ。

$ cat test.rb
array = []
ARGF.each{ |line|
array << line;
}

$ ruby test.rb *.c
806デフォルトの名無しさん:2013/04/17(水) 19:13:14.33
>>805
ありがとうございます
Cから移行してきた者ですが、なかなかCのような書き方が抜けずにいます
Rubyist目指して頑張ります
807デフォルトの名無しさん:2013/04/17(水) 20:54:29.65
>>805
ARGFはEnumerableをincludeしてるので、ARGF.to_aだけでいけるね
808デフォルトの名無しさん:2013/04/17(水) 21:25:46.19
初心者にはPerlの例をそのままRuby風に書くとどうなるかを示す方がよさげ
array << line
よりも
array.push(line)
の方が分かりやすかった
フィルターは ARGF で多くを済ませることができる
809デフォルトの名無しさん:2013/04/17(水) 23:19:53.97
>>808
初心者に理解させるには>>805でもいいかもしれんが、それはRuby風と言えるのだろうか?
むしろ>>805はPerl風と言ってもいいんじゃないかな(特にセミコロンが残ってるところなんか)

Ruby風というのは大クラス主義に基づく豊富なメソッドを使ってこそじゃないかと思う
そういうメソッドをうまく使えたときの快感はRubyistなら分かるはずだ
810デフォルトの名無しさん:2013/04/17(水) 23:37:01.88
ARGF.to_a は配列に ARGF の内容が全部一気に入るけど
while (<>) は $_ に一行ずつ入るから動作がぜんぜん違うよ
一方 Perl にそのまま直したらこんなのだ


lines = []
i = 0
while ARGF.gets
  lines[i] = $_
  i += 1
end
811デフォルトの名無しさん:2013/04/17(水) 23:45:31.00
とは言え、本人も書いてるように @array[$i] = $_; $i +=1; も Perl 的というよりC的だよね。
そもそも Ruby の push は Perl の push を OO風にしたものだし。
812デフォルトの名無しさん:2013/04/18(木) 21:07:59.39
今日からRuby始めた超初心者です。

ちょっと質問、というか愚痴。
今日Ruby Installしてnokogiri使って、PostagSQLとの接続はpg使えば良いのか・・・・

なんてやってるんだけど、詳細調査すればするほど、ドキュメントは英語。
俺英語苦手なんだよね。
なんか20年前のUNIX勉強してた頃を思い出す。

日本 発の言語だって話なのに、なんで?
813デフォルトの名無しさん:2013/04/18(木) 21:14:39.38
英語とか関係なく、ドキュメントが貧弱なことが多いよ。
結局はソース読むことになるんだよ
814デフォルトの名無しさん:2013/04/18(木) 21:43:47.80
日本語しか使えないゴミムシの世話しても幸せにはならんからな
815デフォルトの名無しさん:2013/04/18(木) 22:35:25.33
>>812
よく比較されるPythonと比べると圧倒的に日本語情報多いでっせ
816デフォルトの名無しさん:2013/04/18(木) 22:36:55.60
>813
ありがとう。そうするよ。
英語も「苦手」なだけで、読めないわけじゃないし。

>814
まあ、そんな感じだね。Rubyに限らず、最近はボランティア精神
でやる人たち少なくなってきた。
これは、多分に景気が影響している。みんな余裕が無いんだよ。
2ch見てても、罵倒するばかりで議論の場になっていないもんね。

>815
ありがとう。Pythonは全然考えてなかった。


今日1日の感想だけど、Rubyって結構面白そうだね。
ちょっとしたBatch的な処理を作ろうと思って、何の言語にしようか
1ヶ月程悩んでたんだけど、始めたらあっという間に1日が終わって
しまった。
明日からまた頑張ります。
817デフォルトの名無しさん:2013/04/19(金) 05:03:19.08
専門板はほんとに陰湿でどうしようもないな
聞かれたことにだけ答えてろよいちいち皮肉らないとレスもできないのか
818デフォルトの名無しさん:2013/04/19(金) 07:21:34.38
>>815
ところがPythonの方が圧倒的に使いやすいでっせという皮肉
819デフォルトの名無しさん:2013/04/19(金) 07:51:11.17
>>803
なるほど、わかりました。
なんとかできそーです。
ありがとーざいました。
820デフォルトの名無しさん:2013/04/19(金) 12:59:16.78
while (<>) {
if (/ruby_sysinit/) {
print "$ARGV\n";
}
}
このPerlのプログラムをRubyで書くとどうなるのでしょうか。
ARGFの使い方がよくわからないので教えてください。
821デフォルトの名無しさん:2013/04/19(金) 13:59:52.23
ruby でも $_ 使えるけど、例には示さないよ。
$ARGV ってなに? $ARGV[0] とかならわかるけど

# 一応、ファイル名を表示するならばこう
ARGF.each{ |line|
if line =~ /ruby_sysinit/
print ARGF.filename
end
}

# do-end を使う方が一般的かも
ARGF.each do |line|
if line =~ /ruby_sysinit/
print ARGF.filename
end
end

# グレップみたいな出力ならば以下
ARGF.each do |line|
if line =~ /ruby_sysinit/
printf("%s:%d: %s", ARGF.filename, ARGF.file.lineno, line)
end
end
822デフォルトの名無しさん:2013/04/19(金) 15:25:41.97
>>820 じゃないけど

$ man perlvar
...
$ARGV Contains the name of the current file when reading from "<>".
823デフォルトの名無しさん:2013/04/19(金) 16:16:23.95
>>821
>ARGF.filename
ありがとうございます
簡単なgrepのようなツールを書いてみたくて質問させていただきました
ありがとうございました
824デフォルトの名無しさん:2013/04/23(火) 23:48:56.38
unicornってdaemontoolsで制御してる?
他にいい方法が思いつかない
825デフォルトの名無しさん:2013/04/25(木) 14:29:39.21
>>817
遅レスだが。
言いたい事は良くわかる。が、直球投げても無駄だよ。
スルーするか、大人の対応するかしかないから。

と言っても、2chはそういう文化になっちゃったから仕方が無いって割り切るしかないと思ふ。
だから真っ当な人は2chから逃げ出しちゃったよね。
826デフォルトの名無しさん:2013/04/25(木) 15:13:31.75
勉強に使えるサイトは山ほどあるしね。
個人的には、ここではキーワード拾う位に留めてる。
827デフォルトの名無しさん:2013/04/26(金) 01:21:22.56
間違ったスレに無心で投稿してて誘導して頂きました。

先輩方ご助言をお願いします!
今以下の様なスクリプト書いています。これらをJSON形式にて出力したいのですが、
どうにもやり方が分らず苦戦してます。そもそもこれだと無理なのかすら判断が出来ず、
お知恵を貸して下さい!

book.items.each do | item|
res1 = item.get('ItemAttributes/Title')
res2 = item.get('DetailPageURL')
res3 = item.get('MediumImage/URL')
js = { "title" => res1, "url" => res2, "img" => res3}
ans = JSON.pretty_generate(js)
puts ans

出力結果(カンマが入らないのと [ ] が付与されない)
{
"title": "name",
"url": "address",
"img": "path.jpg"
}
{
"title": "name",
"url": "address",
"img": "path.jpg"
}
828デフォルトの名無しさん:2013/04/26(金) 01:46:14.02
>>827
items = books.items.map do |item|
  res1 = item.get('ItemAttributes/Title')
  res2 = item.get('DetailPageURL')
  res3 = item.get('MediumImage/URL')
  { "title" => res1, "url" => res2, "img" => res3 }
end
puts JSON.pretty_generate(items)
829デフォルトの名無しさん:2013/04/26(金) 01:51:14.07
>>828さん

ありがとうございます!ただこのデータ元はxmlで返して来ていて
Amazon::ecsと言うgemを利用しており、res1-res3で該当する箇所を
抜き出しています。

今実行してみたのですが、xmlの内容も一緒に出力されておりました。Orz.
830デフォルトの名無しさん:2013/04/26(金) 02:00:20.61
>>828さん

.eachのままでした。mapで出来ました。
失礼しました!m(_ _)m

ちなみに私はこの様な状態なのですが、今どの辺りを重点的に学習
しておく事でこういった問題を828さんのように解決出来ますでしょうか。

当然eachとmapで見た目が違うのは分りますので後程調べますが、
他にも items = を加えたり等、解説頂けると幸いです。
831デフォルトの名無しさん:2013/04/26(金) 02:43:15.95
>>828さん

引続き試行錯誤しましたが、sinatra経由でerb内で同様のコードを書くと何故か
データが何も取得されなくなる事が解りました。。。LinuxのConsole上では
問題なく意図した形式で返ってくるのですが。

取り敢えず今日はソロソロ寝てまた明日出直します。有り難う御座いました。
832デフォルトの名無しさん:2013/04/26(金) 08:52:03.43
>>830
学習するなら Array の each, map, map! あたり
メソッドの動作を理解するには irb で小規模なサンプルを書くのがおすすめ

$ irb
irb(main):001:0> ary = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> ary.each{|n| puts n }
1
2
3
=> [1, 2, 3]

items に代入してる理由は map と map! の違いが理解できればわかるはず


Sinatra の件は >>831 じゃ情報が少なすぎて答えられない
再現コードかせめて >>827 みたいな該当箇所のコード片ぐらいは要る
833デフォルトの名無しさん:2013/04/26(金) 09:31:44.56
てかsinatraは"Rubyじゃない"ので、Rubyの知識としては答えられない
sinatraはRubyの標準環境を逸脱している

もしあなたがRubyの初心者なのなら、sinatraは使ってはいけない
834デフォルトの名無しさん:2013/04/26(金) 09:41:49.01
入力と出力とエラーを弄っててなおかつサーバ上で動作しブラウザで表示させるライブラリなんてのは鬼門だよね
835デフォルトの名無しさん:2013/04/26(金) 10:52:44.27
やだこういうめんどくさい流れ

>>831
とりあえずこっちにコードと一緒に投げてみて

Rails以外のRubyフレームワークスレ Sinatra etc
http://toro.2ch.net/test/read.cgi/tech/1366036440/
836デフォルトの名無しさん:2013/04/26(金) 20:05:14.61
>>830
リファレンスの Array, String, Enumerable あたりは一度目を通しておくべきだろう
837デフォルトの名無しさん:2013/04/27(土) 12:37:40.65
case
when
when
else
end

って何故when〜elseまでインデントがcase/endと同じなんでしょうか?
endも書き忘れやすいです
838デフォルトの名無しさん:2013/04/27(土) 12:42:39.61
hash={'+'=>1,'*'=>2}
stack=['+','*']
loop do
if hash[stack[-1]] >= hash['+']
stack.pop
end
end
これがNoMethodErrorになるのは何故ですか
教えてくださいよろしくお願いいたします
839837:2013/04/27(土) 12:56:06.59
>>837のは忘れてください
840デフォルトの名無しさん:2013/04/27(土) 12:56:53.56
スタックが空になっても比較してるからじゃない?
841デフォルトの名無しさん:2013/04/27(土) 19:22:15.39
tes
842デフォルトの名無しさん:2013/04/27(土) 21:08:37.22
slim の書き方を教えてください。
2つの配列があり、↓@onにあるもののみ「class="on"」をつけたいです。

@all = ['a', 'b', 'c']
@on = ['a', 'c']
----------
ul#test
 - @all.each do |i|
  li #{i}です。
  - @on.each do |k|
   if k == i
    #=> 上のliにclassの付け方がわかりません。
----------
理想
<ul id="test">
 <li class="on">aです。</li>
 <li>bです。</li>
 <li class="on">cです。</li>

お願いします。
843デフォルトの名無しさん:2013/04/27(土) 21:35:21.75
@on.include?(i)
844デフォルトの名無しさん:2013/04/27(土) 22:06:31.83
>> 843
できました。ありがとうございます。
書き方なんですが、こんなんでいいんでしょうか?
分岐じゃなくて、@on.include?(i)がtrueならonをくっつける、みたいな書き方ができそうなのですが。

ul#test
 - @all.each do |i|
  - if @on.include?(i)
   li.on #{i}です。
  - else
   li #{i}です。
845デフォルトの名無しさん:2013/04/28(日) 02:14:01.00
そっから先はslimの文法の問題。
Rubyの式( @on.include?(i) )の結果を利用してclassを指定する方法を探してちょうだいな。
846デフォルトの名無しさん:2013/04/28(日) 07:07:54.66
>>845
あざっす。こんな感じに書けました。
------
ul#test
 - @all.each do |i|
  li class="#{@on.include?(i) ? 'on' : ''}" #{i}です。
847デフォルトの名無しさん:2013/04/29(月) 02:42:27.11
文字列がアルファベットか判別するisalphaのようなメソッドはありますでしょうか。教えてくださいよろしくお願いします
848デフォルトの名無しさん:2013/04/29(月) 03:20:50.35
RubyでPythonのスライシングのように、文字列のコピーを作るにはどうすればよいのでしょうか。教えてくださいよろしくお願いします
849デフォルトの名無しさん:2013/04/29(月) 06:41:45.78
>>847
あるかないかで言えば特定の文字群と一致するかを判断するメソッドは無い
任意でいいならString#matchで
850デフォルトの名無しさん:2013/04/29(月) 07:41:35.89
class String
 def isAlpha?
  self =~ /^[a-zA-Z]+$/
 end
end

'aaa'.isAlpha?
'aaa123'.isAlpha?
851デフォルトの名無しさん:2013/04/29(月) 09:38:50.12
>>848

[オフセット,文字数] とか [範囲] とか [正規表現] とかいろいろ

"hello, world"[7, 3] #=> "wor"
"hello, world"[3..6] #=> "lo, "
"hello, world"[/,.*/] #=> ", world"

>>850

^$を使うと、途中に改行があったときにそこまでのマッチで受理されてしまうので¥A¥zで。

>> /^[a-z]+$/ =~ "aaa¥nbbb" #=> 0
>> /¥A[a-z]+¥z/ =~ "aaa¥nbbb" #=> nil
852デフォルトの名無しさん:2013/04/29(月) 11:09:23.11
既存の基本/標準/添付なクラスを再オープンしてメソッドを追加するのはあまり感心しない(2.0のはなかったことに)
やってもいいけど
853デフォルトの名無しさん:2013/04/29(月) 18:14:56.48
¥p{Alpha} って全角アルファベットにもマッチするんだな。
854デフォルトの名無しさん:2013/04/29(月) 18:52:58.60
>>851
なるほど。

>>852
なるほど。
初学者なんですが、こういう場合どう実装するべきか教えてくれませんか?
855デフォルトの名無しさん:2013/05/02(木) 20:34:20.09
>>853
エンコーディングがUnicode系の場合はUnicodeカテゴリを使うからそうなるね
Letterカテゴリは全部Alphaに含まれるみたいだから漢字やひらがな、カタカナもAlphaになるはず
856デフォルトの名無しさん:2013/05/05(日) 16:44:46.26
質問させてください。
sqlite で dumpしたテキストの insert 文を
Rubyの配列に入れたくて

INSERT INTO "foo" VALUES(1,'text','text2,comman',2);

とあって "1,'text','text2,comman',2" 部分を
if text =~ /(\d+),'(.*)','(.*)',(\d+)/
p $1.to_i, $2, $3, $4.to_i
end

とすれば読み込めたんですが、DBの列の型依存になってしまうので、
もっと汎用的な書き方はできないでしょうか?
857デフォルトの名無しさん:2013/05/05(日) 17:06:43.44
>>856
ruby/sqlite系のライブラリを使ってDBを直接操作するのが汎用的だと思うけど

line = 'INSERT INTO "foo" VALUES(1,\'text\',\'text2,comman\',2);'
a = eval('[' + line[/VALUES\((.*)\);$/,1] + ']')
p a
858デフォルトの名無しさん:2013/05/05(日) 17:10:42.39
というか特定の"バイナリデータ"を専用ライブラリがエクスポートした形式のテキストを解析するという行為は
なにをどう頑張ってもその特定のエクスポートフォーマット依存になると思うんだがどうだろう

どっちにしても独自エクスポートフォーマットテキストを中間に挟む意義を感じないな
>>857の言うように操作ライブラリに直接配列にしてもらうのが正解
いじりたいなら配列にしてもらったあとの要素の文字列をいじれ
859デフォルトの名無しさん:2013/05/05(日) 18:36:39.22
>>857-858
ありがとうございます。
ライブラリに直接渡すことにします。
860デフォルトの名無しさん:2013/05/05(日) 20:54:00.87
193 名前: [´・ω・`] 115-37-224-173.shizuoka1.commufa.jp[sage] 投稿日:2013/05/05(日) 20:42:27.73 ID:pbQBE6T7
【依頼に関してのコメントなど】お手間かけますが、よろしくお願いします
---------------------------------------------------------------------------
【*板名】プログラム
【*スレ名】Ruby 初心者スレッド Part 51
【*スレのURL】http://toro.2ch.net/test/read.cgi/tech/1358636526/
【名前欄】
【メール欄】sage
【*本文:この下にコピペして欲しい文を入れて下さい。以下を本文としてコピペします】
>>856
少しばかり遅れたけど、標準添付ライブラリの StrScan を使って
SQLダンプデータを解釈するコードを書いてみた

http://play.island.ac/codepaste/code?id=1525
861デフォルトの名無しさん:2013/05/06(月) 02:27:00.56
文法をさらっと確認したいのですが何かしらあまり厚くない書籍などありますでしょうか
手元に持っておきたくて
862デフォルトの名無しさん:2013/05/06(月) 09:24:48.27
オライリーから小さいリファレンス本が出てるけど、古い。
大まかに確認するだけならいいんだろうけど。
863デフォルトの名無しさん:2013/05/09(木) 19:06:11.03
gtk2を使って何個か数値を入力して平均値を求めるGUIを作ろうと思うのですが
初めは数値の入力欄が一つで"add"ボタンを押せば入力欄が動的に一つ追加
されるようなものを作りたいのです。
どのようにすれば動的に欄を追加させることができるのでしょうか。
864デフォルトの名無しさん:2013/05/09(木) 19:19:07.62
Ruby関係ないと思う
GTKの勉強を先にするべきかと
865デフォルトの名無しさん:2013/05/09(木) 19:23:56.16
GTK部分のサンプル的にはわかった上で、Rubyで制御して動的に追加する方法を知りたいのではないかと
866デフォルトの名無しさん:2013/05/09(木) 19:44:05.82
>>865
はい。そういう感じです。
867デフォルトの名無しさん:2013/05/09(木) 20:30:43.94
ボタンの "clicked" シグナルのコールバックでコンテナにaddしてpackする。
868デフォルトの名無しさん:2013/05/12(日) 13:41:34.31
教えてください。

gemのアップデートとmacなんでbrewのアップデートを一括で行うコマンドを作ってみたのですが、
それぞれ出力が一旦バッファされ、実行終了ごとに一気に出力されてしまいます。
これを直接コマンドを叩いた時と同じようにリアルタイムで出力されるようにはどうしたらいいのでしょうか?

[myupdate]
#!/usr/local/bin/ruby
print `gem update --system`
print `gem update`
print `brew update`
print `brew upgrade`
print `brew doctor`
869デフォルトの名無しさん:2013/05/12(日) 14:05:48.68
`...` の用途が間違っている。単にコマンドを実行したいだけのときに使うものじゃない。
system使え。printいらん。

そもそも論として、単純にコマンドを逐次実行するだけならシェルスクリプトで十分。
870デフォルトの名無しさん:2013/05/12(日) 14:22:20.23
>>869
systemにしても出力はバッファされてしまいます。
あとシェルスクリプトで十分とかいう説明はいらんです。
871デフォルトの名無しさん:2013/05/12(日) 15:42:24.67
IO#sync
872デフォルトの名無しさん:2013/05/12(日) 15:43:24.88
=がぬけた。
873デフォルトの名無しさん:2013/05/12(日) 16:02:09.83
>>871,872
ありがとございます。ただうまくいかず一気に出力されてしまいます。
ちょっとgemだとわかりづらいんでこんな感じにしました。

[sleep.rb]
STDOUT.sync = true
print "aaa"
sleep 5
print "bbb"

これをターミナルから「$ ruby sleep.rb」とすればまずaaaが表示されて5秒後にbbbと表示されます。
ただ、これを別ファイルから、

[test.rb]
print `ruby /path/to/sleep.rb`

と実行すると、5秒後に一気に「aaabbb」と表示されます。
これを直接ターミナルで実行した時と同じような挙動にするにはどうすればいいのでしょうか?
874デフォルトの名無しさん:2013/05/12(日) 17:33:55.35
`...` は、サブプロセスの出力を全部読み込んでそれをStringとして返すためのものなので、
`...` を使う限りはその挙動は変わらない。
875デフォルトの名無しさん:2013/05/12(日) 18:04:42.59
>>874
バッククォーテーションがそういう挙動ってことなんですね。バッファすると。
じゃあ、どう書けばいいんでしょうか?
876デフォルトの名無しさん:2013/05/12(日) 18:26:53.78
文字列として受け取る必要がないなら system で。
1行ごとに文字列として読み取って何かしたい、みたいなことは IO.popen

ただ、呼んだプロセス自分でバッファリングを効かせるように再設定していたら
どうしようもないかもね。
877デフォルトの名無しさん:2013/05/12(日) 19:43:37.66
このへんは標準出力とコンソールについての一般的な知識があったほうがいいな
ひとつひとつ「コマンド」を手探りで試していってもマジで行き当たりばったりにしかならないのでどーにもならん
878デフォルトの名無しさん:2013/05/16(木) 20:07:02.38
1.8.xに対応したスクリプトを書くには1.8系の最新版で開発するのがベストと思いますが
DL先に行ってみたら最新は2.0とのこと。
1.9のときに1.8からだいぶ変わったとききましたが、
2.0で1.8と互換性のある開発は可能でしょうか?
879デフォルトの名無しさん:2013/05/16(木) 20:36:05.23
可能だけど、ほぼ別のバージョンを並行して開発するのと同じような労力になるよ
ちょこっとの書き換えや条件分岐でなんとかなるものではない
880878:2013/05/16(木) 20:48:57.03
>>879
ありがとうございます。なんとなく状況が浮かんできます・・・
るびま見てたら1.9系から2.0への移行はほとんど問題ないような記述もあったんですが、
今回は素直に1.8系をインストールしてやってみますm(_ _)m
881デフォルトの名無しさん:2013/05/16(木) 20:59:05.85
1.8系は、来月いっぱいでセキュリティ修正とかなくなるので覚悟しとこうぜ。
882デフォルトの名無しさん:2013/05/17(金) 00:20:15.06
printf "%10.5f", num
の出力の末尾の連続するゼロを同数のスペースに置換するにはどうすればいいでしょうか
883デフォルトの名無しさん:2013/05/17(金) 02:11:32.69
printf "%10.5f", num
の出力の末尾の連続するゼロを同数のスペースに置換したらいいんじゃないかな?
884デフォルトの名無しさん:2013/05/18(土) 04:04:24.34
gsub
885デフォルトの名無しさん:2013/05/18(土) 23:06:32.59
もう2ちゃんはダメだな
886デフォルトの名無しさん:2013/05/19(日) 05:17:56.99
すみません、Activerecordを利用してて以下の様なコードを使っておりますが
日本語が文字化けする原因が分からずに苦戦しております。。。

result1 = search.find_by_person_name(code)
result2 = search.find(:all, :conditions => { :person_name => code })

result1.person_name
-> 文字化けせずにブラウザ上でも確認可能
result2.to_json
-> 日本語名のみが文字化けして表示されている

(…文字制限の為以下に続きます…)
887デフォルトの名無しさん:2013/05/19(日) 05:20:38.21
result1の方のDBはperson_name1つに対して1レコードの対です。
result1の方は該当するレコードが基本1行のみなので1レコードを抽出します。

result2の方のDBはperson_nameに対して複数レコードが存在しています。
result2の方は該当するレコードを全部抽出したいと考えております。

to_jsonをしてる事がいけないのはわかるのですが、
根本的なところでそもそも何かが理解出来てない事がありものすごく些細な
ところで引っかかってる気がしています。どなたかアドバイスお願いします。。。
888デフォルトの名無しさん:2013/05/19(日) 09:19:24.06
JSONエスケープのことを文字化けと言っているわけではないんだろうね?
889デフォルトの名無しさん:2013/05/20(月) 06:28:17.36
>>888
ごめんなさい、調べたのですがいまいち良く分かってません。。。
文字化けしてるというのは日本語が数字で表示されているのでもなく
全て「?」で表示されています。
890デフォルトの名無しさん:2013/05/20(月) 10:15:19.00
result1.person_name.to_json
とするとどうなりますか?
891デフォルトの名無しさん:2013/05/20(月) 10:27:57.90
そもそも文字化け云々のときにブラウザで確認するな
コンソールに出力しろ
不可能ならそこだけ適当なファイルに書き出せ

あとRailsというかActiveSupportが自動付加するto_jsonはなんなのかさっぱりわからんので明示的に別なの使うのを推奨
892デフォルトの名無しさん:2013/05/20(月) 10:38:03.85
文字化けするときはファイルに書き出してバイナリチェックが基本
コンソールに出そうとしてそこでもう一回文字化け発生したら
何のデバッグしてんのかわからなくなるぞ
893デフォルトの名無しさん:2013/05/20(月) 10:58:39.63
ブラウザよりはわかりやすいけどな

というかどうせpだろ、と思ったがRuby1.9からは進数表示されないのか
894デフォルトの名無しさん:2013/05/20(月) 20:19:31.95
皆様

有り難うございます。
コンソール出力でも以下の様な感じになっております。

result1.person_name.to_json

"¥"������¥""

何か別の方法で試してみます、、、うむぅ、、、
895デフォルトの名無しさん:2013/05/20(月) 20:57:17.75
ということは日本語の文字はエンコードされないんだね…
896デフォルトの名無しさん:2013/05/20(月) 21:09:46.55
皆さん有り難うございます。度々失礼します。
今95%位解決出来そうな状態になってきています!

matome = result2.map do | list |
a = list.person_name.force_encoding("UTF-8")
b = list.title.force_encoding("UTF-8")
c = list.url
res1 = {"keyword" => a,"title" => b,"url" => c,"image" => d}
res2 = JSON.pretty_generate(@res1)
end

こんな具合で処理させたら日本語が表示される様になりました。
ですが、JSONの最初と最後の[ ]や、複数の時の区切り , が抜けてまた詰まりました。Orz.
ただ根本的にやり方間違っていてやり直しが出そうな何か嫌な予感がしています。。。
897デフォルトの名無しさん:2013/05/20(月) 21:20:42.35
皆さん有り難うございました!
解決出来ました、いやー嬉しいです。

matome = result2.map do | list |
a = list.person_name.force_encoding("UTF-8")
b = list.title.force_encoding("UTF-8")
c = list.url
d = list.image
res1 = {"keyword" => a,"title" => b,"url" => c,"image" => d}
end
matome.to_json

これで全てが解決しました。Orz
長い道のりでしたが良かったです。。。
898デフォルトの名無しさん:2013/05/20(月) 23:03:40.03
force_encoding (バイト列を変えずにエンコーディング情報だけを付け替える)
が必要ということは、DBの文字コードがUTF-8になってないような気がする。
899デフォルトの名無しさん:2013/05/20(月) 23:10:22.75
>>898

返信ありがとうございます!DB側は以下の様な感じで特に問題ないと思ってました。

Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

と言うのは >>886 でresult1の時は文字が���こんな感じにならなかったので…
ただ根本的な原因は未だ分かってないのも事実です。
900デフォルトの名無しさん:2013/05/21(火) 08:24:11.16
Sequelとかもそうなんだけど
DBアクセスライブラリの場合、とってきた文字列のエンコーディングが
常にASCII-8BITとして設定されてしまう場合がある
(実際にはUTF-8のデータが取得できているにもかかわらず)

オプションか何かで、エンコーディングの指定を変えることができれば解決するんだが
それができなければどうしようもない
901デフォルトの名無しさん:2013/05/21(火) 08:25:06.88
なのでたぶん、DBの設定的には問題ない
問題があるとすればDBアダプタ側だろう
902デフォルトの名無しさん:2013/05/21(火) 08:41:40.55
メリケンピーポーな人がメリケンピーポーなデータを出し入れしてメリケンピーポーなスクリプトで利用している限りは問題起こらんのだよな
ファックメリケンピーポー
903デフォルトの名無しさん:2013/05/22(水) 22:29:39.90
黙れヤポンスキー
904デフォルトの名無しさん:2013/05/22(水) 22:40:03.04
ruby秋田
905デフォルトの名無しさん:2013/05/25(土) 17:03:32.60
Rubyリファレンスマニュアル刷新計画 パッケージ版をダウンロードして
ruby server.rb
で起動した後にブラウザで localhost:10080 を表示してもただの真っ白な画面になってしまいます。
皆さんは普通に表示できてますか?
こちらは
Max OS X 10.8
ruby 1.8.7 mac標準のもの
って環境です。
906デフォルトの名無しさん:2013/05/25(土) 19:29:47.39
Rubyは国産だから調べやすいよといわれたんだけど
RubyGemsは英語で書かれているし
いくつかのモジュールのサイトも英語だった・・・なんだこれは!
907デフォルトの名無しさん:2013/05/25(土) 20:19:05.22
海外で評価・改良されて見直されたのが今の地位
まあそれでなくとも隅々まで日本語化されてるなんてことはありえない
908デフォルトの名無しさん:2013/05/25(土) 20:21:23.59
プログラミングを本格的にやるなら、英語くらい読めたほうがいいんじゃないの?
909デフォルトの名無しさん:2013/05/25(土) 20:45:48.43
デスヨネ
910デフォルトの名無しさん:2013/05/25(土) 21:15:29.02
>>907
今の地位って?
911デフォルトの名無しさん:2013/05/26(日) 02:01:05.23
逆輸入だから日本語はあきらめろってことだろ
912デフォルトの名無しさん:2013/05/26(日) 02:15:46.78
いちいちサーバ立てさせて毎回変換させるあのやり方はあまり好きではない
というかあれは管理の都合であってユーザーの都合じゃねえ
RubyとサーバとHTTP/HTMLの知識があることが前提だし(つまり初期のRubyユーザーが前提)

>>906
それを実現させるためには
「ライブラリを書いたら日本語で説明をつける」「解説サイトを作ったら日本語ページが必須」「Rubyの質問は日本語で」
あたりを徹底しなければならない
それはおそらく「日本人しか使ってはいけないプログラム言語」になる

言いたいことはわかるんだけども
913デフォルトの名無しさん:2013/05/26(日) 02:25:40.39
早く日本が世界征服出来ると良いね
914デフォルトの名無しさん:2013/05/26(日) 18:04:55.46
>>906
Pythonやってみるのオススメ
rubyの調べ物がいかに楽なのかよくわかるから

またはHSPにでも鞍替えするとか

なでしことかでもない限りプログラムに英語は付き物だから、簡単な単語拾うくらいからでも英語に慣れといたほうがいいよ
915デフォルトの名無しさん:2013/05/26(日) 18:13:38.79
まあ国産をうたうならせめてエラーメッセージくらい日本語で出してほしいわな
916デフォルトの名無しさん:2013/05/26(日) 18:38:55.86
国産にこだわるのは、エセだから。
917デフォルトの名無しさん:2013/05/26(日) 19:07:22.58
>>905
server.rbが入ってるパッケージ版はお勧めできない
あれは使い方が初心者向けじゃないので

ブラウザから見るか、chm版(HTMLヘルプファイル版)を落としたほうがよい
ブラウザから見るのであれば「サクサク引けるRubyリファレンスマニュアル」
chm版で見るのであれば「chm版リミックス」がオススメ
918905:2013/05/26(日) 22:40:34.63
>>917
どうもありがとうございます!サクサク〜を使うことにしました。
初心者向けじゃなかったんですね・・・
919デフォルトの名無しさん:2013/05/27(月) 05:28:27.45
>>915
なんで?
920デフォルトの名無しさん:2013/05/27(月) 07:48:50.74
>>915
Ruby エラー

でググれば、エラーの見方教えてくれる日本語サイトがすぐ見つかるのはラッキーだよな
921デフォルトの名無しさん:2013/05/27(月) 08:14:54.44
Argument Errorとかはわかりにくいとは言われてはいるな
ArgumentError: wrong number of arguments (3 for 2)
さて「引数3が正しいのに2個だった」と「引数2が正しいのに3個だった」のどちらでしょう。答はfor

ネイティブな人にもネイティブじゃない人にも既存のコンピュータメッセージに慣れた人にも不自然さが少ない簡潔な表現が理想ではある
922デフォルトの名無しさん:2013/05/27(月) 08:32:42.87
>>915
それは「国産プログラミング言語は英語を使うべきではない」と同じだ
それがどれだけ歪んでいるかおわかりだろうか
923デフォルトの名無しさん:2013/05/27(月) 08:49:39.56
なでしこって歪んでんのか?
924デフォルトの名無しさん:2013/05/27(月) 09:02:55.35
バカばっか
925デフォルトの名無しさん:2013/05/27(月) 09:31:03.91
>>921
>ネイティブな人にもネイティブじゃない人にも
世界の言語は英語と日本語だけじゃないんだが。
926デフォルトの名無しさん:2013/05/27(月) 10:47:34.88
>>925
この文脈ではそれはどうでもいい
927デフォルトの名無しさん:2013/05/27(月) 10:55:06.95
おっと勘違い
国産じゃなくて日本発を謳っているんじゃないか
日本人に使われることは想定していないんだろう
ならば、正しい
928デフォルトの名無しさん:2013/05/27(月) 17:25:19.47
レシピ本は「303の技」と「逆引きハンドブック」でどっちが良さげですか?
テンプレに前者は載ってますが。。。

Rはそれなりに使えますが、テキスト処理/ファイル処理用にRubyも覚えておきたいです。
929デフォルトの名無しさん:2013/05/27(月) 21:49:32.83
独自の外部イテレータの作り方がわかりません(ruby1.8.x)
例えば次のようなHash構造(を列挙するための独自のイテレータ)に対してeachを呼んだとき
h = {
'a' => ['a',false],
'b' => ['b',false],
'c' => {'a'=>['ca',false], 'b'=>['cb',false]}
}
最初に必ず'b'が来るとか、値(配列)2番目の要素がfalseのときだけ列挙する(列挙の後でtrueに変更)
'c'のように値がHashであればこのHashを順に列挙する、などとしたいと思っています。

Pythonでは独自にnext()を定義した単純クラスの定義から始めるため(次に何を返すかをnext()に定義する)
考え方としてそこから抜け出せないところもあるのですが
Enumerable::Enumerator(ruby1.8.x)の利用を考えたとき
同じようにnext()を拡張したり、独自の機能を加えて使えるものなのか、わかりません。
http://doc.ruby-lang.org/ja/1.8.7/class/Enumerable=3a=3aEnumerator.html

どのようなコードを書くようになるのでしょうか?
とっかかりとなるヒントをいただけるとうれしいです
930デフォルトの名無しさん:2013/05/27(月) 22:48:04.53
>>929

「要素の列挙の仕方を定義する」方法を尋ねているのなら、それはeachを定義するということ。
hはHashなので、もともと持っているHash#eachをhについて上書きすることになる。
931デフォルトの名無しさん:2013/05/27(月) 23:21:37.54
yieldを調べるといいよ
932929:2013/05/28(火) 13:26:51.26
>>930-931
ありがとうございます。今にしてみると質問時点でrubyには当てはまらない部分もあった気がしますが
ヒントをいただきました。まだ詰めきれてないので簡単ですが、こんな感じで↓

# Enumeratorでの列挙に利用されるmy_each()を定義
# hはMyHashインスタンスに
class MyHash < Hash
 def my_each; /*次の値返す*/; end
end

# nextやeachでmy_eachが呼ばれるよう指定して外部イテレータを生成
iter = h.to_enum(:my_each)

ただ、my_eachの中で結局eachなど(内部イテレータ)を使って値を返すと
混在してあまり気持ちよくない感じのコードになる気がします。
Arrayだとインデクスのインクリメントなどでも書けるので
HashのキーをArrayに保持しておくとかするのが良さそう。
あと例えば↓のようにするとチグハグになってしまうみたいです

iter.next #=>最初の値
iter.each{...} #=>列挙状態と無関係に最初から順に値が帰る(内部イテレータと変わらない)
iter.next #=>保持されている列挙状態により2番目の値が返る

自分の場合、たまたまデータ構造が列挙済みかどうかのフラグを持ってるので対応できるのですが
Enumerable::Enumeratorのマニュアルにも"外部イテレータとして「も」使えます"とあるように
each(内部イテレータ)とnextなど(外部イテレータ)で分かれていて
意識してどちらか一方に統一して使うことが前提になってるんですよね、たぶん。

マニュアルで見る限りですが、ruby1.9では外部イテレータの機能が強化されてるみたいですし
古い話をしてたらすみませんm(_ _)m
933929:2013/05/28(火) 14:22:32.32
>>932のmy_each()の定義で「値を返す」ってしてるけど
「ブロックに渡す(yield)」ですね
934デフォルトの名無しさん:2013/05/28(火) 15:09:02.84
きっと心に深い闇を抱えているのでしょう
935デフォルトの名無しさん:2013/05/28(火) 21:52:05.34
     (´・ω・`)
   /     `ヽ.   お薬増やしておきますねー
  __/  ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
936デフォルトの名無しさん:2013/05/29(水) 01:41:18.41
ど、どうゆうこっちゃ
なんか変なの?>>932
937デフォルトの名無しさん:2013/05/29(水) 10:21:22.02
>>936
変なのかは知らないが、プレゼン能力ゼロだなと俺は感じた
938デフォルトの名無しさん:2013/05/29(水) 11:09:18.84
>>932
>next メソッドによる外部列挙の状態は他のイテレータメソッドによる 内部列挙には影響を与えません。
>ただし、 IO#each_line のようにおおもとの列挙メカニズムが副作用を 伴っている場合には影響があり得ます。
>>929で引用したページにこう書いてあるが
939デフォルトの名無しさん:2013/05/29(水) 11:58:06.08
GMOペイメントのカード決済を埋め込みでやりたいんだけど、
知ってる人いますか?
940デフォルトの名無しさん:2013/05/29(水) 18:59:40.41
>>938 よく読め
941デフォルトの名無しさん:2013/05/30(木) 07:28:59.42
nextで何個か飛ばしてからeachで回したい
eachを中断した後、中断箇所からnextやeachで再開したい
942デフォルトの名無しさん:2013/05/30(木) 10:11:04.37
>>941
eachで回さずにloopとnextで回せばいいと思うが
eachで回したい積極的な理由が何かあるの?
もしあるならそれを書いて欲しいなって思う
943デフォルトの名無しさん:2013/05/30(木) 10:22:46.25
>>932(>>929)
だいぶ遅くなったけど、単純なツリー構造ライブラリを書いてみた。(約250ステップ)

http://play.island.ac/codepaste/code?id=1526

ライブラリ実装の特徴を挙げると、Rubyは純粋オブジェクト指向言語である、
言い換えると「あらゆるすべてがオブジェクトである」から、
(1) ツリーを(Hashではなく)Compositeパターンによるオブジェクトで表現した。
(2) (Stringだけでなく)以下のメソッドを提供しさえすれば、任意のオブジェクトを
 要素としたツリーを構築できる。(いわゆるダックタイピング)
   to_s, hash, eql?, <=>
(3) コンテナとしてSet(順序無&重複無)とArray(順序有&重複有)のどちらも利用できる。

外部イテレータのサンプル実装も含めてあるので、参考まで。
944943:2013/05/30(木) 12:09:36.59
カキコが遅くなったイイワケをば....

Rubyの組み込みクラス Enumerable::Enumerator だけど、いまいち汎用的じゃない。
(もちろん each の代わりに each_xxx が使えるという設計意図は満足してるけど....)

具体的には、列挙条件をイテレータメソッドとして定義するのではなく、
列挙時にパラメタとして指定したいなぁと考える。
たとえばソートを伴なう列挙(each_with_sorting)であれば、
  enum = h.to_enum(:each_with_sorting) { |x, y| f(x) <=> f(y) }  # (1)
とか、仕様でブロックが渡せないのであれば、代わりにラムダ式をパラメタにして、
  enum = h.to_enum(:each_with_sorting, lambda { |x, y| f(x) <=> f(y) } )  # (2)
みたいに....。更にこれ(=この妄想)を一般化すると、each へ列挙条件をハッシュで
オプションパラメタとして渡せればいい。
    enum = h.to_enum(:each,              # (3)
          :filter => lambda { |body| body == 'b' ),
          :sorter => lambda { |x, y| f(x) <=> f(y) }
        )

残念ながら現状の(Enumerable::Enumeratorの)実装だと、
パラメタを文字列(String)へ変換し、それを列挙時に評価(eval)しているみたい。
だから、ラムダ式(2)やハッシュ(3)では列挙条件を指定できない。(Ruby 1.8.7 で確認)
945デフォルトの名無しさん:2013/05/30(木) 15:26:43.22
>>944
sortやfind_allしてからto_enumするだけじゃダメってこと?
946943:2013/05/30(木) 22:08:55.53
>>945
多くのケースは、それでイイと思うよ。
言い換えると、ツリーを列挙オブジェクトへ変換(to_enum)しさえすれば、
その後は豊富なEnumerableaメソッドを組み合わせることで自在に加工できる。

ただしこの話、ツリーの親子関係を前提とするソートに関しては当てはまらない。
  h.to_enum(:each_with_sorting).to_a
    # => ["h", "a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc"]
  h.to_enum.sort
    # => ["a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc", "h"]

これを解決するには、ブロック(あるいはラムダ式)でソート条件を渡すしかないと考える。
つまり、ソートしてから加工ではダメで、ソートする時に計算できればイイ。
たとえば逆順にソートしたいなら、以下のようなコードになる。
  h.to_enum(:each_with_sorting) { |x, y| (x <=> y) * -1 }

更には、今回のケース(>>929)だとツリー要素は単純型のStringであったけれど、
これがレコードのような複合型であった場合、ソート条件として各メンバーについて
昇順/降順や優先順位を指定したいという要求は必然であるはず。これにもパラメタ渡しは役立つ。

だから、Enumerable::Enumerator へは任意のパラメタを渡せることが「望ましい」と思う。
(少なくとも、リファレンスにはパラメタ(args)に関する制限事項を記述「すべき」)
947デフォルトの名無しさん:2013/05/30(木) 22:35:02.07
ソートする時点でそれはEnumerableというよりはArrayではなかろうか
948929:2013/05/30(木) 23:06:31.18
>>942
すいません、eachにこだわるわけではなくloopで問題ありませんでした。
それをeachと書いてしまったのが>>932の「rubyに当てはまらない部分」でした。

pythonでは通常forループ(rubyのfor/inループみたいな)なんですが、
これに外部イテレータ(pythonではジェネレータ)を渡すと
内部的にnext()の呼び出しと、StopIteration例外が捕捉される動作に切り替わりまして
コード自体は変わらないんです。
それでubyではeachという風に、単純に置き換えて書いてしまった次第です>>929
この思い込みから、違いに気づくのが遅くなりました。

>>943
ありがとうございます!
これはちょっとすぐに読み下せないので、勉強させていただきますm(_ _)m
エキサイトしてきました^^
949943:2013/05/30(木) 23:11:58.52
>>947
もちろんメソッドeach_with_sorting内部の実装上では、Arrayとしてソートしているよ。
以下のコードだと、コレクションがArrayであれば #218、Setであれば #51 の辺りになる。

 http://play.island.ac/codepaste/code?id=1526

で、Arrayをソートした結果もArrayであり、ArrayはEnumerableだよね。
950デフォルトの名無しさん:2013/05/30(木) 23:16:33.67
>>949
EnumerableはEnumerableとして動作するから意味があるのであって、Arrayにするのなら
to_aしちゃえばいいだけじゃないのかな
951943:2013/05/30(木) 23:39:03.02
>>950
単純にto_aしちゃうと、ツリーの親子関係が崩れちゃいますよ。
もちろん親子関係よりも大小関係が大切と考えるのであれば単純にto_aしちゃえばいいけど、
自分は「ツリーに関するソートの定義」として、
親子関係を維持したまま子同士の大小関係でソートするのが自然であると考えました。

以下の例(>>946 から引用)について、>>950はどちらが自然な結果だと考えますか?
  >  h.to_enum(:each_with_sorting).to_a
  >    # => ["h", "a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc"]
  >  h.to_enum.sort
  >    # => ["a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc", "h"]
952デフォルトの名無しさん:2013/05/31(金) 05:49:04.65
Enumerableは枚挙以上の意味はないからな
枚挙メソッドの実行のたびに順番が違うと困るならそれはEnumerableではなくArray
Enumerable#sortではなくArray#sortなのはそのせい
953デフォルトの名無しさん:2013/05/31(金) 16:49:50.91
>>952
[蛇足]
枚挙は、いとまがない時以外ではほとんど使わないよ。
普通は、列挙って言うよ。
954デフォルトの名無しさん:2013/05/31(金) 18:32:15.41
俺が学生のころは数え上げっていってたな
955デフォルトの名無しさん:2013/05/31(金) 20:31:46.25
Enumerableなんだからenumerateでいいんじゃないかみたいな感じもする
まあどっちにしても「数えられる」という程度の意味しかない
順番つけはArrayの仕事
956943:2013/05/31(金) 22:37:07.53
>>943 のツリー構造ライブラリを更新しています。

  http://play.island.ac/codepaste/code?id=1527

== 主な変更点
* 以下のイテレータメソッドを新規追加。
  ・each_tree -- ツリー要素(body)ではなく、ツリーそのものを返す
  ・each_with_lineage -- ツリー要素と素性(ルート要素から親要素へのArray)を返す
* イテレータメソッド each_if について、ノードの選択条件をパラメタ指定できるようにした。
* ライブラリ固有の例外について、それぞれをクラスとして明示的に定義した。

なお、子要素を保持するコレクションクラスとして集合を選ぶ場合、
ライブラリ固有のクラス Tree::Set の代わりに、標準ライブラリ set が提供するクラスである
Set(一般的な集合)とSortedSet(ソートされた集合)も利用できます。

  http://doc.ruby-lang.org/ja/1.8.7/library/set.html

固有クラス Tree::Set と標準クラス Set とは、要素間で重複が発生した時の振る舞いに差異があります。
前者は例外 Tree::Exception::Duplication が発生するのに対し、
後者は新旧のいずれかを選んでツリーを構築します。お好みで選んで下さい。
(新旧のどちらが選ばれるかについて、リファレンスでは明記されていません)
957デフォルトの名無しさん:2013/06/02(日) 03:31:45.08
sinatraを使ってミニアプリを作ろうとしているのですが、うまくいきません
http://codepad.org/lo5RHO7t
具体的にはまず404エラーと表示されます。(ブラウザから確認するとちゃんと存在するアドレスなのに)
いろいろ調べてるとなぜか begin endで囲むとこれが治るのですが今度はまたいろいろと問題が出てきて……
何がまずいのでしょうか?
958デフォルトの名無しさん:2013/06/02(日) 03:49:50.48
ではひとつ質問です
「それをsinatraを使わずに書くとどうなりますか?」

sinatraは上級者が手を抜くために使うライブラリであって、初心者が手を抜くために使うライブラリではありませぬ
sinatraがどういう動作をしてsinatraにどういう動作をさせているのかがわからない人は使ったらいかんです
959デフォルトの名無しさん:2013/06/02(日) 03:52:59.96
>>958
わかりました 出直してきます
960デフォルトの名無しさん:2013/06/02(日) 03:55:53.34
RubyではlowerCamelCaseは全く使われない
誰があなたにそれを教えたのか知らないが、そんな本があるなら今すぐ安全なところで燃やせ
961デフォルトの名無しさん:2013/06/02(日) 04:06:45.81
スネークケースだってそんなにクールでもないけどな…

こればっかりは文化の選択みたいなもんで理屈ではどうにもなんないわ
Rubyの変数とメソッドは全部小文字でアンダースコア区切りが「普通」だと言うしかない
962デフォルトの名無しさん:2013/06/02(日) 04:14:17.17
>>960,961
そうなんですか どの本で見たとかじゃなくなんとなくやってました
普通に則って書いていきます
963デフォルトの名無しさん:2013/06/02(日) 09:38:58.67
まあ統一されてりゃいいけどね
でrubyは標準のライブラリがスネークケースで書いてあるから普通はそっち
964デフォルトの名無しさん:2013/06/02(日) 10:16:13.69
Sinatraの罠に嵌ってる初心者の人はたまに見るな
誰が勧めてるのやら
965デフォルトの名無しさん:2013/06/02(日) 10:54:42.31
何が罠だよ。何もわかってないくせに
966デフォルトの名無しさん:2013/06/02(日) 11:02:16.12
罠だよ

「(規格の基礎知識を持っていて類似ライブラリの経験があれば)簡単で便利」の
カッコの中を省略されていることに気付けないのは罠
万人向けではないものを万人向けであるかのように紹介解説するのは悪意
そんな解説はないほうがマシ
967デフォルトの名無しさん:2013/06/02(日) 11:07:47.10
みんながUNIXシステムコールとC言語を知っていたRuby1.2くらいの頃の感覚が抜けない人がいまだにいるのですごめんなさい
MLとかしか読んでない人が陥る病気です
968デフォルトの名無しさん:2013/06/02(日) 11:59:53.38
sinatraは初心者向けの懇切丁寧な解説ページがあれば
初心者向けになり得ると思うんだけどねー
それがない現時点では、初心者からすればRackを素で使った方が早い
969デフォルトの名無しさん:2013/06/02(日) 12:01:35.10
え?どうかんがえてもsinatraのほうが簡単でしょ
入門になるページもあるし
970デフォルトの名無しさん:2013/06/02(日) 12:02:40.39
どこ?
971デフォルトの名無しさん:2013/06/02(日) 12:17:30.32
もしかして、sinatraだけで検索してないかw
972デフォルトの名無しさん:2013/06/02(日) 12:28:51.83
「Sinatra 入門」で検索したらいろいろ出てくるんだな
少し前に検索したときに全然出なかったから、今もないものかと思ってた
適当なことを書いて申し訳ない

あとオライリージャパンもSinatraの本を出してることにちょっと驚いた
973デフォルトの名無しさん:2013/06/02(日) 12:30:35.41
第9回 SinatraとSequel・Hamlで掲示板アプリを作る
http://gihyo.jp/dev/serial/01/ruby/0009

↑この短い掲示板アプリが非常にわかりやすい
最初にこれ見て、SinatraとSequelにハマった
974943:2013/06/02(日) 17:00:42.95
>>956 のツリー構造ライブラリを更新しています。
更新の目的は、>>944 で述べた組み込みクラス Enumerable::Enumerator への不満の解消です。

 http://play.island.ac/codepaste/code?id=1528

== 主な変更点
* ツリー構造クラス Tree::Abstract は列挙可能(enumerable)では無くなりました。その代わりに
 ツリー列挙モジュール Tree::Enumerator を新規追加しています。
* 上記変更により、ツリー構造クラスからは以下の列挙メソッドが削除され、
  each, each_tree, each_with_lineage, each_with_sorting, each_if
 その代わりに列挙オブジェクト を生成するメソッド to_enum が追加されました。
* メソッド Tree::Abstract#to_enum(opts = {}) の引数はSymbolをキーとするHashです。
  :reply_keys => [ .... ]
    値はSymbolのArrayであり、そのSymbolは以下のいずれかを指定します。
    この指定は、列挙ブロックへ渡される引数リストの仕様を示しています。
      :body, :cond, :children -- それぞれ、ツリーオブジェクトの属性
      :tree -- ツリーオブジェクトそのもの
      :lineage -- ツリーの素性(ルート要素から親要素へのArray)
  :filter => lambda { |tree| .... }
    値はラムダ式で引数はツリーオブジェクトです。(Enumerable#select も参照)
  :sorter => lambda { |x, y| .... }
    値はラムダ式で各引数はツリーオブジェクトです。(Enumerable#sort も参照)
975デフォルトの名無しさん:2013/06/02(日) 21:59:02.70
>>974
ここが何スレか知ってる?
976デフォルトの名無しさん:2013/06/02(日) 23:16:42.33
Ruby1.8.7でiOS端末にプッシュ通知を行うAPサーバーを立てようとしています。
プッシュ通知自体はうまくいっているのですが、その後の成否のレスポンス取得して通知を行う箇所の実装をどうすればよいのかわかりません。。。

socketをgetsすればいいというところまでは解ったのですが、
sslをcloseした後のsocketのデータをgetsしてよろしいのでしょうか?

また、取れたデータをどう処理すれば、下記のドキュメントのようなパケット形式として見れるのでしょうか?
ttps://developer.apple.com/jp/devcenter/ios/library/documentation/RemoteNotificationsPG.pdf
977デフォルトの名無しさん:2013/06/03(月) 00:14:30.87
清々しいほどにRuby関係ないような気がします
なにをどういうやりかたで通信してるかRubyはそんなこと知りませんので資料見て実装してください

ただ、それくらいになるとgemで誰か作ってそうではある
探すと見つかるかもしれない
978943:2013/06/03(月) 01:26:41.66
>>976
どちらかといえば、「ネットワークプログラミング相談室」スレ向きの話題だね。
受信ソケットからのバイト列をいかに解釈するかという話は、何度となくQ&Aされている。

で、リンク先の文書を軽く読んでみたけど、その p53 には以下の記述がある。

  通知を送信した結果、APNsがその通知を誤った形式、あるいはその他の
  理解できない形式であると認識すると、APNsは切断の前にエラー応答パケットを返します
  (エラーがない場合はAPNsは何も返しません)。図 5-3にエラー応答パケットの形式を示します。

質問は、この「エラー応答パケット」を受信する方法でいいのかな?
もしそうだとしたら、このパケットは常に6バイト固定みたいだから、
以下の手順でいいのではないかと思う。
 (1) 拡張形式の通知パケットを(SSLソケット sock へ)送信
 (2) response = sock.read(6) でエラー応答パケットを受信
 (3) SSLソケット(sock)をクローズ
 (4) メソッド String#unpack で各フィールド(command, status, identifier)を取り出す
 (5) 各フィールドの値を確認する

補足1: (2)の受信で、(多重待ちやタイムアウト監視といった)必要に応じて select を使う
補足2: (5)の確認について、以下の条件が「すべて」成立した場合に限り、通知処理成功と判断する
 (a) 応答パケット長(response.size)が6バイトである
 (b) コマンド値が8である
 (c) ステータス値が0である
 (d) 通知識別子が通知パケットで指定した値と等しい
979943:2013/06/03(月) 19:02:09.87
>>978 に自己レスで訂正を入れる。
まず最初はオバカなミス。
X: (a) 応答パケット長(response.size)が6バイトである
O: (a) 応答パケット長(response.bytesize)が6バイトである

次に、リンク先の文書を読み直すと、APNsはエラーが発生すると応答パケットを送信した後で
TCPコネクションを閉じると書かれているけど、エラーが未発生だった場合の振る舞いが
明記されていない。これは正常であれば接続は維持されると解釈すべきだろうから、
このままでは>>978にある手順(2)の受信処理が無限待ちに陥る可能性がある。
従って、select(あるいは signal)を使ったタイムアウト監視が必須になるだろう。

更に、この箇所を真面目に設計するならば、通知トランザクションが発生する度に
対応する子スレッドを生成し、その子スレッドで(上記の訂正を含む)手順(1)..(5)を実行すべきだろう。
あるいは、(いわゆる)「非同期I/O処理」として手順(3)のソケットを閉じずに起動元へ制御を戻した後、
select で応答パケット受信を待つという実装でもかまわない。ただし、この場合には
適切なエラー処理ができるようにする為、通知パケットと応答パケットの対応付けが必須になる。
具体的には、たとえば通知識別子をキーとし通知パケットを値とするハッシュで対応を管理する。
なお、プロバイダをRailsのようなWebアプリとして設計する場合にはまた別の実装になるが、
非同期の考え方は同じなので、参考になると思う。

なお、ネットで検索するとRuby実装コードはいくつか見つけたけど(たとえば Apns4r)、
基本通知パケットを利用するか、あるいは拡張通知パケットを利用していても応答パケットを
無視しているものばかりだった。自力で真面目に実装するには、上段で書いたようにスレッディングや
非同期I/Oといったテクニックが必要になるが、できれば>>976には茨の道を切り開いてもらいたい。
980デフォルトの名無しさん:2013/06/03(月) 23:59:10.10
>>977-979
返信が遅れてしまいました。
ありがとうございます。
何とか無事に動くものを作ることができました。。。
細かい内容まで本当にありがとうございます。
981デフォルトの名無しさん:2013/06/05(水) 01:40:01.23
スクレイピングを使ったアンテナサイトを作成中です。
具体的には、芸能人ブログの画像を羅列するといったものなのですが、画像と記事URLを結び付けたいのですがむずかしいです。
ハッシュを使うにもキーを記事URLとすると同じキーがいくつも出来てしまいますし、二次配列もいまいちわかりません。
データベースを使うにも40行ほどのプログラムですこし大げさかな、とおもいます。
どうするのがベストでしょうか
982デフォルトの名無しさん:2013/06/05(水) 09:15:17.12
どうするもなにも「その画像がどのサイトのものか」を知ってるのはあなただけなのだから、そのようにデータベース化すればいい
「このサイトから取ってきた画像」だったら「このサイト」の「画像」でいいんじゃないの

Rubyには多次元配列のようなものはなくて、単に入れ子になった配列やHashに過ぎないから気楽にネストしていいぞ
配列やHashをファイルに保管するときは(テキストエディタで編集ができなくていいなら)pstoreがおすすめというか実質これしかねえ

どういう構造にするかについての議論は、こればっかりは手探りで慣れて頂くしかないわ
[
{ :title => 'ブログ1タイトル',
:url => 'ブログ1トップURL',
:articles => ['post001.php','post002.php',...],
images => {'post001.php'=>[], 'post002.php'=>['syame1.jpg']},
...},
{ :title => 'ブログ2タイトル',
:url => 'ブログ2トップURL',
...},
...
]
みたいなブログごとのでっかいHashを配列に入れてeachで回して探すようにするのがとりあえずなんも考えずに済んで楽だろうと感じる
これでダメな場合は別な構造を試す
983デフォルトの名無しさん:2013/06/05(水) 12:00:31.03
>>981
逆にすればいいんだけじゃん
984デフォルトの名無しさん:2013/06/05(水) 17:23:02.74
>>982
気にせず多次元配列使っていいんですね
……配列の中に動的にハッシュを作って追加するほうほうがわからない……

>>983
逆とは?
985デフォルトの名無しさん:2013/06/05(水) 19:41:51.38
>>984
「動的に」の意味が分からんがpushじゃダメなん?
986デフォルトの名無しさん:2013/06/05(水) 20:09:52.76
>>985
ブログ - エントリー - 画像
- 画像
- エントリー - 画像
- 画像

というツリー構造にしたいのです。
動的にというのはRSSで取得したら随時 配列を作っていくということです
987デフォルトの名無しさん:2013/06/05(水) 21:04:42.80
>>986
まずは>>982が例示してくれた
要素としてハッシュを持つような配列
値として配列を持つようなハッシュ
をそれぞれ理解してみようか?
988デフォルトの名無しさん:2013/06/05(水) 21:18:01.65
>>986
h = {a: [1,2]}

たとえばこの[1,2]の部分を[1,2,3]に
したかったらどうしたらいいかな?って考えてみよー^ο^
989デフォルトの名無しさん:2013/06/05(水) 21:56:09.96
>>987
……りょうかいです

>>988
eachで回してpushでいいですか?
990デフォルトの名無しさん:2013/06/06(木) 09:17:42.82
>>989
それくらいは自分で試してみようか・・・
991943:2013/06/06(木) 09:59:00.26
>>989(>>981,986)

>>982が書いてくれたハッシュでもいいと思うけど、
Rubyは純粋オブジェクト指向言語なのだから、ブログの構成要素をクラスとして定義してみた。

 http://play.island.ac/codepaste/code?id=1530

ブログ(Blog)へ動的に写真(Photo)を追加していく操作(add_images!)も含まれているので、参考まで。
992デフォルトの名無しさん:2013/06/06(木) 10:32:14.78
rubyでsnsを作りたいのですが、作り方がのっているサイト教えてください
993デフォルトの名無しさん:2013/06/06(木) 10:49:26.98
994943:2013/06/06(木) 11:12:05.64
自己レスでミスを訂正。
X: ブログ(Blog)へ動的に写真(Photo)を追加していく操作(add_images!)も含まれているので、
O: ブログ(Blog)へ動的に写真(Photo)を追加していく操作(add_photos!)も含まれているので、

それから写真クラス Photo について、現状では組み込みクラス String のほうが
(簡潔だから)望ましいのだけれど、将来的に写真クラスへ様々な属性が追加される事を想定して、
あえて明示的に新規クラスとして定義している。たとえば(Googleの写真検索結果ページのように)
属性として写真のサイズを追加したい場合には、以下のようになる。

class Photo
  attr_reader :url, :width, :height

  def initialize(url, width, height)
    ....
  end

  ....
end
995デフォルトの名無しさん:2013/06/06(木) 16:42:49.77
>>990
はい……

>>991,994
ありがとうございます!
クラスはすごい流し読みをしたので使うことが億劫でした
じっくり読んでモノにします
996943:2013/06/06(木) 16:57:32.49
>>991のコードを更新しました。

 http://play.island.ac/codepaste/code?id=1531

ここまで(>>991,994)、>>981,986で提示された「お題」について、
アンテナサイト開発に必要なデータ構造とそれらへの基本操作をモデルとして書きました。
今回の更新では、それらの基本操作を組み合わせたアンテナサイト向けの応用操作を追加しています。

まず最初に、想定するアンテナサイトの処理概要を以下に示します。
* 初期化 -- 空のblogオブジェクトを生成する
* 更新 -- blogサイトからRSSを取得して解析し、その結果を元にblogオブジェクトを更新する
* 参照 -- blogサイトに関連した全写真を一覧にして返す

続いて、主な変更点です。
* 以下のメソッドを追加
 * Blog#update!(other) -- (おそらくはRSS解析処理の結果である)別のblogオブジェクトで自身を更新
 * Blog#each -- 関連したすべての写真オブジェクトを列挙
997デフォルトの名無しさん:2013/06/06(木) 17:00:35.06
998デフォルトの名無しさん:2013/06/06(木) 17:02:05.89
>>997
スレ立て乙です
999デフォルトの名無しさん:2013/06/06(木) 17:03:23.26
埋め
1000デフォルトの名無しさん:2013/06/06(木) 17:04:29.35
ありがとうございました
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。