1read 100read
2013年17プログラム57: Ruby 初心者スレッド Part 52 (520) TOP カテ一覧 スレ一覧 2ch元 削除依頼
C++によるDICOMファイル解析 (184)
【Google】Androidアプリ作成part15 (877)
【C++】 DirectX初心者質問スレ Part38 【C】 (107)
スレ立てるまでもない質問はここで 128匹目 (980)
C++は難しすぎ 難易度:4 (441)
【Lisp】プログラミング言語 Clojure #2【JVM】 (967)

Ruby 初心者スレッド Part 52


1 :2013/06/06 〜 最終レス :2013/09/25
プログラミング言語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 :
【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 :
・いつものエディタとターミナルという普段着でお越し下さい
・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない
Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A.好きにしろ
※RubyやRuby使いに対する不満や愚痴などは「Rubyについて」スレや「バトルロワイヤル」スレなどをご利用下さい

4 :
>>1
アリガトン
>>前スレ995
ハッシュからクラスへの移行には、手続き型脳からオブジェクト思考脳へという発想の転換が必要です。
大変だとは思いますが、自分に合ったペースで付いてきて下さい。なにか疑問があれば質問を。
なお、更新はまだまだ続く予定です....。

5 :


6 :
前スレのこれね
「具体的には、芸能人ブログの画像を羅列するといったものなのですが、画像と記事URLを結び付けたいのですがむずかしいです。
ハッシュを使うにもキーを記事URLとすると同じキーがいくつも出来てしまいますし、二次配列もいまいちわかりません。」
983書いた者なんだけどそれに対してレスしそこねてスレ変わったのでここに書いておくよ
ハッシュというのは要するにハッシュ配列のことだったのね
こっちはハッシュ関数のことだと読んだので、一意の画像はないものと仮定(あったらそれを使い回し)して
ハッシュ値とURLとを逆にすればいいだけじゃんと書いた
まぁ全く同一の画像を複数の記事に使い回すケースもあるかもしれないけどさ

7 :
>>2
本屋行ったらたのしい Ruby の 4 版が出てた
それよりレシピブックの新版まだー

8 :
>>4
非常にありがたいです
オブジェクト思考は人間にわかりやすいと書いてありましたがぜんぜんそんなことないです(笑)
ついていかせていただきます
>>6
ハッシュ関数なるものがあるんですか 調べてみます

9 :
>>8
触らないほうがいいよ

10 :
前スレ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 :
>>10
ありがとうございます
MVCってやつですね RSS取得は既存のrssライブラリで簡単でした
仕様上重複はないのですがありがたいです よろしくおねがいします

12 :
>>10 への追記)
クラス PStore には(ハッシュと同様に)キーで複数のオブジェクト(=値)を管理できるので、
今回の変更では、ついでに複数blogサイトにも対応させています。
また、コードの先頭にあるコメントについて、以下の行を書き漏らしていました。
 <Store> = { <Blog> }.
5行目の後に挿入されているものとして見てください。

13 :
>>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 :
>>13を一部訂正
X: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト思考分析/設計)です。
O: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト志向分析/設計)です。

15 :
>>13
ブログでやって

16 :
>>13
なるほど すげーわかりやすいです
まずは作りたいものの設計をつかむ。大事なことですね
がんばります

17 :
>>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 :
>>17
かなりの分量がありますね。落ち着いたら全部読みたいです。
わかりました。部分的に読んでみて設計を考えます。

19 :
>>9

20 :
よそでやれ

21 :
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で参照できるようです。
宜しくお願い致します。

22 :
(追記)
中途半端な書き込みになりゴメンなさい。
質問は、>>21を実現するためのヒントとなるようなサンプルまたは
サイトをご存知ないですか? ということです。
PPTの各図柄(オブジェクト)には名前を付けられないので、代わりに
それらが持つリンクURLを参照したく思います。

23 :
>>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 :
よそでやって

25 :
>>24
>>9

26 :
>>21
やろうと思えばできなくも無いかも知れんがどうしてrubyで?

27 :
>>26
Win32OLEの実施体験がRubyでしか今のところないから

28 :
VBAで作ってみて動いたらRubyに変換すればよい

29 :
>>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 :
Windowsのを操作したかったらVBAなりC#なり使えばいいよね
Rubyでやる理由なんてないわ

