Ruby 初心者スレッド Part 52

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

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

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
2デフォルトの名無しさん:2013/06/06(木) 23:50:41.42
【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/06/06(木) 23:51:19.49
・いつものエディタとターミナルという普段着でお越し下さい
・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない

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

※RubyやRuby使いに対する不満や愚痴などは「Rubyについて」スレや「バトルロワイヤル」スレなどをご利用下さい
4前スレ943:2013/06/07(金) 00:48:53.67
>>1
アリガトン

>>前スレ995
ハッシュからクラスへの移行には、手続き型脳からオブジェクト思考脳へという発想の転換が必要です。
大変だとは思いますが、自分に合ったペースで付いてきて下さい。なにか疑問があれば質問を。
なお、更新はまだまだ続く予定です....。
5デフォルトの名無しさん:2013/06/07(金) 01:12:16.94
6デフォルトの名無しさん:2013/06/07(金) 04:21:07.21
前スレのこれね
「具体的には、芸能人ブログの画像を羅列するといったものなのですが、画像と記事URLを結び付けたいのですがむずかしいです。
ハッシュを使うにもキーを記事URLとすると同じキーがいくつも出来てしまいますし、二次配列もいまいちわかりません。」

983書いた者なんだけどそれに対してレスしそこねてスレ変わったのでここに書いておくよ
ハッシュというのは要するにハッシュ配列のことだったのね
こっちはハッシュ関数のことだと読んだので、一意の画像はないものと仮定(あったらそれを使い回し)して
ハッシュ値とURLとを逆にすればいいだけじゃんと書いた
まぁ全く同一の画像を複数の記事に使い回すケースもあるかもしれないけどさ
7デフォルトの名無しさん:2013/06/07(金) 08:02:12.94
>>2
本屋行ったらたのしい Ruby の 4 版が出てた
それよりレシピブックの新版まだー
8デフォルトの名無しさん:2013/06/07(金) 18:23:40.89
>>4
非常にありがたいです
オブジェクト思考は人間にわかりやすいと書いてありましたがぜんぜんそんなことないです(笑)
ついていかせていただきます

>>6
ハッシュ関数なるものがあるんですか 調べてみます
9デフォルトの名無しさん:2013/06/07(金) 23:09:11.55
>>8
触らないほうがいいよ
10前スレ943:2013/06/08(土) 00:05:18.83
前スレ996のコードを更新しました。

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

これまでのコードはどれも計算結果をメモリ上に保持していたので、
プログラムが終了するたびにその計算結果は消失していました。
今回の変更では、blogオブジェクトをディスクへ保存/読み込みできるようにします。
実装方法としては、前スレ982で紹介されていた標準ライブラリ pstore を利用します。

== 主な変更点
* クラス Model::Store を追加(これは PStore のサブクラスです)

この変更により、Webアプリケーションとして「とりあえず動く」という
試作品(プロトタイプ)のレベルに到達できたのではないかと思います。
モデル(Model)はできたので、あとはビュー(View)とコントローラ(Controller)、
そしてRSS取得処理が用意できれば、アンテナサイト開発にとって最初の一歩になるでしょう。
Rails使いなら ActiveModel を使うのが簡単かもしれないし、
あるいは前スレ#973で紹介があったHaml(ビュー?)とSinatra(コントローラ?)も面白そうです。

次回は、写真の重複問題について検討する予定です。(正直に告白すればバグ対策です....)
11デフォルトの名無しさん:2013/06/08(土) 00:17:10.21
>>10
ありがとうございます
MVCってやつですね RSS取得は既存のrssライブラリで簡単でした
仕様上重複はないのですがありがたいです よろしくおねがいします
12前スレ943:2013/06/08(土) 00:17:36.03
>>10 への追記)

クラス PStore には(ハッシュと同様に)キーで複数のオブジェクト(=値)を管理できるので、
今回の変更では、ついでに複数blogサイトにも対応させています。

また、コードの先頭にあるコメントについて、以下の行を書き漏らしていました。

 <Store> = { <Blog> }.

5行目の後に挿入されているものとして見てください。
13前スレ943:2013/06/08(土) 22:48:21.10
>>8
>オブジェクト思考は人間にわかりやすいと書いてありましたがぜんぜんそんなことないです(笑)

今回のケースで言えば、手続き型脳だと、
(1) まず最初にアンテナサイトの「データ構造」についてHash や Array で構成することを考え、
(2) 次にそれらを push や concat といった操作を if や each で組み合わせて「手続き」を考えます。
この思考手順は、Perl や Python といった手続き型言語では極めて常識的なプログラミング法です。

それに対してオブジェクト思考脳だと、
(1) まず最初に、アンテナサイトという主題(subject)からブログ/記事(エントリ)/写真といった
 抽象的な概念(concept)を洗い出すことを考えます。
(2) 次に、それら概念に付随する属性(attribute)が何かを洗い出し、クラス(class)として具象化(reify)させます。
(3) そしてようやく最後に、クラスの内部で必要な Hash や Array といったデータ構造や操作(=手続き)を考えます。
こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト思考分析/設計)です。

データ構造や操作を考えるよりも前に、(1)と(2)の主題の分析(analyze)という手順が必要となるのですから、
オブジェクト思考が難しいのはごく当たり前の話だと思います。

「手続き型脳」では、課題を与えられるといきなりコンピュータに向かい、ゴリゴリとコードを書いていきます。
その姿はきっとカッコいいプログラマに見えるでしょうし、自身も言語を自在に操っている満足感が得られます。
これはワンライナーやせいぜい数百ステップ程度の使い捨てプログラム、あるいはアルゴリズムの勉強等といった
多くの局面では(特に初心者では)、決して間違いであるとは言えません。
でも今回のアンテナサイトのような(ある程度)実用性のあるソフトウェアを開発しようとするのであれば、
いきなりコードを書き始めるのではなく、じっくりと思索にふけることが必要になるでしょうし、
その時に(上で述べた)「オブジェクト思考脳」を育てるトレーニングを心がけ、初心者の壁を乗り越えませう。
14前スレ943:2013/06/08(土) 23:14:27.84
>>13を一部訂正

X: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト思考分析/設計)です。
O: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト志向分析/設計)です。
15デフォルトの名無しさん:2013/06/08(土) 23:25:04.21
>>13
ブログでやって
16デフォルトの名無しさん:2013/06/08(土) 23:43:11.28
>>13
なるほど すげーわかりやすいです
まずは作りたいものの設計をつかむ。大事なことですね
がんばります
17前スレ943:2013/06/09(日) 00:31:18.81
>>14を再訂正 .... orz
X: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト思考分析/設計)です。
X: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト志向分析/設計)です。
O: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト指向分析/設計)です。

>>16
この「オブジェクト思考脳」という発想の出発点になったのが、書籍「オブジェクト指向システム分析設計入門」です。
この書籍は著者である青木淳氏のホームページ上で全文(!)が無償公開されています。

  http://aokilab.kyoto-su.ac.jp/documents/IntroductionToOOAOOD/index-j.html

この本、口調はやさしいのですが、中身はすごく抽象的で哲学的です。難解ですがなにせタダですので、一読を薦めます。
特に「第2章 広義のオブジェクト指向」内にある節「2.1.1 理解の三つの秘訣」が、>>13 と直接的に関連します。

  http://aokilab.kyoto-su.ac.jp/documents/IntroductionToOOAOOD/chapter2/index-j.html#2-1-1

例題「人間とは?」を参考に、「アンテナサイトとは?」を思考してみてください。

なお、>>13で述べたのは、上記節における「データ中心設計(属性による定義)」と「機能中心設計(内包で定義)」です。
残る「分類中心設計(外延で定義)」、いわゆる継承(インヘリタンス)はこれから検討結果を反映させていく予定です。
18デフォルトの名無しさん:2013/06/09(日) 00:37:50.63
>>17
かなりの分量がありますね。落ち着いたら全部読みたいです。
わかりました。部分的に読んでみて設計を考えます。
19デフォルトの名無しさん:2013/06/09(日) 01:34:02.96
>>9
20デフォルトの名無しさん:2013/06/09(日) 02:30:24.44
よそでやれ
21デフォルトの名無しさん:2013/06/11(火) 07:08:06.91
WinXP-ProでRuby1.8.6を使用 PowerPointは2000と2010

PowerPoint(PPT) にWin32OLEを適用して、選択したオブジェクト(図柄,文字列)の
参照を取りたく思います。

例えばある位置にURLリンクを持つ図柄S01,S02があったとき ← [ URL1 ]  [ URL2 ] 
S01を選択するとDOSプロンプト側に

 位置 100,200 の URL1 の図柄を選択しました

と表示したくおもいます。 
※PPT側のオブジェクトはVBでは PowerPoint.Slide.Shapesで参照できるようです。

宜しくお願い致します。
2221:2013/06/11(火) 07:32:02.31
(追記)
中途半端な書き込みになりゴメンなさい。

質問は、>>21を実現するためのヒントとなるようなサンプルまたは
サイトをご存知ないですか? ということです。

PPTの各図柄(オブジェクト)には名前を付けられないので、代わりに
それらが持つリンクURLを参照したく思います。
23前スレ943:2013/06/12(水) 23:03:18.05
>>10のコードを再更新しました。
また、約600ステップと全体像の把握が難しい規模になってきたので、自動生成した文書も公開します。

 http://play.island.ac/codepaste/code?id=1534
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/html/

今回の変更の目的は>>10の最後で書いた「写真の重複問題」ですが、その前にちょい大きめの変更もあるので、
先にそれを説明します。
* 概念の名称「エントリ(entry)」をより具体的な「記事(aticle)」へ変更しました
* データ型検査処理(kind_of?)について、少し昔に書いた表明ライブラリ(assertion.rb)を利用するようにしました

さて本題の重複問題ですが、重複の対象は写真だけでなく、ブログ(blog)/記事(aticle)/写真(photo)で起こりえます。
そこで、重複問題の解消手段として「キーによる索引化を伴うソートされた集合」を表現する抽象クラス
Collection を定義し、その具象クラスとして記事コレクション(Aticles)と写真コレクション(Photos)を定義します。
Collectionの内部(実装)はハッシュであり、URLをキーに記事オブジェクト(Aticle)および写真オブジェクト(Photo)を
値としてURLからオブジェクトへの写像を管理しています。