31 :
すみません、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 :
こんな書き方でも試しているんですが、入ってる結果は2レコードで
確かにDBへ保存されています、ですがarr_descがこれだと入れられず…
for t in arr_title
T_result.create:product_flag => 0,:product_name => t
end
多分やり方としてtitleレコードを一度参照させて該当すればフィールドに値を追加する
と言う様な処理を書けばやろうとしている事は実現出来るのかなと考えているのですが、
多分凄い初歩的な何かが分かっておらず普通は1レコードに一回で突っ込めるはずだと…

33 :
T_result が何かわからないとなんとも言えない

34 :
>>33さん
すいません、DBへの接続はActiveRecordをrequireしています。
Rails本体は使ってません。

35 :
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 :
>>35さん
ありがとうございます。早速試してみましたがやはりproduct_descフィールドは
空っぽでした。。。またなぜか.textの箇所がundefined methodと呼ばれました。。。
putsでは値は取れてたので大丈夫だったのですが、う〜ん、、、もはや素人過ぎて
次何を試せばいいのかも八方塞がりです…
ただ配列の中に処理を書いて更にそれをカンマで連結可と言うのは初めて知りました。
何かここにも大きくヒントがあると思いますので理解出来る様勉強したいと思います。

37 :
>>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 :
.text がエラーになるってことは nil に text でも呼んでるんじゃないの?
とりあえずこちらで再現するために環境と検索に使った URL を示してくれないか

39 :
putsは文字列を表示するメソッドであって、デバッグ用途でオブジェクトの中身を確かめるメソッドじゃない
文字列(String)であるということが確実にわかっているのではない限り(あるいはわかっていても)通常はpを使う
irb> obj = [1]
irb> puts obj
1
irb> p obj
[1]
objは文字列ではなく整数の配列(と考えていいと作者に言われているオブジェクト)だということがわかる
putsではなくpを使うようになると対象オブジェクトが(たいていの場合)はっきりするので「なぜか」じゃなくなる
nil、空文字列、空の配列、空の文字列が入っている配列、nilが入っている配列、そういったものが区別できる
とりあえずデータベースに入れて確かめるのはやめとけ
絶対完全に間違いのないオブジェクトが得られる確証ができてからおもむろにデータベース部分のスクリプトを書き始めろ

40 :
みなさん勉強になります。ありがとうございます。
>>38さん
以下のURLで試しています。
https://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=ruby
>>39さん
何気なくpにしたりputsにしたりprintとしてみたり取り敢えず値がどれかに
まず入ってるのか程度でしか使ってなかったのでそれぞれの違いを理解する
様にがんばります。

41 :
>>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 :
>>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 :
>>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 :
(.... >>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 :
(.... >>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 :
>>42
>何かもし他に今のレベルじゃここ読め!
http://doc.ruby-lang.org/ja/2.0.0/class/Enumerable.html

47 :
>>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 :
>>46
おぉぉ有り難う御座います!今まで見た事ありませんでした。
早速熟読したいと思います。

49 :
>>45
おつかれさまでした ありがとうございました
>>45さんのものより随分ちんけな形で完成したので、参考にしてグレードアップさせたいと思います
ありがとうございました

50 :
>>49
時間はかかるかもしれませんが、自分のペースで理解を進めていってください。
直感的なプログラミングを否定しているわけではなく、理屈と実践を反復することが大切です。
最後に、別スレへカキコした内容をコピペして終わります。がんばってくださいね。
> 235 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/09/22(水) 01:12:40
> >>232
> それでいいんじゃないかと。自分はF#は使ってないから一般論になってしまうけど、
> 理屈先行型の頭でっかちもダメだし、結果的に動くプログラミングしかできないのもダメ。
> 関数型言語の勉強という理屈とプログラミングという実践を繰り返し続けること、
> 言い換えると「抽象化(理屈) <-> 具体化(実践)」の反復プロセスが大切だと思う。
>
> その全体像は螺旋階段(スパイラル構造)のようであり、成長度の傾きはごく緩やかで、
> 暗闇の中で階段を一歩一歩上ることは焦りや不安が常につきまとうものだけど、
> ある時、ふと下界を眺めてみると、過去の自分が別人のように見えることに気付く。
> 自分の経験になるけど、新しいパラダイムの勉強と成長とは、そんなものだと思う。

51 :
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 :
またsync案件か
コマンドプロンプトは不安定っすなー

53 :
rubyでゲーム開発勉強してるんですけど移動のさせ方などの情報はのっていてもスクロールとかそういう詳しいところを解説してくれてるサイトが見つかりません 書籍とかならそういうのが書いてる奴があるのでしょうか
おすすめのサイトなり勉強法があったら教えてください
今使ってるライブラリはDXrubyですがそれ以外でも大丈夫です
ruby自体はある程度勉強しました

54 :
>>53
http://www.google.co.jp/search?q=dxruby+スクロール

55 :
オリジナルの××システムで○○と書くところをRubyの××接続ライブラリではRubyを交えて△△と書く
という手順を経るので、元の××システムの勉強が必要
元の××システムを知らなくても××接続ライブラリが使えるということはぜんぜんない
DXRubyの場合はDirectXとWindowsAPIだね

56 :
54さん
回答ありがとうございます
スクロールというのは一例でそういうのがまとまって乗ってるサイトが知りたかったんです
言葉が足りなくてすいません
55さん
とういうことは初めてゲームプログラミングをするならrubydxを学ぶよりdirectxとかを先に学んだ方がいいってことでしょうか

57 :
さくらのレンタルサーバーで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 :
認証が可能なルート証明書を探してきて(curlあたりが持ってるんじゃね?)、
Net::HTTP#ca_file = に設定する。
間違っても verify_mode = OpenSSL::SSL::VERIFY_NONE になんてしないように。

59 :
ruby初心者です。
コマンドで実行する時にruby a.rb 1とか指定すると1という値が渡せますが
例えば'あああああ[ここ]あああああ'の[ここ]の部分に代入することはできますか?
※置換ということではないです

60 :
コマンドライン引数は ARGV で取れるから
式展開で "あああああ[#{ARGV[0]}]あああああ"
ARGV[0] に a.rb でなく 1 が入るのと展開するときはダブルクォートを使うのに注意

61 :
>>60
ありがとおあああああああああああああああ

62 :
質問です。
「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 :
自己解決できそうです。
EUC-JPの文字符号化方式には、「CP51932」と「eucJP-ms」というのがあって、
「a」は前者では「0xFB 0xA6」、後者では「0x8F 0xCB 0xEA」になるみたいです。
Windowsでは前者を使用しているみたいですが、
Rubyでは後者に変換してくれちゃってるみたいです。
うーん。面倒くさい・・・
ありがとうございました。

64 :
バグの可能性もあるから報告してみたら?

65 :
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 :
uyなんですけど
ruby2.0でmechanizeが上手く入らないんですけど

67 :
nokogiriもダメなんですけど

68 :
rubyもまだまだですね

69 :
String#encodeってんなバイト列しらんだの変換できんだの文句たれてまともに変換できなくね?
結局NKFつかってる。

70 :
日本語を含みうる文字に関しては変換はほぼ妥当にできる
ただし、変換元のバイト列のエンコーディングと変換先のエンコーディングに関して大雑把にでも理解指定できているということが大前提
申告に虚偽があっても勝手に不可逆変換して情報を取り戻せなくなるNKFなんかよりはよっぽど誠実
ただしとても使い辛い
想像や無知で申告されたエンコーディング名をそのまま使うとほぼ確実に変換失敗する(HTMLのmeta charset名とか、「○○だから××だろう」とか)
これは「世の中が悪い」んではあるんだけども
まあエラーで止まってくれるんだったらその情報を頼りにエラー回復処理すればいいじゃん

71 :
pythonいいよね
自分はpythonの文字列処理のたびに例外に面食らったが
この板で馬鹿には無理と言われて勉強し直して覚醒したよ
>>70 の言うように勝手に暗黙の変換してデータ壊すより
エラーで止まってくれた方がよほど誠実だと納得した

72 :
は?

73 :
Ruby1.9 でsqlite3 を叩いているのですが、
ソースをutf8で書いていて、varchar型ににASCIIデータをを格納しようとしたところ、
ascii-8bit扱いになって実態参照でDBに格納されるので、encode("ascii")の連呼になってしまい。。

74 :
BLOBになる話かと思ったら違った
SQLite3にはvarcharなんて気の利いたものはないぞ、拒否らないだけで
sqlite3-rubyは返されるデータオブジェクトにエンコーディングを設定しない
設定しないってことはBINARY、Rubyで言うところのASCII-8BITだ
エンコーディング情報のない文字列にエンコーディングを設定するのは道理

75 :
unkonown仕様文字列

76 :
勝手にUTF-8とかで返すと海外の人が怒るからこうなってるという説

77 :
db open時の引数にcharset=が指定できるとありがたく。。

78 :
ところでこの場合 encode(バイト列を変換する) ではなく
force_encoding(エンコーディング情報だけ付け替え) ではないかい?

79 :
rubygems はしょうもないライブラリを登録しても怒られませんか?

80 :
特等席な名前でなければ気にされることはないと思う

81 :
特等席ネームかどうかなんて個人の主観だろ
だれも目をつけてない名前で登録して
あとからそれだめって言われてもな

82 :
たとえば "db" とか、どう見ても、って感じの名前はあるだろ

83 :
ruby-helloworld

84 :
ありがとうございます。
特別な名前でもないので思い切って登録してみます。

85 :
宝石がまたひとつ増えた

86 :
Tkのスレで聞いた方がいいかも知れないけど、
フレームをdestroyする時パックされてるボタンも一緒にdestroyされますか?
何か残骸みたいのが残ってたら気持ち悪いので

87 :
自力で解決できず行き詰っています。
どこが悪くてどうすればいいのか、どうか教えて下さい。
プログラムの目的:ニコニコ動画にログインする。
OS:Windows7
Ruby2.0.0を使っています。
(続きます)

88 :
(続き)
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 :
Mechanize 知らないのだけど page.link_with(:text => 'Login') だったりして

90 :
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になるな

91 :
>89 'Login'にしてみたらまた違うエラーになってしまいました・・・
エラーメッセージが長くてここに書けなそうです

92 :
>90 私も試してみましたが、また長いエラーメッセージが出ちゃいました

93 :
とりあえず、 >>88 の link_with(:text => 'login') はサンプルか何かの丸コピーで、
意味を把握してない疑いが…
標的となるフォームの構造は
<dt><label for="mail">ログインメールアドレス/電話番号</label></dt>
<dd><input id="mail" name="mail_tel" type="text" class="txt"></dd>
だからな。

94 :
>93ここを参考にしました
ownway.info/Ruby/index.php?mechanize%2Fabout

95 :
こんなんでいける? >>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

96 :
>95 また長いエラーメッセージが出ちゃいました

97 :
>>96
なんてエラーメッセージ?
個人情報伏せたうえで pastebin とかに貼ってもいいよ

98 :
エラーメッセージはこれです。
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)
(続きます)

99 :
(続き)
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'
(続きます)

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
HSP総合スレ【part 5】 (392)
自然言語処理スレッド その3 (733)
プログラムに詳しくなりたい (577)
出されたお題をコーディングして罵られるスレ (685)
Perlについての質問箱 60箱目 (124)
C++相談室 part104 (889)
--log9.info------------------
MARVIN GAYE 2 (516)
R&Bの定義がよくわからない (120)
【Looking for】Doo-Wop 【an Echo】 (164)
SOULな忍法帖 !ninja テストスレ (110)
UK SOULを語ってもいいんジャマイカ? (256)
夏に車の中で聴きたい曲 (208)
ヤードバーズについて語ろう (105)
【涙】結婚式に…このソウル【。・゚(ノД`)゚・。】 (337)
毎日一曲ずつ語るスレ (151)
【R&B・SOUL】90年代ベストアルバム【投票】 (279)
【70年代】泣ける名曲【80年代】 (473)
Sam Cooke 〜 サム・クック2 (162)
【実力派】消えては困るアーティスト【一発屋扱い】 (314)
blackアーティストにベジタリアンが多い件について (238)
ヴォーカルグループ コーラスグループ (740)
【American Dream】 The-Dream 【Radio Killa】 (144)
--log55.com------------------
タバコ辞めて1ヶ月達成けど質問ある?
嫌煙猿駆除大会
ミ ス タ ー 鼻 煙
言わば人生は【鼻煙鍛錬】
痛快口煙
大ニヒル口煙★2【男】
米国における鼻煙
金も無いから禁煙【嫌 煙 猿】