また、重複の解消処理の詳細は、コレクションの生成(Collection#initialize)時およびコレクションへの
オブジェクト追加(Collection#add!)時にメソッドへ渡すブロックで指定します。これらの具体的な箇所を列挙します。
* #272: Blog#each -- 写真オブジェクトの生成
* #320: Blog#update_aticle! -- 記事オブジェクトの追加
* #352: Blog#add_photo! -- 写真オブジェクトの追加
* #451: Aticle#add_photo! -- 同上

次回の更新では、クラスの継承を検討します。これは>>17の分析で残った「分類中心設計(外延で定義)」の部分です。
なお、更新は次回で終了する予定です。
24デフォルトの名無しさん:2013/06/13(木) 06:35:37.19
よそでやって
25デフォルトの名無しさん:2013/06/13(木) 07:48:12.90
26デフォルトの名無しさん:2013/06/13(木) 19:20:50.61
>>21
やろうと思えばできなくも無いかも知れんがどうしてrubyで?
2721:2013/06/13(木) 20:34:02.46
>>26
Win32OLEの実施体験がRubyでしか今のところないから
28デフォルトの名無しさん:2013/06/14(金) 00:05:13.74
VBAで作ってみて動いたらRubyに変換すればよい
29前スレ943:2013/06/14(金) 21:12:55.88
>>23のコードにバグが見つかったので、再々更新しました。(修正量は、ほんの少しだけ)

 http://play.island.ac/codepaste/code?id=1535
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/html-r1.27/

現象: ブログと記事の間で写真が重複したブログを列挙した時、順序番号が不連続になる(#1397-1401 を参照)
対策箇所: Blog#each -- #264

最後に>>23について、訂正と追加補足(2点)があります。

X: * #272: Blog#each -- 写真オブジェクトの生成
O: * #272: Blog#each -- 写真コレクションの生成

* ブログ間の写真重複、つまりあるブログと別のブログとの間で発生した写真の重複は解消されません。
* 概念上だとストア(store)はブログのコレクションですが、実装上は PStoreのサブクラスです。
 つまりクラス Store は抽象クラス Collection の具象クラス(=サブクラス)ではありません。
 このためストア内でのブログ重複に対して、更新(Store#update_blog!)時に固有の解消処理を実装しています。
 またソートされた集合ではないため、列挙(Store#each)時にブログの順序性は保証されません。
30デフォルトの名無しさん:2013/06/14(金) 23:09:32.57
Windowsのを操作したかったらVBAなりC#なり使えばいいよね
Rubyでやる理由なんてないわ
31デフォルトの名無しさん:2013/06/15(土) 00:04:06.57
すみません、3日間やってるのですが解決策が分からず質問させて下さい。

検索結果から取得する2種類のデータをtitleと
descriptionのセットしてデータベースに保存したいです。

eachとかも色々やったのですが、titleだけ取得したぶん入りますがdescriptionが
今度は同時に入れられなかったり…

q_results = Nokogiri::HTML(open(q_strings))
arr_title = q_results.xpath('//li[@class="g"]//h3[@class="r"]').map do |node|
node.text
end

arr_desc = q_results.xpath('//li[@class="g"]//div[@class="st"]').map do |node|
node.text
end

hash = {"title" =>arr_title, "desc" =>arr_desc}

hash["title"].map do| node |
t = node
record_g = T_result.new(
:product_name => t,
#:product_desc => hash["desc"],
)
record_g.save
end
32デフォルトの名無しさん:2013/06/15(土) 00:37:22.18
こんな書き方でも試しているんですが、入ってる結果は2レコードで
確かにDBへ保存されています、ですがarr_descがこれだと入れられず…

for t in arr_title
T_result.create:product_flag => 0,:product_name => t
end

多分やり方としてtitleレコードを一度参照させて該当すればフィールドに値を追加する
と言う様な処理を書けばやろうとしている事は実現出来るのかなと考えているのですが、
多分凄い初歩的な何かが分かっておらず普通は1レコードに一回で突っ込めるはずだと…
33デフォルトの名無しさん:2013/06/15(土) 00:43:13.99
T_result が何かわからないとなんとも言えない
34デフォルトの名無しさん:2013/06/15(土) 00:51:39.34
>>33さん

すいません、DBへの接続はActiveRecordをrequireしています。
Rails本体は使ってません。
35デフォルトの名無しさん:2013/06/15(土) 01:57:16.84
Google 検索の結果について処理してるんだとして
desc が入ってるのは div[class=st] ではなく span[class=st] ではないだろうか
とりあえずこんなのでどうだろ(CSS セレクタの使い方間違ってるかも)

require 'nokogiri'
html = Nokogiri::HTML(open(...))
items = html.css('li[class=g]')
items = items.map do |item|
  [item.css('h3[class=r]').first.text,
  item.css('span[class=st]').first.text]
end
items.each do |title, desc|
  T_result.new(:product_name => title, :product_desc => desc).save
end
36デフォルトの名無しさん:2013/06/15(土) 02:21:58.65
>>35さん

ありがとうございます。早速試してみましたがやはりproduct_descフィールドは
空っぽでした。。。またなぜか.textの箇所がundefined methodと呼ばれました。。。

putsでは値は取れてたので大丈夫だったのですが、う〜ん、、、もはや素人過ぎて
次何を試せばいいのかも八方塞がりです…

ただ配列の中に処理を書いて更にそれをカンマで連結可と言うのは初めて知りました。
何かここにも大きくヒントがあると思いますので理解出来る様勉強したいと思います。
37デフォルトの名無しさん:2013/06/15(土) 02:39:35.17
>>35さん

度々すいません、descが空っぽだったのはspanの箇所が引っかかっていた様で
div[classに変えたら中身が入っていました。。。!

# ご教示頂いた方法で .text はエラーになる為外した状態
[ item.css('h3[class=r]').first,item.css('div[class=st]').first ]

# DBフィールド状況
product_name / !ruby/object:Nokogiri::XML::Element{}
product_desc / !ruby/object:Nokogiri::XML::Element{}

ただ.textが使えない事でDB内へ保存された際に上記の様な形になってしまい、配列の所で .text に
しない限り解消出来ない気がしており配列の中身に更に手を加える方法と言うのがあるのでしょうか。
38デフォルトの名無しさん:2013/06/15(土) 09:23:50.62
.text がエラーになるってことは nil に text でも呼んでるんじゃないの?
とりあえずこちらで再現するために環境と検索に使った URL を示してくれないか
39デフォルトの名無しさん:2013/06/15(土) 09:33:59.66
putsは文字列を表示するメソッドであって、デバッグ用途でオブジェクトの中身を確かめるメソッドじゃない
文字列(String)であるということが確実にわかっているのではない限り(あるいはわかっていても)通常はpを使う
irb> obj = [1]
irb> puts obj
1
irb> p obj
[1]
objは文字列ではなく整数の配列(と考えていいと作者に言われているオブジェクト)だということがわかる

putsではなくpを使うようになると対象オブジェクトが(たいていの場合)はっきりするので「なぜか」じゃなくなる
nil、空文字列、空の配列、空の文字列が入っている配列、nilが入っている配列、そういったものが区別できる

とりあえずデータベースに入れて確かめるのはやめとけ
絶対完全に間違いのないオブジェクトが得られる確証ができてからおもむろにデータベース部分のスクリプトを書き始めろ
40デフォルトの名無しさん:2013/06/15(土) 11:24:19.53
みなさん勉強になります。ありがとうございます。

>>38さん
以下のURLで試しています。
https://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=ruby

>>39さん
何気なくpにしたりputsにしたりprintとしてみたり取り敢えず値がどれかに
まず入ってるのか程度でしか使ってなかったのでそれぞれの違いを理解する
様にがんばります。
41デフォルトの名無しさん:2013/06/15(土) 16:31:46.11
>>40
その URL で試したけど div[class=st] では拾えない。空の NodeSet が返ってくる
div[class=st] で拾えることを確認したコードを貼ってくれないか

require 'nokogiri'
require 'open-uri'
url = "https://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=ruby"
doc = Nokogiri::HTML(open(url))
divs = doc.css('div[class=st]')
spans = doc.css('span[class=st]')
p divs.class, divs
p spans.class, spans
42デフォルトの名無しさん:2013/06/15(土) 21:50:44.74
>>38さん
すいません、ご報告があります。
# エラー:`block in <main>': undefined method `text' for nil:NilClass (NoMethodError)

> .text がエラーになるってことは nil に text でも呼んでるんじゃないの?
と言う事でメソッドが定義されてないというエラーメッセージが当初よく理解出来ていなかったのですが、
>>38さんからご指摘頂いた事でnilだとtextがundefined methodエラーになるって事か、、、

と考え今度>>39さんに言われたpで出力し試していった結果当初>>35さんから頂いた内容で
titleもdescも取得する事が出来てました。。。

只Rubyの公式リファレンスでArray箇所をずっと調べたりもしていたのですが配列の値をそもそも式で埋め、
更に.first等で繋ぎ取得させるというような記述例が見つけられず全く検討がついてませんでした。

絶対的な経験不足はあるのですが、何かもし他に今のレベルじゃここ読め!
みたいなのがあったら是非教えて頂けると幸いです。。。
43前スレ943:2013/06/15(土) 21:54:21.10
>>29のコードを更新しました。
 http://play.island.ac/codepaste/code?id=1536
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/html-r1.30/ -- 自動生成ドキュメント
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/blog.png -- UMLクラス図

今回の変更の目的は>>23の最後で書いた「クラスの継承」ですが、実際には前回の>>23ではコレクションを
実装するために継承を用いていました。ただし、これはありふれた継承パターンであり、しかもそれらのクラスは
属性を持たない単純な継承であったので、特に解説しません。今回は、残りのクラス群について検討します。

まず「継承(inheritance)」とは何か?にはいくつかの定義があり、その一つは「言語(Ruby)が提供する便利な仕掛けである」
という実践的な立場であり、もう一つは「クラスとは集合であり、継承とはクラス間の部分集合関係である」という
形式的な立場です。一般には前者で考える人が多いのですが、ここでは後者の定義を採用し、これに沿って検討を進めます。

クラスが集合であるとすれば、その集合の要素とは各クラスが持つ「属性(attribuute)」です。
>>29のコードの先頭付近にある「Grammar of Blog(ブログの文法)」というコメントから
コレクション関連のクラスを除いたものを以下に示します。
 <Blog> = "url" "title" "seq_counter_of_aticles" "seq_counter_of_photos" <Aticles> <Photos>.
 <Aticle> = "url" "title" "seq_num" "seq_conter_of_photos" <Photos>.
 <Photo> = "url" "seq_num".

(次レスへ続く ....)
44前スレ943:2013/06/15(土) 21:56:12.45
(.... >>43 の続き)

ここで、この記述を「集合の外延的定義」とみなして各集合間の「交わり(intersection)」を考えると、
まず最初に属性 "url" を要素とする積集合が容易に発見できます。
 { "url" } = <Blog> ∩ <Aticle> ∩ <Photo>
これら積集合(等式の左辺)と三つの集合(同右辺)を部分集合とする全体集合を「ブログの構成要素(Component)」という
抽象的な概念で命名します。
 Component = { "url" } ∪ Blog ∪ Aticle ∪ Photo
 Blog = { "title", "seq_counter_of_aticles", "seq_counter_of_photos", <Aticles>, <Photos> }
 Aticle = { "title", "seq_num", "seq_counter_of_photos", <Photos> }
 Photo = { "seq_num" }
さらに他にも交わりがないか見ていくと、
 { "url" } ∪ { "title", "seq_counter_of_photos", <Photos> } = Blog ∩ Aticle および
 { "url" } ∪ { "seq_num" } = Aticle ∩ Photo という二通りの交わりを発見できますが、
ここでは共有できる属性数が多い前者を採用し、これを「ブログのコンテナ(Container)」という抽象的な概念で命名します。
 Component = { "url" } ∪ Container ∪ Photo
 Container = { "title", "seq_counter_of_photos", <Photos> } ∪ Blog ∪ Aticle
 Blog = { "seq_counter_of_aticles", <Aticles> }
 Aticle = { "seq_num" }
 Photo = { "seq_num" }

(次レスへ続く ....)
45前スレ943:2013/06/15(土) 21:56:57.89
(.... >>43 の続き、これで終わり)

これら集合間には、以下に示す「互いに交わりのない部分集合(nested set)」関係が存在します。
 Component ⊃ Container, Component Photo ⊃, Container ⊃ Blog, Container ⊃ Aticle
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/subset.png
最後に先頭の継承の定義で述べた「継承 = 部分集合関係」に従って各集合をクラスへ置き換えると、継承階層が完成します。

前回(>>29)と比較すると各クラスの定義が簡潔になり、クラスの責任分担がより明確になったのではないでしょうか?
長々とカキコ連投を続けてきましたが、質問等の反応が無ければこれで終了です。スレ汚し失礼しました。
46デフォルトの名無しさん:2013/06/15(土) 22:05:08.57
>>42
>何かもし他に今のレベルじゃここ読め!

http://doc.ruby-lang.org/ja/2.0.0/class/Enumerable.html
47デフォルトの名無しさん:2013/06/15(土) 22:29:56.70
>>41さん

ありがとうございました。前回確かにspanでエラー出ておりdivにして確認出来たのに、仰る通り
今nilです。色々コード書き換えてる間にどさくさに紛れて出ていたのを勘違いしていたかもしれません。
そこで思い出して書いたところ以下で取得出来てたので途中でこんな事してしまっていた可能性が高いです。

arr_title = q_results.xpath('//li[@class="g"]//h3[@class="r"]').map do |node|
node.xpath('//div[@class="st"]')
node.text
end
p arr_title

結果的にこれだと 処理内で p node.text 等して処理中に出力しない限り、検索結果全部掘りきれずに
どうやってtitle desc 出力された結果をそれぞれ結合してやればいいんだろうなと悩んでいたのを思い出しました…!
そこで一度hashの形にしてみたいなやり方を試したいた経緯がありました。
48デフォルトの名無しさん:2013/06/15(土) 22:31:44.36
>>46
おぉぉ有り難う御座います!今まで見た事ありませんでした。
早速熟読したいと思います。
49デフォルトの名無しさん:2013/06/15(土) 22:39:43.96
>>45
おつかれさまでした ありがとうございました
>>45さんのものより随分ちんけな形で完成したので、参考にしてグレードアップさせたいと思います
ありがとうございました
50前スレ943:2013/06/17(月) 00:15:03.99
>>49
時間はかかるかもしれませんが、自分のペースで理解を進めていってください。
直感的なプログラミングを否定しているわけではなく、理屈と実践を反復することが大切です。
最後に、別スレへカキコした内容をコピペして終わります。がんばってくださいね。

> 235 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/09/22(水) 01:12:40
> >>232
> それでいいんじゃないかと。自分はF#は使ってないから一般論になってしまうけど、
> 理屈先行型の頭でっかちもダメだし、結果的に動くプログラミングしかできないのもダメ。
> 関数型言語の勉強という理屈とプログラミングという実践を繰り返し続けること、
> 言い換えると「抽象化(理屈) <-> 具体化(実践)」の反復プロセスが大切だと思う。
>
> その全体像は螺旋階段(スパイラル構造)のようであり、成長度の傾きはごく緩やかで、
> 暗闇の中で階段を一歩一歩上ることは焦りや不安が常につきまとうものだけど、
> ある時、ふと下界を眺めてみると、過去の自分が別人のように見えることに気付く。
> 自分の経験になるけど、新しいパラダイムの勉強と成長とは、そんなものだと思う。
51デフォルトの名無しさん:2013/06/19(水) 18:43:12.21
p の出力をファイルにリダイレクトすると動きが遅くなってしまいます。
何故なのでしょうか? Windows7 32bitでRubyInstaller最新版です。

再現方法
1) 以下をファイルtest.rbに保存する。
100.times do p 'ABC' end
2) コマンドプロンプトを起動して実行する。
> ruby test.rb
===> 一瞬で終わる
> ruby test.rb > tmp.txt
===> なかなか終わらない
> ruby -e "100.times do p 'ABC' end" > tmp.txt
===> 一瞬で終わる
52デフォルトの名無しさん:2013/06/19(水) 19:57:28.14
またsync案件か
コマンドプロンプトは不安定っすなー
53デフォルトの名無しさん:2013/06/20(木) 21:46:10.28
rubyでゲーム開発勉強してるんですけど移動のさせ方などの情報はのっていてもスクロールとかそういう詳しいところを解説してくれてるサイトが見つかりません 書籍とかならそういうのが書いてる奴があるのでしょうか
おすすめのサイトなり勉強法があったら教えてください
今使ってるライブラリはDXrubyですがそれ以外でも大丈夫です
ruby自体はある程度勉強しました
54デフォルトの名無しさん:2013/06/20(木) 22:21:16.40
55デフォルトの名無しさん:2013/06/20(木) 22:21:49.20
オリジナルの××システムで○○と書くところをRubyの××接続ライブラリではRubyを交えて△△と書く

という手順を経るので、元の××システムの勉強が必要
元の××システムを知らなくても××接続ライブラリが使えるということはぜんぜんない
DXRubyの場合はDirectXとWindowsAPIだね
56デフォルトの名無しさん:2013/06/21(金) 14:08:18.59
54さん
回答ありがとうございます
スクロールというのは一例でそういうのがまとまって乗ってるサイトが知りたかったんです
言葉が足りなくてすいません
55さん
とういうことは初めてゲームプログラミングをするならrubydxを学ぶよりdirectxとかを先に学んだ方がいいってことでしょうか
57デフォルトの名無しさん:2013/06/23(日) 16:30:39.11
さくらのレンタルサーバーでTwitterBotを作ろうとして
http://d.hatena.ne.jp/arng/20130322/1363882297
上記のサイトを参考にして環境を構築したところ、テストで直接実行して投稿時に
http.rb:799:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (Twitter::Error::ClientError)のようなエラーがでました
解決作はCA証明書をどうにかするらしいですがさくらサーバーでの具体的な解決策は
わかりませんでした どなたかご教授頂けないでしょうか
58デフォルトの名無しさん:2013/06/23(日) 17:16:06.32
認証が可能なルート証明書を探してきて(curlあたりが持ってるんじゃね?)、
Net::HTTP#ca_file = に設定する。

間違っても verify_mode = OpenSSL::SSL::VERIFY_NONE になんてしないように。
59デフォルトの名無しさん:2013/06/24(月) 00:29:12.38
ruby初心者です。
コマンドで実行する時にruby a.rb 1とか指定すると1という値が渡せますが
例えば'あああああ[ここ]あああああ'の[ここ]の部分に代入することはできますか?
※置換ということではないです
60デフォルトの名無しさん:2013/06/24(月) 00:59:35.18
コマンドライン引数は ARGV で取れるから
式展開で "あああああ[#{ARGV[0]}]あああああ"
ARGV[0] に a.rb でなく 1 が入るのと展開するときはダブルクォートを使うのに注意
61デフォルトの名無しさん:2013/06/24(月) 01:09:50.70
>>60
ありがとおあああああああああああああああ
62デフォルトの名無しさん:2013/06/25(火) 09:06:26.48
質問です。
「a」という文字をCP932からEUC-JPに変換したいのですが、うまくいきません。
この文字はEUC-JPでは「0xFB 0xA6」ですが、変換すると「0x8F 0xCB 0xEA」になってしまいます。

変換に使用しているソースコードは下記の通りです。
使用しているバージョンは1.9.3と2.0.0です。

#coding: cp932
p "a".encode("euc-jp").bytes.map{|i| "%02x" % i} #=> ["8f", "cb", "ea"] (異常)
p "山".encode("euc-jp").bytes.map{|i| "%02x" % i} #=> ["bb", "b3"] (正常)

よろしくおねがいします。
63デフォルトの名無しさん:2013/06/25(火) 09:13:38.20
自己解決できそうです。
EUC-JPの文字符号化方式には、「CP51932」と「eucJP-ms」というのがあって、
「a」は前者では「0xFB 0xA6」、後者では「0x8F 0xCB 0xEA」になるみたいです。

Windowsでは前者を使用しているみたいですが、
Rubyでは後者に変換してくれちゃってるみたいです。

うーん。面倒くさい・・・
ありがとうございました。
64デフォルトの名無しさん:2013/06/25(火) 21:36:56.70
バグの可能性もあるから報告してみたら?
6563:2013/06/26(水) 19:37:10.32
encodeメソッドに「CP51932」を指定できました。
ふええ・・・別の方法で対処した後に知ったよう・・・

#coding: cp932
str = "a"
p str.encode("cp51932") #=> "\x{FBA6}"
p str.encode("eucJP-ms") #=> "\x{8FCBEA}"
p str.encode("euc-jp") #=> "\x{8FCBEA}"
66デフォルトの名無しさん:2013/06/28(金) 11:23:21.08
uyなんですけど
ruby2.0でmechanizeが上手く入らないんですけど
67デフォルトの名無しさん:2013/06/28(金) 11:56:28.95
nokogiriもダメなんですけど
68デフォルトの名無しさん:2013/06/28(金) 12:05:46.79
rubyもまだまだですね
69デフォルトの名無しさん:2013/07/07(日) 00:23:04.13
String#encodeってんなバイト列しらんだの変換できんだの文句たれてまともに変換できなくね?
結局NKFつかってる。
70デフォルトの名無しさん:2013/07/08(月) 11:52:53.51
日本語を含みうる文字に関しては変換はほぼ妥当にできる
ただし、変換元のバイト列のエンコーディングと変換先のエンコーディングに関して大雑把にでも理解指定できているということが大前提
申告に虚偽があっても勝手に不可逆変換して情報を取り戻せなくなるNKFなんかよりはよっぽど誠実

ただしとても使い辛い
想像や無知で申告されたエンコーディング名をそのまま使うとほぼ確実に変換失敗する(HTMLのmeta charset名とか、「○○だから××だろう」とか)
これは「世の中が悪い」んではあるんだけども
まあエラーで止まってくれるんだったらその情報を頼りにエラー回復処理すればいいじゃん
71デフォルトの名無しさん:2013/07/08(月) 12:10:05.19
pythonいいよね
自分はpythonの文字列処理のたびに例外に面食らったが
この板で馬鹿には無理と言われて勉強し直して覚醒したよ

>>70 の言うように勝手に暗黙の変換してデータ壊すより
エラーで止まってくれた方がよほど誠実だと納得した
72デフォルトの名無しさん:2013/07/08(月) 12:12:24.98
は?
73デフォルトの名無しさん:2013/07/11(木) 00:32:26.60
Ruby1.9 でsqlite3 を叩いているのですが、

ソースをutf8で書いていて、varchar型ににASCIIデータをを格納しようとしたところ、
ascii-8bit扱いになって実態参照でDBに格納されるので、encode("ascii")の連呼になってしまい。。
74デフォルトの名無しさん:2013/07/11(木) 01:24:26.89
BLOBになる話かと思ったら違った
SQLite3にはvarcharなんて気の利いたものはないぞ、拒否らないだけで

sqlite3-rubyは返されるデータオブジェクトにエンコーディングを設定しない
設定しないってことはBINARY、Rubyで言うところのASCII-8BITだ
エンコーディング情報のない文字列にエンコーディングを設定するのは道理
75デフォルトの名無しさん:2013/07/11(木) 01:27:06.76
unkonown仕様文字列
76デフォルトの名無しさん:2013/07/11(木) 01:35:20.05
勝手にUTF-8とかで返すと海外の人が怒るからこうなってるという説
77デフォルトの名無しさん:2013/07/11(木) 02:47:32.08
db open時の引数にcharset=が指定できるとありがたく。。
78デフォルトの名無しさん:2013/07/11(木) 08:34:33.20
ところでこの場合 encode(バイト列を変換する) ではなく
force_encoding(エンコーディング情報だけ付け替え) ではないかい?
79デフォルトの名無しさん:2013/07/11(木) 16:39:43.79
rubygems はしょうもないライブラリを登録しても怒られませんか?
80デフォルトの名無しさん:2013/07/11(木) 17:02:34.69
特等席な名前でなければ気にされることはないと思う
81デフォルトの名無しさん:2013/07/11(木) 17:29:38.49
特等席ネームかどうかなんて個人の主観だろ
だれも目をつけてない名前で登録して
あとからそれだめって言われてもな
82デフォルトの名無しさん:2013/07/12(金) 11:46:07.90
たとえば "db" とか、どう見ても、って感じの名前はあるだろ
83デフォルトの名無しさん:2013/07/13(土) 01:59:06.02
ruby-helloworld
8479:2013/07/13(土) 13:28:20.40
ありがとうございます。
特別な名前でもないので思い切って登録してみます。
85デフォルトの名無しさん:2013/07/13(土) 14:31:13.67
宝石がまたひとつ増えた
86デフォルトの名無しさん:2013/07/16(火) 00:26:20.97
Tkのスレで聞いた方がいいかも知れないけど、
フレームをdestroyする時パックされてるボタンも一緒にdestroyされますか?

何か残骸みたいのが残ってたら気持ち悪いので
87デフォルトの名無しさん:2013/07/17(水) 16:50:43.33
自力で解決できず行き詰っています。
どこが悪くてどうすればいいのか、どうか教えて下さい。

プログラムの目的:ニコニコ動画にログインする。
OS:Windows7
Ruby2.0.0を使っています。
(続きます)
88デフォルトの名無しさん:2013/07/17(水) 19:41:35.84
(続き)
require 'mechanize'

agent = Mechanize.new

url = 'ニコニコ動画のURL'
page = agent.get(url)

next_page = page.link_with(:text => 'login').click

next_page = page.form_with(:name => 'mail' 'password') do |form|
form.mail = "自分のメールアドレス"
form.password =自分の設定したパスワード
end.submit

これに出たエラー↓
ファイル名:8:in `<main>': undefined method `click' for nil:NilClass (NoMethodError)
89デフォルトの名無しさん:2013/07/17(水) 20:00:08.33
Mechanize 知らないのだけど page.link_with(:text => 'Login') だったりして
90デフォルトの名無しさん:2013/07/17(水) 20:27:21.73
require 'mechanize'
mech = Mechanize.new
mech.user_agent_alias = 'Windows IE 7'
mech.ssl_version = 'SSLv3'

login = mech.get("http://www.nicovideo.jp/login").forms[0]
login['mail'] = @mail
login['password'] = @password
login.submit

あれ? cant_loginになるな
9187:2013/07/17(水) 20:28:30.01
>89 'Login'にしてみたらまた違うエラーになってしまいました・・・
エラーメッセージが長くてここに書けなそうです
9287:2013/07/17(水) 20:32:19.74
>90 私も試してみましたが、また長いエラーメッセージが出ちゃいました
93デフォルトの名無しさん:2013/07/17(水) 21:56:36.03
とりあえず、 >>88 の link_with(:text => 'login') はサンプルか何かの丸コピーで、
意味を把握してない疑いが…

標的となるフォームの構造は

<dt><label for="mail">ログインメールアドレス/電話番号</label></dt>
<dd><input id="mail" name="mail_tel" type="text" class="txt"></dd>

だからな。
9487:2013/07/17(水) 22:22:58.68
>93ここを参考にしました
ownway.info/Ruby/index.php?mechanize%2Fabout
95デフォルトの名無しさん:2013/07/17(水) 22:30:45.31
こんなんでいける? >>90 を参考にさせてもらいました

require 'mechanize'

ua = Mechanize.new do |mech|
  mech.user_agent_alias = 'Windows IE 7'
  mech.ssl_version = 'SSLv3'
end

homepage = ua.get("http://www.nicovideo.jp/")
loginpage = homepage.link_with(:text => "Login").click
loginpage.form_with(:action => "https://secure.nicovideo.jp/secure/login?site=niconico") do |form|
  form["mail_tel"] = MYMAILADDR
  form["password"] = MYPASSWD
end.submit
# p ua.page
9687:2013/07/17(水) 23:02:50.24
>95 また長いエラーメッセージが出ちゃいました
97デフォルトの名無しさん:2013/07/17(水) 23:18:16.24
>>96
なんてエラーメッセージ?
個人情報伏せたうえで pastebin とかに貼ってもいいよ
9887:2013/07/17(水) 23:47:25.61
エラーメッセージはこれです。
C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect returned=1 e
rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL
::SSL::SSLError)
(続きます)
9987:2013/07/17(水) 23:51:34.63
(続き)
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from C:/Ruby200/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:857:in `start'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:628:in `start'
(続きます)
100デフォルトの名無しさん:2013/07/17(水) 23:59:09.53
>>98
Windows だとうまくいかないんだって
http://rubydoc.info/gems/mechanize/Mechanize:cert_store

よくわかんなかったら 証明書 mechanize windows でぐぐって
10187:2013/07/18(木) 00:03:22.24
(続き)
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:570:in `connection_for'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:926:in `request'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:257:in `fetch'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:974:in `response_redirect'
10287:2013/07/18(木) 00:08:48.62
(続き)
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:298:in `fetch'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize.r
b:431:in `get'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize.r
b:330:in `click'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/p
age/link.rb:30:in `click'
from ファイル名.rb:9:in `<main>'
(終わりです)
10387:2013/07/18(木) 00:24:14.51
>>100 ありがとうございます。今度はエラーが出ませんでした!
エラーが出なかったということは、成功で良いのですよね?
確認する方法が分からないので少し不安ではありますが
104デフォルトの名無しさん:2013/07/18(木) 07:06:02.53
サイト構造(HTML的な意味も含めて)を理解してないと辛い
いわゆるモダンブラウザが自動でやってる手順の多くを手動で書かないといけないからね

で、今なにやってるかというと、サイト利用のためにログイン済みクッキーが必要なので、
ログインページでログインしてMechanizeにクッキーを持たせてるんだ
Mechanizeオブジェクト(の、中)にクッキーが書き込まれてるので、そのままトップページや動画を読み込んでみればいい
たとえばトップページならユーザー名がHTMLに埋め込まれて送られてきているはず
ログイン失敗ならそのようなHTMLが送られてきているはず

余談だけどクッキーを外部保存して再利用することはニコ動ではおすすめできない(他のサイトでは可能)
これはサイト側の制限で、こちらではどうしようもない
105デフォルトの名無しさん:2013/07/18(木) 10:02:07.58
そうだぬ
二重管理だと看做されると
強制ログアウトさせられるぬ
106デフォルトの名無しさん:2013/07/19(金) 00:09:19.21
>>86
下の階層ごとdestroyされるはずだけど
質問するまでもなく、自分でやってみたらいいんじゃないのかな
require 'tk'
f=Tk::Frame.new(background:'#FF8080',padx:5,pady:5).pack
Tk::Label.new(f,text:'LABEL').pack
Tk::Button.new(f,text:'BUTTON').pack
Tk::Button.new(text:'destroy frame',command:->{f.destroy}).pack
Tk::Button.new(text:'exit',command:->{Tk.root.destroy}).pack
Tk.mainloop
107デフォルトの名無しさん:2013/07/19(金) 00:28:36.27
>>106
ありがとう
108デフォルトの名無しさん:2013/07/20(土) 07:13:06.50
srand("test")とかやりたいんですけど
string->bignumに変換する良いやり方教えてください
109デフォルトの名無しさん:2013/07/20(土) 07:52:46.71
irb> "test".unpack('C*').inject(:*)
=> 156291440
110デフォルトの名無しさん:2013/07/20(土) 07:56:46.28
偏りたくない人向け

irb> require 'digest/md5'
irb> Digest::MD5.hexdigest('test').to_i(16)
=> 12707736894140473154801792860916528374
111デフォルトの名無しさん:2013/07/20(土) 11:46:03.30
SecureRandomの出力を種に使うという贅沢な選択は…
112デフォルトの名無しさん:2013/07/20(土) 13:56:20.02
特にセキュリティが絡むわけでもないんですが
MD5版使わせてもらいます
ありがとうございます
113デフォルトの名無しさん:2013/07/20(土) 22:31:25.43
初歩的ですまんです
arr=["aaa","aab","aac", ...... ] とい文字でできた長〜い配列から
1つおき、2つおきに取り出してくるようなメソッドてありますか?
普通にループの処理を書いたほうがいいでしょうか。
(数字が並んでたら、select{}のなかに式を書いてでできることはわかりました。)
114デフォルトの名無しさん:2013/07/20(土) 22:55:40.57
def choice(arr, n)
 arr.select { |x| x % (n + 1) == 0 }
end

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
choice(a, 1) => [0, 2, 4, 6, 8]
choice(a, 2) => [0, 3, 6, 9]
choice(a, 3) => [0, 4, 8]
115デフォルトの名無しさん:2013/07/20(土) 22:59:11.93
arr.each_slice(N).map{|ary| ary.first }
116デフォルトの名無しさん:2013/07/21(日) 01:39:26.83
>>114 うまく動きませんでしたす。たぶん文字だからです。

>>115 これはうまくいきました。ありがとうございます。
slice(N)でN個ごとにとりだして、
mapでN並ぶ配列の先頭だけの配列にするのですね
117デフォルトの名無しさん:2013/07/21(日) 07:41:46.28
a.each_slice(3).map(&:first)
118デフォルトの名無しさん:2013/07/21(日) 08:02:36.05
ニコ動ログインならこんなんあった
http://takuya-1st.hatenablog.jp/entry/20120101/1325427164
119デフォルトの名無しさん:2013/07/21(日) 15:30:40.49
aに対して1、bに対して2、cに対して3・・・・
みたいな感じで文字列の各文字の対応する数字を合計して返すプログラムを作りたいのですが

str="abc".split(//)
num={"a"=>1,"b"=>2,"c"=>3}
count=0
for i in 0...str.size
count += a[str[i]]
end
puts count

↑のnumをa〜zまでそれぞれ1〜26に対応させるのって手打ちじゃなくて簡単な方法ってありますか?
120デフォルトの名無しさん:2013/07/21(日) 15:40:31.76
"a".ord - 0x60
121デフォルトの名無しさん:2013/07/21(日) 15:43:16.93
>>119
ASCIIコード表 の 97 から112 をsprintfで取り出す
http://e-words.jp/p/r-ascii.html

p sprintf("%c", 97) #=> "a"
122デフォルトの名無しさん:2013/07/21(日) 15:44:50.61
Hash[("a".."z").each.with_index(1).to_a]
123デフォルトの名無しさん:2013/07/21(日) 15:44:56.43
ごめ、違った
124119:2013/07/21(日) 16:23:38.63
みなさんありがとうございます
早速試してみます
125デフォルトの名無しさん:2013/07/21(日) 16:24:49.38
Integer#to_sは36進法まで対応してるよ、というだけの話。

>> (1..26).each.with_object({}) {|n, hash| hash[(n+9).to_s(36)] = n}
=> {"a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5, "f"=>6, "g"=>7, "h"=>8, "i"=>9,
"j"=>10, "k"=>11, "l"=>12, "m"=>13, "n"=>14, "o"=>15, "p"=>16, "q"=>17,
"r"=>18, "s"=>19, "t"=>20, "u"=>21, "v"=>22, "w"=>23, "x"=>24, "y"=>25,
"z"=>26}
126デフォルトの名無しさん:2013/07/22(月) 07:54:19.94
>>119
カウンター変数みたいなの作って、ループ処理内でキーの部分に代入
ループ毎にカウンター変数+=1してけば自動化できない?
127デフォルトの名無しさん:2013/07/22(月) 08:02:05.13
http://rubyinstaller.org/downloads/

Ruby 2.0.0-p247 (x64)
落としたら
ノートンがws reputation 1検出して削除されるんだけど
なにこれ誤検出?
128デフォルトの名無しさん:2013/07/22(月) 08:20:47.73
うちは
WindowsDefenderだけど
特に問題なかった
129デフォルトの名無しさん:2013/07/22(月) 08:26:27.33
なんで McAfee とか Norton みたいな激重糞ソフト使ってんの?
130デフォルトの名無しさん:2013/07/22(月) 08:35:24.42
Nortonは軽いよ。
131デフォルトの名無しさん:2013/07/22(月) 08:43:13.18
ノートンは信頼できないEXEファイルを強制的に削除するからね
Rubyみたいなのを使うとき問題が出る
自分はリアルタイム保護のSONAR拡張モードって奴をOFFにしてる
132デフォルトの名無しさん:2013/07/22(月) 09:09:53.79
つうかPCが4コアくらいあれば別に裏でセキュリティソフト動いてても重さ感じないだろ
ネトゲ起動しっぱなしでも他作業余裕
133デフォルトの名無しさん:2013/07/22(月) 10:45:49.71
>>119
やってみた
Hash[[*1..26].map{|e|[(e+96).chr,e]}]
134uy:2013/07/22(月) 11:10:27.56
p Hash[("a".."z").map.with_index(1).to_a]

アホみたいにレベル下がったなこのスレ
135デフォルトの名無しさん:2013/07/22(月) 12:14:18.40
また一人初心者がルビーに興味をもったということ
136デフォルトの名無しさん:2013/07/22(月) 14:53:46.54
解答者のレベルが下がったって意味だよな
137デフォルトの名無しさん:2013/07/22(月) 17:53:17.57
("a".."z").each.with_index(1).inject({}){|h,(a,i)| h.tap{ h[a]=i} }

ついinjectを使ってしまうからコードが読みづらくなる
138デフォルトの名無しさん:2013/07/22(月) 18:02:06.23
>>137
("a".."z").each.with_index(1).inject({}) { |hash, (key, val)| hash.update key => val }

もし inject を使うなら、こうだろ
139デフォルトの名無しさん:2013/07/22(月) 18:08:48.93
>>138
ほんまや・・・ありがとう!
140デフォルトの名無しさん:2013/07/22(月) 18:30:36.65
Hashオブジェクトにhashという名前をつける人はいろんな意味で信用ならない
141デフォルトの名無しさん:2013/07/22(月) 18:56:46.99
Hash[(?a..?z).zip(1..26)]
142デフォルトの名無しさん:2013/07/22(月) 18:58:21.08
まったくそのとおりだ、組込みのモジュール/クラスと重なる名前付けは一切禁止すべきだよな

例:object, array, klass, data, dir, io, file, mutex, range, string, struct, symbol, thread, time, errno, process, signal,
143デフォルトの名無しさん:2013/07/22(月) 20:14:33.89
Hash#[]を使う人は美的感覚に欠けている
144デフォルトの名無しさん:2013/07/22(月) 22:29:06.91
145デフォルトの名無しさん:2013/07/22(月) 22:57:51.79
>>144
では訂正しよう、Objectクラスのメソッドと重なる(ローカル変数への)名前付けは一切禁止すべきだよな

例:clone dup display hash
  instance_variables method methods object_id private_methods protected_methods
  public_method public_methods public_send singleton_class singleton_methods
  taint tap trust untaint untrust

これでOK?
146デフォルトの名無しさん:2013/07/23(火) 02:30:09.36
>>119
>>141
がどうやら最小コードのようだ
147119:2013/07/23(火) 09:52:27.08
いろんな人のコードを見てわからないところ調べるとホント勉強なるわ「

サンキュー
148デフォルトの名無しさん:2013/07/23(火) 12:06:03.54
rubyのmechanizeの質問なんですがダイアログボックスの制御ってどうすればいいんでしょう?
具体的にはwindow.confirmで出てくる奴の「はい」か「いいえ」を選択したいのですが・・・・
149デフォルトの名無しさん:2013/07/23(火) 15:30:27.72
HTTPとHTMLとJavaScriptを知っていればわかることだが、MechanizeはJavaScriptを解釈制御できない
HTTPとHTMLとJavaScriptを知っていればわかることだが、Mechanizeに相応のGETまたはPOSTをさせればいい
なにを言っているのかわからないのなら、HTTPとHTMLとJavaScriptに関する勉強が必要
なんか上のほうでも書かれていたが、ふつうのWebブラウザがどんな挙動で何をやっているかを知らないとMechanizeは全く使えない
150デフォルトの名無しさん:2013/07/23(火) 15:42:51.32
実行したいシステムにWatirをインストールしてセキュリティ設定を変更させた上で実行させるという手もないではない
通常のWebブラウザ設定を汚して壊す必要があるので、完全自分用でもなければそうそうできるものでもないが一応
151uy:2013/07/23(火) 21:45:36.28
そんなに知識いらないだろ
色んなものの知識習得をすっ飛ばして初心者でも簡単にスクレイピング出来るようにしたのがmechanize
js絡むものはmechanizeでやるの効率悪いから諦めたらいい
152デフォルトの名無しさん:2013/07/24(水) 07:49:00.29
>>148
どうしても無理っぽかったら、いっそHSPでもさらりと習得すればいい
ダイアログ使うの簡単な言語だから、rubyプロセスと命令の受け渡しだけ出来ればいいし
153デフォルトの名無しさん:2013/07/24(水) 19:56:12.35
あほ
154デフォルトの名無しさん:2013/07/27(土) 02:21:04.18
質問です。自分でどうしても解決できなかったので、分かる方どうか教えてください
下のプログラムに「ファイル名.rb:16:in `<main>': undefined local variable or method `html' for m
ain:Object (NameError)」というエラーが出てしまいます。
(つづく)
155154:2013/07/27(土) 02:24:46.84
(つづき)
プログラムの目的:ニコニコ動画で任意の動画をマイリストに登録する
require 'mechanize'
mech = Mechanize.new
mech.user_agent_alias = 'Windows IE 7'
mech.ssl_version = 'SSLv3'

mech.verify_mode = OpenSSL::SSL::VERIFY_NONE

login = mech.get("ニコ動URL/login").forms[0]
login['メール'] = @mail
login['パス'] = @password
login.submit
156154:2013/07/27(土) 02:28:37.66
(つづき)
def getToken()
html = urllib2.urlopen("ニコ動URL/my/mylist").read()
end
for line in html.splitlines()
mo = re.match(r'^\s*NicoAPI\.token = "(?P<token>[\d\w-]+)";\s*',line)
end
if mo
token = mo.group('token')
assert token
return token
end
157デフォルトの名無しさん:2013/07/27(土) 06:08:30.28
>>154
課題:以下の質問に、深入りしない程度にてきとーに答えなさい
・ トップレベルとはなにか(必須)
・ 変数スコープとはなにか(必須)
・ "undefined local variable or method" の英文的な意味(必須)
・ これまでに作ったことのあるスクリプトの大まかな機能(参考)

もし答えられない項目があるのなら、あなたはまだいてはならないところにいます
動詞が変化することを知らずに英文で手紙を書こうとしているようなもので、根源的な基礎知識が足りません

もっと単純なスクリプトをたくさん書いて練習するべきだと思うし、もしそんな手間をかける理由がないというのなら
おそらく目的専用の出来合いのライブラリやらアプリケーションやらを単体で使ったほうが速くて安くてうまくいきます
自力でわけのわからないプログラミング言語を無闇にいじくり回すこともないでしょう
158デフォルトの名無しさん:2013/07/27(土) 08:13:43.04
>>156
へえ最近はRubyにもurllib2やsplitlines()が…

ねえよ!(ペシッ
159デフォルトの名無しさん:2013/07/27(土) 10:04:58.58
>>154
Ruby def で検索かけて、使いかた覚えといたほうがいいよ

申し開きできないくらい基本的な事だから
160デフォルトの名無しさん:2013/07/27(土) 10:15:54.24
ネットでググって勉強すると知識が断片的になるから本を買った方がいいと思うの
161デフォルトの名無しさん:2013/07/27(土) 10:25:47.41
むしろこの程度のレベルならググったほうが早い
162デフォルトの名無しさん:2013/07/27(土) 10:56:43.46
urllib2って、pythonじゃねーかw
163デフォルトの名無しさん:2013/07/27(土) 12:45:29.44
>>154
>「ファイル名.rb:16:in `<main>': undefined local variable or method `html' for m
>ain:Object (NameError)」

翻訳すると「オブジェクト m にはローカル変数(属性)またはメソッドとして
html が定義されていない」であり、エラー発生箇所は16行目とある。
要は、html という名前がどこにも定義されていない、という意味。

おそらく>>154は14行目の代入文でhtmlという名前が利用できるようになったと
考えているかもしれない。でも、この行はメソッド定義 getToken() の一部だから、
getToken()が呼び出されなければ実行されない。
メソッドの「定義」と「呼び出し」の違いを理解すること。

で、どうすればいいの?という話になるが、まず14行目の変数htmlへの代入文を
実行できるようにする為に、13行目と15行目を削除(またはコメント化)してみなさい。
変更後のコードは、以下のようになる。

12: login.submit
13: html = urllib2.urlopen("ニコ動URL/my/mylist").read()
14: for line in html.splitlines()
164154:2013/07/27(土) 12:55:54.24
(つづき)
token = getToken()

def mylist_create(name)
cmdurl = "ニコ動URL/api/mylistgroup/add"
q = {}
q['name'] = name.encode("utf8")
q['description'] = ""
q['public'] = 0
q['default_sort'] = 0
q['icon_id'] = 0
q['token'] = token
165デフォルトの名無しさん:2013/07/27(土) 13:23:00.15
>>163
for m ではなく for main:Object
urllib2 が未定義
166163:2013/07/27(土) 13:56:56.24
>>165
指摘ありがとう、>>163を訂正しよう

 翻訳すると「トップレベル(main:Object)ではローカル変数(属性)または
 メソッドとしてhtml が定義されていない」であり、エラー発生箇所は16行目とある。
 要は、html という名前がどこにも定義されていない、という意味。

なお、メソッドurllib2に関しては、この先で未定義エラーとなる可能性は高いと思うけど、
今回のエラーの原因が「識別子 html が未定義」である事に間違いは無いと考える
まずは目の前のhtml問題を解決し、それからurllib2問題に目を向ければいいのではないかと
167デフォルトの名無しさん:2013/07/27(土) 14:36:34.54
>>166
理屈としては間違ってないけど
>>156 にまるまる Python のコードをぶちこんでくる質問者に対して
その粒度でちまちまレスしてくのは教育的にも2ch的にも筋がいいとは思えないな

今回に関しては入門書読んでこいでいいと思うわ
168デフォルトの名無しさん:2013/07/27(土) 14:51:20.04
169デフォルトの名無しさん:2013/07/27(土) 15:53:32.01
>>167
スレタイ嫁
Ruby本スレならその理屈でいいと思うが、ここは初心者スレだ
質問者のレベルに応じて解答するのが望ましいと思うわ
誰だって最初は初心者だったわけで、自分が質問者よりも「いくらか」レベルが高いからといって、
見下したようなレスを返すのは、いかがなものかと

たぶん>>154はPyhtonで書かれたコードをRubyで書き換えようと(移植しようと)考えたけど、
それ以前に「定義と呼び出しの違い(>>163)」が理解できていないレベルだった、たそれだけのこと
だから、返答ではそれを指摘して、後は質問者本人がどうするか考えればいい

スレが質問カキコで溢れきっていて、返答レスが追いつけない状態にあるのなら話は別で、
「本嫁」の一言で終わらすのもアリだとは思うがね
170デフォルトの名無しさん:2013/07/27(土) 16:59:13.87
>>169
木を教えても森はわからないよ。
ありえないほどレベル低すぎなんだから、まず入門書で勉強しろで正解でしょ。
171デフォルトの名無しさん:2013/07/27(土) 18:04:00.81
>>170
森がわかるようになるかは質問者の努力しだいだけど、
その可能性を切り捨てて、木を教えることさえ拒絶するのは、いかがなものかと

一昔前はともかく、最近は初めてのプログラミングをRubyで学ぶ人も増えている
熟練者であれば「ありえない」ほど些細なことでつまずくのが、そんな初心者だと思う
172デフォルトの名無しさん:2013/07/27(土) 18:16:11.73
ぶっちゃけ、自演だと思う。
173デフォルトの名無しさん:2013/07/27(土) 18:54:00.13
>>169
君に初心者を扱うのは無理だ
既にあらゆるものを忘れ去っていて、柔軟性に欠き、その実、初心者を本当は一番馬鹿にしている

質問者はPythonなど知らない
Mechanizeで検索した結果をくっつけただけだ
そして、MechanizeにはPythonのライブラリとRubyのライブラリがあることを知らず、
そのページがRubyを扱ったものかPythonを扱ったものかを判断する知識もなく、
なおかつコード片からRubyなのかどうかを判断することもできない
だから「Mechanizeのスクリプト」として混ぜ書きしている
174デフォルトの名無しさん:2013/07/27(土) 19:05:00.18
よかった・・・・・病気の子供はいなかったんだ
175デフォルトの名無しさん:2013/07/27(土) 19:09:32.13
マルチポストの何がいけないんですか
176デフォルトの名無しさん:2013/07/27(土) 20:50:26.32
クロスポストの出来るシステムならマルチは悪だが
クロスできない2chのシステムでは
マルチするしかない
177デフォルトの名無しさん:2013/07/27(土) 21:06:51.52
>>175
おなじ質問を何度もみるのはイヤ
178デフォルトの名無しさん:2013/07/27(土) 21:08:36.02
あつかましい

「24時間以上、待っていましたが回答が得られませんでしたので、ここで改めて質問します」
179デフォルトの名無しさん:2013/07/27(土) 21:10:09.93
適切かどうか別として、回答してやったのに、礼もいわないやつがいる
180デフォルトの名無しさん:2013/07/27(土) 21:12:57.71
>>171
なら初心者むけの回答しろ無能
181デフォルトの名無しさん:2013/07/27(土) 21:16:47.09
>>180
>>163で何かご不満でも?
182デフォルトの名無しさん:2013/07/27(土) 22:00:54.63
初心者むけの回答っつっても初心者の中でピンからキリまでいるんだし
ぼくがかんがえたさいきょうのしょしんしゃ 向けの回答じゃないからって回答者叩くのおかしくね

ちなみに>>163の回答はすごくいいと思います
183デフォルトの名無しさん:2013/07/27(土) 22:49:46.18
>>163
はいはい、スゲースゲー
184154:2013/07/28(日) 02:15:27.70
たくさんレスをしてくださってありがとうございます
これから1つずつ調べたり試したりしていこうと思います
プログラミングに関してはRubyが初めてで(Python挫折しました)常識程度も知らずにお手数かけてすみません
試したことに対して結果が出たら、また報告させてもらいます
185デフォルトの名無しさん:2013/07/28(日) 02:19:15.84
>>184
def使った定義命令や定義関数マスターしたら、ほぼどんな言語でも一気にプログラミングが楽になるし、幅が広がるよ
まあ頑張れ
186デフォルトの名無しさん:2013/07/28(日) 14:00:32.26
「定義命令」とか「定義関数」とか意味不明な語を使いこなすような人に言われてもな....
187らくだ:2013/07/28(日) 17:02:34.88
> MechanizeにはPythonのライブラリとRubyのライブラリがあることを知らず、
(´;ω;`)ブワッ
188デフォルトの名無しさん:2013/07/28(日) 23:41:16.40
結局「それはpythonのコードだpythonスレに行け」の一行レスが、もっとも無難な回答なのよね

> ・回答は1行以内で簡潔に。 例:man hoge
やっぱり、先輩の言っていたことは正しかったんだ…
189デフォルトの名無しさん:2013/07/29(月) 00:13:40.03
結局「あきらかにrubyのコードなのにpythonのコードに見えてしまうのは頭が悪い」の
一行レスが、もっとも無難な回答なのかな
190デフォルトの名無しさん:2013/07/29(月) 05:09:18.22
頭が悪いだのなんだの相手を非難して自分の承認欲求を満たしたいならば無難な回答ですね
191デフォルトの名無しさん:2013/07/30(火) 05:07:19.61
質問です

a=(1..5).to_a
a.permutation(5){|a,*arr|
p [a,arr]
}

[a,[b,c,d,e]] の形じゃなくて[[a,b],[c,d,e]]の形で表示させたいのですが
|a,*arr|のところって|単品、配列| じゃなくて |配列、配列|の形で受け取ることってできます?

今は
a.permutation(5){|a,b,*arr|
p [[a,b],arr]
}
で対応するつもりなのですが、もっと大きいサイズの場合にどう対応すればいいのか分からないので
192デフォルトの名無しさん:2013/07/30(火) 05:36:06.18
あー

a.permutation(n){*arr|
p [arr[0..n-m],arr[n-m..n]]
}

でいいのか
193デフォルトの名無しさん:2013/07/30(火) 07:23:37.40
[*1..5].permutation(5) {|xs| [xs.take(2), xs.drop(2)] }
194デフォルトの名無しさん:2013/07/31(水) 14:20:48.85
質問です

subjects = %w[apple orange banana] と needle = %w[ana ple] があった場合、
needle の部分文字列を含む配列要素だけsubjects から選択したいのですが (appleとbananaだけを得たい)

作業変数で力技でやる方法は分かるのですが、綺麗な方法はあったりしますでしょうか
195デフォルトの名無しさん:2013/07/31(水) 15:24:26.26
re = Regexp.union(needles)
subjects.select{|sbj| re =~ sbj }

subjects.select{|sbj| needles.any?{|ndl| sbj.include? ndl } }
196デフォルトの名無しさん:2013/07/31(水) 16:24:00.82
作業変数使っとるがな
197デフォルトの名無しさん:2013/07/31(水) 17:14:29.18
力技じゃないからよかろうもん
198デフォルトの名無しさん:2013/07/31(水) 17:32:23.94
>>197
おそらく>>196は、FPの関数構成子(あるいはコンビネータ)を応用した、
変数を一切使わないコードしか認めないと思われる

あるいは作業変数という単語について、
なにか別の意味が定義された異世界の住人なのかもしれない
199デフォルトの名無しさん:2013/07/31(水) 20:47:27.42
正規表現マッチということは ArrayやSetの&(intersection)は使えないかぁ。
200デフォルトの名無しさん:2013/08/01(木) 01:03:51.44
subjects.select {|word| needle.any? {|n| word.index(n) }}
201200:2013/08/01(木) 01:10:10.49
書いた奴より>>195の下側のコードでいいわ。投稿してから気づいた
コード読まずに3行つかってなんかやってるのかと思った
202デフォルトの名無しさん:2013/08/01(木) 09:43:52.79
質問です

a=[1,2,3]

file=File.open("p1.txt","w" )
file.write(a)
file.close

file=File.open("p1.txt","r")
b=file.read
file.close

p b  #=> "[1, 2, 3]"

配列をファイルに保存して取り出したらStringになってしまったんですけど
これって配列で取り出す方法ってありますか?
もしくは"[1, 2, 3]"を[1, 2, 3]に変換する方法ってあります?
203デフォルトの名無しさん:2013/08/01(木) 10:00:15.58
File#write/print/putsは引数オブジェクトを文字列とみなしてselfに出力する
File#readはselfから読み込んで文字列オブジェクトとして返す
ので、単にそういうふうに作られたメソッドだからというだけのお話だっていうかマニュアルは慎重に読もうきちんと書いてある

で、配列やHashはよく使われるので、「ファイルに"保存"して"再生"したい」という要望が多い
のでできたのがyamlだ
これは文字列だけが含まれている配列やHashをテキストファイルとして保存して(外部編集してから)読み込むことができる

Rubyのオブジェクトが含まれていて、それをまるっと保存再生したいという場合はpstoreを使う
これはRubyの扱うほぼ全てのオブジェクトをバイナリファイルとして保存して読み込むことができる

あと、RubyではFileオブジェクトのopenはブロックを使うのが普通
File#closeを書くことはまずない

File.open('test.txt','wb'){|f| f.puts(str) }
204デフォルトの名無しさん:2013/08/01(木) 10:12:14.65
>>203
丁寧な解説ありがとうございます
m(__)m
205デフォルトの名無しさん:2013/08/03(土) 15:40:35.97
質問です 

def o_uri(m)
m.times{
open("××××"){|f|a=f.gets.chomp}
}
end

def net(n)
n.times{
Net::HTTP.version_1_2
Net::HTTP.start('×××,80){|http| a=http.get('×××')}
}
end

webにアクセスして情報をとって来たいのですが上の2つの方法で速度を比較したところ
user system total real
o_uri: 0.109000 0.047000 0.156000 ( 14.224814)
net: 0.031000 0.015000 0.046000 ( 14.772845)

こんな感じになったのですがもっと早い方法ってありますか?
それとも回線速度とか他の要因によって決まるからプログラム自体ではどうしようもないのかな
206デフォルトの名無しさん:2013/08/03(土) 15:57:47.53
比較は

bm do |x|
x.report("o_uri:"){o_uri(50)}
x.report("net:"){net(50)}
end

こんな感じでやりました
207デフォルトの名無しさん:2013/08/03(土) 16:36:36.02
対ネットにしろ対ディスクにしろ、I/O処理で要する時間の大半は
(Rubyに限らず)I/O待ち時間が大半を占めるから、
性能改善のポイントは、いかに「無駄な待ち時間を減らすか」となる
具体的には、スレッドを使って並行に(=複数のI/O処理を同時に)実行するとか、
キャッシュを用いてI/O処理の実行回数そのものを減らすといった手法がある

>>205,206のようなベンチマークを目的にしたコードに、改善の余地は無い
208デフォルトの名無しさん:2013/08/03(土) 19:08:31.29
回答としてはちょっとずれてるかとは思う
「ノーマルなHTTPのやりとりの範囲内ではそれ以上は速くなりませんので我慢してください」が回答
ふつうのWebブラウザで画像OFFのJavaScriptオフで読み込んだのとそう大差ないと思うんだけども
209デフォルトの名無しさん:2013/08/03(土) 19:58:16.43
たいていのフェッチスクリプトはネットから取得する部分が極端に遅くなるんだよね
これは仕方ないと思うなあ
210デフォルトの名無しさん:2013/08/03(土) 20:22:41.20
パイプラインに汁
211デフォルトの名無しさん:2013/08/03(土) 20:47:49.44
>>207
「スレッド」という言葉は初耳だったので手元にある本を開いたところそれっぽいことが書いてあったのでやってみます
>>208
聞き方が悪かったみたいですいません
1回あたりの時間を短くできるかどうかを聞いてたのですが 
質問の本意としては「複数回アクセスする場合、かかる時間を短くできる方法があるかどうか」を聞きたかったんです
並列処理って概念を知らなかったので勝手に脳内で
 複数回アクセスする場合時間を短くできる方法があるかどうか=一回あたりの時間を短くできるかどうか
って読み替えて聞いてしまっていました

どちらも参考になったので助言ありがとうございました
212デフォルトの名無しさん:2013/08/03(土) 21:13:59.26
まったくどうでもいいけど、 Net::HTTP.version_1_2 は、
Ruby 1.6の頃に必要だったことが有る指定で、今は要らない。
213デフォルトの名無しさん:2013/08/03(土) 21:29:37.35
だーいぶ前にこのスレだかどっかでツッコミ入れたことがあるけど、「おまじない」なんて書くからだよな
「Ruby1.6上でRuby1.8の動作にする」「Ruby1.6用」とかひとことでもコメント書いておけば
ttp://www.google.co.jp/search?num=50&safe=off&q=%22Net%3A%3AHTTP.version_1_2%22+%E3%81%8A%E3%81%BE%E3%81%98%E3%81%AA%E3%81%84
214デフォルトの名無しさん:2013/08/03(土) 21:36:57.49
>>213
「Ruby おまじない」でぐぐると「utf-8」がサジェストされる
死んでしまえばいいのに

気持ちはわかるけども
215デフォルトの名無しさん:2013/08/03(土) 21:43:45.76
役割の理解はできたとしても、標準的なEmacs用の装飾つきのをなにも見ないで書ける気がしない
装飾はなくていいとわかったとしても、やっぱいまいち自信がない
というかそもそもあれの部分の本名を知ってる人はそんなにいないと思うというか正式名称あったっけ

説明のための検索できないから困るんだよねあれ
216デフォルトの名無しさん:2013/08/03(土) 21:45:20.81
はええええええええええええええええ

スレッドってやつを使ったら同じ50回アクセス条件で15秒→2.5秒になりました
217デフォルトの名無しさん:2013/08/03(土) 22:04:03.58
技術的に可能であるということと「やってもいいこと」との間には若干の開きがある
1秒間に何回もメインファイル群にアクセスがあれば普通はアク禁対象だ

一足飛びに警察に通報されたパターンもあるというか、あったというか、1秒1回でも逮捕されたな…
218デフォルトの名無しさん:2013/08/04(日) 05:00:15.77
三菱電機インフォメーションシステムズ
岡崎図書館
219デフォルトの名無しさん:2013/08/04(日) 16:45:28.59
>>251

magic comment?
220デフォルトの名無しさん:2013/08/04(日) 16:47:48.42
レス番手打ちはいかんね。 >>215
221デフォルトの名無しさん:2013/08/04(日) 17:16:59.03
>>218
10分に1アクセスくらいにしておかないと・・・・
222デフォルトの名無しさん:2013/08/05(月) 19:25:28.09
複数のハッシュに、

1 => 'aaaa' 
2 => 'bbbb'
3 => 'cccc'

といった要素が入ってます
ハッシュを結合してキーで昇順や降順にするにはどうすればいいでしょうか
223デフォルトの名無しさん:2013/08/05(月) 19:41:31.30
mergeしてsortしよう
224デフォルトの名無しさん:2013/08/05(月) 20:29:08.28
オーケー、Rubyにおけるオブジェクトとクラスとメソッドをおおざっぱに勉強しよう

・ Rubyではメソッドとif等の制御構造以外は基本すべてオブジェクトである
・ オブジェクトは自分を作り出したクラスを憶えている
・ オブジェクトにはメソッドを持たせることができる
・ オブジェクトが持つメソッドは特別に「自分自身」を操作対象にすることができる

よし勉強した。これよりわかることは

・ ハッシュはHashクラスのオブジェクトであり、Hashクラスのメソッドで操作できる

だ。
つまり、ハッシュをどうにかしたいのならHashクラスのメソッドを見てみるといい
この理屈はRubyの基本であり、探し物の基本
配列、ハッシュ、文字列はよく使うだろうから、それぞれArray、Hash、Stringのクラスの(インスタンス)メソッドは見ておくと捗る
絶対に損はしない
225デフォルトの名無しさん:2013/08/05(月) 22:17:38.66
>>222
まず最初に検討すべきなのは、複数のハッシュ間でキーが重複していた場合、
どのように処理するのが望ましいか、という事柄
望ましさの基準は一般論では決められないから、与えられた問題に応じて各自で考える

ここで、もし重複時に何らかの対処が必要であると考えたのなら、(>>223が指摘しているように)
各ハッシュを結合(Hash#merge)してからソート(1.8: Hash#sort, 1.9/2.0: Enumuerable#sort)する
もし重複したままソートすることが望ましいと考えたなら、
各ハッシュを配列へ変換(Hash#to_a)してからソート(上記と同じ)する
また、これら処理を複数のハッシュへ適用させるには、メソッド Enumerable#inject を使う

これ以上の説明は面倒なので、コードを書いてみた(Ruby1.8/1.9/2.0のいずれでも動く)
 http://play.island.ac/codepaste/code?id=1540

なお、このコードではキーが重複すると例外が発生するように書いてあるけど、
与えられた問題に応じて様々な処理に書き換えることができる
たとえば 1 => 'aaa' と 1 => 'AAA' が入力として与えられた時、以下のいずれかを出力できる
  1 => 'aaa' または 1 => 'AAA' または 1 => 'aaaAAA' または 1 => ['aaa', 'AAA'] ....etc
この具体的な方法については、Hash#merge を参照のこと
226225:2013/08/05(月) 23:25:17.29
一部訂正

X: 各ハッシュを配列へ変換(Hash#to_a)してからソート(上記と同じ)する

O: 各ハッシュを配列へ変換(Hash#to_a)し、結合(Array#+)してから
 ソート(1.8: Array#sort, 1.9/2.0: 上記と同じ)する
227デフォルトの名無しさん:2013/08/05(月) 23:55:38.98
>>223-226
ありがとうございました
やってみます
228デフォルトの名無しさん:2013/08/07(水) 16:12:19.32
class Hage
def fuga
end
foo do
end
end


この場合のfooってのは、クラス内のローカル変数で、do endブロックのポインタなのでしょうか?
229デフォルトの名無しさん:2013/08/07(水) 17:27:46.05
>>228
ブロック引数付きのクラスメソッド呼び出しだと思う
 irb(main):001:0> class Hage
 irb(main):002:1> def self.foo; puts "FOO"; end
 irb(main):003:1> foo
 irb(main):004:1> end
 FOO
 => nil

クラスHageは他のクラスを継承したりモジュールをエクステンドしていないかい?
 class Hage < OtherClass
  extend OtherModule
 end
もしそうであれば、その継承したクラスやエクステンドした
モジュールで定義されているクラスメソッドになる

あと、別々のファイルで同じクラスHageを定義し、一方で定義されたメソッドを
他方から呼び出すこともできるから、ロード(require)のまわりも確認したほうがいいだろう

それでも見つからなければ、動的にメソッドを定義する、いわゆるメタプログラミングによって
定義されたクラスメソッドかもしれない
230デフォルトの名無しさん:2013/08/07(水) 17:36:35.31
コンビニ業界初のハッカソン「HackaLawson」、ローソンが19・24・25日に開催 (2013/8/7 15:25)
http://internet.watch.impress.co.jp/docs/news/20130807_610713.html

 株式会社ローソンは6日、コンビニ業界では初めてだというハッカソン
「HackaLawson(ハッカローソン)2013」を開催すると発表した。

 まず8月19日にゲートシティ大崎イーストタワー(東京都品川区)のローソン本社でアイデアソンを実施。
続いて24・25日に、渋谷ヒカリエ(東京都渋谷区)でハッカソンを実施する。
現在、キャンペーンサイトにおいて参加登録を受け付けている。定員は、先着順で100名程度。

 ローソンはHackaLawsonの開催にあわせ、ローソン店舗の位置情報データを
「オープンストリートマップ」に提供する。
このほか、ローソンがアカウントを持つFacebookやTwitterなどのAPIや、
ボーカロイド「あきこロイドちゃん」の3Dデータや音声などが提供され、
ハッカソンの参加者はこれらを活用したアプリのアイデアや開発技術を競い合う。

 作品は審査の上、「ローソン賞」(からあげクン1年分)などの賞が選出されるほか、
最優秀作品はローソンと共同でのサービス化が検討されるという。


キャンペーンサイト
http://www.lawson.co.jp/campaign/static/hackalawson/
231デフォルトの名無しさん:2013/08/07(水) 17:38:56.09
からあげクン1年分って356個なのか?
嫌がらせか?
232デフォルトの名無しさん:2013/08/07(水) 17:45:26.50
相撲取りか
233デフォルトの名無しさん:2013/08/07(水) 18:18:48.31
>>231
お盆(3個)と正月(6個)の分が引いてあるんじゃないのか?
234デフォルトの名無しさん:2013/08/07(水) 19:43:05.94
>>229
ありがとうございました。
ソースはこれです。

uid do
  request.params[options.uid_field.to_s]
end

info do
  options.fields.inject({}) do |hash, field|
  hash[field] = request.params[field]
  hash
  end
end

モジュールのソースはこれです。
https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb


特に定義がないメソッドでも、引数としてブロックを渡せるんですね。
235デフォルトの名無しさん:2013/08/07(水) 21:32:15.69
>>234

uidやinfoの定義は91行目からの文字列のclass_evalだな。
&block というのが受け取るブロック。

ブロックを付けて呼び出す
→対応する名前のインスタンス変数にそれをProcインスタンスとして保存する
→と同時にメソッドの返値ともなる。

ブロックを付けずに呼び出す
→保存されているはずの対応インスタンス変数(=Procインスタンス)を返すだけ。
236229:2013/08/07(水) 21:42:01.66
>>234
> 特に定義がないメソッドでも、引数としてブロックを渡せるんですね。

いや、ブロック引数を伴うメソッドは、リンク先ソース(strategy.rb)の91..102行目で定義されている
この箇所は、ソースがロードされモジュールClassMethodsが定義される、
その時に(ただ1度だけ)実行され、以下のメソッドを動的に定義している:
 uid(&block), info(&block), extra(&block), credentials(&block),
 uid_stack(context), info_stack(context), extra_stack(context), credentials_stack(context)

これは>>229の最後に書いたメタプログラミングによる動的なメソッド定義の具体例になる

一般的な(=静的な)メソッド定義であれば、def uid(&block) ...... end とコードを書くけど、
メソッド名だけが違う定義がいくつも(uid info extra credentials)続いて面倒になるので、
こういったメタプログラミングで短く書いているのだと思う
237デフォルトの名無しさん:2013/08/07(水) 23:55:02.94
>>235-236
ありがとうございました
勉強になりました

http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcall.html#block
238デフォルトの名無しさん:2013/08/09(金) 20:12:38.22
Windows7にRubyInstaller最新版をインストールしたところ
irbでキーボードから入力した文字が表示されるのに
時間がかかる場合が頻発します。(数秒〜数十秒)
今まではこのようなことはありませんでした。
Nortonが悪さしているかと思い無効化しても解決しませんでした。
解決方法がわかる方、いらっしゃいましたらご教示ください。
239デフォルトの名無しさん:2013/08/09(金) 20:57:38.56
OS再インストール
240デフォルトの名無しさん:2013/08/09(金) 21:36:56.95
>>238
Linux install
241デフォルトの名無しさん:2013/08/09(金) 22:50:33.39
この話題(RubyInstallerが更新されるたび)定期的に出るNE!
242デフォルトの名無しさん:2013/08/10(土) 00:06:22.61
とりあえず irb --noreadline で起動すれば直るはず
適当にirbrcにでも書いとけ
Readlineが必要になったときどうすればいいのかは知らん
マシなReadlineを別途インストールすればいいんだろうけど
243デフォルトの名無しさん:2013/08/10(土) 01:23:44.58
サンクス。やってみる。
夏休み明けてからだから随分先になるけど
244デフォルトの名無しさん:2013/08/20(火) 15:41:08.57
Rubyで以下のループ処理を書きたいんですが、どんな風に書けばいいのでしょうか

p=-1;
delta=10

while (p < delta) {

for (int k=-p; k<=delta-1; ++k) {
fp[k] = うんたら;
fp[k+1] = かんたら;

++p;
}

forループ内部はあまり重要ではないですが、forループのインデックスは必ず使います。
whileが使えること、++pはp+=1で代用できることは分かったのですが、インデックスつきループがわかりません
uptoは<なのか≦なのかもいまいち分からないんです
245デフォルトの名無しさん:2013/08/20(火) 16:32:53.11
fp.each.with_index|
246デフォルトの名無しさん:2013/08/20(火) 16:33:45.23
答を直接聞くよりも、自分でループを試して憶えたほうがいい
変更も容易だし、なによりこれからの効率が違う

Rubyにはブロックにも引数が渡せ、ブロック作成またはその回のループ開始時に適当な値が代入される

10.times do |x|
p x
end

1.upto(8) do |x|
p x
end

ところでその++pの位置そこでいっすか
247デフォルトの名無しさん:2013/08/20(火) 21:07:28.25
++p の位置に意味があるのか?
for (int k=-p; k<=delta-1; ++k, ++p)
と書く習慣がないだけかも
248デフォルトの名無しさん:2013/08/20(火) 22:21:29.23
Rubyって標準パッケージにZIPファイルの圧縮・解凍ユーティリティ入ってないの?
249デフォルトの名無しさん:2013/08/20(火) 22:32:55.80
いわゆる「普通」のzip/unzipはないねえ
250244:2013/08/20(火) 22:53:28.96
すると、

forの前にk = -pとか書いたり

break if k <= deltaとか書いたり

しないといけないんですね


Rubyって意外に不便ですね
251デフォルトの名無しさん:2013/08/20(火) 23:05:35.70
そこでその処理をしなければならないのなら、そこにその処理を書かなければいけない
252デフォルトの名無しさん:2013/08/20(火) 23:08:31.74
こまるねェ・・・
gem使えると思ったら大間違いですョ・・・
253デフォルトの名無しさん:2013/08/21(水) 00:15:42.94
なにがしたいのかしらんけど糞すぎて読めないレベルのコードだ
254デフォルトの名無しさん:2013/08/21(水) 09:06:29.20
日本語の流れで説明してもらったほうがよかったな
各行の処理(正確には、各行の前後にあるかもしれない処理)のせいでこちらからなにもできん

まあ、ループの書き方くらいはきちんと自分で理解して書いて欲しい
下手するとコピペで書いていただけでループや繰り返しの概念がないようにも見受けられる
255デフォルトの名無しさん:2013/08/21(水) 10:57:46.32
PerlとPythonの間にRubyを入れました
だからRubyは少しだけ中途半端な言語
256デフォルトの名無しさん:2013/08/21(水) 20:22:21.87
>>250
a..bてのがある。
点がふたつ。これは、他のスクリプト言語にもある。

a = -p
b = delta - 1
for k in a..b do
処理
end
257デフォルトの名無しさん:2013/08/21(水) 23:41:41.30
多重ループ回避のために

catch :out do


end


という処理を書いたら、catch句の中にはいってくれないのはどうしてですか?
258デフォルトの名無しさん:2013/08/22(木) 02:12:41.17
rubyの例外構文がtry-catchじゃないから
259デフォルトの名無しさん:2013/08/22(木) 08:36:57.70
>>254
知りたいのはループ方法だけなんです

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

でもその構文でインクリメントを2にするには、next if...とか使うしかないのでしょうか?
260デフォルトの名無しさん:2013/08/22(木) 09:25:14.82
>知りたいのはループ方法だけなんです
違うと思う
たぶん>>254の見立てが正しそうだ
261デフォルトの名無しさん:2013/08/22(木) 12:31:20.26
>>259
(a..b).step(2)

ググレ
262デフォルトの名無しさん:2013/08/22(木) 14:06:04.01
a=[1,1,1,2,3,4]
b=[1,1,2]
に対して a-bを実行すると[3,4]が返ってくるのですが
[1,3,4]が返ってくるようにするにはどうしたらいいですか?
263デフォルトの名無しさん:2013/08/22(木) 15:00:24.71
質問が多義的
いまは高校数学で、ベクトル、行列、群論とかやってないのかな
264デフォルトの名無しさん:2013/08/22(木) 15:06:40.33
% gem install multiset
% irb
> require 'multiset'
> a = Multiset.new([1,1,1,2,3,4])
=> #<Multiset:#3 1, #1 2, #1 3, #1 4>
> b = Multiset.new([1,1,2])
=> #<Multiset:#2 1, #1 2>
> a - b
=> #<Multiset:#1 1, #1 3, #1 4>
irb(main):006:0> (a - b).to_a
=> [1, 3, 4]

うおお
265デフォルトの名無しさん:2013/08/22(木) 15:10:11.71
>>263
高校数学で群論やってたのっていつの時代だよ?
266デフォルトの名無しさん:2013/08/22(木) 15:14:12.83
確かに、
a=[1,1,1,2,3,4]
b=[1,1,2]
のとき、
a+b => [1,1,1,2,3,4,1,1,2]
なのに
a-b => [3,4]
というのは直感と反してるかもな。
267デフォルトの名無しさん:2013/08/22(木) 15:16:16.46
a+b-b => [3,4]
a+(b-b) => [1,1,1,2,3,4]
268デフォルトの名無しさん:2013/08/22(木) 15:16:37.14
>>264
ありがとうございます

初心者なのでgemってよくわからないんですが
通常のarrayクラスの演算では求めるような操作を行うことはできない'multiset'モジュール?を使え
という理解でよろしいでしょうか?
269デフォルトの名無しさん:2013/08/22(木) 15:27:09.32
>>268
ググるくらいしろ
270デフォルトの名無しさん:2013/08/22(木) 18:05:46.78
271デフォルトの名無しさん:2013/08/22(木) 18:20:12.00
>>270
[1,1,1,2,3,4].diff[1,2,1] => ?
272デフォルトの名無しさん:2013/08/22(木) 18:56:39.65
>>271
いつものアレだから無視しろ
273デフォルトの名無しさん:2013/08/23(金) 21:19:27.26
配列から特定のインデックスの値を複数取り出す場合、この書き方以外に何かありますか?

a = [1, 2 ,3]
a.select.with_index(0) {|val, i| i == 0 || i == 2 }
#=> [1, 3]
274デフォルトの名無しさん:2013/08/23(金) 21:19:55.88
s = Time.now
Time.now - s

これで求めた時刻って、単位はなんなのでしょうか?
275デフォルトの名無しさん:2013/08/23(金) 21:22:52.00
276デフォルトの名無しさん:2013/08/23(金) 22:30:28.59
>>273
Array#values_at
277デフォルトの名無しさん:2013/08/23(金) 22:38:39.16
>>271
[1,1,1,2,3,4].diff [1,2,1] => [1, 1, 3, 4]

また、>>271を更新しました
http://play.island.ac/codepaste/code?id=1552

更新版では、multisetパッケージ(>>264)と同様にメソッド Array#- をオーバライドさせました
[1,1,1,2,3,4] - [1,2,1] => [1, 1, 3, 4]

なお、この実装は(コードを見れば一目で分かるように)「配列の差」を単純に表現しています
もし質問者(>>262)が必要としているのが「真の多重集合」であるなら multsetを使うべきだし、
「単なる配列の差」でかまわないならばこちらを選んでもいいのではないかと思います


>>273
a.select.with_index { |_, i| [0, 2].include?(i) }
278デフォルトの名無しさん:2013/08/23(金) 23:38:17.71
>>275
ありがとうございました

秒なんですかね?
なんか1秒ぐらいかかってる処理が0.02秒で終わるのですが
279デフォルトの名無しさん:2013/08/25(日) 00:05:48.11
function method() {
var func = function(i) { //すっげー長い処理 }

func(1);
func(255);
func(1000);
}

こういう処理をRubyで書きたいんですが方法が分かりません。

def method

func = lamda { |k|

}

end


これはなんか違う気がします
280デフォルトの名無しさん:2013/08/25(日) 00:13:12.64
気がするのは勝手だけど、メソッド定義内で消尽するサブルーチンを書きたいのならlamnda/procが動作的にも意味的にも妥当
なぜlambdaでは駄目だと思うのか120文字程度で言えるもんなら言ってみろ(15点)
281デフォルトの名無しさん:2013/08/25(日) 00:29:21.70
func = lamda do |k|

end

func(10)


これで普通に上のJavaScriptと同じように動くのですか?
282デフォルトの名無しさん:2013/08/25(日) 01:04:49.23
func = lambda {|k| // 処理 }


func.call(10)


こうでした
Rubyって短く書くこと推奨なのにcall()が必要なんですね
283デフォルトの名無しさん:2013/08/25(日) 01:28:55.45
func.(10) とか func[10] とか func === 10 とか
好きなの使えばいいと思うよ
284デフォルトの名無しさん:2013/08/25(日) 05:41:34.18
>Rubyって短く書くこと推奨なのに
そんな推奨はない
285デフォルトの名無しさん:2013/08/25(日) 05:53:20.09
まあrubyのダサい所だな
286デフォルトの名無しさん:2013/08/25(日) 05:58:41.43
ruby2.0で無理やりにでもfunc(10)と書けるようにして欲しかった
287デフォルトの名無しさん:2013/08/25(日) 06:43:36.99
()がついたら変数参照ではなく常にメソッド呼び出し、というルールがあるからどうしようもない
Procオブジェクトという態を捨てるわけにもいかないし
メソッド化するという機能があればいいんだろうけど
288デフォルトの名無しさん:2013/08/25(日) 23:12:50.01
Cでの
for ( i=0 ; c = getc&copy; != EOF ; i++)
{
ほにゃ
]

c = STDIN.getc
while ( c != nil)
 ほにゃ
c= STDIN.getc
end

って面倒くさい書き方になっちゃうんですけど、もっと上手いやり方ないですか?
289デフォルトの名無しさん:2013/08/25(日) 23:36:39.77
cでもふつう while ( (c = getc()) != EOF) ... だと思うが…
290デフォルトの名無しさん:2013/08/25(日) 23:38:49.32
io.each_byte do |c|
end

じゃね?
291デフォルトの名無しさん:2013/08/26(月) 02:05:43.13
日本語の流れで説明してもらったほうがよかったな
292デフォルトの名無しさん:2013/08/26(月) 07:52:17.75
そんなC初めて見たな。
293デフォルトの名無しさん:2013/08/26(月) 17:18:36.62
>>288
I/Oの反復処理を書く方法はいくつかあって(.... ここで「ほにゃ」を「英大文字変換」と仮定):
(1) 反復構文 until .... end を使う -- Rubyを使い始めたばかりの人向け
  until (c = STDIN.getc).nil?
    STDOUT.putc c.upcase
  end
(2) イテレータ IO#each_char を使う(>>290) -- フツウにRubyらしいやりかた
  STDIN.each_char do |c|
    STDOUT.putc c.upcase
  end
(3) (2) + 遅延評価 Enumuable#lazy を使う -- イマドキ(?)のRubyらしいやりかた(Ruby 2.0から)
  STDIN.each_char.lazy.map { |c|
    c.upcase
  }.each do |c|
    STDOUT.putc c
  end

 ・Rubyist Magazine - 無限リストを map 可能にする Enumerable#lazy
     http://magazine.rubyist.net/?0041-200Special-lazy
 ・Enumerable lazy について
     http://www.slideshare.net/cuzic/enumerable-lazy
294デフォルトの名無しさん:2013/08/27(火) 02:25:26.52
初心者だがルビーからしようとしたらよくわからなかったから
html→css→php→rubyの順にしようと思うけどこれでいいと思う?
295デフォルトの名無しさん:2013/08/27(火) 03:47:40.94
いいとおもわない
296デフォルトの名無しさん:2013/08/27(火) 04:04:07.50
今html全部勉強し終わってcssに移ろうとしたとこに…
どんな順番がいいと思う?
297デフォルトの名無しさん:2013/08/27(火) 04:07:01.49
出力・操作したいものがHTMLやCSSやJavascript(を含んだもの)であって、
そしてなおかつそれの知識がないのだとしたら、
そりゃHTMLやCSSやJavascriptの勉強から始め「なければならない」と思う
極める必要などさらさらないが、区別分別できるくらいの知識は必要
298デフォルトの名無しさん:2013/08/27(火) 04:16:12.76
なるほどなー
jsもいるのか
ありがとーRuby始められるくらいのレベルになったらまたここくるわ
299デフォルトの名無しさん:2013/08/27(火) 13:11:03.30
ブログ、SNS、CMS、Twitter とかがなかったとき
1. 情報を発信してー
2. HTMLを勉強する
3. 見栄えを良くするために CSS を勉強する
4. 細工したくて JavaScript 勉強する
5. 動的にしたくて CGI を勉強する
CGIでどんな言語を選択するかのが分岐点になる。
2000年はPerlの一強
300デフォルトの名無しさん:2013/08/27(火) 13:21:21.29
とりあえずやれそうなものからドンドンやれば良いんじゃないかな

初心者が「やれそう!」と思うようなものは簡単で基礎的なものだろうから
後々無駄になることは多分おそらくあまりないんじゃないかなと思わなくもない
301デフォルトの名無しさん:2013/08/27(火) 14:09:01.26
>>276,277
遅くなりましたがありがとうございました!
302デフォルトの名無しさん:2013/08/27(火) 14:17:23.71
>>294
計算するだけのアプリとかなら、いきなりrubyでいいだろ。
303デフォルトの名無しさん:2013/08/27(火) 18:52:03.80
W
304デフォルトの名無しさん:2013/08/27(火) 19:31:53.16
>>302
これは義務教育で算数や数学を学んでいて計算ができる前提だな。
305デフォルトの名無しさん:2013/08/27(火) 20:08:28.12
計算なら R がいいよ
306デフォルトの名無しさん:2013/08/27(火) 20:26:08.61
>>293
サンクス
勉強してみます
307デフォルトの名無しさん:2013/08/28(水) 16:21:32.12
てすt
308デフォルトの名無しさん:2013/08/28(水) 16:25:55.45
VirtualBox上のUbuntuにソースコードからRubyを入れたいのですが
configureからmake installまで1時間30分ぐらいかかりました
ホストOSがWindowsのCeleronの1コアのCPUです。
みなさんの環境ではどのくらいの時間でコンパイルできるのでしょうか?
20〜30分切れるというかた,スペック教えてください
309デフォルトの名無しさん:2013/08/28(水) 17:28:54.40
>>308
新しい一番安いmacmini(59,800円)でやってみた。
Parallels上のCentOS6(Core4個割り当て)
ruby-2.0.0-p247

# time ./configure
real 0m16.055s
user 0m7.716s
sys 0m3.865s

# time make -j
real 3m12.424s
user 4m30.528s
sys 0m13.983s
(うち、ドキュメント生成 127.1s)
310309:2013/08/28(水) 17:31:27.61
あ、ごめん嘘ついた。
79,800円の方だった。

2.3GHzクアッドコアIntel Core i7(Turbo Boost使用時最大3.3GHz)、6MB三次キャッシュ
311デフォルトの名無しさん:2013/08/28(水) 17:51:46.74
え、そんなに速いんですか
やっぱり買い替えます
ありがとうございます
312デフォルトの名無しさん:2013/08/28(水) 18:02:50.87
コアもCPUも1個しかないならVirtualBoxでLinuxで開発するのはやめといたほうがいいかも
313デフォルトの名無しさん:2013/08/28(水) 18:17:22.19
最近プログラム初めて勉強がてらいろんな人のブログ回ってるんだけど
Linux?ってやつで開発するとどんなメリットがあるの?
314デフォルトの名無しさん:2013/08/28(水) 18:18:29.54
ごめんぐぐったら普通にいろんな回答でてきた
無視して
315デフォルトの名無しさん:2013/08/28(水) 18:19:45.76
windowsで動かないgemがあるからlinux
316デフォルトの名無しさん:2013/08/28(水) 20:21:20.43
>>306
>>239のサンプルコードを....
(1) 反復構文 until....end を使う
  http://play.island.ac/codepaste/code?id=27
長い(1.2Kstep)けど、見るのは1262行から始めるメイン処理の箇所だけ
変数 seq_num と env をループの中でゴリゴリと(=破壊的代入で)更新するフツーなスタイル

(2) イテレータ IO#each_line を使う
  http://play.island.ac/codepaste/code?id=1553
変数 seq_num を更新する代わりにメソッド Enumerable#with_index を、そして
変数 env を更新する代わりにメソッド Enumerable#inject をチェーン(繋ぐ)ことで
(1)と同じ反復処理を実現している

なお、(3)の遅延メソッド Enumuerable#lazy は無くても、ループが止まることは無く普通に動く
メソッドチェーンの途中で map や select 等を使うケースでは必要になるみたいだけど、
どんな条件で lazy が要(あるいは不要)か?に対する明確な答えは分からなかった....
317316:2013/08/28(水) 20:22:38.86
2行目のアンカミスを訂正
X: >>239
O: >>293
318デフォルトの名無しさん:2013/08/28(水) 20:46:57.79
>>313
開発ツールが豊富で簡単で安定してる。使い方によるだろうから、自分にあった環境使えばいいよ。
319デフォルトの名無しさん:2013/08/29(木) 00:15:02.56
nokogiriをBundlerでインストールすると、nokogiriとmini_portileというGemがインストールされました。

nokogiriのGemファイルには他にもminitestやhoeといったGemが書かれているのですが、nokogiriとmini_portileしかインストールされないのは何故でしょうか?
320デフォルトの名無しさん:2013/08/29(木) 00:54:15.62
こまけぇことは
321デフォルトの名無しさん:2013/08/29(木) 00:54:37.18
開発時に必要なものと実行時に必要なものは違うから
322デフォルトの名無しさん:2013/08/29(木) 01:23:52.62
何ページかあるリストにアイテムが複数あるデータがあって、それを必要に応じて外部から持ってくるEnumerableなクラスを作ろうとしています。
適当にeachを実装することでそれはできました。このような実装です
def each
items_read_position = -1
while get_next
(items_read_position+1).upto(@items.length-1) do |i|
yield @items[i]
end
items_read_position = @items.length-1
end
end
@itemsはアイテムが入った配列で、get_nextは取得した結果を@itemsにArray#<<し、取得終了時にfalse、それ以外はtrueを返すというメソッドです。

そこまでは出来たのですが、後々容易にアイテムを識別したり、リストの重複を防ぐために、Itemの中にあるキーを用いてhashにしようと考えました。
色々調べて、Hashの順序は保証されることがわかったので、Enumerator#nextというのが使えるかなと思いましたが、
nextの実行中に元オブジェクトの変更は出来ませんでした。
何かいい手段があれば教えてください。
323デフォルトの名無しさん:2013/08/29(木) 01:24:41.51
>>321
Gemfileではどのgemもgroupに:developmentと:testが指定されているのですが、開発時に必要なものと実行時に必要なものが指定されているのは別のファイルでしょうか?
324デフォルトの名無しさん:2013/08/29(木) 06:05:53.85
外部イテレータを使え、というのが回答ではあるんだが、これめんどくさいんだよな
325デフォルトの名無しさん:2013/08/29(木) 07:58:26.29
>>323

Nokogiriって、 gemspecファイルないんだな。

Gem::Specification.find {|spec| spec.name == 'nokogiri'}.dependencies.map(&:type)
を見て。
326デフォルトの名無しさん:2013/08/29(木) 08:00:23.17
あと、開発時ってのは、nokogiri gem の開発時ってことな。
327デフォルトの名無しさん:2013/08/29(木) 09:58:45.39
配列をキャッシュにする方法ありますか?
ジェネリクスが無効化される方法でお願いします。
328デフォルトの名無しさん:2013/08/29(木) 15:50:19.10
rubyからtor操作する方法って何かありませんか?(*・ω・*)
329デフォルトの名無しさん:2013/08/29(木) 16:00:47.99
犯罪目的ですか
330デフォルトの名無しさん:2013/08/29(木) 21:08:21.85
Rubyをメインで使っている人に質問です
オブジェクト指向を学ぶのにRubyは適していますか?
331デフォルトの名無しさん:2013/08/29(木) 22:37:51.20
一般的なオブジェクト指向というのはJavaのことです
オブジェクト指向を学びたいならJavaを学んでください
332デフォルトの名無しさん:2013/08/29(木) 23:47:14.85
>>325
Hoe使ってRakeファイルの中でgemspec作って依存性管理してるのかなという結論に至りました。
ありがとうございます!
333デフォルトの名無しさん:2013/08/30(金) 01:49:34.82
巨大な配列があります(数百行が平均)。
配列の中身はすべてハッシュで{:type=>"", text:=>""}という中身です。
:typeは、A, B, Cの3種類だけです。

今この巨大配列を
α:typeがAとCの配列
β:typeがBとCの配列
に分割したうえで、
αは、:typeがAの要素と:typeがAの要素からインデックスが±3以内の:typeがCの要素のみ
βは、:typeがBの要素と:typeがBの要素からインデックスが±3以内の:typeがCの要素のみ
にしたいんです。


alpha_tmp = big.dup.delete_if do |ele| if ele[:type] == B end
beta_tmp = big.dup.delete_if do |ele| if ele[:type] == A end

alpha = []
is_within = 0
alpha.tmp.each.do |ele, index|
  if ele == A
    alpha << A
    is_within = index
  else
    is_within -4 < index && index < is_within + 4
    alpha << A
end

alpha = alpha.uniq



書いてみましたが・・・なんか糞です。・・・もっと上手い書き方はないものでしょうか?
334デフォルトの名無しさん:2013/08/30(金) 06:03:47.61
普通に受け皿配列用意してデカい配列のeach内で振り分ければよろしがな
caseが使えるはず

インデックスは要素位置だとして、配列arrの2要素目から7要素目までの部分配列はarr[2..7]で得られる
プラマイ3がよくわかんが、xプラマイ3が欲しいならarr[(x-3)..(x+3)]でいいんじゃないのん
irb> ["a", "b", "c", "d", "e", "f", "g", "h", "i"][2..5]
=> ["c", "d", "e", "f"]
335デフォルトの名無しさん:2013/08/30(金) 07:06:46.24
>>333
AとCの配列、BとCの配列を作り、六つ以上連続するCがあったら
前後の3つを残して中側のCを削除する

あと杞憂かも知れんがAB分割する前と後の±3では結果が異なってくるぞ
[ABBBC]なら
分割前はalpha=[A],beta=[BBBC]
分割後はalpha=[AC],beta=[BBBC]
336デフォルトの名無しさん:2013/08/30(金) 08:23:26.65
>>334-335
ありがとうございます。
助かりました。

AB分割後の配列の±3で問題ないです。
337デフォルトの名無しさん:2013/08/30(金) 08:44:53.92
プログラミング自体の初心者で数独ソルバーを作っているのですが、
9x9の問題を縦・横・3x3のブロックの3つの2次元配列に代入するのに
以下のものよりベターな方法ありませんか?

def set
for x in 0...9
for y in 0...9
@x[x][y] = @sheet[x][y]
@y[x][y] = @sheet[y][x]
@z[x][y] = @sheet[x / 3 * 3 + y / 3][x % 3 * 3 + y % 3]
end
end
end
338デフォルトの名無しさん:2013/08/30(金) 09:30:50.67
まずそんなこと気にしないのがベター
339デフォルトの名無しさん:2013/08/30(金) 16:11:26.03
(*・ω・*)できた
340デフォルトの名無しさん:2013/08/30(金) 19:04:20.95
>六つ以上連続するCがあったら前後の3つを残して中側のCを削除する
をどう書くのか考えてみた
簡略化して要素はHashの代わりにSymbolで :a,:b,:c
big = 10000.times.map{[:a,:b,:c].sample} #ダミーデータでっちあげ
10.times{ big[rand(big.size),0] = [:c]*(rand(10)+7)} #数箇所に:cの連続するデータを挿入

alpha_tmp = big.reject{|e| e == :b}
beta_tmp = big.reject{|e| e == :a}

alpha = ([:c]*3 + alpha_tmp + [:c]*3).each_cons(7).reject{|s| not s.find{|e| e == :a}}.map{|s| s[3]}
# e のとこは e[:type] の代わりのイメージで
bigが数百メガ超とかならlazy使ったほうがいいのかな
341デフォルトの名無しさん:2013/09/01(日) 01:12:22.21
array = ["a", "b", "c", "\r", "\n", "d", "e", "f", "\r", "\n", "g"]

temp = []
start = 0
array.each_with_index do |e, i|
if e == "\r"
temp << array.slice(start..i)
start = i + 1
end
end


なんでgが切り出されないのでしょうか?
342デフォルトの名無しさん:2013/09/01(日) 01:50:12.54
期待する出力を具体的に述べたまえ
343デフォルトの名無しさん:2013/09/01(日) 01:57:45.89
"abc\r\ndef\r\ng".split("\r\n")
のようなことをしたいのだろうか。。。
344デフォルトの名無しさん:2013/09/01(日) 02:18:47.26
やりたいことを説明してもらったほうがいいような気がする
splitとかscanを使うと平易に書けるかもしれない
345デフォルトの名無しさん:2013/09/01(日) 06:12:15.59
文字入力をeach_charで受けるとかアホなこと書いた人がいるから…

Rubyでは標準入力/ファイル読み混みは行単位または文字列全体として受け取るのが一般的
346デフォルトの名無しさん:2013/09/01(日) 10:21:03.93
RubyのI/OはUNIXに由来するバイトストリーム(バイト列)が基本で
そのバイトストリームを扱う様々なメソッドが提供されている
・バイトを単位として扱う -- IO#each_byte
・文字を単位として扱う -- IO#each_char
・行を単位として扱う -- IO#each_line
・ストリーム全体を単位として扱う -- IO.read

そして、I/O処理における「反復の制御方法(>>293,316,317)」と
「I/Oのデータ単位」は直交する概念だから、ごっちゃにせずそれらの組合せとして考え、
解決したい問題に対して最適な方法(組合せ)を選ぶ必要がある


で、それはさておき、>>316で紹介した(行をI/Oの単位とする)サンプルコードについて、
irb のようにカーソルキーで履歴/行編集ができるよう改造してみた
  http://play.island.ac/codepaste/code?id=1554

標準ライブラリのreadlineとRuby1.9で導入されたEnumeratorクラスの応用になるけど、
Enumuratorクラスはなかなか面白い
347デフォルトの名無しさん:2013/09/01(日) 11:04:03.73
>>342-344
temp = [ ["a", "b", "c", "\r"], ["\n", "d", "e", "f", "\r"], ["\n", "g"]]


これを期待しているんです。
348デフォルトの名無しさん:2013/09/01(日) 11:05:22.42
a = 12345

下2桁45を取得方法をおしえて
349デフォルトの名無しさん:2013/09/01(日) 11:09:52.34
>>348
a.to_s[-2..-1]
350デフォルトの名無しさん:2013/09/01(日) 11:12:05.34
Rubyはどういう思想で設計されてるんえすか?
たとえば変換するメソッドとかは頭に必ずto_って付く縛りになっているものでしょうか?
351デフォルトの名無しさん:2013/09/01(日) 11:18:27.75
>>348
a % 100
でいいんじゃね?
352デフォルトの名無しさん:2013/09/01(日) 11:24:28.53
>>347

a.join.split(/(.*?¥r)/m).reject(&:empty?).map(&:chars)

ruby 2.0 未満では String#chars が Enumerable を返すので、
さらに .map(&:to_a) が欲しいかもしれないが、
Enumerable のままでも十分かもしれない。
353デフォルトの名無しさん:2013/09/01(日) 11:25:28.22
あ、正規表現の m フラグいらんかった。
消しわすれ。
354デフォルトの名無しさん:2013/09/01(日) 11:26:19.13
と思ったがやっぱりいるわ。たびたび済まん。
お茶飲んで落ち着く。
355デフォルトの名無しさん:2013/09/01(日) 11:30:49.32
>>347
元のソースを尊重するとすれば、最後の行に
temp << array.slice(start..-1)
を追加すればいいだけ。
tempは"\r"発見時にしか内容が更新されないから、each_with_indexを抜けたあとに、arrayの余り部分を処理させる必要がある。
356デフォルトの名無しさん:2013/09/01(日) 11:32:59.62
Rubyの公式マニュアルを修正したり追加して配りたいんですが
これってgithubで公開されてないんですか?
357デフォルトの名無しさん:2013/09/01(日) 11:38:46.35
>>347
array.chunk {|e| e == "\r" }.map(&:last).each_slice(2).map {|a| a.inject(&:+) }

なんか冗長な気がするが動く
358デフォルトの名無しさん:2013/09/01(日) 11:45:10.78
>>347
かなり冗長だけど、injectだけで書いてみた

http://play.island.ac/codepaste/code?id=1555
359デフォルトの名無しさん:2013/09/01(日) 11:49:13.43
>>356

github.com/rurema
360デフォルトの名無しさん:2013/09/01(日) 13:32:14.02
array.join.lines("\r").map(&:chars)
361デフォルトの名無しさん:2013/09/01(日) 13:38:59.99
なるほど。linesは行末文字を取り除かないから、それでOKなのか。
362デフォルトの名無しさん:2013/09/01(日) 18:07:12.31
>>352
>>355
>>357
>>358
>>360
ありがとうございました
363デフォルトの名無しさん:2013/09/02(月) 08:09:49.38
さっさと死ねルビーw
364デフォルトの名無しさん:2013/09/03(火) 01:06:28.68
アホがいる…
365デフォルトの名無しさん:2013/09/03(火) 06:51:15.72
>>364
ルビー信者のくせに言葉使うなww
死ねやゴミクズw
366デフォルトの名無しさん:2013/09/03(火) 08:10:31.99
RubyとPythonって統一しないんですかね
似た言語が2つあるのは明らかに悪い影響出してると思うのですが
367デフォルトの名無しさん:2013/09/03(火) 08:25:52.60
FORTRANとCOBOLって統一しないんですかね --> PL/I 誕生
CとPascal(Modula)って統一しないんですかね --> Ada 誕生
英語/仏語/独語..etcって統一しないんですかね --> エスペラント語誕生
368デフォルトの名無しさん:2013/09/03(火) 13:31:55.42
まずはひらがなとカタカナを廃止してローマ字に統一しようぜ
369デフォルトの名無しさん:2013/09/03(火) 14:13:01.94
>367
あんまり考えたことなかったけど
言われてみればあれだな
自然言語が複数種類あるのはバビルの塔が原因らしいけど
プログラミング言語が複数種類出来たのはなんでだろうね
370デフォルトの名無しさん:2013/09/03(火) 14:17:31.61
俺はさRubyでforとforeachを実装してもらいたいんだよ
371デフォルトの名無しさん:2013/09/03(火) 14:36:05.30
>>369
本質的にはプログラムはアセンブラで必要充分です
人間が手順を考えてハードウェアにほぼ直接、一連の指示を与えればいいだけだから

アセンブラへの指示をまとめたのがC言語
C言語での指示をまとめたのがRubyなどの(Cで書かれた)各種プログラミング言語
Rubyでの指示をまとめたのが、たとえばRailsなどのアプリケーションフレームワーク

str = 'hello!'
puts str

とほぼ同じだけの安全寄り動作をするC言語のソースは大量になり、アセンブラだと莫大になるだろう
372デフォルトの名無しさん:2013/09/03(火) 14:44:14.61
肝心な回答になってなかった

プログラミング言語が複数できる理由は、
我々が処理を関数やサブルーチンやメソッドにしてまとめてしてしまうのと完全に同じ
我々が関数やメソッドやクラスを作るのと同じように、言語製作者はプログラミング言語を作る
373デフォルトの名無しさん:2013/09/03(火) 14:44:15.08
mrubyのmってなに?
374デフォルトの名無しさん:2013/09/03(火) 14:45:00.92
30代業界未経験だけど言語を作ったら採用率高くなりますか?
375デフォルトの名無しさん:2013/09/03(火) 14:47:02.78
スレタイと関係ない
376デフォルトの名無しさん:2013/09/03(火) 14:51:19.56
>>374
情報系の資格とるほうが楽だしアピールもしやすい
377デフォルトの名無しさん:2013/09/03(火) 19:47:31.60
>>373
組み込みのm
最小のm
開発者の名前(イニシャル)M
MatzのM

Embeddable
. Minimal Implementation
. Considerable active committers have “M” as their name
initials, somehow.
. Some major committers have Matsumoto as their family
name, somehow. (note: They are not relatives)
. Matz

PDFの9ページ(9/19)
http://www.qcontokyo.com/data_2013/MasakiMuranaka_QConTokyo2013.pdf
378デフォルトの名無しさん:2013/09/03(火) 21:05:58.79
>>368-369
ひらがなとカタカナは、漢字から分かれてできたわけで
379デフォルトの名無しさん:2013/09/04(水) 01:07:09.66
かなの起源はハングル
380デフォルトの名無しさん:2013/09/04(水) 01:38:51.69
>>379
ハングルって最近出来たものじゃないの。
381デフォルトの名無しさん:2013/09/04(水) 03:53:20.15
ひらがな/カタカナとハングルならひらがな/カタカナが先だね
ただしカタカナは,新羅の仏教僧が仏典に注釈をいれるのに使っていた符号が先行の可能性がある,との説があるようだ
382デフォルトの名無しさん:2013/09/04(水) 07:45:21.43
最近どっかのニュースサイトに載った記事ネタだろ
なんでマジ議論してんだよ
383デフォルトの名無しさん:2013/09/04(水) 08:02:32.98
まあ当時の富裕層は渡来人だしね唐招提寺とかね
384デフォルトの名無しさん:2013/09/04(水) 12:06:24.73
gemのmysql2何でWindowsに対応してないのでしょうか?
何か決定的な対応できない不具合みたいなのがあるのでしょうか?
385デフォルトの名無しさん:2013/09/04(水) 16:05:23.24
Rubいや、Windowsを窓から投げ捨てろ
386デフォルトの名無しさん:2013/09/04(水) 21:27:02.30
Rubyでこれをよんでおけって本を全て教えてください
387デフォルトの名無しさん:2013/09/05(木) 01:31:29.76
モルモン教には入信しておいた方がいい
388デフォルトの名無しさん:2013/09/05(木) 14:45:29.80
gemで追加したけどいらなくなったモジュールって、どうやって削除すればいいでしょうか?
ゴミが残らない方法を教えてください。
389デフォルトの名無しさん:2013/09/05(木) 14:46:55.78
善意で作って公開してくれてるgemをゴミ呼ばわりするとか酷すぎる
390デフォルトの名無しさん:2013/09/05(木) 15:12:29.96
gem uninstall パッケージ名
で、インストールのときにコピーされたファイルとディレクトリは削除される
パッケージが勝手に作成・ダウンロードしたファイルで、パッケージのディレクトリ内にないものはたぶん消えない
391デフォルトの名無しさん:2013/09/05(木) 16:20:44.43
>>390
ありがとうございます。
問題はあれですよね、そのパッケージ動かした時にできるファイルがどこに作られるのかとか、
それって個々に調べるしかない感じですか?
392デフォルトの名無しさん:2013/09/05(木) 17:29:07.81
よほど糞な作り手じゃなきゃ
readme に書いてある
393デフォルトの名無しさん:2013/09/05(木) 22:27:49.72
>>392
ありがとう!!!
これで元に戻せなくなる心配をせずにrubyに入門できる!!!
394デフォルトの名無しさん:2013/09/05(木) 23:26:10.09
>>384
対応してるぞ
俺先月複数回Windowsにmysql2いれたし

ただしコンパイラがどーのこーのヘッダファイルがどーのこーのすげー面倒くせーよ
395デフォルトの名無しさん:2013/09/05(木) 23:40:30.45
>>388

それがいやなので最近はbundlerだけをシステムgemとしてインストールして、
あとはアプリのGemfileに書いたものをvendor/bundleに入れるだけ、にしてる。
使わなくなったら bundle clean するだけ。
Webアプリ屋としてはこれで十分。

日常のスクリプト書きに使う人には適さないと思うけど。
396デフォルトの名無しさん:2013/09/06(金) 00:05:23.50
>>395
何それ役に立ちそう!!
やりたいのは基本Ruby on Railsだけだから、
それで出来るのならそっちでやりたい!!!
ちょっと明日ググってみるわ!!ありがとう!!!
397デフォルトの名無しさん:2013/09/06(金) 00:18:09.78
いきなりタメ口つかってんじゃねえよタコ
398デフォルトの名無しさん:2013/09/06(金) 00:25:22.01
>>388
rpmやdebなどの依存関係を定義できるパッケージマネージャを使って削除。
399デフォルトの名無しさん:2013/09/06(金) 01:53:01.61
>>396
railsすらbundlerで入れるのみ、で通すのは少々手間が必要(可能では
ある)なので、rails本体とその依存物くらいまではシステムに入れても
いいかもね。
400デフォルトの名無しさん:2013/09/06(金) 11:36:15.59
webricってlocalhost:任意のポートでしかアクセスできませんよね
バーチャルホストに対応したRubyのサーバってありませんか?
401デフォルトの名無しさん:2013/09/06(金) 11:36:54.96
プロクシかましてapache使うのはNGです
gemで入れられるRuby用のサーバご存知の方教えてください
402デフォルトの名無しさん:2013/09/06(金) 22:37:49.24
array = [
  [ {:char=>'a'}, {:char=>'b'}, {:char=>'c'}],
  [ {:char=>'e'}, {:char=>'f'}, {:char=>'g'}],
  [ {:char=>'h'}]
]

これでabcefghという文字列を取りたいのですが、


array.map {|line| line.map {|hash| hash[:char]}.join }.join


以外にもっと良い書き方はありますか?
403デフォルトの名無しさん:2013/09/06(金) 23:10:17.03
RubyにおいてどうでもいいHashオブジェクトはhと呼ぶ(配列はarrかa)
arrayやhashと書かれている場合はなにか意図を探してしまうので使わないほうがよい
それと、配列の要素はelementのeだ

で、まあ、回答としてはそれ以外には特にないというか、
それ以外の書き方をしてなんらかの理由でテクニカル()に動作してもおそらく意図が伝わらないのでやめといたほうがいい

arr.map{|e| e.map{|h| h[:char]}.join}.join
404デフォルトの名無しさん:2013/09/06(金) 23:26:03.60
>>403
ありがとうございました
405デフォルトの名無しさん:2013/09/07(土) 04:15:34.40
flatten.mapとか
406デフォルトの名無しさん:2013/09/07(土) 06:03:44.60
array.flatten.map{|m| m[:char] }.join
=> "abcefgh"
407デフォルトの名無しさん:2013/09/07(土) 09:54:41.70
Rubyには_を書かない仕様にしてほしかった
to_sとか
408デフォルトの名無しさん:2013/09/07(土) 14:45:17.25
array.flat_map{|e| e.map{|h| h[:char] }}.join
とか
array.flatten.flat_map(&:values).join #これは駄目か
409デフォルトの名無しさん:2013/09/07(土) 16:12:12.73
>>402
array.map{|e1|
  e1.map{|e2| e2[:char]}.join
}.join

一番内側から考えるといいです。
{:char=>'a'} から 'a' を取り出すコードを書く。
次に、[ {:char=>'a'}, {:char=>'b'}, {:char=>'c'}] から 'abc' を取り出すコードを書く、という具合に。
410409:2013/09/07(土) 16:13:22.15
すみません。リロードし忘れたため、他の方の回答に気づきませんでした…
411409:2013/09/07(土) 16:16:34.04
しかも、質問の後半部分にも気づかなくて、とんだ見当違いの回答をしてしまった…
412デフォルトの名無しさん:2013/09/08(日) 13:13:40.50
`git ls-files`.split($\)って記述を見かけたんだけど
$\って何を表現してるんでしょうか?

改行マッチっぽい気はするんですが、何故これで改行になるのかわかりません。
予約語でしょうか。
413デフォルトの名無しさん:2013/09/08(日) 16:36:43.68
414デフォルトの名無しさん:2013/09/08(日) 22:23:24.83
>>413
こんなのあったんですね。ありがとうございます。
415デフォルトの名無しさん:2013/09/08(日) 23:51:16.47
RubyのフレームワークでRoRみたいな高機能なのじゃなくてシンプルなやつありませんか?
416デフォルトの名無しさん:2013/09/08(日) 23:55:09.40
webrick
417デフォルトの名無しさん:2013/09/09(月) 00:05:54.53
Sinatra
418デフォルトの名無しさん:2013/09/09(月) 00:15:58.04
意味不明度合いはどれもほとんど変わらないとは忠告しておく

もし、RoRを忌諱する理由が「理解できなかった」なのなら、おそらくSinatraもWEBrickも「理解できない」可能性が大
419デフォルトの名無しさん:2013/09/09(月) 02:00:35.20
ひどく的外れ
420デフォルトの名無しさん:2013/09/09(月) 07:35:51.52
Railsは思想への深い理解が必要でつらい
421デフォルトの名無しさん:2013/09/09(月) 07:46:42.33
cgi.rb
422デフォルトの名無しさん:2013/09/09(月) 09:52:00.56
付いた解答がwebrick
423デフォルトの名無しさん:2013/09/09(月) 10:02:27.46
cgi.rb はおわこん
424デフォルトの名無しさん:2013/09/09(月) 10:04:16.64
RubyのWSGIモジュールはどれ?
425デフォルトの名無しさん:2013/09/09(月) 10:25:34.17
Rack
426デフォルトの名無しさん:2013/09/09(月) 16:46:44.94
>>415
Rackでいいんだろうけど、ActiveRecordの代替はどうしよう
427デフォルトの名無しさん:2013/09/10(火) 00:20:21.41
rbenv/pluginsにruby-buildをcloneしてきたんですけど、rbenv installでrbenv: no such command `install'というエラーが出てしまいます。

どうしてでしょうか。。
428デフォルトの名無しさん:2013/09/10(火) 00:34:09.35
rbenv/pluginsにruby-buildをcloneしてきたんですけど、rbenv installでrbenv: no such command `install'というエラーが出てしまいます。

どうしてでしょうか。。
429デフォルトの名無しさん:2013/09/10(火) 00:41:58.84
自己解決しました。。
430デフォルトの名無しさん:2013/09/11(水) 00:42:26.66
。。
431うゆ:2013/09/11(水) 20:59:57.66
ゆうちゃんの件ではスルーしてたんだけど、2ch●漏れでtorに興味出てきて使ってみたんだよ
そしたら、急激にネットワーク関連の知識と技術が増えてきて
ついに「本物」になってしまった・・・・
一瞬で、ネットワークの負荷分散や学校や企業みたいに沢山のホスト扱うノウハウとか
知識がついた
設定やってって言われたら多分、出来る
ネットワーク技術者()の資格とかそういうのもあったけど、あれってなんなの?俺にとって一瞬で身に付くレベルのことを
皆必死に勉強して、資格とって・・・

ねえl、なんで俺はいつも、pc関連になると本を読むわけでもなく「一瞬」で理解しちゃうんだろ?
適正っていう物なんだろうけど・・・我ながら異常性を理解してるんだ
自分がごく自然に、やってる事が、いかに異常かってのを気付かせてもらったのは、
昔、知り合いのpcのBIOS設定やってるときだった、「英語読めんの?」 → 「んー、読めないけど、感でやってる」
これだ。

これが"一般人"には出来ないというのが、分かった。俺は確かに英語が読めない、でも・・・・PC関連が少しでも関わってると
なぜか読めない英語も読めるようになってしまうんだ

英語の文章単体では読めないものの、英語+PC技術関連になると、俺はその文章を読むことが出来る・・・程度の能力

つうか、"字"を読んでるんじゃなくて、「伝えたい意図」を詠んでる から

俺にとっては単語の一つ一つが読める必要すらない・・・
432うゆ:2013/09/11(水) 21:13:06.61
俺は英語のPC技術関連の文章を「字」を読んでいるわけじゃないし
ソースコードに対しても「読んでる」わけじゃないんだろうな
「詠んでる」が、正しい

tor使い始めて1日目で、理解して、
3日目にはhidden serviceの使い方を理解して、
1週間経った頃には、torのソースコードを見ることもなく、
torの仕組みをほぼ理解し、作ってって言われたらミニチュアくらいを自分で作れるところまで来てしまったのかもしれない・・・・
いや、当然まだ全然ググってもいないし知識もないよ…? ただ、自信だけが "此処" にある・・・
この異常性は、なんなんだろうな
作った事もなく、ググってもいないし、知識もないのに  "自信" だけが俺にはあるんだ 
けど一般人には、これが無いんだろ 作った事もなく、ググってもいないし、本もないし、 確かに知識もない、
初めてのことなのに、 「やれる」 っていう ”自信” ・・・・・・・・

どうしてこんなに、適正能力の高い奴がいるんだろう
俺もうプログラマじゃないし、かなり離れた事やってるよ

日曜プログラマ化してるというか、暇なときにちょっとやる程度、
にもかかわらず・・・・スキルを高めようとも思ってないのに・・・・勝手に技術が身について・・・・・まじで止まらないのな。。。。
一度、身に付いた習慣、「スキルレベルを向上させていくリズムと快感」それをある程度、停止させてくれたのは、この世の中ではラグナロクだけだった
ラグナロクオンラインやってるときだけは完全にプログラミングを忘れる事が出来た
けど、それをやめた今、高めようとなんて思ってないのに勝手に・・・スキルが高くなっていく・・・
それに対し、怖さすら感じる  俺は15の時、自分の未来が見えた
最強ハッカーになって、IT歴史に名を残すものを開発し、起業して、・・・退屈な人生を送るという未来がな
俺は、それに近づくのが怖いんだ
433デフォルトの名無しさん:2013/09/11(水) 21:26:33.00
最強ハッカーになるのが怖い、歴史に名を残すのが怖い、起業するのが怖い、退屈な人生を送るのが怖い

15の時に見えてしまった自分の未来像、そこから離脱する為に、俺はありとあらゆる事をやってきた
にもかかわらず、未だに勝手に、俺はPC技術が勝手に高まっていくし、止まらない
最終兵器彼女のちせって。こんな気持ちだったんだな

俺はこのまま歴史に名を残してしまうのか・・・・・? 嫌なんだよそういうの
先の見えたレールを歩むのは・・・!!

もう見えてしまっている未来というのは、一度読んだ本みたいなもので、 俺はその一度読んだ本をもう一度読もうとは思わない
だから、未読の道へ進んでる
戦争でも起こるのか?俺は最終兵器?


俺は今特殊な環境から書き込んでる
最強ハッカーにしか出来ない方法とセキュリティ設定
セキュリティソフト(笑)とか入れるくらいなら、自分で高度セキュリティのネットワーク構築したほうが
セキュリティソフト(笑)入れるより、よほど良い事がわかってしまった
HDD削除とか、爆撃系のウィルスは食らうけど、遠隔操作系ウィルスは、俺には一切効かなくなってしまった。99%はカットされるであろう

投稿テスト
434デフォルトの名無しさん:2013/09/11(水) 21:40:24.90
pcが行ってる通信をすべて掌握してるのってマジで気持ちいい

自分の許してない通信は今、どんなアプリだろうと一切行われていない
セキュリティソフトやWindowsアップデートも例外ではなく・・・・

自分の許可なくそれらはMikurosohutoやNotonanchivirusuに通信することさえできない
その他の弱小アプリなんて、もはや息してないw
もしもこのpcにトロイ入ってるとかウィルス入ってるとかあったとしても関係ない
俺様が今2chに書き込んでいるように、特殊な方法でしか外部と通信出来ないから

セキュリティソフトって何だったんだろうな・・・・・

投稿テストend
435デフォルトの名無しさん:2013/09/11(水) 22:06:58.68
nokogiriでスクレイピングしたいんだけど、そのウェブページが、
JavaScriptを有効にしてくれって言ってくるんだけどどうやって有効にしたらいいか教えてください
436デフォルトの名無しさん:2013/09/11(水) 22:15:14.37
こういうバカっぽい質問、あたしは好きよ
437デフォルトの名無しさん:2013/09/12(木) 01:17:25.76
nokogiriでJavaScriptを認識させるためのモンキパッチを↓が書く
438うゆ:2013/09/12(木) 01:32:20.63
質問です
Webrickでたてたプロキシーサーバーにsocksでも接続できるようにしたいんですが
何を書き足せばいいのかよくわからないんですけど
439デフォルトの名無しさん:2013/09/12(木) 07:24:31.94
自己解決しました
440デフォルトの名無しさん:2013/09/12(木) 09:54:32.55
>>435
phantomjs
441デフォルトの名無しさん:2013/09/12(木) 12:10:04.36
こいつに返事しなくていいよ
442デフォルトの名無しさん:2013/09/13(金) 04:01:23.37
どいつだよ
443デフォルトの名無しさん:2013/09/13(金) 04:57:23.85
initializeの中からyieldを呼んでるソースを見かけて驚いたのですが、
initializeの最後なら文法的にありなんでしょうか?
コンストラクタを実行している最中ってオブジェクトがないってイメージなのですが。
444デフォルトの名無しさん:2013/09/13(金) 05:33:21.87
その場合ならinitializeに渡されたブロックを実行するだけで
initializeで作成中のオブジェクトとyield呼び出しに直接的な関係は無いでしょ
445デフォルトの名無しさん:2013/09/13(金) 08:17:29.10
initializeはコンストラクタじゃない。
initializeを呼ばれた時点で既にインスタンスは存在する。

クラス.new は
1. クラス.allocate でインスタンスを生成する。
2. そのインスタンスのinitializeを呼ぶ。このとき、newの引数とブロックを渡す。

という動作。
446デフォルトの名無しさん:2013/09/13(金) 08:36:53.63
死ねゴミ共がw
死ねゴミ共がw
447デフォルトの名無しさん:2013/09/13(金) 09:25:39.82
JavaScriptのように
var a = false
var b = a|123
Pythonのように
a = False
b = a|123

これでbに123が入るんですが
Rubyだと
b = false
a = b|100
p a
と書いてもtrueがbに入ってしまいます
Rubyではどう書けますか?
448デフォルトの名無しさん:2013/09/13(金) 09:44:35.32
||
449デフォルトの名無しさん:2013/09/14(土) 08:45:57.52
うゆ = >>438です

自己解決していません
socksプロキシに対応したプロキシ立てをrubyでやりたいんですけどわかりません
ちなみにsshでのsocksプロキシはやりたくないんです
ssh以外の方法でrubyでsocksプロキシに対応したプロキシサーバ作りたいんですけど
450デフォルトの名無しさん:2013/09/14(土) 11:17:18.83
自己解決しました
451デフォルトの名無しさん:2013/09/14(土) 13:10:04.19
includeとrequireの違いってなんですか?
452デフォルトの名無しさん:2013/09/14(土) 13:21:11.16
え?
453デフォルトの名無しさん:2013/09/14(土) 13:59:05.54
rubyカンファレンスっていうのはないんですか?
454デフォルトの名無しさん:2013/09/14(土) 15:15:51.75
RubyConf2013 なら 11/8-10 舞浜^H^Hマイアミビーチで開催される。
455デフォルトの名無しさん:2013/09/14(土) 18:02:07.46
Rubyの2.0ソースコードってデュアルライセンスですよね
ソースコードの勉強として、1ブロック(10〜20行ぐらい?程のコードをブログにアップして解説する場合は
ライセンスを明記し解けばいいのですか?
456デフォルトの名無しさん:2013/09/14(土) 18:14:26.44
>>455
それぐらいなら引用の範囲内じゃね?
457デフォルトの名無しさん:2013/09/17(火) 12:55:23.03
watirでファイルのアップロードをしたいんですがうまく動きません
http://linux.ohwada.jp/modules/smartsection/item.php?itemid=452
ここに書いてあるのを試したりもしたんですが、
英語環境じゃないと動作しないんでしょうか?
458デフォルトの名無しさん:2013/09/17(火) 13:13:16.24
「よくわかんないけど動きません」は禁止です

HTMLとJavascript(とCSS)が読めるのなら、
そのサイトでWebブラウザがどういう順を追ってアップロードをしているのかを確かめて、
それの通り(または、飛ばしても動く面倒な部分は飛ばして)動作するように記述すればいい

HTMLとJavascript(とCSS)が読めない場合は現実的にちと無理
今回のように「なんだかわからないけど動かない」なんてなったときにどうしようもできない
HTMLとJavascriptを大雑把にでも読み解けるくらいの知識が別途必要
459デフォルトの名無しさん:2013/09/17(火) 13:28:56.99
ボタン押したりクリックするだけでページが遷移する、みたいなシンプル動作なサイトなら
全くなにも知らなくてもうまくいくことが多いんだけどねWatir
460デフォルトの名無しさん:2013/09/18(水) 10:35:49.02
461デフォルトの名無しさん:2013/09/18(水) 11:13:42.88
PHPスレからこちらに来てあっちの民度の低さが露呈して発狂しそう
462デフォルトの名無しさん:2013/09/18(水) 16:21:17.29
attr_reader や attr_writer にて指定した変数を取得する
メタクラス(?)の記述方法は有りませんか?
下記のプログラムにて,a.a a.b を知らなくても
その変数名リストとその値をそれぞれ取得出来るような方法です.

class AA
 attr_reader :a, :b
 def initialize( )
  @a = 1
  @b = 2
 end
end
a = AA.new
printf "%5d%5d\n", a.a, a.b
463デフォルトの名無しさん:2013/09/18(水) 17:13:41.97
attr_readerとかを書き換えちゃえばいいじゃん
464デフォルトの名無しさん:2013/09/18(水) 17:47:56.55
>>462
def attr_values(obj)
  obj.instance_variables.inject({}) { |hash, at_sym|
    symbol = (at_sym.to_s)[1..-1].to_sym
    result, value = begin
               [true, obj.method(symbol).call]
             rescue
               [false, nil]
             end

    if result then hash.merge symbol => value else hash end
  }
end


class AA
  attr_reader :a, :b

  def initialize
    @a = 1
    @b = 2

    @c = 3
  end
end

a=AA.new
p attr_values(a) # => {:a=>1, :b=>2}
465462:2013/09/18(水) 19:06:20.27
>>463-464
有難うございます〜.とても助かりました.
この短いコードから色々試して勉強出来ました.
466デフォルトの名無しさん:2013/09/19(木) 12:44:28.74
Pythonで作られた有名なサービスはDropboxですが
Rubyで有名なものを教えてください
467デフォルトの名無しさん:2013/09/19(木) 14:37:31.39
>>466
前のTwitter
468デフォルトの名無しさん:2013/09/19(木) 14:53:27.47
>>458
あなたはwatir使った事がありますか?
レスが全く無関係の方向です

分かる人いなそうなので回答は結構です
469デフォルトの名無しさん:2013/09/19(木) 14:55:30.13
なるほど
ということは今はRubyで作られた有名なものはないのですよね
ぼくがRubyですごいやつ作ったら有名になれる気がしました
470デフォルトの名無しさん:2013/09/19(木) 15:13:41.55
>>469
Rubyでなくてもすごいの作ったら有名になるだろ。特にサービスは実装関係ないから、Rubyでなくなったんだろ。
アプリならredmineとか。
471デフォルトの名無しさん:2013/09/19(木) 16:35:35.68
基礎がなってないって事実を指摘するとキレる人は多い
472デフォルトの名無しさん:2013/09/19(木) 16:36:14.37
Githubは?

Twitterも一部にRailsが残ってるとか
473デフォルトの名無しさん:2013/09/19(木) 16:41:28.36
どのくらいのレベルに達したらまつもと先生にTwitter follorされるのでしょうか?
474デフォルトの名無しさん:2013/09/19(木) 16:49:29.69
まあ基礎がなってなくても人間としてなってないとかいろいろあるからな
喧嘩すんなって感じではあるが
475デフォルトの名無しさん:2013/09/19(木) 17:35:21.38
日本だとcookpadが有名だろう
476デフォルトの名無しさん:2013/09/20(金) 20:08:54.85
Ruby 2.0.0

ary = [1,2,3]
ary.each do |v|
p v
end

のとき
ary[0]
ary[1]
ary[2]
の0と1と2の部分Keyていうですか?これを取得する方法を教えてください

ググって
ary = [1,2,3]
ary.each do |key, v|
p v
end
でできるみたいな記事も見つけたのですが
keyには値が入ってて、vはnilだったのでダメでした
477デフォルトの名無しさん:2013/09/20(金) 20:26:19.24
ary.each_index do |key|
p key
end
って書くと key が 0 から 2 まで回る。
これで要求に答えられてるかわからんけど。
478デフォルトの名無しさん:2013/09/20(金) 20:38:18.78
>>476
#each_with_index
479デフォルトの名無しさん:2013/09/20(金) 21:07:51.49
irb(main):001:0> ary = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> ary.each.with_index do |v, index| p [v, index] end
[1, 0]
[2, 1]
[3, 2]
=> [1, 2, 3]
irb(main):003:0>
480デフォルトの名無しさん:2013/09/20(金) 23:42:14.44
とあるログを解析するのに、キーとなる文字列を抽出するのにmatchメソッド使ったけど、これだとmatchオブジェクトになるんだな。
これをハッシュのキーにすると、文字列としては同じに見えるのに、異なるキーとして扱われるので、気付くのに時間が
かかった。見た目同じ文字列が、見えないところで違う扱い、それも基本的なデータ型で、初心者に優しくないよね。
というか慣れた人でもハマることありそう。
なんでこんな設計になってるの? Rubyって。
481デフォルトの名無しさん:2013/09/20(金) 23:53:16.31
> 文字列としては同じに見えるのに
puts/print ではなく p してる?
482デフォルトの名無しさん:2013/09/21(土) 00:44:42.76
メソッドの返り値くらいマニュアルで確認しようよ
どんなアバウトな使い方なんだよ
483デフォルトの名無しさん:2013/09/21(土) 00:47:20.70
>>480
>これだとmatchオブジェクトになるんだな。

正確に言うと「MatchDataオブジェクト」だね


>なんでこんな設計になってるの? Rubyって。

パターンの一致結果を詳しく分析するニーズを想定しているからだよ
もし興味があれば、「るりま」等で MatchDataクラスの解説を読んで勉強してみて

で、一般のパターンマッチ処理だとメソッド Regexp#match では面倒なので、
代わりに Regexp#=~ を使い、一致結果を $1, $2, ... で参照する
もしMatchDataオブジェクトが必要であれば、$~ で参照できる

これで、大半のケースは事足りるはずで、わざわざ matchを使うのはレアケースだと思われ
484デフォルトの名無しさん:2013/09/21(土) 01:00:08.53
MatchDataオブジェクトをto_sでハッシュのキーにするって筋が悪いの?
いつもそうやってた。
485デフォルトの名無しさん:2013/09/21(土) 01:57:24.28
>>484
自身が>>480で書いているように、MatchDataオブジェクトを直に扱う手法は
初心者に優しくないし慣れた人でも間違えやすいし、タイピングも面倒
だから簡単な方法としてメソッド Regexp#=~ と疑似変数 $1, $2 , ... が用意されている
一般的なRubyにおける正規表現処理の解説ではこの簡単な方法で説明されているはずだし、
ほとんどのプログラムでもこの方法が使われている
だから、慣れておく事を薦めるよ

普段は誰もが知っている単純な方法でサクサクとコードを書き、イザという時には特別な手法で
困難をサラリと飛び越える.... というのが、クールなプログラマの姿ではないかと思われ
486デフォルトの名無しさん:2013/09/21(土) 03:29:53.63
見た目が同じように感じられるのに #hash が異なるクラスは
単にハッシュのキーとして使うことが想定されていない。

JavaScriptとかからの人だと、Regexp#=~より先に Regexp#match を
見つけてしまうんだろうか。
487デフォルトの名無しさん:2013/09/21(土) 09:41:28.23
>>471 , 474
基礎とかそういう問題ではなく
現在のwatirにある「不都合」について認知していないレスだったので
つまり使ってないのに憶測でレスしたんだろうなぁと思ってイラっといました
まぁ2chでいちいち環境そろえて的確な回答をする義務はありませんので構いませんよ
488デフォルトの名無しさん:2013/09/21(土) 10:30:37.71
調べるとっかかりになるレスが返ってくればラッキーぐらいに思ったほうがいいよ

http://linux.ohwada.jp/modules/smartsection/item.php?itemid=452
http://www.autoitscript.com/autoit3/docs/functions/WinWait.htm
これ見るにどうもブラウザのファイル選択ダイアログのタイトルと
autoit.WinWait の引数を揃えろってことらしいけど
まず Win32OLE から AutoIt の WinWait が自分の環境で機能するか調べてみては
489デフォルトの名無しさん:2013/09/21(土) 10:43:35.08
文字列がミュータブルであったり、純粋オブジェクト指向言語とは、みたいな
ことにも繋がる面白い疑問点だと思うけど、マニュアルよめー、答えが返って
くるとはかぎらないー、とかワンパターンなことを真っ赤になって繰り返す奴
って初心者スレで威張って人生の厳しさでも教える師匠かなんかの気分なの?

おてがるにえらくなったつもりでいい気持ち、ってやっすい満足得ているのは
結構だが、ウザいことこの上無し。
490デフォルトの名無しさん:2013/09/21(土) 11:28:06.95
あて先不明の爆発物だな・・・
491デフォルトの名無しさん:2013/09/21(土) 11:36:22.47
Rubyでこういうgem教えて下さい

・ブログをやる場合の定番gem:
・PythonのSphinxみたいなgem:
492デフォルトの名無しさん:2013/09/21(土) 21:59:14.37
Ruby2.0.0でも書いてみたけどproduct(s,s,s)って書いてるからおかしい気がする
Pythonみたいに数字でサイズを指定できないものか
http://ideone.com/zfUFM5
493デフォルトの名無しさん:2013/09/22(日) 10:49:01.08
>>489 おまえのそのレスが一番ウザい
494デフォルトの名無しさん:2013/09/22(日) 13:34:38.65
>>485
>MatchDataオブジェクトを直に扱う手法は

上にもあったけど、to_sで文字列にすれば分かりやすいし素直じゃん。
内部的な効率でも別に問題ないし。

>だから簡単な方法としてメソッド Regexp#=~ と疑似変数 $1, $2 , ... が用意されている

こっちの方がわかり辛いし、めんどくせーんじゃねえの?
495デフォルトの名無しさん:2013/09/22(日) 13:42:22.80
s = ["A", "C", "G", "T"]
b = s.product(s,s,s)
で4文字が組み合わさるけど
これが5とか10のときにわざわざs,s,s,sとかs,s,s,s,s,s,s,s,sって書くのは効率が悪いので
数字で指定できる方法ありませんあk?
496デフォルトの名無しさん:2013/09/22(日) 13:56:52.04
ないのでhaskellのreplicate関数みたいなのを自分で定義するとか

def replicate(n, arr)
[arr] * n
end

s = ["A", "C", "G", "T"]
b = s.product(*replicate(3, s))
497デフォルトの名無しさん:2013/09/22(日) 15:11:05.79
s.repeated_permutation(4).to_a
でいけるんじゃないかな。
498デフォルトの名無しさん:2013/09/22(日) 15:37:28.41
nokogiriでEUC-JPなHTMLファイルをノコノコしてるんだけど
Uとかローマ数字があると間違って解析されちゃうんだけど
どしたらよかんべ?
$ ruby1.9 -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12]
$ gem1.9 list nokogiri
nokogiri (1.6.0)
499デフォルトの名無しさん:2013/09/22(日) 15:43:07.56
まつもと先生が使ってるOSってDebianですか?
500デフォルトの名無しさん:2013/09/22(日) 16:27:05.28
>>499
WindowXP
501デフォルトの名無しさん:2013/09/22(日) 16:47:58.98
>>498

ローマ数字が定義されている EUC-JPは、実際には EUC-JP ではなく
CP1932 なので、ソース HTML が間違っていると言い切ってしまえれば
楽なのだが、とりあえず nokogiri に食わせる前にソースのまま処理して
置換しておくしかないんじゃない?

ちなみに Ruby 2.0 の Encoding には入っていないようなので、
入れてくれ、とバグレポートするのも気長な解決策ではある。
502デフォルトの名無しさん:2013/09/22(日) 16:51:07.43
ごめん CP1932 じゃなくて CP51932 だ。
そして Ruby 2.0 にはあった。
503デフォルトの名無しさん:2013/09/22(日) 17:07:35.03
Ruby2.1っていつでる予定なのか知ってる人おしえて
504デフォルトの名無しさん:2013/09/22(日) 17:11:34.56
2013/12/25
505デフォルトの名無しさん:2013/09/22(日) 19:26:29.05
>>498
Nokogiriの各クラスのparseメソッドには文字エンコーディング名称文字列を受けとる引数がある

いわゆるmetaタグで指定されているエンコーディング名がEncodingクラス的に(あるいはiconv的に)誤っているのなら、自力で指定しろ
引数側が優先されるから
506デフォルトの名無しさん:2013/09/22(日) 19:49:03.33
ruby標準の機能が貧弱だからnokogiriが使われているんだよね
だったら標準ライブラリいれちゃえよ
507デフォルトの名無しさん:2013/09/22(日) 19:55:08.88
nokogiriが何かを知っていればそんな台詞は出ない
知らないものに対して何かを言おうとするのはやめよう
508デフォルトの名無しさん:2013/09/22(日) 20:00:24.62
少なくともお前よりかはrubyを知ってます
509デフォルトの名無しさん:2013/09/22(日) 20:08:20.93
すぐ喧嘩するなお前ら
510デフォルトの名無しさん:2013/09/22(日) 20:13:19.39
中学生か高校生だよね
>よりかは
511デフォルトの名無しさん:2013/09/22(日) 20:43:34.50
>>507==>>510
突然の上から目線
その後は論点のずれているレス
学生は君のほうらしい
512デフォルトの名無しさん:2013/09/22(日) 21:10:00.40
一体誰と戦っているんだ・・・・
513デフォルトの名無しさん:2013/09/22(日) 21:41:51.93
module ActiveSupport
class TestCase < ::MiniTest::Unit::TestCase
end
end

上のコードで「::MiniTest」みたいに::の左にモジュールやクラスが指定されていない場合、どういう意味になるのでしょうか?
514デフォルトの名無しさん:2013/09/22(日) 22:18:59.41
トップレベル
515デフォルトの名無しさん:2013/09/22(日) 22:51:12.00
>>513
ディレクトリのパス表現を連想すると分かりやすい
たとえばUNIXだと、絶対パスは /usr/lib/ruby で
相対パスは lib/ruby や ruby と表現される

同様に、Rubyではモジュールの名前空間上におけるパスを表現する
(クラスはモジュールのサブクラスだから、クラスも同じ名前空間上に位置する)
たとえば、::MiniTest::Unit::TestCase は絶対パスで
Unit::TestCase、Unit、そして TestCase が相対パスになる

>>513の例であれば、絶対パス ::MiniTest::Unit::TestCase は
(>>514のいう)トップレベルからクラス TestCase へのパスを表現し、
相対パスの場合は、カレントパス(=現在のコンテクストのパス)からクラスを表現する
たとえば >>513の定義クラス(= "class" の直後にある) TestCase は相対パス表現だから、
カレントパス ActiveSupport の下に位置する相対パス ActiveCase::TestCase と同じ
516デフォルトの名無しさん:2013/09/24(火) 00:12:46.66
>>514,515
詳細な解説有り難うございます。絶対パスと分かって胸のつかえが取れました。
517デフォルトの名無しさん:2013/09/24(火) 04:33:29.74
現在押されているキーボードのキーを取得する方法はないものでしょうか
518デフォルトの名無しさん:2013/09/24(火) 04:35:37.16
kbhit
519デフォルトの名無しさん:2013/09/24(火) 20:47:17.42
SDL
520デフォルトの名無しさん:2013/09/25(水) 06:39:04.30
RSpecのディレクトリ構成について質問があります。

テストケースの中でファイル等を読み込みたい場合、何という名前のディレクトリに配置するのが一般的なのでしょうか?
521デフォルトの名無しさん:2013/09/25(水) 15:26:00.23
今日からruby勉強し始めました!
皆さん宜しくお願いします!
522デフォルトの名無しさん:2013/09/25(水) 15:34:22.49
>>520
いろいろ考えたのだが、spec/dataがいちばん無難なんじゃねーかという結論に至った
523デフォルトの名無しさん:2013/09/25(水) 17:27:46.42
RSpecのディレクトリ構成について質問があります。

テストケースの中でファイル等を読み込みたい場合、何という名前のディレクトリに配置するのが一般的なのでしょうか?
524デフォルトの名無しさん:2013/09/25(水) 17:29:11.68
>>520
適当な名前のディレクトリ掘るのが一般的ですかね。ありがとうございます。
525デフォルトの名無しさん:2013/09/25(水) 17:29:58.27
なんか色々誤爆してすいません。
526デフォルトの名無しさん:2013/09/25(水) 18:04:55.58
変数の初期化をブロック内で宣言するにはどうすればいいでしょうか

例:
count=0
10000.times do
 count+=1 if rand**2+rand**2<1
end

のcount=0をイテレータ内で記述したいのです
527デフォルトの名無しさん:2013/09/25(水) 18:23:33.16
>>526
無理
528デフォルトの名無しさん:2013/09/25(水) 18:24:26.45
>>526
値の累積(accumulation)には、Enumerable#inject を使う
変数 count は累積値を表現し、ある条件(ここでは乱数)で加算(+1)した結果を累積していく

1000.times.inject(0) { |count, _|
  if rand ** 2 + rand ** 2 < 1 then count + 1 else count end
}
529デフォルトの名無しさん:2013/09/25(水) 19:34:45.22
というかEnumerable#countがあるんだからそっち使うべき。用途に合致したメソッド使った方が可読性もいい
10000.times.count{ rand**2 + rand**2 < 1 } とか
10000.times.map{ [rand,rand] }.count{|x,y| x**2 + y**2 < 1} みたいに書くな俺なら
530デフォルトの名無しさん:2013/09/25(水) 21:37:48.09
ブロック引数に |変数群1; 変数群2| という記法もあったけど何だっけ。
531デフォルトの名無しさん:2013/09/26(木) 07:41:19.93
自分でRubyのコードを組んで主人公を操作するブラウザゲームがあったんですが知っている方いれば教えて頂きたいです
532デフォルトの名無しさん:2013/09/26(木) 07:50:49.38
injectってなんでああいう機能がinjectって名前になったの?
533デフォルトの名無しさん:2013/09/26(木) 08:40:35.53
Smalltalkerに聞いてくれ
534デフォルトの名無しさん:2013/09/26(木) 09:43:01.58
畳み込みという概念がうんちゃらかんちゃら
535デフォルトの名無しさん:2013/09/26(木) 09:55:21.27
inject, injection
アメリカ人は、まず注射を連想しますよ
536デフォルトの名無しさん:2013/09/26(木) 09:57:35.63
くりこみ群
renormalization group

畳込み積分
convolution integral
537デフォルトの名無しさん:2013/09/26(木) 10:47:29.40
fold や reduce や inject が本場であるところの関数型ではリストは再帰的に表現される
たとえば (cons 1 (cons 2 (cons 3 nil))) などのように
でもってこの cons の部分に関数を注入するのが inject

ではないだろうか(憶測)
538デフォルトの名無しさん:2013/09/26(木) 11:29:19.30
Smalltalkでは inject:into: って名前のメソッド(Smalltalkではコロンもメソッド名に含める)で、
inject: initialValue into: [:acc :each | ... ] というメッセージとして使う。

Rubyで同じことを書くと
inject(initialValue){ | acc, each | ... } となる。

acc に initialValue やブロックの結果を inject してく感じ。
539デフォルトの名無しさん:2013/09/26(木) 19:13:42.19
ブロックローカル変数宣言?
a=1
1.times{|x;a| a=2}
p a #=> 1
540デフォルトの名無しさん:2013/09/26(木) 19:43:52.97
ものすごく単純に、ブロックの「中に入れてしまいたい」だけだと思う
541デフォルトの名無しさん:2013/09/27(金) 18:55:26.82
bundlerでgemlocalに書いてからbundle installってやるのと
bundler使わないでgem install xxxxってやっていれるのとで何が違いがあるのでしょうか?
例えばrailsでthinが使いたいんですけどbundlerから入れないと使えません
542デフォルトの名無しさん:2013/09/27(金) 19:02:01.43
bundler経由だとbundlerに管理してもらえます
543デフォルトの名無しさん:2013/09/27(金) 19:11:33.54
bundle installをデフォルトで vender/pathにする方法ある?
544デフォルトの名無しさん:2013/09/27(金) 21:23:56.32
bundle config --global --path=vendor/bundle
でおk
545デフォルトの名無しさん:2013/09/27(金) 21:25:25.69
あ、--path じゃなく path だ。
546デフォルトの名無しさん:2013/09/27(金) 21:28:18.39
aとbとcで
aaa
aab
aac
aba
abb
abc
aca
acb
acc

ccc
見たいに全ての組み合わせを表示するライブラリがあったと思うんですがそれをおしえてください
547デフォルトの名無しさん:2013/09/27(金) 21:31:51.68
w(a b c).repeated_permutation(3).map(&:join)
548デフォルトの名無しさん:2013/09/28(土) 07:42:16.47
この本屋って新宿駅近くにあるんだけど
部屋の区割り自体が迷路のように入り組んでいて
火事で停電になったら出口判らず逃げ遅れて死者多数出ると思う
http://www.dotup.org/uploda/www.dotup.org4535669.jpg
549うゆ:2013/09/29(日) 01:24:46.62
>>527
クスクスクス

count = nil
10000.times do
count ||= 0
count+=1 if rand**2+rand**2<1
end
p count
550デフォルトの名無しさん:2013/09/29(日) 09:50:28.47
>>549
count = nil で初期化してるやん
551デフォルトの名無しさん:2013/09/29(日) 13:56:48.83
10000.times do
  count#{0}+=1 if rand**2+rand**2<1
end

こんな感じにして欲しいが
#{ }はタイプしづらいか
552デフォルトの名無しさん:2013/09/29(日) 19:56:52.66
>>550
この人日本語もできないから触ったらだめ
553デフォルトの名無しさん:2013/09/30(月) 00:10:42.37
何仕切ったつもりになってんだチンカス
554デフォルトの名無しさん:2013/09/30(月) 00:14:21.41
キャー(つ∀`)コワイネー
555デフォルトの名無しさん:2013/10/01(火) 14:03:48.44
しつもん

クラス作る時に
def self.new()
~処理~
end
でnew()をオーバーライドするのと、
def initialize()
~処理~
end
でコンストラクタ呼び出すのって何か違いがあるのですか?

色々とコードを弄ってたらどちらでも書けなくないな〜とか思ったんですが、
何か明確な違いあるのでしたら教えていただけると嬉しいです。
556デフォルトの名無しさん:2013/10/01(火) 17:04:39.26
その例ではnewは再定義されていない
なぜならnewというメソッドはデフォルトではどこにも定義されていないから
C.newと書かれていたとき、(C.newというメソッドがなければ)RubyはCクラスのプライベートメソッドinitializeを参照する決まりになっている

Rubyにおいて、クラス定義からオブジェクトを作るときの手順を記述したいときはinitializeに書「かなければならない」
initializeが動作する通常の場合においてC.newとするとCクラスの新規オブジェクトが自動で生成されて返ってくるが、
newを再定義した場合におけるC.newはnewメソッド内で定義した最後の処理のオブジェクトを返す
それは通常Cクラスの新規オブジェクトではありえない

もし、新規オブジェクトを作る意味が薄い「一連の処理をまとめて起動して終わるだけのカタマリ」を記述したいのなら、
クラスではなくモジュールとして定義して、なんか適当な特異メソッドを適当な名前で定義して呼ぶようにするといい
なにも思いつかなかったらrunとかどうだろう
557デフォルトの名無しさん:2013/10/01(火) 17:55:56.61
>>556
たいへん丁寧なご回答ありがとうございます。
newとinitializeの関係がよくわかっていなかったのを思い知りました。

> Rubyにおいて、クラス定義からオブジェクトを作るときの手順を記述したいときはinitializeに書「かなければならない」
> initializeが動作する通常の場合においてC.newとするとCクラスの新規オブジェクトが自動で生成されて返ってくるが、
> newを再定義した場合におけるC.newはnewメソッド内で定義した最後の処理のオブジェクトを返す
> それは通常Cクラスの新規オブジェクトではありえない

これが目からウロコでした。
つまりこれは自分が提示した例だと、「newという特異メソッドを自分で定義してしまった」だけなんですね。
さっき自分でも試してみたところ、
Cクラス内でnewを自分で定義するとオブジェクト生成のときにCクラス内のインスタンス変数に触れないとか、
tmp=C.new
p tmp.class
とかしたらCじゃない、newメソッド内で生成した別のオブジェクトのクラスが指定されていたのでなんか変だなと思っていたところでした。
たいへん勉強になりました。

> もし、新規オブジェクトを作る意味が薄い「一連の処理をまとめて起動して終わるだけのカタマリ」を記述したいのなら、
> クラスではなくモジュールとして定義して、なんか適当な特異メソッドを適当な名前で定義して呼ぶようにするといい

まさにやろうとしていたのはこの事でした。よくわかりましたね…。
実はDXRubyでゲーム作る際に(考える必要は正直あんまり無い気がするんですが)
DXRubyの処理を一箇所に固めて、後でライブラリの変更があった時にそこだけ変えられるようラッピング?しようとしてたんですが、
ImageとかSoundとかがクラスとして定義あったので、そのときそれらの「Hoge.new」をどう表したら良いんだろう・・・となって弄っていて
>>555の状態になりました。

胸のつかえが下りました。本当にありがとうございました。
558デフォルトの名無しさん:2013/10/01(火) 18:20:51.04
1234という四桁の数字を[1,2,3,4]とバラバラにして格納しようとしたのにできない

a = "1234"
b = a.unpack ("#{4.times do print("a1") end}")

puts b

じゃ駄目なの???
559デフォルトの名無しさん:2013/10/01(火) 19:29:47.81
# coding: euc-jp

a = "1234"
b = []
y = a.split("")
y.each do |z|
  b.push(z.to_i)
end
p b

# C:\work>ruby spl.rb
# [1, 2, 3, 4]
560デフォルトの名無しさん:2013/10/01(火) 20:50:22.51
a="1234"
b=[]
a.size.times{|x| b << a[x].to_i }
p b
561デフォルトの名無しさん:2013/10/01(火) 21:26:21.58
>>558

その 4.times ... の値は "a1a1a1a1" ではなく 4 だ。

"#{...}" は式の値で展開される。
print は標準出力に値を出力し、 nil を返す。
Integer#times はブロックを評価し、 self を返す。
562デフォルトの名無しさん:2013/10/01(火) 21:46:24.85
>>559
>>560
あーなるほど!
563デフォルトの名無しさん:2013/10/01(火) 21:50:02.36
>>561
レス感謝します
ちょっと考えてみます
564デフォルトの名無しさん:2013/10/01(火) 22:12:45.58
a="1234"
b=[]
b=a.chars
b.map{|x| x.to_i }
p b
565デフォルトの名無しさん:2013/10/01(火) 22:28:19.23
横でROMってた初心者ですが勉強になります
566デフォルトの名無しさん:2013/10/01(火) 22:58:09.99
>>564
メソッドチェーンを使うのなら、できれば一行で....

irb(main):001:0> a="1234"
=> "1234"
irb(main):002:0> a.chars.map { |c| c.to_i }
=> [1, 2, 3, 4]
irb(main):003:0>
567デフォルトの名無しさん:2013/10/01(火) 23:06:01.34
>>565
この中でいくつか「やってはいけないこと(習慣としてはいけないこと)」がある
なんでもかんでもやってはいかん
568デフォルトの名無しさん:2013/10/01(火) 23:13:22.97
"1234".chars.collect(&:to_i)
569デフォルトの名無しさん:2013/10/01(火) 23:27:03.95
Object.singleton_class.ancestors.detect{ |k| k.instance_methods(false).include?(:new) }
=> Class
570デフォルトの名無しさん:2013/10/01(火) 23:30:51.95
class C
 def self.new
  super
 end
 def initialize
  @a=3
 end
end
C.new #=> #<C:0xdc3750 @a=3>
571デフォルトの名無しさん:2013/10/01(火) 23:37:09.40
>>560のa[x]は何でa[x-1]じゃなくて答えが合ってるんだろう
a[1]は"2"ですよね?
572デフォルトの名無しさん:2013/10/01(火) 23:48:27.72
>>571
> 3.times {|x| p x }
0
1
2
573デフォルトの名無しさん:2013/10/02(水) 00:04:42.33
あーなるほど盲点でした。どうもです
574デフォルトの名無しさん:2013/10/02(水) 07:54:32.55
b=[]
4.times do|i|
b.push(i+1)
end
575デフォルトの名無しさん:2013/10/02(水) 19:17:17.33
>>567
具体的にどれのことだろう?
そういう情報は貴重です。
576デフォルトの名無しさん:2013/10/02(水) 19:44:31.15
Ruby2.0/1.9環境においては>>566の "1234".chars.map{|s| s.to_i} が最適解というか一般解だろうな
>>568(を素直にmapで書いた "1234".chars.map(&:to_i) )も妥当だがすこしだけ中級編
577デフォルトの名無しさん:2013/10/02(水) 21:07:01.26
へー
こういうの基本に見えて初心者にとって重要だからためになる
578デフォルトの名無しさん:2013/10/02(水) 21:41:13.16
おいおい話がそれてるぞ
やってはいけないのはどれだよ
579デフォルトの名無しさん:2013/10/02(水) 21:43:11.76
>>564 だな
b.map{|x| x.to_i } は破壊的ではないので、b の内容は変わらない
580デフォルトの名無しさん:2013/10/02(水) 21:57:20.23
>>560 もかな
今回のように each や map で用が足りるなら添字での参照は避けるべき
一個ずれ参照などのバグを生みやすい

each と map はがんばって覚える価値があるよ
581デフォルトの名無しさん:2013/10/02(水) 22:19:32.24
メソッドチェーンとか初めて知ったby初心者
582デフォルトの名無しさん:2013/10/02(水) 22:22:12.15
>>559も時代遅れかな
str.split('')やstr.split(//)がなにをしているか読める必要はあるけど、1文字分割を目的にこれを書く必要はもはやない
あと、aが文字列で直後に配列bでy、zとキモい変数名が続くのが果てしなくキモい
583デフォルトの名無しさん:2013/10/03(木) 13:45:10.96
charsまじなんなん?
俺の本にはそんな単語存在しないし

とりあえずstringメソッドに関するものは全部charsつけとくわ
584デフォルトの名無しさん:2013/10/03(木) 14:11:27.64
「Stringクラスのインスタンスメソッドcharsは、selfのエンコーディング情報を元にselfを"1文字"ずつ列挙するEnumeratorオブジェクトを返す」
わからない語がひとつでもあったらString#charsは使えない

そんな無理して能動的に暗記してまで使うメソッドではないので、使いたいときにマニュアルから探して使えれば十二分
585デフォルトの名無しさん:2013/10/03(木) 18:08:17.95
1文字ずつにばらした配列じゃなかったっけ?
586デフォルトの名無しさん:2013/10/03(木) 18:33:35.26
2.0 から to_a しなくて済むように配列を返すようになったらしいよ

% irb
irb> RUBY_VERSION
=> "2.0.0"
irb> "おもてなし".chars
=> ["お", "も", "て", "な", "し"]
587デフォルトの名無しさん:2013/10/04(金) 02:29:33.64
『RとRubyによるデータ解析入門』(http://www.oreilly.co.jp/books/9784873116150/)を読んでいてつまずいてしまったのですが、
もしよければ助けてください。Rubyは2.0.0、OSはMac OSX(10.8.5)です。

同書で「クラスからインスタンスを作成する」という話で、こんな例が出てきます(p. 14)。
まずはクラスの定義(書いてあるとおりに実行しました)。

irb(main):001:0> class Dog
irb(main):002:1> attr :breed,:color,:name
irb(main):003:1> def initialize(name,color,breed)
irb(main):004:2> @name,@color,@breed = name,color,breed
irb(main):005:2> end
irb(main):006:1> def bark(volume=:softly)
irb(main):007:2> make_a_ruckus(volume)
irb(main):008:2> end
irb(main):009:1> end

で、オブジェクトを生成します。
irb(main):010:0> my_dog = Dog.new('Rover',:brown,'Cocker Spaniel')

ここまではうまくいったのですが、その続きに、
my_dog.bark #この場合は犬はsoftlyに鳴く
と書いてあったので実行してみたところ、NoMethodErrorで「make_a_ruckusが定義されていない」と言われてしまいます。
このmake_a_ruckusなる部分が何なのかよく分からず(コードを見る限り、barkメソッドの定義に含まれてますよね)、途方に暮れています。
何か対処法があれば教えていただけませんでしょうか。
588デフォルトの名無しさん:2013/10/04(金) 03:03:00.17
>>587
そのコードを見る限り、barkメソッドの定義に make_a_ruckus(volume) は含まれていない。
あるのは呼び出しだけなんだが、中身どっかに書いてない?
589デフォルトの名無しさん:2013/10/04(金) 03:34:17.34
>>588
それが、これが初出なんです。
ひょっとしてこの例は、読者が自分で入力して試すものではなくて、「クラスの定義ってたとえばこういう感じで書くんだよ」というだけのものなのでしょうか。
590デフォルトの名無しさん:2013/10/04(金) 05:17:38.42
ものすごく一般論としては、
irb>
とかのプロンプトのあとに書いてある場合、それは疑似コードや一部抜粋ではなく
そのまま入力して実行すると結果が得られることを示す

だからどっか地の文にでも補足説明があるべきだが、
そんなものがないというなら読者が打ち込んで試すことを想定してない疑似コードなのだろう

それこそありがちな例としては本を作るときに章を前後させたので後ろの章(たとえばクラスの継承の章)に書いてあるとか
こんなとこつまずくような基礎知識不足な人は本の読者として想定していない(RとRubyはただの道具で初心者説明する気なし)とか
591デフォルトの名無しさん:2013/10/04(金) 09:48:23.62
>>590
ありがとうございます。
書き方がまずかったですが、プロンプトは私がターミナルで実行したときのものをそのままコピペしたもので、本には記載されていません。
ターミナルでどういうふうに入力したか、具体的にお伝えしたほうがよいかと思ったもので。

とりあえず、ここはいったん保留して続きを読んでみることにしました。
592デフォルトの名無しさん:2013/10/04(金) 13:52:45.61
Arrayのイテレータのブロックの中で配列自身にアクセスすることは出来ますか?
593デフォルトの名無しさん:2013/10/04(金) 19:58:43.76
ブロックの中でも外側の変数は見れる

a = [1,2,3]
a.each {|e| p a }
594デフォルトの名無しさん:2013/10/04(金) 23:07:08.06
>>593
その場合ですと a って名前はわからない状態です
595デフォルトの名無しさん:2013/10/05(土) 00:18:10.86
?
596デフォルトの名無しさん:2013/10/05(土) 00:26:11.81
ブロック内で配列の名前を使わずにってことかな

a.each_with_object(a) {|e, arr| p arr }
597デフォルトの名無しさん:2013/10/05(土) 01:15:09.99
リテラルに対して、ということじゃないの?
598デフォルトの名無しさん:2013/10/05(土) 01:26:44.58
そんなときこそ instance_eval

[1,2,3].instance_eval { each {|e| p self } }
599デフォルトの名無しさん:2013/10/05(土) 04:05:10.52
ブロック内でselfを見たいってことだから、どっかでevalするしかねえ
600デフォルトの名無しさん:2013/10/05(土) 08:37:58.26
well defined じゃない質問を投げていく人が多いな。
しかも回答に対してあまり応答しないから、質問の意図が絞り込めない。
601デフォルトの名無しさん:2013/10/05(土) 09:18:51.44
初心者故分からないことがうまく説明できないのでは
602デフォルトの名無しさん:2013/10/05(土) 10:10:38.19
[1,2,3].each{|x| puts x }

イテレータという言葉を使ってることに惑わされたが
こういう単純なことだったりして
603デフォルトの名無しさん:2013/10/05(土) 17:01:44.44
DXRuby使っていてどうしてもわからなくなったので質問。

文字コードを文頭で #!ruby -Ks と指定しているにも関わらず、
Window.captionに日本語(Shift_JIS)で名前を入れると文字化けします。

しかもここ数時間の出来事で、過去のうまくいっていたときのコードをコピーして
同じくWindow.captionで日本語を設定している部分だけを抜き出すとうまくいく始末で、
全く同じコードにもかかわらず文字化けする例としない例が存在していて頭がグッチャグチャです。

ちゃんと日本語(Shift_JIS)を読み取るようにさせたいのですがどうしたらよいでしょうか?
ちなみにうまくいくのもいかないのもコードは以下のようになります。

#!ruby -Ks
require 'dxruby'
Window.caption="てすと"
Window.loop do
end
604デフォルトの名無しさん:2013/10/05(土) 17:14:12.16
>>603
DXRubyはRuby1.8上だとShiftJISサポートのみらしくて、
Rubyの文字コード対応は1.8/1.9/2.0で仕様が「迷走」してきた部分

だから、使っているRubyとDXRubyのバージョンを明記したほうが、
期待している回答を得られやすいと思うよ

# DXRubyは触ったことが無いので、おせっかいモードですた....
605デフォルトの名無しさん:2013/10/05(土) 17:24:21.56
>>604
すみません、そこまで考えが及んでいませんでした。
Rubyは1.9.3、DXRubyはdxruby140-mswin32-ruby19 です。
606デフォルトの名無しさん:2013/10/05(土) 17:46:46.05
#!ruby -Ks を削除して一行目か二行目に # coding: shift_jis したらどうなる?
607デフォルトの名無しさん:2013/10/05(土) 17:55:05.82
>>606
文字化け起こすほうだとエラーになりました。
気になったのでそのままの状態で、
Window.caption="てすと" の部分を
Window.caption="test" に直したらうまくいきまして、
その後更にWindow.caption="てすと"に戻したら
エラーは起きずに文字化けの状態になりました。

もう何がなんだかさっぱりです。
608デフォルトの名無しさん:2013/10/05(土) 18:06:11.74
保存時の文字コードがおかしいのだろうとエスパー
609デフォルトの名無しさん:2013/10/05(土) 18:52:36.83
>>601
できないことではなくやりたいことを言ってもらえるとかなりの割合でうまくいくのだが
質問のやりかた質問スレとかあるといいけどメタだな
610デフォルトの名無しさん:2013/10/05(土) 18:55:08.40
>>607
そのエラー出力貼ってちょ
611デフォルトの名無しさん:2013/10/06(日) 15:28:00.35
https://i.tipness.co.jp/pc/schedule/registration/?area_id=&page=2
ここのレッスン情報をまとめて入手したかったので、
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
のスレで質問したところ、親切な方が676で、rubyのプログラムを書いてくれました。
そこで、私は、winXPにruby-2.0.0-p247.zipをインストールしました。
そして、
http://www.rubylife.jp/install/install/index4.html
このやり方で、コマンドプロンプトに、
サンプルプログラムの「Hello World!」を表示することに成功しました。

そこで、
ruby -e '(1..3).each{|i| html = `wget --quiet --no-check-certificate -O - \
https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}`; \
html.sub(/.*<td><p class="mb5">/m, "").split("\n").each{|l| next unless l.start_with?("<td>"); \
l.strip!; print l == "<td>" ? "\n" : l.gsub(/<\/?td>/, "") + "\t" }; \
sleep 2}'
を、サンプルプログラムと同じ要領で動かしたところ、
t01.rb:1: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '
('
ruby -e '(1..3).each{|i| html = `wget ...
のエラーが出ました。
どこが悪いのか教えて下さい。
612デフォルトの名無しさん:2013/10/06(日) 16:04:05.83
>>611
参照先は見てないけど、以下が気になった

Windowsのコマンドラインでは直接指定できない文字が存在し、
空白や特殊記号を含むパラメタは " (ダブルクォーテーション)で囲む必要がある
パラメタを複数行にはできないのでは?
windows には wget コマンドは存在しない

なので、
ruby -e "(1..3) 〜 "
のように全体をダブルクォーテーションで囲み、中のダブルクォーテーションをシングルクォーテーションに置き換える
また、改行させず全体を1行で記述する
ついでに wget を使っているところを wget に依存しないように書き換える
あたりを試す必要がある

たぶん初心者だときびしい
613デフォルトの名無しさん:2013/10/06(日) 17:29:28.09
やりたいコマンドラインをバッチファイル(r.bat)に保存して、バッチファイルを実行するてもある。
プロンプトでrを入力してEnterをおします
614デフォルトの名無しさん:2013/10/06(日) 19:41:43.75
>>611
-e '・・・'の中に書いてあるプログラムをテキストファイルに書き出し、コマンドプロンプトで
ruby ファイル
とやれば実行ばできる。多分。

ただし、611さんも言ってる通りwgetコマンドがないのでエラーになる。
windows版のwgetもあるようなので頑張ってインストールしてみてくれ。
615デフォルトの名無しさん:2013/10/06(日) 19:57:46.17
プログラミングを正面から覚える気はないようだから、組んでくださいお願いしますみたいなスレに行ったほうがいいんじゃないの?
616デフォルトの名無しさん:2013/10/06(日) 20:00:35.39
keep-alive で sleep 2 をはさみつつ 5000 回 GET というのは許されるレベルなんだろうか
お仕事で Web 鯖を管理されたことのある方に聞いてみたい
617デフォルトの名無しさん:2013/10/06(日) 20:19:58.43
ページごとにwgetの単発プロセスを実行しているので接続張りっぱなしにはならないんじゃないのかな。
618デフォルトの名無しさん:2013/10/06(日) 21:23:10.19
wget -d でヘッダ見れるけど keep-alive してるっぽいよ
curl なんかもデフォだと keep-alive しようとする
619デフォルトの名無しさん:2013/10/06(日) 21:28:00.96
>>617-618
オーケーわかった君たちはHTTPのRFC音読3回の刑な
620デフォルトの名無しさん:2013/10/06(日) 21:31:24.08
>>619
そういうのはいらないから自分の言葉で説明しておくれ
621デフォルトの名無しさん:2013/10/06(日) 21:42:05.15
MaxKeepAliveRequests
622デフォルトの名無しさん:2013/10/06(日) 21:52:38.39
コマンド実行するたび毎度TCP接続をクローズしているのにkeep-aliveもへったくれも無いような。
623611:2013/10/06(日) 22:10:00.45
みなさん、レスありがとうございます。
ということは、
http://yakinikunotare.boo.jp/orebase/index.php?wget%A1%CAWindows%C8%C7%A1%CB
この人のまねをすれば、rubyでwgetが使えるようになるのでしょうか?
624デフォルトの名無しさん:2013/10/06(日) 22:33:46.64
>>623
まず自分で試してみろ
625616:2013/10/06(日) 23:33:04.42
>>617,622
実験してきました。失礼しました。おっしゃる通りでした
wget が終了するときに TCP 接続も閉じられていたので
keep-alive もへったくれもありませんでした

wget や curl がデフォで keep-alive を試みるっていうのはあくまで
wget http://www.example.com/ http://www.example.com/ みたいに
ひとつのプロセスで複数のリソースを取得する場合の話なのですね

とりあえず RFC の音読いってきます
626611:2013/10/07(月) 00:31:23.52
つか、
>>611
>ruby -e '(1..3).each{|i| html = `wget --quiet --no-check-certificate -O - \

ruby -e
は、ファイル内に書いちゃっていいもんなんですか?
なんか、コマンドプロンプトで書くような気がして来たんだけどw
627デフォルトの名無しさん:2013/10/07(月) 01:53:46.07
ruby -e と引用符を除いてファイルに記述
628611:2013/10/07(月) 02:13:38.32
>>627
了解しました。

では、
(1..3).each{|i| html = `wget --quiet --no-check-certificate -O - \
https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}`; \
の部分を、
(1..3).each{|i| html = `open(https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}){}`;
と書き直すことは無理でしょうか?
そうすれば、wgetを使わなくて行けるのですが。
629611:2013/10/07(月) 02:15:47.26
つか、htmlは文字列を入れる変数、iはインクリメントされる数字の変数ですよね?
630デフォルトの名無しさん:2013/10/07(月) 02:41:33.17
どんな処理が書いてるのか読み取れるなら
自分の知ってる言語で書いた方が早いよ
631611:2013/10/07(月) 02:49:23.00
>>630
過去に、Cとphpをほんのちょびっとかじっただけです。
で、rubyは文字処理に強いと聞いているので、この際マスターしたいのです。
wgetを使わないでどなたか書いてくれないですかね?w
これだと短いプログラムだから勉強になります。
632611:2013/10/07(月) 02:54:12.05
html.sub(/.*<td><p class="mb5">/m, "").split("\n").each{|l| next unless l.start_with?("<td>"); \
l.strip!; print l == "<td>" ? "\n" : l.gsub(/<\/?td>/, "") + "\t" }; \

この辺の正規表現での文字列操作にすごく興味あります。
これがちゃんと動くプログラムだと、自分で色々変更して勉強になると思うのです。
633うゆさま:2013/10/07(月) 05:19:42.59
>>603
dxrubyはutf−8じゃないと無理だよ
それcaptionだけじゃなくてWindow内に文字列描画しても文字化けするっしょ
634うゆさま:2013/10/07(月) 05:23:53.36
ファイルがshift−jisのままだと
#!ruby -Ks
require 'dxruby'
require 'kconv'
Window.caption="てすと".toutf8
Window.loop do
end

すべてのマルチバイトでこうするしかなくなる
ソースファイル自体をutf−8でかけってことだよks
635デフォルトの名無しさん:2013/10/07(月) 05:53:43.28
>>632
html.sub(/.*<td><p class="mb5">/m, "").split("\n").each{|l|
 next unless l.start_with?("<td>")
 l.strip!
 print( l == "<td>" ? "\n" : l.gsub(/<\/?td>/, "") + "\t" )
}

HTMLの<td><p class="mb5">までを""に置き換え(=削除)残りのテキストを改行で区切って配列化し枚挙処理
 文字列(一行)が<td>で始まっていないなら無視して次の行
 文字列の前後の空白を削除
 文字列が<td>なら改行を、違うならタグを削除した文字列+タブをプリントアウト
枚挙終わり
636デフォルトの名無しさん:2013/10/07(月) 08:06:00.25
>>628

require 'open-uri'
637デフォルトの名無しさん:2013/10/07(月) 11:10:34.24
>>610
ごめんなさい、>>603 = >>607です。
返信が遅れてしまい申し訳ありません。
地元のおっさん達に神輿担ぎの打ち上げだとかで日本酒飲まされまくって死んでましたorz
アルハラダメだよ絶対…。

エラーの件なのですが、>>608を見てもしや?と思って
普段使っているエディタ(Mery)の文字コードを見てみたら、
いつの間にか日本語(シフトJIS)がUTF-8(BOM無し)が変更されていてらしく、
それを日本語(シフトJIS)に直したらうまくいきました。

>>604,>>606,>>608,>>610の皆様、本当にありがとうございました。
また何かありましたらよろしくお願いいたします。
638デフォルトの名無しさん:2013/10/07(月) 12:57:13.71
>地元のおっさん達に神輿担ぎの打ち上げだとかで日本酒飲まされまくって死んでましたorz

「次はこの若いあんちゃんを担ごうぜ!」「おう!」
「セルフ!アペンド!セルフ!インサート!」

rescueされることのないStopIteration
神輿担ぎ夜の部はまだ始まったばかりだ
639デフォルトの名無しさん:2013/10/07(月) 13:06:51.97
rescueされることのないStopIteration
神輿担ぎ夜の部はまだ始まったばかりだ
640611:2013/10/07(月) 14:35:46.35
>>635-636
教えていただき、ありがとうございます。

require 'open-uri'
(2..5).each{
|i| html = `open(https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}){}`
html.sub(/.*<td><p class="mb5">/m, "").split("\n").each{
|l| next unless l.start_with?("<td>")
l.strip!
print( l == "<td>" ? "\n" : l.gsub(/<\/?td>/, "") + "\t" )
}
}

を、ruby t04.rbとすると↓のようになります。

C:\a>ruby t04.rb
t04.rb:3:in ``': Invalid argument - open(https://i.tipness.co.jp/pc/schedule/reg
istration/?page=2){} (Errno::EINVAL)
from t04.rb:3:in `block in <main>'
from t04.rb:2:in `each'
from t04.rb:2:in `<main>'
641611:2013/10/07(月) 14:39:49.04
ということは、
|i| html = `open((p)https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}){}`
この行が悪くて、
変数htmlの中にページの内容が入っていない
ということですよね?
どうすればいいでしょうか?
642611:2013/10/07(月) 14:43:20.60
すみません、>>641の(p)は、ないものとして下さい。
643デフォルトの名無しさん:2013/10/07(月) 15:06:51.65
だいぶ前にも言ったと思うんだけど、スクリプトの作り方が違う
まったくなにも知らない状態でまったく知らないまったく教育的意図のないスクリプトを利用改造することは実質不可能

スクリプト言語を学ぶのが目的ではないのなら、あなたがやることはスクリプトを書くことではない
なにか専用のアプリケーションを使って目的を達成するべき
この場合はダウンローダーとかなにかそういうもの
644デフォルトの名無しさん:2013/10/07(月) 15:21:16.64
645デフォルトの名無しさん:2013/10/07(月) 15:22:55.14
>>641
`` (バッククォート)はその中のコマンドラインのコマンドを実行してその標準出力を文字列として返す。
なのでまずopenコマンドというコマンドラインコマンドが無いとダメなんだけど、ある?

要するにやりたいのは指定されたURLのページをダウンロードしてきて中身を変数htmlに入れること。
これをRubyだけでやりたいのであれば例えばnet:httpという標準ライブラリを使う。
・・・ただこれ、単純なことをやるだけであれば無駄に使うの面倒臭いんだ。
上記のURLはhttpsなのでnet:httpsを使う必要もあるし。

他にもhttpclientというライブラリをgemsでインストールして使う、とか。
646デフォルトの名無しさん:2013/10/07(月) 15:27:57.10
>>641
バッククォートで囲むと何が起こるのかまず調べてみることです。
そして、open-uriのサンプルを探して、openメソッドをどう使えばいいか調べるといいでしょう。

>>643
プログラミングに触れるきっかけは何でもいいんですよ。
仕事じゃないんだから。
647デフォルトの名無しさん:2013/10/07(月) 15:34:07.82
>>646
仕事じゃないんだからわざわざ開発実行環境インストールして
ぜんぜんわけわからんものわけわからんのに書き換えてぜんぜん動かなくて
わけわからんのに質問してわけわからんこと言われて放置されて4日経ってひとつも進んでないなんて
やってられんのですよ
648デフォルトの名無しさん:2013/10/07(月) 15:35:46.62
>>645
gemってなんですか変数ってなんですかってレベルの人にするアドバイスじゃねえな
649デフォルトの名無しさん:2013/10/07(月) 15:43:28.45
コンコルドの誤りってやつですな
せっかくここまで時間かけてやったんだからって奴

>>641
おそらくこれから先もトラブルなんかで数時間数十時間の時間がかかることが予想される
(そのスクリプトはもともと他人が使うようにはできていない)
今回のは手作業なり、サイトダウンローダーなり使うなりででも終わらせてしまうといい

もしプログラミングに興味があるのなら(ないと思うけど)別途入門書や入門サイトで勉強をおすすめ
650デフォルトの名無しさん:2013/10/07(月) 15:57:57.33
>>647
あなたは効率的に人生を生きてるんだね。
651611:2013/10/08(火) 01:21:44.26
require 'open-uri'
open('http://ikura.2ch.net/test/read.cgi/ms/1379562689/1/'){|f|
puts f.read#取得して1行ずつ読み出す
}

つーか、↑だとエラーにならない、しかし、
↓ループにしてインクリメント構造にするとエラーになる
これをエラーにさせない方法をご存じの方はいませんかね?

require 'open-uri'
(1..5).each{
|i| open('http://ikura.2ch.net/test/read.cgi/ms/1379562689/{i}'){|f|
puts f.read#取得して1行ずつ読み出す
}
}
652611:2013/10/08(火) 01:28:45.12
つか、
http://ikura.2ch.net/test/read.cgi/ms/1379562689/1/
http://ikura.2ch.net/test/read.cgi/ms/1379562689/2/
http://ikura.2ch.net/test/read.cgi/ms/1379562689/3/
http://ikura.2ch.net/test/read.cgi/ms/1379562689/4/
http://ikura.2ch.net/test/read.cgi/ms/1379562689/5/
と変化させたいのだけど、
文字列の12345とiに代入された値の12345は違うのではないかと、
いう気がしないでもないのですよ。
653デフォルトの名無しさん:2013/10/08(火) 02:04:39.79
(1..5).each{|i|
open("http://ikura.2ch.net/test/read.cgi/ms/1379562689/#{i}"){|f|
puts f.read#取得して1行ずつ読み出す
}
}
654611:2013/10/08(火) 02:48:29.33
>>653
おお、すばらしい、ありがとうございます。

これでさらに、
「puts f.read#取得して1行ずつ読み出す」
の行を
「ターゲットの文字列をテキストに書き出す作業をする」
の行に置き換えられないでしょうか?

文字列に強いrubyならテキストファイルを作る、
そこに、抽出した文字列を追加書きする、なんて関数がありそうな気がするんですが。
655611:2013/10/08(火) 03:02:16.79
https://i.tipness.co.jp/pc/schedule/registration/?page=3
つか、このティプネスのデータベース的なページは夜間になると使えなくなるから
ご注意下さい。
656611:2013/10/08(火) 03:04:19.98
これで、>>635の文字列操作が使えれば万々歳なのだけど。
657デフォルトの名無しさん:2013/10/08(火) 03:06:02.34
上の方々の回答や提案無視して質問繰り返すのって、どうなんでしょう。
せめて調べたふりくらいはしましょうよ・・・
658デフォルトの名無しさん:2013/10/08(火) 03:18:12.18
ぬるぽ君とめりぽ君の月のお小遣いを比較して、2人のお小遣いの総計も出します。
2人とも貰えない月というのがあります。集計期間は両者一定であり、仮に12ヶ月とします。
ぬるぽ君のお小遣いのデータは
nulpo = [
 { 'month' => '1', 'money'=> 100 }
 { 'month' => '2', 'money'=> nil }
 { 'month' => '3', 'money'=> 100 }
 { 'month' => '4', 'money'=> nil }
 { 'month' => '5', 'money'=> 150 }
]
こんな感じのハッシュになっています。(厳密に言うと型はHashではなくてActiveRecordの戻り値ですが)
それを↓のような配列にしたいのです。
[
 ['1', 100, 200, 300]
 ['2',  0, 200, 200]
 ['3', 100,   0, 100]
 ['4',  0,  0,  0]
 ['5', 150,   0, 150]
]
  月 ヌルポ メリポ 計  ※最初の要素が月、次にぬるぽのお小遣い、めりぽのお小遣い、2人の合算が来るということです。

array = []
(1..12).each do |month|
 temp_array = []
 temp_array[0] = # 月を代入
 temp_array[1] = # ヌルポ君のお小遣いを代入
 temp_array[2] = # メリポ君のお小遣いを代入
 temp_array[3] = # 2人のお小遣いを合算して代入
 array << temp_array
end

・・・自分で書いたらこんなコードになりそうなのですが・・・・もう少し良いコードはございますでしょうか?
659611:2013/10/08(火) 03:22:27.49
>>657
ぶっちゃけ、
回答や提案を言われてもよくわからないのです。
入門者なので具体的なプログラムを提示してくれないとわかりません。
660デフォルトの名無しさん:2013/10/08(火) 05:25:27.75
学習する意欲の無い人を初心者って呼ぶかなあ?
結果だけ欲しいなら元のスレで動きませんでしたって報告して
別の人に答えてもらえば良かったんだよ

require 'net/https'
(http=Net::HTTP.new('i.tipness.co.jp',443)).use_ssl=true
(1..3).each{|i|http.get("/pc/schedule/registration/?page=#{i}").body[/^<table class="table2[^>]+>(.*?)<\/table>/m,1].
scan(/^<td>.*$/).each{|td|print(td=='<td>'?"\n":td.gsub(/<\/?td>/,'')+"\t")};sleep 2}
661デフォルトの名無しさん:2013/10/08(火) 05:30:59.38
Javaスレの人、追い払い方上手ね
見習いたいもんだ
662デフォルトの名無しさん:2013/10/08(火) 07:53:27.77
>>658

def f(arr)
  arr.map { |hash|
  money = hash['money']

  [hash['month'], if money then money else 0 end]
}
end


f(nulpo).zip(f(melipo)).map { |(month1, money1), (month2, money2)|
  raise "month1: #{month1}, month2: #{month2}" if month1 != month2

  [month1, money1, money2, money1 + money2]
}
663662:2013/10/08(火) 08:37:27.25
インデントがズレていたので再カキコ

def f(arr)
  arr.map { |hash|
    money = hash['money']

    [hash['month'], if money then money else 0 end]
  }
end


f(nulpo).zip(f(melipo)).map { |(month1, money1), (month2, money2)|
  raise "month1: #{month1}, month2: #{month2}" if month1 != month2

  [month1, money1, money2, money1 + money2]
}
664デフォルトの名無しさん:2013/10/08(火) 10:29:25.00
数列ごとに配列化するのはどういう定石があるのでしょうか?
例えば5列ごとなら[1,2,3,・・・・23]を
[1,2,3,4,5]
[6,7,8,9,10]
....
[16,17,18,19,20]
[21,22,23]にする感じで。

一応その目的は
a=[*1..23]
b=[]
while a[0] do
 b << a.shift(5)
end
p b
あたりで達成はできるのですが
665デフォルトの名無しさん:2013/10/08(火) 10:35:41.06
元の配列を操作するなんて論外でしょ
666デフォルトの名無しさん:2013/10/08(火) 10:36:26.70
Rubyの基本的なクラス、String、Array、Hash、の元になるEnumerable、あとIntegerあたりのメソッドは見ておくといい
暗記しなくていいから、どんな動作するメソッドがあるかだけでも見ておくといい
必要になったときに頭になんか引っかかるから
ttp://doc.ruby-lang.org/ja/1.9.2/class/Array.html

読みにくいけどな!
i
rb> (1..23).to_a.each_slice(5).each{|a| p a}
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20]
[21, 22, 23]
667デフォルトの名無しさん:2013/10/08(火) 10:42:52.60
たぶん最初のto_aいらん
(1..23).each_slice(5).to_a
668デフォルトの名無しさん:2013/10/08(火) 10:51:47.12
>>665-667
なるほど
ご親切にありがとうございました。
669デフォルトの名無しさん:2013/10/08(火) 11:39:41.09
>>667
今回は「いる」と思う
配列なんとかしたいですという質問なのだから、配列という区切りは例示であったほうがいい
変にirbでワンライナーにするから意図がわかりにくいのだけども

arr = (1..23).to_a
arr.each_slice(5).each{|a| p a}

うむ完璧
670デフォルトの名無しさん:2013/10/08(火) 11:46:22.37
irbとかって2行3行にすると見難くなるんだよな
なるべく1行で書いて、残りは結果表示にしたい
671611:2013/10/08(火) 17:40:43.46
>>660
ありがとうございます。
しかし、↓こんな感じで、エラーになります

C:\a>ruby t12.rb
C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_con
nect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verif
y failed (OpenSSL::SSL::SSLError)
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `bloc
k in connect'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/timeout.rb:52:in `timeou
t'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:918:in `conn
ect'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:862:in `do_s
tart'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:851:in `star
t'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1367:in `req
uest'
from C:/Program Files/Ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1126:in `get
'
from t12.rb:3:in `block in <main>'
from t12.rb:3:in `each'
from t12.rb:3:in `<main>'
672デフォルトの名無しさん:2013/10/08(火) 18:25:27.05
全く成長していない・・・
さすがにもうスレ違いなんじゃないですかね

冗談抜きで、手動でやった方が早いまである
673デフォルトの名無しさん:2013/10/08(火) 19:27:46.52
>>662-663
ありがとうございました!
674デフォルトの名無しさん:2013/10/08(火) 19:28:50.51
>>671
エラーメッセージでググれ
675デフォルトの名無しさん:2013/10/08(火) 19:43:22.16
1.8から2.0にしたら日本語コード系の問題多くて嫌になった。
ソースコードの日本語コードがどーたらあーたらとめんどくせえ。
どっかにすっきり分かる解説ってないの?
676デフォルトの名無しさん:2013/10/08(火) 20:51:08.34
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
677デフォルトの名無しさん:2013/10/08(火) 20:57:22.61
場合に応じて読みやすい方だけど、
unless else が繋がる場合は、分かりづらいので、
真偽か処理内容を逆にして if else にしたり。
678676:2013/10/08(火) 21:13:52.17
>unless else が繋がる場合は、分かりづらい
なるほど。たしかに、これは自分も感じます。

また「if variable」でtrueが返るのは、
variableがnilでない時とfalseでない時になるので、
厳密にnilでないことだけを判定したい場合や、
nilでない!というニュアンスを強めたい場合に
「unless variable.nil?」と書こうかなと考えました。

ありがとうございました。
679デフォルトの名無しさん:2013/10/08(火) 21:52:06.93
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
680デフォルトの名無しさん:2013/10/08(火) 21:53:18.21
誤ってリロードして再投稿してしまいました。すみません…
681デフォルトの名無しさん:2013/10/09(水) 01:33:44.51
>>675
各自でつくります
682デフォルトの名無しさん:2013/10/09(水) 01:46:31.53
Windows上でRubyの1.9をインストールしてnokogiriを使ってます。
ちょっと実験ということで人気のDMMで女優名を取得しようとしてるんですが、
どうにも取得できない名前があります。

具体的には
http://www.dmm.co.jp/digital/videoa/-/actress/=/keyword=ta/
の田村真樹やら田村まほなど。

doc.xpath("//div[@class='act-box']").inner_text
こんな感じに書いて一応は一覧は取得できるんですが、
どういうわけか歯抜けになります。

どう見ても同じ構造に見えるんですが、何か見落としがあるんでしょうか?
683デフォルトの名無しさん:2013/10/09(水) 01:52:15.36
あ、すいませんURLコピペしてて間違いに気が付きました。
違うURLで試してました…orz

こんなアホなミスで何時間も格闘してしまったw
スレ汚し失礼しました。
684デフォルトの名無しさん:2013/10/09(水) 10:25:07.47
>>676
俺はCやC++経験が長いせいか、制御なんかはifで分ける方が好きだなあ。
Rubyって.でどんどん繋げて一行で実現しようとする傾向あるでしょ。

それやりすぎると、パズル的な読解が必要になって面倒になってくるんだよね。
一行当たりの情報量の粒度、インデントとかの「パターン」として見た目で
制御がわかるような書き方の方が、結局あとからメンテしやすいのではないかと。

完結だから、とか日本語と語順が同じだから、とかで1行連続型を勧める
人が多いのは俺にはあわん。
685デフォルトの名無しさん:2013/10/09(水) 10:31:47.36
ふと思ったんですが、みなさんはある変数がnilでないことを判定する際に

if variable

と、

unless variable.nil?

とでは、どちらを使っていますか?

自分のコードを見直した時にまざっていて気持ち悪かったもので…
686デフォルトの名無しさん:2013/10/09(水) 11:53:51.12
unless variable==nil
687デフォルトの名無しさん:2013/10/09(水) 12:06:46.67
unless version>1.9
688デフォルトの名無しさん:2013/10/09(水) 18:07:56.64
if variable != nil
689デフォルトの名無しさん:2013/10/09(水) 18:23:12.82
>>675
るびまの記事が参考になるかも。

Ruby M17N の設計と実装
magazine.rubyist.net/?0025-Ruby19_m17n

Ruby 2.0.0 の注意点やその他の新機能
magazine.rubyist.net/?0041-200Special-note#l2

クックパッドを Ruby 2.0.0 に対応させた話 - 文字エンコーディング関係
magazine.rubyist.net/?0042-MigratingARailsApplicationToRuby200#l21
690デフォルトの名無しさん:2013/10/09(水) 18:28:19.09
PerlとPythonじゃなくてなぜRubyを選んだのですか?
691デフォルトの名無しさん:2013/10/09(水) 18:34:20.30
逆に、なぜPythonなのかとききたい。Pythonのかきかた(インデント)がイヤなら、Rubyだ
692デフォルトの名無しさん:2013/10/09(水) 18:35:56.17
Perl -> Python と使ってきて、Ruby にも興味があったからです
並行して、C# や Haskell も習得中です
693デフォルトの名無しさん:2013/10/09(水) 18:43:18.48
先に触ったのがRubyだったし
インデントは別にいいけどselfが嫌だし
1行に詰め込みたい症候群だからなあ

まあPythonも内包表記は好きだけどな、特にfor2つの時の挙動
694デフォルトの名無しさん:2013/10/09(水) 19:28:08.30
先に触ったのはRubyだったけど
Pythonに乗り換えた
一番の理由はRubyはGUIのフレームワークがどれも糞だった
695デフォルトの名無しさん:2013/10/09(水) 19:40:20.49
RubyのGUIは「Rubyでやること」が目的だからな
「GUIでなにかやること」が目的なら他の言語でやればいい
696デフォルトの名無しさん:2013/10/09(水) 19:41:28.72
なるほどPythonやってくる
697デフォルトの名無しさん:2013/10/09(水) 19:44:37.04
webkitが使えるライブラリがあればなあ
698デフォルトの名無しさん:2013/10/09(水) 20:20:19.85
GUIいう人はどうせWindowsだろうからwin32使えばいいんじゃないの
びじゅあるなんたらとか
699デフォルトの名無しさん:2013/10/09(水) 21:55:40.29
rubyはjrubyとrawrがいいらしいよ
700デフォルトの名無しさん:2013/10/09(水) 22:19:55.68
日本語まわりの実装ってPythonもRubyも大差ないの?
日本生まれだからRubyの方が出来がいい、とかない?
701デフォルトの名無しさん:2013/10/09(水) 22:25:19.96
他のLLは標準コーディングスタイルがありますが
Rubyにはないんですか?
もしないなら松本先生に作ってもらいたい
702デフォルトの名無しさん:2013/10/09(水) 22:31:49.52
>>700
EUC/SJISが主流の時代には日本発のRubyのほうが出来がよかったけど(過去形)、
どのプラットフォームでもUTF-8が普通に使える今の時代では大差無し
残念なことに、現行の1.9ではマジックコメントやら添付ライブラリといった変更で
日本語処理周りに不要な混乱を起こしたことで、逆に弱点となった....と思う

個人的にはRubyの進化(1.6から2.0)の流れを好意的に見ているが、
1.9の日本語対応だけは大失敗だったと見ている
まあ、あと数年もすれば2.x系が主流になるから、それほど気にはしていないが....
703デフォルトの名無しさん:2013/10/09(水) 22:32:02.85
インデントはスペース2つとか?
704デフォルトの名無しさん:2013/10/09(水) 22:46:50.22
1.9.1飛ばしていきなり2.0になってればまた違ったんだろうけど、たらればの話になっちゃうな
1.9.0と1.9.1があったからこそなんとかなった面も多いわけで
705デフォルトの名無しさん:2013/10/09(水) 22:50:36.75
>>702
>1.9の日本語対応だけは大失敗だったと見ている

エラー→Webで調べておまじない、みたいなのが多くて疲れた。
日本語でてこない、コメントでしか使ってないようなログ解析のスクリプトが
突然エラーとかで疲れた。
いろいろ嫌な思い出。
もうちょっとなんとかならなかったのかね?
706デフォルトの名無しさん:2013/10/09(水) 22:52:59.85
>>701
こういう企画なら昔やってた、今でも多少は参考になるだろう
http://magazine.rubyist.net/?0010-CodeReview
707デフォルトの名無しさん:2013/10/10(木) 10:10:00.73
>>703
3こ
708デフォルトの名無しさん:2013/10/10(木) 12:21:40.57
>>690
入門で出てくるプッツとゲッツがコンビ芸名みたいで可愛かったから
709デフォルトの名無しさん:2013/10/10(木) 14:58:50.64
windowsでpythonのvirtualenvで仮想環境を作ってgemを別々に管理する方法を教えてください
710デフォルトの名無しさん:2013/10/10(木) 14:59:23.99
なぜしたいかというと今gem listってしたら大量のパッケージがあふれかえってて訳がわからなくなりました
711デフォルトの名無しさん:2013/10/10(木) 17:30:39.88
とにかくRubyのソースコードをダウンロードしたくないので
Web上でp 100のpに関する実装を見たいのでURLください
712デフォルトの名無しさん:2013/10/10(木) 17:48:42.41
713709:2013/10/11(金) 09:31:22.39
やっぱりないんですね・・・
714デフォルトの名無しさん:2013/10/11(金) 17:04:55.24
rubyもsqlite3ぐらいは標準ライブラリに入れてもいいと思うんですが
715デフォルトの名無しさん:2013/10/11(金) 17:06:43.88
pythonスレ見ましたねわかります
716デフォルトの名無しさん:2013/10/11(金) 21:13:05.96
例外処理とやらを実装してみたらえらくロバストなプログラムになって感動したぞ
717デフォルトの名無しさん:2013/10/11(金) 22:03:31.96
2013年10月のPYPL PopularitY of Programming Language indexが
公開された。PYPLはGoogle検索エンジンにおいてプログラミング
言語のチュートリアルが検索された回数から、対象となるプログラ
ミング言語がどれだけ話題になっているかをインデックス化したもの。
1   Java       26.8%
2   PHP        13.2%
3   Python      9.8%
4   C#         9.5%
5   C++        9.1%
6   C          8.4%
7   Objective-C   8.1%
8   Javascript    7.6%
9   Visual Basic   3.1%
10   Ruby       2.6% ←がんばれ
718デフォルトの名無しさん:2013/10/11(金) 22:54:27.70
やっぱり一行野郎として使うにはPerlのような魔機能で負けているんですかね?
719デフォルトの名無しさん:2013/10/11(金) 23:03:59.71
Rubyが流行らないのは仕様などの議論が英語ではなく日本語メインだから
日本では流行っても海外では相手にされない
720デフォルトの名無しさん:2013/10/12(土) 00:50:20.84
Top10に入ってるのに流行ってないとかアホらしい
これだけがんばれれば十分
721デフォルトの名無しさん:2013/10/12(土) 01:14:46.64
TIOBEとかこの手の調査とか本当にどうでもいい。検索エンジンソースだし
722デフォルトの名無しさん:2013/10/12(土) 01:16:31.72
>>717
意外とpythonって健闘しとるんやね。
723デフォルトの名無しさん:2013/10/12(土) 01:49:06.79
この調査だと毎年下がってるね
724デフォルトの名無しさん:2013/10/12(土) 02:51:20.18
サイト名が pyDatalog ってまったくもう
725611:2013/10/12(土) 03:05:34.48
Rubyは日本でがんばるしかないのに、
君たちが入門者を冷たくあしらうから、先細りなんだよw
俺もpythonに行っちゃったしw
726611:2013/10/12(土) 03:20:01.33
そもそも、Rubyとpythonが統合すればいいんじゃないの?w
ほぼ、同じような感じするんだけどw
727611:2013/10/12(土) 03:21:14.68
ちなみに、PHPはコマンドプロンプトでは動かせないんですよね?
728デフォルトの名無しさん:2013/10/12(土) 04:16:16.32
うごく
729611:2013/10/12(土) 05:17:23.36
>>728
ああ、そうですか。
つまり、パソコンの能力が上がってきたから、何でも出来るって感じなんですかね?

ひょっとして、Cもコンパイルなしで、
コマンドプロンプトで動かせたりして?
730デフォルトの名無しさん:2013/10/12(土) 05:58:50.26
2枚の画像入力してどのくらい似ているかを0〜100で返してくれるライブラリ無いですか
731デフォルトの名無しさん:2013/10/12(土) 08:31:43.87
>>729
C++インタプリタも存在してるね
まあスレチだし自分で調べるかC関連のスレで聞いてくれ
732デフォルトの名無しさん:2013/10/12(土) 11:11:36.89
>>730

image similarity ruby でぐぐったら similie という gem があったけど、
これはハミング距離だから出力範囲がアレだな。
733デフォルトの名無しさん:2013/10/12(土) 11:12:44.91
>>729

cint でぐぐれ
734デフォルトの名無しさん:2013/10/12(土) 15:30:56.38
>>725
おれもそうおもう
735デフォルトの名無しさん:2013/10/12(土) 16:17:10.34
>>725
おれもそうおもう
736デフォルトの名無しさん:2013/10/12(土) 16:47:15.73
>>725
おれもそうおもう
737デフォルトの名無しさん:2013/10/12(土) 16:53:24.79
おれはそうは思いますん。
738デフォルトの名無しさん:2013/10/12(土) 17:07:09.86
英語ができないクズのせいでRubyが良くならない
739デフォルトの名無しさん:2013/10/12(土) 17:44:30.68
ホントにPythonマニアってのは、
Rubyが気になって気になってしかたないんだねえ....
740デフォルトの名無しさん:2013/10/12(土) 18:09:38.81
おれもそうおもう
741デフォルトの名無しさん:2013/10/12(土) 18:16:42.63
マイノリティの大半はそんな物だ。
742デフォルトの名無しさん:2013/10/12(土) 18:18:14.63
githubにあるrubyのソースコードにプルリクエスト送るときってさ
ブランチ名はなににしたらいいのかおしえて
バグをみつけたけどこのへんのルールがわからん
743デフォルトの名無しさん:2013/10/12(土) 19:19:48.36
fix-hoge とかが無難かな
744デフォルトの名無しさん:2013/10/12(土) 20:09:22.34
王様のブランチ
745デフォルトの名無しさん:2013/10/12(土) 21:02:02.07
Rubyで簡単にWindows向けのGUIアプリ作れたらいいのになあ
746デフォルトの名無しさん:2013/10/12(土) 21:16:41.09
なんかそういうフレームワークなかったっけ?
あとiOSやAndroidのアプリが簡単にできるフレームワークっていいのある?
747デフォルトの名無しさん:2013/10/12(土) 22:02:06.40
Windows では、Microsoft が作る開発環境が他を駆逐するんだよ。
748デフォルトの名無しさん:2013/10/13(日) 02:57:01.33
Windows向けのGUIって条件ならVisualStudioは便利や
749デフォルトの名無しさん:2013/10/13(日) 16:40:19.39
プログラミングRubyとプログラミング言語Ruby
どっちの本が好きですか
750デフォルトの名無しさん:2013/10/13(日) 16:45:39.53
ヴェルタースオリジナル
751デフォルトの名無しさん:2013/10/13(日) 16:48:05.82
公式サイトに物申したいんだけど
ロケールで自動的に日本語サイトに飛ばしたり英語サイトに飛ばすのやめてもらいたい
そんなのサーバ側で勝手にやるのはおせっかい
俺は英語でみたいんだよ
752デフォルトの名無しさん:2013/10/13(日) 17:10:03.68
>>751
それは公式サイトの管理者へ(メール等で)直接要望を伝えるか、
または公式メーリングリスト(ruby-talk)で物申せばいいのではないかと....
ここ(=2ch)でグダグダと文句を言うだけでは何も始まらないよ
753デフォルトの名無しさん:2013/10/13(日) 17:14:50.04
なぜここで書いたか?
だって俺はRubyはメインで使ってないから
754デフォルトの名無しさん:2013/10/13(日) 17:18:24.97
メインで使ってなかろうがそういうことは本人に言うんだよ社会常識の問題だわ
755デフォルトの名無しさん:2013/10/13(日) 17:24:34.16
メインで使ってるかどうかって関係なさすぎる

要するに愚痴を聞いてもらいたかっただけなんだろ
756794:2013/10/13(日) 17:40:58.21
ここ初心者スレだよね?
書店に行くから参考にしたいと思って聞いたのに誰も答えてくれないし
後の書き込みへの罵りばっかりってここけっこう民度ひどくないかな
757デフォルトの名無しさん:2013/10/13(日) 17:41:29.67
749でした・・・
758611:2013/10/13(日) 17:41:52.36
おれもそうおもう
759デフォルトの名無しさん:2013/10/13(日) 17:45:10.46
>>754-755は運営本人ですか
760デフォルトの名無しさん:2013/10/13(日) 17:47:24.42
>>756
本の良し悪しなんてその人次第だからなあ、答えようがない
誰かにとって良い本が他の誰かには糞だったりもする
万人に糞な本ならしばしばあるが、万人に良い本は本当に稀

てか答えようがないものに対してスルーされるのはマシなほうの対応よ?
スレによっちゃ割とまともな質問すら罵倒しかこないのに
761デフォルトの名無しさん:2013/10/13(日) 18:16:28.35
良いレストランないですか? そんな食い物の善し悪しなんてその人次第だからなあ、とか言い出したらなんも言えなくなる。
762デフォルトの名無しさん:2013/10/13(日) 18:25:42.88
>>756
1時間くらいで答えが帰ってくるほど人いないよ。

おれは、たのしいRubyが好きだな。
プログラミング言語Rubyは2.0は出ないんだろうか。
763デフォルトの名無しさん:2013/10/13(日) 18:44:05.55
まつもと先生は何をしてお金を稼いでいるのですか
やっぱり講演だけで食ってるんですかね
俺も金持ちになりたいので日本を代表するまつもと先生にあこがれてます
あとdankogaiさんとか堀江さんとかいますけど
こういう人は何で儲けてるんですかね
プログラミングができるだけじゃ食っていくのは難しいのでしょうか?
そりゃそうですよね
今は高校生でプログラミングする人おおいですもんね
764デフォルトの名無しさん:2013/10/13(日) 18:49:09.96
>>763
ひとつだけいえることは,
今,君が「プログラミングで儲けている」という人も
またプログラミングで名声を得ている人ですらも
「その人自身は,はじめた当初はそれを全然期待していなかった」
ということだね
765デフォルトの名無しさん:2013/10/13(日) 20:11:48.13
桐島、Rubyやめるってよ
http://magazine.rubyist.net/?0042-FollowUpKirishimaRuby
>ヒロキは某社内では人並み以上にプログラムが書ける自信があり、実際にエースとし
>て扱われているわけです。 しかし、ヘタに人並み以上にプログラムが書けてしまう
>がゆえ、自分が「スゴイ級」のプログラマではないことも痛感していました。 天才
>ハッカーみたくイノベーティブなプロダクトを作れる気がしなかったのです。 その
>ため自分がこれから先、何を目的にプログラミングをしていけばよいのか意味を見い
>だせなくなっていました。

これもおもしろいよ。
766デフォルトの名無しさん:2013/10/13(日) 20:34:43.10
Webサービス開発現場から / 近頃の開発のやり方 ・・・ Github と Pull Request とコードレビュー -
naoyaのはてなダイアリー:
http://d.hatena.ne.jp/naoya/20131013/1381651545

内容云々以前に写真に写っているのは見事にMacばかりだなぁ。
まあOSXの方がWinより都合が良いよね。
767デフォルトの名無しさん:2013/10/13(日) 20:44:21.17
>>764
>「その人自身は,はじめた当初はそれを全然期待していなかった」
>ということだね

こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?

ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。
768デフォルトの名無しさん:2013/10/13(日) 20:57:27.11
>>761
レストランとはちょっと違うんじゃない。
Javaやってた人にはわかりやすくても、C言語しかやってない人にはさっぱりわからない本とかもあるだろうし。
好みじゃなくて、対象を絞って書かれているから。
769デフォルトの名無しさん:2013/10/13(日) 20:58:31.92
それはないな。
逆はあるかも。
770デフォルトの名無しさん:2013/10/13(日) 21:00:31.17
失敗してノーベル賞もらった人なんているのかな?
771デフォルトの名無しさん:2013/10/13(日) 21:01:16.56
>>766
これはさすがにnaoya宣伝乙って言われても仕方ないよね
772デフォルトの名無しさん:2013/10/13(日) 21:03:43.44
naoya 氏はこんなところで宣伝する必要が皆無なのでそんなこと言われないと思う
773デフォルトの名無しさん:2013/10/13(日) 21:05:43.06
本人降臨wwwwwwwwwww
774デフォルトの名無しさん:2013/10/13(日) 21:17:19.66
>>770
科学系の場合
失敗してそれが成功のきっかけっていうのが
ノーベル賞選定の条件にあるらしいよ
775デフォルトの名無しさん:2013/10/13(日) 21:20:40.94
naoyaってだれだそそんなに有名じゃねえだろ
776デフォルトの名無しさん:2013/10/13(日) 21:28:50.54
>>767
>こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?
>
>ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。

とても分かりやすい比喩だね、某半島国家のノーベル賞事情とまったく同じ構図だ.....

普通の国(日本を含む):
  知性的探究心と世界貢献のために研究に励んでいたら、気がつけばノーベル賞を次々と受賞

某半島国家:
  個人(ないし国家)が受ける称賛への強烈な渇望により、ノーベル賞獲得を目指して
  苛烈な嫉妬や競争を繰り広げたあげく、未だにノーベル賞ゼロ記録を絶賛更新中w
777デフォルトの名無しさん:2013/10/13(日) 21:29:50.73
>>770
みんながこうだと思ってるような本命予想を証明する研究の場合、規模の勝負になりやすい

カミオカンデとか素粒子を検出するだけでアホみたいな巨大な設備要するし

物事が予想通りに進むだけなら、単純に規模が大きい方が体力の差で押し勝つだけになってしまう

科学に限らずどの分野でもそうなんじゃないか?
778デフォルトの名無しさん:2013/10/13(日) 21:31:46.17
カミオカンデで理論が証明されると誰がどれだけ儲かるの?
779デフォルトの名無しさん:2013/10/13(日) 21:34:39.87
>>775
naoyaさん知らないのか
Ruby初心者スレッドで名無しの振りして宣伝してた偉人じゃないか
780デフォルトの名無しさん:2013/10/13(日) 21:37:17.13
>>778
光センサーの浜松ホトニクスと東大の宣伝になるぐらいで誰かが儲かるってことは特に無いんじゃないか知らんけど
781デフォルトの名無しさん:2013/10/14(月) 06:18:55.29
>>745
DXrubyなりSTARrubyなり、探せばいくらでもGUIライブラリあるだろ
782デフォルトの名無しさん:2013/10/14(月) 09:17:06.32
Ruby/Tk
かんたんだよ
いろんなかきかたがあってとまどうけど
783デフォルトの名無しさん:2013/10/14(月) 10:29:58.54
gollumってさあるじゃないですか
gitでデータを管理するwiki
あれってどうやってgitからデータを取得しているんですか?
コマンドラインにgit logみたいなのを渡して結果を取得してる感じですか?
それともgitにはそういうapiがあるのですか?
784デフォルトの名無しさん:2013/10/14(月) 10:30:26.50
>>778
人類が月に行けても、人類そのものとして、行ったことそのものとしては「儲からなかった」のと同じ
月になにかがあったわけでもないし、道中結構人死んでるし、開拓航路のようになにか持ち帰って売れたわけじゃない
785デフォルトの名無しさん:2013/10/14(月) 11:20:44.75
そうだな
未開の宇宙人に出会って
高価なものをだまくらかして安値で買って来て
こっちの糞価値のものをあっちで高値で売って来るのが貿易だよな
786デフォルトの名無しさん:2013/10/14(月) 11:43:54.81
月旅行も同じで、月面では豊富にある重水素を地球に持ち帰れば高値で売れる
現在の課題は輸送コストと核融合の実現だけど、それらがクリアできれば....
787デフォルトの名無しさん:2013/10/14(月) 15:39:15.12
rubyってinvalidな文字列を取り除くメソッドってないのか?
一旦内部エンコーディングとは別の文字コードにinvalidオプション付きのencodeで変換して
そこからもう一度内部エンコーディングの文字コードにencodeとかアホか
788デフォルトの名無しさん:2013/10/14(月) 16:34:14.61
>>787
2.1で String#scrub というのが追加される。
プレビュー版で使えるので使用感を試して見てくだされ。
789デフォルトの名無しさん:2013/10/14(月) 16:36:29.84
790デフォルトの名無しさん:2013/10/14(月) 17:32:14.68
>>782
tkでorcaしてみたけど単純なアプリでも起動にごっつり時間かかるのが泣けるなあ…
791デフォルトの名無しさん:2013/10/14(月) 17:36:00.19
すまんocraだった
792デフォルトの名無しさん:2013/10/14(月) 19:20:23.57
>>767
>>776
日本を含む東アジアは似たようなもんだよ.
日本人が自国の研究に対して手放しに評価することはほとんどない.田中耕一氏の場合も海外からの推薦だったという.

ただし,東アジアでダントツに日本の受賞が多いのは,それだけ優れた研究がなされていたということではある,それは誇っていいのだろうね.
ruby もおんなじだね.
793デフォルトの名無しさん:2013/10/14(月) 19:21:59.80
>>786
月面上でエネルギーに変換して地上に送る,と思うよ.もう核炉を地球上に作らせてもらえる時代じゃないよ…
794デフォルトの名無しさん:2013/10/14(月) 21:13:48.85
rubyは学ぶ価値がありますか?
795デフォルトの名無しさん:2013/10/14(月) 21:32:44.93
単体では特にはないです
その点ではコンピュータプログラム言語はみんな同じだけども
796デフォルトの名無しさん:2013/10/14(月) 21:44:36.41
日本生まれという以外にrubyの優位性は何かありますか?
797デフォルトの名無しさん:2013/10/14(月) 22:04:26.14
すべてのプログラミング言語の中でもっともRubyっぽい
798デフォルトの名無しさん:2013/10/14(月) 22:24:59.64
>>796
人によってRubyを好きになる理由はそれぞれだけど、
以下は自分の場合(比較対象は他のスクリプト言語)

・純粋オブジェクト指向言語である(ただし、Smalltakほどではない)
 * あらゆるすべてのデータがオブジェクトなので、柔軟なプログラミングができる
 * 最初からオブジェクト指向たることを目的に設計されているので、
  素直なオブジェクト指向プログラミングができる(OOPの学習にも適している)
  たとえば手続き型言語に後からオブジェクト指向を接ぎ木したPerlにはblessが、
  Pythonには__self__といった意味不明な規則があるけど、Rubyにはそれが無い

・関数型プログラミングに適している(Matzによれば、Rubyの先祖はLispであるとのこと)
 * あらゆるすべての構文が式なので、柔軟なプログラミングができる
  たとえばPythonでは同じ条件分岐でも文と式を使い分けなければならないけど
  Rubyでは気にする必要が無いし、同じくPythonのラムダ式の本体に変数宣言が書けない
  といった(後から関数型を接ぎ木したことを要因とする)制限が無い
 * Smalltalkから引き継いだブロック構文により、高階関数を簡潔に書ける

あと個人的には、Raccという完成度の高いパーザジェネレータが初期(=1.6の時代)から
存在した事も、Rubyを選んだ(=Perlから乗り換えた)理由として大きかった(そして、今でも大きい)
799デフォルトの名無しさん:2013/10/14(月) 23:53:11.29
HTML+CSS+Javascript+PHPと比較するとRubyはPHPに取って代わるものという認識でいいんでしょうか?
800デフォルトの名無しさん:2013/10/15(火) 00:14:55.94
パフォーマンスは他の言語と比べて仕様上よろしくない
あと言語経験少ない人から見た可読性もよろしくないからチームの開発に向いてない
ただ書いてて楽しい黒魔術面白すぎだは
801デフォルトの名無しさん:2013/10/15(火) 01:05:42.63
黒魔術に興味あるならC++しかない。
802デフォルトの名無しさん:2013/10/15(火) 01:09:48.53
>>799
いいえ
803デフォルトの名無しさん:2013/10/15(火) 06:51:25.47
>>802
要領を得ない答え方ですね
804デフォルトの名無しさん:2013/10/15(火) 07:43:20.90
JavaScriptにリソースが集まってるんだから普通に考えたらJavaScriptを使った方が幸せになれる
もはやRubyで幸せになれるのはRubyを作ってる連中だけなんじゃないの?
という希ガス
805デフォルトの名無しさん:2013/10/15(火) 07:47:22.45
javascriptを触ってみてjavascriptだけでいいなんて言う奴がいるとはとても思えないくらいjavascriptはクソ言語
806デフォルトの名無しさん:2013/10/15(火) 07:48:43.96
宗教論争を隔離するためにスレがわかれたというのにお前らときたら…
807デフォルトの名無しさん:2013/10/15(火) 08:09:34.29
テキストファイル処理などのワンライナーをとても書きやすい言語の一つなので
これをメインの言語として勉強したりこれを使って使って大きなものを書く予定が
無くとも、第二言語や便利な小道具として知っていて損はない言語。
808デフォルトの名無しさん:2013/10/15(火) 10:52:56.45
そういう意味ならRubyじゃなくてもいい
Rubyの代わりいくらでもある
809デフォルトの名無しさん:2013/10/15(火) 13:07:57.21
>>808
じゃあ他の言語使え
無理すんな
810デフォルトの名無しさん:2013/10/15(火) 13:12:13.93
うんそうしてる

とか書くと
なんでこのスレ見てんだ
とか言うんだろうな
きもいな
811デフォルトの名無しさん:2013/10/15(火) 13:15:10.35
>>810
なんでこのスレ見てんだ
8121/2:2013/10/15(火) 14:51:07.24
class Hoge
def self.connect(module_name_str)
cap = module_name_str.capitalize.to_sym
con = self.const_get(cap)
HogeHoge1.class_eval("include #{con}")
HogeHoge2.class_eval('include #{con}")
HogeHoge1.new
end

class HogeHoge1
end

class HogeHoge2
end

module Setting1
end

module Setting2
end

...

end

---------

foo = Client.connect("setting1")
foo.unkochinkomanko ...
8132/2:2013/10/15(火) 14:51:59.10
こんな感じで動的にモジュールをインクルードしてるんだが
モジュールの中にはHoge1だけで使うメソッド、Hoge2だけで使うメソッド、両方で使うメソッドが存在していて
これだと不必要なメソッドまでインクルードしてしまうということで分離したい

ただモジュール自体を分離することはなるべく避けたい
(モジュールの更新、追加時に余計な手間がかかるため)

モジュールのメソッドのアクセス制御をインクルードされるclass別に設定するみたいなことって出来ないんだろうか?
このモジュールのメソッドはHoge2にインクルードしてもHoge1からしかアクセス出来ないよーみたいな
もしくは設計そのものを見直すかうーん
814デフォルトの名無しさん:2013/10/15(火) 14:58:20.67
× foo = Client.connect("setting1")
○ foo = Hoge.connect("setting1")

こうだなすまん
あーなんでめんどくせー他人の尻拭いせにゃならんのだ
815デフォルトの名無しさん:2013/10/15(火) 15:37:52.99
include の挙動は append_features に従うので、
再定義したらうまいこと出来るような気がする。
816デフォルトの名無しさん:2013/10/16(水) 20:47:08.63
>>798
青木峰郎さんに感謝やな
彼はドラゴンブック参考にしたらしいけど
一橋大学出た文系プログラマってとこもミソな
817デフォルトの名無しさん:2013/10/17(木) 22:06:11.34
配列じゃなかったら配列を返すメソッドって何かありませんでしたっけ?

id_array = Array.try_convert(id) || [id]

みたいに書くのまどろっこしくて。
818デフォルトの名無しさん:2013/10/17(木) 22:12:18.46
Array(id_array)
819デフォルトの名無しさん:2013/10/17(木) 22:18:39.39
>>818
それだ!
820デフォルトの名無しさん:2013/10/17(木) 23:10:59.63
やめといたほうがいいと思うなあ
やめといたほうがいいと思わないなら止めないけど
821デフォルトの名無しさん:2013/10/17(木) 23:35:11.10
1234 abc
5678 def
という内容のtest.txtみたいなファイルを作ります。

で、rubyのワンライナーで
ruby -Ku -n -e 'print if /¥d¥d¥d¥d¥d/' test.txt
と入れます。
行頭が5桁の数字にマッチするので、何も出力されないのが正解なはずです。
Mac OSでは確かにそうなるのですが、WinXPにインストールしたRubyだと
マッチして両方の行が表示されてしまいます。
何が違うんでしょうか?
822デフォルトの名無しさん:2013/10/18(金) 00:39:01.62
コマンドプロンプトの '...' はとんでもない挙動だった覚えが
823デフォルトの名無しさん:2013/10/18(金) 07:56:40.88
コマンドプロンプトなら "〜" だね
ワンライナー内でダブルクォート文字列使いたい時は qq 使う
824デフォルトの名無しさん:2013/10/18(金) 14:35:02.14
「数字が5つ連続して存在している行を表示」
なので表示されるのが正常動作

なぜMacだと表示されないのだろうか?
Windowsしか所持してないのでわからない

Ruby自体は、自前でコマンドラインをパースしなおすから '' でも ""でも大丈夫だが
CMD.EXEは ""しか認識しないので 特殊文字を引数にしたいときには注意
ついでにファイル名補完もRubyがやってくれて
(UNIXのshellみたいな)Dir.globと同仕様なので何気に便利
ruby hoge.rb foo{1[89],2[012]}.txt
とかできる
825デフォルトの名無しさん:2013/10/18(金) 16:31:03.52
>なぜMacだと表示されないのだろうか?
&yen;になってるというオチで終了
826デフォルトの名無しさん:2013/10/18(金) 18:30:28.29
5つだからマッチしないんでしょ
XPでも表示されなかったぞ
827デフォルトの名無しさん:2013/10/18(金) 18:48:17.00
んなアホな、と思ったが再現するなw
元の文がわかりづらいが、Windowsのコマンドプロンプトで表示されるのがおかしいという意味だね
俺のはLinuxのシェルだが、そこでマッチしないのがコマンドプロンプトではマッチする
シングルクオートで囲まれた領域で-eオプションだと、プログラム本文と同一ということだと思っていたが、違うんだな
詳しい人の解説&追試求む
828デフォルトの名無しさん:2013/10/18(金) 18:52:38.41
824 が言ってることがわからん。
821が書いた数字は4連続なんだが。
単に勘違いか。

俺はMacしか持ってないから確認できない。
$& でマッチした文字列を表示してみたらどうなる?
829デフォルトの名無しさん:2013/10/18(金) 18:55:53.05
再現するバージョン教えて
830デフォルトの名無しさん:2013/10/18(金) 20:31:04.43
>>827
>>823って事じゃないの?
831デフォルトの名無しさん:2013/10/18(金) 21:14:49.79
>>830
Win8 + Ruby2.0.0 で試したけど " と ' どっちで括っても再現しなかった

とりあえず再現できる人の OS と ruby -v が知りたい
832デフォルトの名無しさん:2013/10/18(金) 21:38:08.51
正規表現で盛り上がっているところ、水をさして申し訳ありませんが

Win32APIを使ってクリップボードから文字列の値を取得したのですが、
どうも上手く行きません。
クリップボードは空になっているようなのでEmptyClipboardは働いているようなのですが…
どこがおかしくて、どう直せば動くでしょうか?

環境はWin7 64bit Ruby-2.0.0です。

主にここを参考にしました
ttp://d.hatena.ne.jp/nagachika/20100419/ruby19_dl2_windows_clipboard


以下プログラムリスト
833デフォルトの名無しさん:2013/10/18(金) 21:38:42.86
OpenClipboard = Win32API.new("user32", "OpenClipboard", ["I"], "I")
CloseClipboard = Win32API.new("user32", "CloseClipboard", [], "I")
SetClipboardData = Win32API.new("user32", "SetClipboardData", ["I", "I"], "I")
EmptyClipboard = Win32API.new("user32", "EmptyClipboard", [], "I")

CF_TEXT = 1

GlobalAlloc = Win32API.new("kernel32", "GlobalAlloc", ["I","I"], "I")
GlobalLock = Win32API.new("kernel32", "GlobalLock", ["I"], "P")
GlobalUnlock = Win32API.new("kernel32", "GlobalUnlock", ["I"], "I")
GlobalFree = Win32API.new("kernel32", "GlobalFree", ["I"], "I")

GMEM_MOVEABLE = 2
GMEM_ZEROINIT = 0x40
GHND = GMEM_MOVEABLE + GMEM_ZEROINIT

Lstrcpy = Win32API.new("kernel32", "lstrcpy", ["P", "P"], "P")
834デフォルトの名無しさん:2013/10/18(金) 21:39:18.34
def set_text(t)
return if t == "" || t == nil
sleep 0.2 while OpenClipboard.call(0) == 0
begin
if handle = GlobalAlloc.call(GHND, t.bytesize + 1)
begin
if ptr = GlobalLock.call(handle)
Lstrcpy.call(Fiddle::Pointer[ptr], Fiddle::Pointer[t])
EmptyClipboard.call
SetClipboardData.call(CF_TEXT, handle)
GlobalUnlock.Call(handle)
end
rescue
GlobalFree.call(handle)
end
end
ensure
CloseClipboard.call
end
end
835デフォルトの名無しさん:2013/10/18(金) 22:22:08.75
>>828
勘違い

コピペせずに
適当に5桁の数字入れてた
836デフォルトの名無しさん:2013/10/18(金) 22:38:18.31
>>821
WinXP Ruby1.8.7
再現しない(表示されない)
837デフォルトの名無しさん:2013/10/19(土) 06:02:25.45
gsubにてマッチした数値を使用して計算した結果に置き換えるには
置換文字列をどうすればいいのでしょうか?

できなかった例(値を2倍)
hoge='Q=123'
print hoge.gsub(/Q=(\d+)/,'Q=\1*2')
838デフォルトの名無しさん:2013/10/19(土) 07:53:24.96
別にgsubでなくてもいいんじゃないの、てのはおいておいて
文字列を数値または式に変換する必要がある

前者なら、数値部分だけを数値変換
Q = hoge.sub(/Q=(\d+)/, '\1').to_i * 2

後者なら全体を式として評価
eval(hoge.sub(/Q=(\d+)/, 'Q=\1*2'))
839デフォルトの名無しさん:2013/10/19(土) 08:38:19.77
ブロック使えば
840デフォルトの名無しさん:2013/10/19(土) 09:27:17.37
例に対してはこんな風には書けるけど、
これがやりたかった事なのかは疑問

hoge.gsub(/(?<=Q=)\d+/) {|s| s.to_i * 2 }
841デフォルトの名無しさん:2013/10/19(土) 09:49:15.56
そこは /Q=(\d+)/ に $1.to_i でしょ
842デフォルトの名無しさん:2013/10/19(土) 12:22:51.73
subはブロック使う癖つけといた方が吉
843デフォルトの名無しさん:2013/10/19(土) 15:28:03.08
無理に1行にしなくて変数に移してから数値に変換した方があとから分かりやすいと思う。
844デフォルトの名無しさん:2013/10/19(土) 20:45:44.48
デバッグはどうしてる?
俺は主にprint文のデバッグなのだが
845デフォルトの名無しさん:2013/10/19(土) 20:58:06.84
lexなりyaccなり好きにしろ
846デフォルトの名無しさん:2013/10/19(土) 21:16:16.45
>>844
pryかわいいよpry
847デフォルトの名無しさん:2013/10/19(土) 21:20:23.61
>>846
pryなんて初めて知った。
なんか良さげだね。ありがとう。
848デフォルトの名無しさん:2013/10/20(日) 01:16:31.38
一ヶ月前にpryデバッグ環境作ろうとして、
pry-nav→pry-debugger→pry-byebugというdeprecated巡りを一通りしてしまった
849デフォルトの名無しさん:2013/10/21(月) 14:06:12.08
ハッシュの配列を1つのハッシュに変換するメソッドを探してるのですが、ありますか?
今はこう書いています。キーが重複した時のことは考慮しなくてよいです。

array = [{id: 1, name: "hoge"}, {id: 2, name: "piyo"}]
hash = Hash[array.map {|item| item[:id] }.zip(array)]
850デフォルトの名無しさん:2013/10/21(月) 14:47:57.21
hash = array.inject({}) { |h, a| h[a[:id]] = a; h }
とか
hash = array.each_with_object({}) { |a, h| h[a[:id]] = a }
とか?

なんかあんまりスマートじゃないね
ごめん
851デフォルトの名無しさん:2013/10/21(月) 15:01:31.38
hash = array.inject({}) { |ran_hash, dom_hash|
  ran_hash.merge(dom_hash[:id] => dom_hash)
}
852デフォルトの名無しさん:2013/10/21(月) 21:35:17.35
Hash[array.map {|item| [item[:id], item]}]
853デフォルトの名無しさん:2013/10/21(月) 23:53:40.50
分かりづらいデータ構造は使わない
854デフォルトの名無しさん:2013/10/22(火) 00:28:10.46
array.map{|i|{i[:id]=>i}}.inject({},:merge)
855デフォルトの名無しさん:2013/10/22(火) 11:47:43.96
ピンポイントなメソッドはないみたいですが、zipは使わなくてもよいですね。

ありがとうございます!
856デフォルトの名無しさん:2013/10/22(火) 18:00:42.06
>>832
Lstrcpy = Win32API.new("kernel32", "lstrcpy", ["P", "P"], "P")
がまずい
Lstrcpy = Win32API.new("kernel32", "lstrcpy", ["I", "I"], "I")
じゃないのかな
アドレスは基本的にはIで数値として扱う
PはRubyのStringを渡すときだけ

でも、Fiddleだとメモリコピーは自前でできるので
Lstrcpy.call(Fiddle::Pointer[ptr], Fiddle::Pointer[t])
の代わりに
Fiddle::Pointer[ptr][0,t.bytesize] = t
でよかったりする
857デフォルトの名無しさん:2013/10/22(火) 22:23:36.00
>>856
できました!
ありがとうございます!

リファレンスマニュアルをちゃんと読んだら
確かに書いてありました…
お手数かけて申し訳ありません。
858デフォルトの名無しさん:2013/10/23(水) 17:30:50.46
質問失礼します。

ある変数名を文字列として返すメソッドはあるのでしょうか?
イメージとしては以下の例で"hensuu_to_str"としたような使い方のできるメソッドです。
hensuu = "test"
result = hensuu_to_str(hensuu)
puts result # => "hensuu"

文字列を評価するevalがあるので、もしかしたらできるのかな?と思い質問させていただきました。

よろしくお願いいたします。
859デフォルトの名無しさん:2013/10/23(水) 17:42:32.45
>>858
ありません
860デフォルトの名無しさん:2013/10/23(水) 17:56:39.48
ローカル変数の一覧を得ることはできる。

def foo()
a = "b"
c = 3
p(local_variables())
end

foo()

これを実行すると、

[:a, :c]

と出力される。
861デフォルトの名無しさん:2013/10/23(水) 18:07:13.38
あるオブジェクトに「貼られている」変数名の一覧の取得方法というのは
…、ないな
862デフォルトの名無しさん:2013/10/23(水) 18:12:44.31
instance_variables じゃなくて?
863858:2013/10/23(水) 19:05:10.50
みなさんありがとうございます。

できそうだなと思ったんですが、無いんですね……

>>868さんのアドバイスをもとにある変数名を文字列として返すような処理を書いてみました。
---
■コード
# coding: utf-8
hensuu0 = "スコープから外したい"

def hensuu_to_str_run
def hensuu_to_str(&block)
result = block.call
puts result
end

hensuu1 = "スコープに入れたい1"
hensuu2 = "スコープに入れたい2"
hensuu_to_str { local_variables }
end

hensuu_to_str_run

■実行結果
hensuu1
hensuu2
---
もうちょっとかっこ良くかけないものでしょうか……

お時間のある方がおられたらアドバイスなどいただけると助かりますm(_ _)m
864uy:2013/10/23(水) 19:15:35.28
&nbsp; てst
865uy:2013/10/23(水) 19:16:06.42
&ampnbsp; てst
866uy:2013/10/23(水) 19:18:50.77
# coding: utf-8 ; 死ね
puts a = "死ね"

def f
def func h
puts h
end
puts b = "死ねゴミ"
puts c = "しね"
func local_variables
end

f
867デフォルトの名無しさん:2013/10/23(水) 19:29:59.31
>>864-866
  m9(^Д^)
868デフォルトの名無しさん:2013/10/23(水) 21:30:18.84
Bindingクラスになんかメソッドがあったような気がしたが錯覚だった。
869デフォルトの名無しさん:2013/10/23(水) 21:36:15.21
local_variablesで得られるシンボルをto_sしてevalすれば値になるな。
870デフォルトの名無しさん:2013/10/23(水) 22:32:09.92
ルビーの発音ってル(↑)ビー(↑)なの?ル(↑)ビー(↓)どちらですか?
標準語苦手でわからないので、教えてください
871デフォルトの名無しさん:2013/10/23(水) 22:43:02.47
rúːbi
872デフォルトの名無しさん:2013/10/23(水) 23:13:36.25
ルフィ
873デフォルトの名無しさん:2013/10/23(水) 23:15:48.41
rvmってやつがインストロールしたくてネットを参考に
bash < <(curl -B https://rvm.beginrescueend.com/install/rvm )
ってやったのですが、Connection refused.っとなってしまいます。

コピーなのでつづり間違いとかは無いと思っているのですが、
他にありそうな間違いってなんでしょうか?
874デフォルトの名無しさん:2013/10/23(水) 23:37:16.21
実行時に変数名知るってなんの役に立つん?
875デフォルトの名無しさん:2013/10/23(水) 23:46:30.73
まあ要はなんでそれがやりたいのかだわな
それによっちゃまったく別の解決方法とかあるかもしれんしな
876デフォルトの名無しさん:2013/10/24(木) 07:04:31.90
>>873
これはRubyではなくて、UNIX(のシェル)の使い方に関するトラブルだ

どこのサイトを参考にしたのかは知らないが、ロードしようとするURLが間違っている

  $ curl -B https://rvm.beginrescueend.com/install/rvm
  curl: (7) Failed connect to rvm.beginrescueend.com:443; Connection refused

curl の代わりに wget を使っても同じ結果になる

  $ wget https://rvm.beginrescueend.com/install/rvm
  --06:47:47-- https://rvm.beginrescueend.com/install/rvm
   => `rvm'
  Resolving rvm.beginrescueend.com... done.
  Connecting to rvm.beginrescueend.com[208.85.148.112]:443... failed: Connection refused.


RVMの公式サイト(https://rvm.io)を見れば、正しいURLが分かる

  $ curl -L https://get.rvm.io

率直に言って、この程度の初歩的なトラブルシュートすらできないようでは、rvmは使えないよ
rvmに手を出すよりも、UNIXの入門書を1冊購入し、シェルの勉強からはじめることを薦める
877デフォルトの名無しさん:2013/10/24(木) 07:52:28.86
return >>866
878デフォルトの名無しさん:2013/10/24(木) 08:46:01.89
>>868
Ruby(の作者たち)は、この手のイントロスペクションを
絶望的に軽視しているからなぁ…
879デフォルトの名無しさん:2013/10/24(木) 09:09:23.45
どういうイントロスペクションが無いことを問題視してるのかわかんない。

コールスタックがオブジェクトじゃないこと?
880デフォルトの名無しさん:2013/10/24(木) 11:48:39.18
>>878
そういうことやりたきゃRubinius使え
881デフォルトの名無しさん:2013/10/24(木) 12:05:11.81
>>878
驚き最小の法則
882デフォルトの名無しさん:2013/10/24(木) 12:57:19.90
>>880
Rubiniusだって無理だろ
そもそもそんなことが出来る言語あるか?
883870:2013/10/24(木) 13:17:05.17
>>871-872
ありがとうございます。
勉強会の配信とかみてるとル(↑)ビー(↑)って言う人がちょくちょくいるんですけど
あれは違うんですか?
884デフォルトの名無しさん:2013/10/24(木) 14:31:33.59
Rubyのリフレクション機能では
ソースをパースする前に加工したり、ASTを操作したりとか出来ない
PerlやPythonに比べてできる範囲が狭い
でも、そのかわりに使いやすくなっている
と思う

>>858
リテラルや式を渡してたらどうするんだよっ、と思うが
callerやcaller_locationでソースファイルを読み込んで解析とかすると
一行で複数回メソッドコールしてなければ引数のローカル変数名はわかると思う
def foo(f)
cl = caller_locations[0]
s = File.readlines(cl.path)[cl.lineno-1]
s.match(/\b#{__method__}\b.+?([\w][\d\w]*)/)
$1
end

bar = :hogehoge
p foo(bar)
ちゃんとするにはRipperでパースするとか
ソースファイルが無い場合やsendに対応したりしないと駄目だが
そもそも必要としている機能を間違ってると思うので

もし、変数名とその値が必要ならば binding_of_caller GEMを使って
引数には変数名のシンボルを渡すのがいいんじゃないのかな

>>882
Squeak Smalltalkさんならあっさりやってのける、気がする
885デフォルトの名無しさん:2013/10/24(木) 15:57:21.30
>>884
>Squeak Smalltalkさんなら

たしかに。テンポラリ変数限定とかならさくっと書けるな。

MethodContext >> tempNameOf: val
 | currentPc instr |
 currentPc := self pc.
 self pc: self pc - 2.
 instr := self nextInstruction.
 self pc: currentPc.
 ^self tempNames at: instr arguments first + 1

| a b |
a := 9. b := 10.
thisContext tempNameOf: a. "=> 'a' "
thisContext tempNameOf: b. "=> 'b' "
886デフォルトの名無しさん:2013/10/24(木) 22:49:50.81
>>876
ありがとうインストールできた!
これでRuby入門できます。
887デフォルトの名無しさん:2013/10/26(土) 04:55:35.22
知恵袋で回答がつかなかったので質問させてください。
apache形式のログから、コマンド実行時から直近24時間分だけを切り取りたいのですがどのような方法があるでしょうか。
具体的には、
192.168.1.1 - - [24/Oct/2013:20:10:10 +0900] xxxxxxxxxxxxxxxxxxxxxxx
192.168.1.1 - - [25/Oct/2013:12:02:25 +0900] xxxxxxxxxxxxxxxxxxxxxxx
192.168.1.1 - - [26/Oct/2013:01:03:51 +0900] xxxxxxxxxxxxxxxxxxxxxxx
のようなlog.txtから、今であれば[25/Oct/2013:04:55:00 +0900]〜[26/Oct/2013:04:55:00 +0900]の行だけを取り出したいのです。
おねがいします。
888デフォルトの名無しさん:2013/10/26(土) 06:01:21.82
ぜんぶ読んだ上で、"Ruby関係ない"からよそでおねがい
ダブルクリック一発で結果が表示されないと発狂すると見た
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11115380386
889デフォルトの名無しさん:2013/10/26(土) 06:03:21.34
>>887
awkとかperlでフラグ立てる。
890デフォルトの名無しさん:2013/10/26(土) 06:03:53.33
>>889
rubyスレだったw
891デフォルトの名無しさん:2013/10/26(土) 06:16:14.94
>>887
require 'date'

format = "[%d/%b/%Y:%H:%M:%S %Z]"
ARGF.each do |line|
  if line =~ /(\[.+?\])/
    t = DateTime.strptime($1, format)
    tend = DateTime.now
    tbegin = tend - 1
    print line if tbegin <= t and t <= tend
  end
end
892デフォルトの名無しさん:2013/10/26(土) 06:25:00.01
>>887
rotatelogsコマンドにログファイルを渡し「1日分切り出せ」と指示を出す
893デフォルトの名無しさん:2013/10/26(土) 06:29:36.88
>>888
>>611の悲劇が再び…
894デフォルトの名無しさん:2013/10/26(土) 07:43:54.86
今回いちおう>>891は現行Rubyで動作はするな
895891:2013/10/26(土) 08:30:49.72
(でもバグ入りなんだぜ)
896デフォルトの名無しさん:2013/10/26(土) 12:02:30.48
[[1], [2], [3]] を
[1, 2, 3] にするイディオムありませんか
897デフォルトの名無しさん:2013/10/26(土) 12:05:01.87
flatten!

せめてググることくらいはしようぜ…
898デフォルトの名無しさん:2013/10/26(土) 12:53:16.38
初心者スレに書き込むのはググると同じレベル
答えたくないなら答えなくていい
899デフォルトの名無しさん:2013/10/26(土) 14:40:59.07
Array,Hash,Stringあたりのリファレンスは一度ぐらい通読しとけ
大した時間もかからん
900デフォルトの名無しさん:2013/10/26(土) 14:49:40.37
Enumerableもね
901デフォルトの名無しさん:2013/10/26(土) 15:42:51.89
Ruby はリファレンスが糞
902887:2013/10/26(土) 16:19:04.67
>>891
完璧に動きました。
本当にありがとうございます。
903デフォルトの名無しさん:2013/10/26(土) 22:54:58.30
ファイルシステムエンコーディングを設定(例えばASCII-8BIT)するにはどうすれば良いでしょうか?
904デフォルトの名無しさん:2013/10/26(土) 22:57:08.25
>>903
File.open('hoge', 'r:ASCII-8BIT')
905デフォルトの名無しさん:2013/10/26(土) 23:03:36.43
>>904
すみませんが、質問をよく読んでから回答をお願いできますでしょうか。
906デフォルトの名無しさん:2013/10/26(土) 23:09:11.39
>>903
ロケールを設定するしかなさそう
907デフォルトの名無しさん:2013/10/26(土) 23:34:59.36
>>906
そうですか。ありがとうございます。

すると、端末とファイル名とで文字コードが違う場合は、
任意のファイルシステムエンコーディングを設定するのは事実上不可能ですね。
Encoding.filesystem= とかがあっても良さそうなのに。残念です。
908デフォルトの名無しさん:2013/10/26(土) 23:49:34.03
>>907
Unixの場合はバイト列をいじってるわけじゃない(エンコーディング情報を付けてるだけ)だから、force_encodingで
何とでもできそう

MacはMacの世界で閉じとけ
Windowsは窓から放り投げろ
909デフォルトの名無しさん:2013/10/27(日) 04:30:45.20
わからないなら黙ってればいいのに
910デフォルトの名無しさん:2013/10/27(日) 13:06:58.34
>>908
確かに、こまめに force_encoding すれば済む話かもしれませんね。
面倒なので String#b! が欲しいところですが。
911デフォルトの名無しさん:2013/10/27(日) 14:41:08.27
文字列でeachとかが使えなくなった理由って何なんですか?(each_char等は除いて)
ダックタイピングから遠ざかった気がするのですが
912デフォルトの名無しさん:2013/10/27(日) 15:01:36.91
>>911
each が文字単位なのかバイト単位なのか行単位なのかは使うシーンによって変わるから
913デフォルトの名無しさん:2013/10/27(日) 15:03:41.58
文字列、文字コードの取り扱いは、ほんと1.9は進歩だったのだろうか、と今だに思う。
914デフォルトの名無しさん:2013/10/27(日) 15:24:09.47
今更これは失敗だったなんてもはや誰も言い出せない雰囲気。
915デフォルトの名無しさん:2013/10/27(日) 15:47:24.24
もう utf-8 固定
916デフォルトの名無しさん:2013/10/27(日) 16:28:32.90
アニーリングのように、一旦、混沌を経由すると早く収束する、みたいな
917デフォルトの名無しさん:2013/10/27(日) 16:49:41.92
MSもさっさとCP932やめてUTF-8になればいいのに
918デフォルトの名無しさん:2013/10/27(日) 23:23:42.40
普通にユニコード使ってるわボケ
919デフォルトの名無しさん:2013/10/27(日) 23:42:41.18
UNICODEも最初のころはあらゆる文字に全部一意に割り当てるとか言ってた
のに、サロゲートペアだのどんどん複雑怪奇になっていったよね。
韓国が使いもしない自国漢字ねじ込んだり。
920デフォルトの名無しさん:2013/10/28(月) 10:38:32.53
こういう奴がすぐ湧くから文字絡みは嫌なんだよ
921デフォルトの名無しさん:2013/10/28(月) 11:29:02.34
emacsのruby-modeでハッシュの新記法のキーに色が付きません。
:key => value としたときの :key のように色を付けたいのですが可能でしょうか?
922デフォルトの名無しさん:2013/10/28(月) 17:49:53.71
特定のクラスでユーティリティとして使ってるメソッドに
1〜2行処理を追加したメソッドを使いたい場合どうしてる?
重複部分を記述しないで済む方法があれば教えて欲しい
923デフォルトの名無しさん:2013/10/28(月) 19:38:00.16
つまり

def aa
にゃん
にゃん
にゃか
にゃん
end
があって、これをちょっとだけ変えた
def aa2
にゃん
にゃん
にゃら
にゃん
end
を作りたいときどうしようという話でいっすか
924デフォルトの名無しさん:2013/10/28(月) 19:54:43.70
>>921
おかしいね
手元では色つくよ

emacsのバージョンとruby-modeの入手元は?
925デフォルトの名無しさん:2013/10/28(月) 22:01:42.76
>>923
そそ
そんな感じのを特定のクラスで使われる時のみ動的に適用させたい
分かり辛くてすいません
926デフォルトの名無しさん:2013/10/28(月) 22:04:54.11
>>925
サンプルのユースケースを出してみてよ
いまいちピンとこない
927デフォルトの名無しさん:2013/10/29(火) 03:27:37.79
ユースケースって
RubyとかSmalltalkで書いてたらモンキーパッチ使いたくなることなんて山ほどあるだろ
ただ1〜2行拡張する程度ならメソッド再定義した方がわかりやすいだろから止めたほうがいいと思う
928デフォルトの名無しさん:2013/10/29(火) 08:58:29.72
self見て分岐だろうか
キモいなあ、トリッキー過ぎて別の方法考えるかもしれない
929デフォルトの名無しさん:2013/10/29(火) 18:53:11.32
デザインパターンって初めて知った
なんでいままでこれをスルーしていたんだろう
はぁ・・ _| ̄|○
930デフォルトの名無しさん:2013/10/29(火) 20:24:26.77
デザイン(設計)しない人はけっこう知らないんじゃないかなぁ。
デザインパターン知らなくても、そのやり方自体は使ってたりもすることもあるし。
名前をつけることで認識を共有できるのがメリット。
もちろん人によっては知らないパターンもあるだろうけど、それはその人の分野では使うポイントが少なかったりすることも。無理に使うものではない。
931デフォルトの名無しさん:2013/10/29(火) 21:00:33.30
知らなくてもやり方自体は使ってるって、いわゆる車輪の再発明なんじゃ…
932デフォルトの名無しさん:2013/10/29(火) 21:24:20.78
>>930
>名前をつけることで認識を共有できるのがメリット。

そう、これがデザパタの存在意義だね

今まで夢中でOOP(プログラミング)を楽しんでいた段階から一歩成長して
OOD(設計)にも目を向けられるようになったからデザパタの存在を認識できた訳で、
落胆するよりも新たなステップアップの目標として、前向きに考えるのがいいと思う >>929


>>931
デザパタは理論ではないし技術ですらない、単なる(>>930のいう)ネーミングとカタログ化だ
だから、デザパタにおける「車輪の再発明」とは、ある設計様式にオレ様流の命名をすること
>>929を車輪の再発明と言うのは、デザパタの認識がズレていると思われ
933デフォルトの名無しさん:2013/10/29(火) 21:48:15.20
可読性考えながらコード書くぞという気概のある奴なら
StrategyとかSingleton辺りは知らずに使ってたってことはままある
最初は頭の隅に入れとく程度でいいんじゃない
必要性を感じた時に否が応でも勉強したくなるから
934デフォルトの名無しさん:2013/10/29(火) 23:01:19.45
>>931

デザインパターンは「何らかのライブラリとして実装したもの」の名前ではない。
935デフォルトの名無しさん:2013/10/29(火) 23:04:37.26
既にライブラリとして存在するものを自分で作る事だけを車輪の再発明って言うんじゃないぞ
936デフォルトの名無しさん:2013/10/29(火) 23:27:02.11
その状況に陥る人の数が10人をこえた時
はじめて1人がアイディアを思いつく

アイディアを思いついた人の数が10人を超えた時、
はじめて1人が実装に取り掛かる

実装する人の数が10人を超えた時、
はじめて1人が実装を公開する

公開できる実装を作った人が10人を超えた時、
はじめて1人が実用的なものを公開する

世の中そんな感じにできてるから、車輪の再発明も無駄じゃない
俺はまた一つ実用品までのカウンターを増やしたんだ

(と思い込む)
937デフォルトの名無しさん:2013/10/29(火) 23:45:48.03
ただのコピペ脳か
938デフォルトの名無しさん:2013/10/29(火) 23:52:19.11
世界初と考えられている車輪(現存する最古の車輪)は、石でできてて
四角形に近い形なんだよね。
これが丸になるまで何万年かかったと思う?
そしてそこから木になるまでは?
そう考えると再発明は奨励されるべきだよね。
939デフォルトの名無しさん:2013/10/30(水) 06:15:17.13
そういうのも再発名っていうのか?
どっちかっていうと、再開発の方がしっくりくる
940デフォルトの名無しさん:2013/10/30(水) 06:51:37.88
改良
941デフォルトの名無しさん:2013/10/30(水) 07:08:51.48
デザインパターンは静的言語やらないとそれほど必要と思わないだろう
勉強してみて、rubyならもっといいやり方があるのにって思えればいいけど
942デフォルトの名無しさん:2013/10/30(水) 07:20:05.29
?
943デフォルトの名無しさん:2013/10/30(水) 07:32:17.89
デザパタをほとんど知らないと見える
944デフォルトの名無しさん:2013/10/30(水) 07:42:41.52
そもそも動的言語では、典型的なデザインパターンの多くが、言語に溶け込んでいてまったく必要にならない
散々言われてることなのになあ
945デフォルトの名無しさん:2013/10/30(水) 07:51:15.10
iteratorの言語または標準APIでのサポートは、かなりの数のバグをなくしてると思う。
946デフォルトの名無しさん:2013/10/30(水) 07:55:31.27
静的言語のためにデザインされたパターンで学ぶと変な実装になりそうだけど、
rubyのために書かれた本で学ぶのは良いかもしれない
そんな本があったような気がする
947デフォルトの名無しさん:2013/10/30(水) 09:06:24.42
FacadeとかMediatorあたりが載ってなかったけど
結構良本だった気がする
948デフォルトの名無しさん:2013/10/30(水) 10:58:36.44
ファサード?
フェケイド?
フェケテリゴ?
949デフォルトの名無しさん:2013/10/30(水) 15:36:15.01
アルゴリズムとデザインパターンはどう違いますか
950デフォルトの名無しさん:2013/10/30(水) 15:43:49.11
アルゴリズム:戦術
デザパタ:戦略
951デフォルトの名無しさん:2013/10/30(水) 15:52:26.55
アルゴリズム:戦術
デザパタ:戦略
952デフォルトの名無しさん:2013/10/30(水) 16:00:11.80
知ってるとすげぇと思われるのがアルゴリズム
知らないとすげぇと思われるのがデザパタ
953デフォルトの名無しさん:2013/10/30(水) 16:37:21.46
>>952
それは言えるかもな
「デザパタ出来る前から使ってたよ」
とかサラっと言ってみたい台詞だな
954デフォルトの名無しさん:2013/10/30(水) 17:02:55.18
>>953
> 「デザパタ出来る前から使ってたよ」
> とかサラっと言ってみたい台詞だな

GoFの凄いところは、暗黙知を形式知にしネーミングしたところ。
GoF以前からみんなやってたよ。
955デフォルトの名無しさん:2013/10/30(水) 20:04:26.19
みんなじゃないわ。やってる人だけ。
956デフォルトの名無しさん:2013/10/30(水) 20:32:11.41
クラスだってクラスパターンだからな本来
言語仕様として取り入れられることが多くなって、デザインパターンとして見えることがなくなった
他のデザインパターンの多くも、ゆくゆくは言語や付属ライブラリ等に吸収されていくことだろう
957デフォルトの名無しさん:2013/10/30(水) 21:06:12.70
84 名前: 82 Mail: sage 投稿日: 2013/08/10(土) 23:08:55.85
>>80
では、具体的に「関数型プログラミングにおけるデザパタ」を考察してみよう

まず最も基本であるCompositeパターンについて、もしオブジェクトの属性が
集合論における直和であり、クラス継承が直和であるという認識を持てれば、
以下のようにコード化できる(これはGoF本からの引用になる)
  [SML] datatype 'a Component = Leaf of 'a | Composite of 'a * 'a Component list
  [Haskell] data Component a = Leaf a | Composite a [Component a]
これは再帰的な代数データ型の初歩的な定義例でしかない

そしてCompositeパターンと深い関連があるIteratorパターンやVistorパターンは、
上記のデータ型を再帰的に辿る探索問題でしかないと理解できるだろうし、
Commandパターンを含めるとコレクション(上記のデータ型)に対する高階関数の適用でしかない
またBuilderパターンやAbstract Factoryパターンは、関数を入力として関数を返す高階関数そのものであり、
Stateパターンは入力事象と遷移元状態の直積(組)から出力事象と遷移先状態の直積への写像(関数)になる

別の見方をすれば、OOPではデザパタとして神格化され高度な技法と見られていた概念が、
FP(関数型プログラミング)では基本とほんの少しの応用でしかない、と見なすことができる
この現実に対して拒絶反応を起こしてしまうかそれとも素直に受け入れられるかが、
OO脳から関数型脳へ脱却できるか否かを決める大きな壁になると考える
958デフォルトの名無しさん:2013/10/30(水) 21:06:45.11
85 名前: 82 Mail: sage 投稿日: 2013/08/11(日) 06:30:46.63
>>84を訂正

X: .... もしオブジェクトの属性が集合論における直和であり、
O: .... もしオブジェクトの属性が集合論における直積であり、


ついでに参考として、直積 A×B と直和 A+B の定義を書いておく(特に難解な定義ではないと思う....)

A×B = { (x, y) | x ∈ A, y ∈ B }
A+B = { (0, x) | x ∈ A } ∪ { (1, y) | y ∈ B }

なお、直積は「集合の直積集合」、直和は「集合の直和分割」とも呼ばれている
そして、言語上では直積はタプル型やレコード型として、直和は代数型として表現される
959デフォルトの名無しさん:2013/10/31(木) 11:07:52.69
> OOPではデザパタとして神格化され高度な技法と見られていた概念

ん?
960デフォルトの名無しさん:2013/10/31(木) 11:41:42.86
関数型にあらぬ幻想を抱いているようだけど
961デフォルトの名無しさん:2013/10/31(木) 13:35:12.38
関数型、関数型って騒ぐやつらはなんでこうも、本来の関数型の話と、たんなる
(しかし クラスを抽象データ型に使うアイデア=静的型OOP よりはよく出来た)
型システムの話の区別がつかないのだろうか。不思議だ。
962デフォルトの名無しさん:2013/10/31(木) 14:48:44.71
なんで不思議なのかが不思議だわ
963デフォルトの名無しさん:2013/10/31(木) 21:19:21.14
>>959
>> OOPではデザパタとして神格化され高度な技法と見られていた概念

これは、静的型付けOOPL、特にJava使いの間でデザパタが
神格化され絶対視されている傾向を指している
ただし、Rubyだと(>>941,944が指摘しているように)デザパタを強く意識するケースは
ほとんど無いから、ここのスレだとピントが外れた記述になるね


>>961
自己紹介乙w

関数型、関数型って騒ぐやつらはなんでこうも、
「(関数型プログラミング向け)データ構造」の話と
「型システム」の話の区別がつかないのだろうか?
>>957,958は型システムとは直接的には関係しないし、
まったく触れてもいないのに。不思議だ。
964デフォルトの名無しさん:2013/10/31(木) 23:57:45.63
元凶は大脱線した>>957-958っぽいが
全体的にうさんくさい。神格化ってなんぞ?
965デフォルトの名無しさん:2013/11/01(金) 07:09:43.44
漏れもそう思う
966デフォルトの名無しさん:2013/11/01(金) 08:42:45.14
957で取り上げられているデータ構造の具体的にはどこが「関数型プログラミング向け」なのか
教えてエロい人!それは関数型言語ならどんな型システムを持つ言語でも活用できる
パターンなの?
967デフォルトの名無しさん:2013/11/01(金) 19:10:15.41
>>966
2つの質問が含まれているね
最初は1つ目の「どこが関数型プログラミング(FP)向けなのか?」について

まず、おさらいとして慣れ親しんだ手続き型プログラミング向けデータ構造を考えてみよう
手続き型プログラミングによる(要素の追加/削除といった)ツリーへの操作では、
操作によってツリー(=操作対象)そのものが変化する
それに対して、関数型プログラミング向けデータ構造である>>957のツリーへの操作では、
操作のたびにツリーが新たに生成され、操作対象である元のツリー(の値)は変化しない

具体的な設計や実装の例については、スレ「LLにおける関数型プログラミング」の#101を参照


次に「どの言語でも活用できるパターンなのか?」について
動的/静的や型システムに関係なく、ほぼすべての関数型言語であれば活用できるのはもちろんのこと、
(直積としての)属性と(直和としての)継承を持ち、動的メモリ管理機構(いわゆるガーベジコレクション)を持つ
多くのオブジェクト指向言語で活用できる
特にRubyは、動的型付けな関数型言語として、このパターンの活用に最適
968デフォルトの名無しさん:2013/11/01(金) 21:12:17.67
こいつ調子づかせるとめんどくさいことこの上ないことで有名な
関数型ワナビーのru厨だから放置した方がいいぞ
969デフォルトの名無しさん:2013/11/02(土) 00:43:34.19
神格化とはゴールデンハンマーアンチパターンのことじゃないかな。
970デフォルトの名無しさん:2013/11/03(日) 12:37:42.67
有名人が提案するRubyの標準コーディング規約ってありませんか?
971デフォルトの名無しさん:2013/11/03(日) 12:40:21.28
Rubyの有名人の、という縛りだと前田修吾氏のくらいしか知らん。
972デフォルトの名無しさん:2013/11/03(日) 13:08:18.81
973デフォルトの名無しさん:2013/11/03(日) 13:09:51.51
日本のコーディング規約挙げてるところは皆インデント2ばっかりで困ります
インデント2だとみずらい
974デフォルトの名無しさん:2013/11/03(日) 13:13:33.39
>>973
自分一人でコーディングするなら好きなインデント使えばいい
チームで開発するとかオープンソースで公開するとかなら合わせた方が吉
975デフォルトの名無しさん:2013/11/03(日) 13:15:34.14
ということはRuby業界ではやっぱりインデント2が標準みたいな感じですか?
976デフォルトの名無しさん:2013/11/03(日) 13:19:37.94
Rubyはどこでも2タブ(3タブを使う人もいるとかいないとか)
977デフォルトの名無しさん:2013/11/03(日) 13:29:05.04
>>975
そうね
2以外はほとんど見かけたことがない
978デフォルトの名無しさん:2013/11/03(日) 13:41:27.68
まつもと先生はどういう風にコード書いてるのか知りたくてgithub見に行ったらmruby(C言語)しかリポジトリがなかった
979デフォルトの名無しさん:2013/11/03(日) 14:02:17.18
テストコードみたいな短いのしか書いたことなかったりして
980デフォルトの名無しさん:2013/11/03(日) 14:16:43.64
MRIソースのlib配下には彼の書いたコードも残ってるよ、断片的ながら
git-blame で探してみると面白いかも
981デフォルトの名無しさん:2013/11/03(日) 14:25:21.42
>>975
行の先頭、いわゆるインデント(字下げ)のところにタブ文字を使い、
それ以外の行揃えは(タブ文字ではなく)空白文字を使う規約がお薦め

この規約に従ってコーディングしておけば、
後からエディタ等でタブ幅を2, 3, 4, 8等へ切り替えても整形が乱れない
982デフォルトの名無しさん:2013/11/03(日) 14:55:40.74
tdiaryが1インデントがTAB1つで、
エディタ(emacs)の設定で3スペース幅になるようにしている。

https://github.com/tdiary/tdiary-core/blob/master/tdiary/application/configuration.rb#L31

endの列が綺麗だから、だっけ?
983デフォルトの名無しさん:2013/11/03(日) 19:03:02.85
fullpath = "/var/test"
Dir::entries(fullpath)
パスがルートではない場合. と .. も含まれ、
ルートであれば含まれないのですが
このピリオドを除外してディレクトリ一覧のみほしいんですがどう書くのでしょうか?
984デフォルトの名無しさん:2013/11/03(日) 19:50:48.04
さあ君もDir.glob('*')の泥沼に嵌るんだ
985デフォルトの名無しさん:2013/11/03(日) 22:47:56.88
便利なものがあるんですね
ありがとうございます
986デフォルトの名無しさん:2013/11/04(月) 13:53:05.72
rm -rf .*
987デフォルトの名無しさん:2013/11/04(月) 20:16:28.42
RubyってJavascriptやLuaと違って強い型付け言われてるけど
ってことは理論上はそれらより実行速度上る可能性も0じゃないわけですか?
それとも型付けの強弱と実効速度は無関係?
988デフォルトの名無しさん:2013/11/04(月) 21:11:54.17
>>987
いや、言語としてのRubyの型付けは弱いというか、
他と比較して決して強いわけじゃない
言語ユーザ(=プログラマ)から強いように見えるのは、
ライブラリで実行時に(=動的に)型検査しているから

たとえば 1 + "a" という式は、JavaScriptだと "1a" という文字列に、
Rubyでは TypeError となるから、JSよりRubyのほうが強く見える
でも、これはRuby処理系(インタプリタ)が(静的に)型検査しているわけではなく、
1 の数値クラスのメソッド +(x) の内部で x が数値であるかを(動的に)型検査する

だからたとえRubyの型付けが強く見えても、(現状の)実行効率は悪い(=遅い)
ただし、将来的にRubyにも(JavaScriptエンジンのような)最適化を目的とした
型推論メカニズムが導入され、飛躍的に性能が改善する可能性は否定しない
989デフォルトの名無しさん:2013/11/04(月) 23:56:18.45
なるほど
解釈時でなく実行時に型検査するから
むしろ実行速度は遅くなる方向に働くということですね
990デフォルトの名無しさん:2013/11/05(火) 01:55:31.32
[
"2013-08-30" => 100,
"2013-09-11" => 101,
"2013-09-30" => 102,
"2013-10-10" => 103,
"2013-10-23" => 104,
"2013-11-05" => 105
]

という配列があるとして、この配列から最も10-20に近い日をキーに持つハッシュを探すにはどうすればいいのでしょうか?
991デフォルトの名無しさん:2013/11/05(火) 02:06:14.57
10-20って2013-10-20のことか。

仮に 10月19日と10月21日のデータがあったらどっちを返すんだろう。
992デフォルトの名無しさん:2013/11/05(火) 02:55:52.67
{
  "2013-08-30" => 100,
  "2013-09-11" => 101,
  "2013-09-30" => 102,
  "2013-10-10" => 103,
  "2013-10-23" => 104,
  "2013-11-05" => 105
}.min_by { |key, val|
  /^(&yen;d+)-(&yen;d+)-(&yen;d+)/ =~ key

  (($1 + $2 + $3).to_i - 20131020).abs
}

=> ["2013-10-23", 104]
993デフォルトの名無しさん:2013/11/05(火) 03:03:42.17
効率とかのことを考えると、葉にリンクの付いた平衡木が使えるといいんだけど
Rubyには標準では無いから悩ましい
994デフォルトの名無しさん:2013/11/05(火) 03:14:16.58
>>992 は月をまたぐ場合に問題がありそう
min_by のブロックの中は

(Date.parse(key) - Date.parse("2013-10-20")).to_i.abs

などとする必要がある
995デフォルトの名無しさん:2013/11/05(火) 10:25:12.22
996デフォルトの名無しさん:2013/11/05(火) 12:28:30.97
997デフォルトの名無しさん:2013/11/05(火) 20:41:05.48
>>991-994
ありがとうございます。
確かに同じだけ近い日の扱いが指摘されてないなど質問が不十分でした

min_by なんてあるんですね
998デフォルトの名無しさん:2013/11/05(火) 22:51:53.23
>>992を見直した
http://play.island.ac/codepaste/code?id=1565

>>991から指摘があった日数差の等しいケースについて、
デフォルトだとエントリの並び順上で先頭に近いものを返す
あるいは、オプションのブロック引数指定によって
「比較可能(メソッド <=> に返答できる)」オブジェクトを返すことで、
任意の順序規則を指定できる

>>994から指摘があった「月またぎ問題」について、
標準ライブラリのTimeクラスを使って正しく日数差を計算できるようにしてみた
999デフォルトの名無しさん:2013/11/06(水) 00:56:33.60
死体を埋めます
1000デフォルトの名無しさん:2013/11/06(水) 00:59:24.82
タイムカプセルを埋めます
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。