Ruby 初心者スレッド Part 52
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/06/06(木) 23:50:09.17質問するときは、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/
0002デフォルトの名無しさん
2013/06/06(木) 23:50:41.42http://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
0003デフォルトの名無しさん
2013/06/06(木) 23:51:19.49・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない
Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A.好きにしろ
※RubyやRuby使いに対する不満や愚痴などは「Rubyについて」スレや「バトルロワイヤル」スレなどをご利用下さい
0004前スレ943
2013/06/07(金) 00:48:53.67アリガトン
>>前スレ995
ハッシュからクラスへの移行には、手続き型脳からオブジェクト思考脳へという発想の転換が必要です。
大変だとは思いますが、自分に合ったペースで付いてきて下さい。なにか疑問があれば質問を。
なお、更新はまだまだ続く予定です....。
0005デフォルトの名無しさん
2013/06/07(金) 01:12:16.940006デフォルトの名無しさん
2013/06/07(金) 04:21:07.21「具体的には、芸能人ブログの画像を羅列するといったものなのですが、画像と記事URLを結び付けたいのですがむずかしいです。
ハッシュを使うにもキーを記事URLとすると同じキーがいくつも出来てしまいますし、二次配列もいまいちわかりません。」
983書いた者なんだけどそれに対してレスしそこねてスレ変わったのでここに書いておくよ
ハッシュというのは要するにハッシュ配列のことだったのね
こっちはハッシュ関数のことだと読んだので、一意の画像はないものと仮定(あったらそれを使い回し)して
ハッシュ値とURLとを逆にすればいいだけじゃんと書いた
まぁ全く同一の画像を複数の記事に使い回すケースもあるかもしれないけどさ
0007デフォルトの名無しさん
2013/06/07(金) 08:02:12.94本屋行ったらたのしい Ruby の 4 版が出てた
それよりレシピブックの新版まだー
0008デフォルトの名無しさん
2013/06/07(金) 18:23:40.89非常にありがたいです
オブジェクト思考は人間にわかりやすいと書いてありましたがぜんぜんそんなことないです(笑)
ついていかせていただきます
>>6
ハッシュ関数なるものがあるんですか 調べてみます
0009デフォルトの名無しさん
2013/06/07(金) 23:09:11.55触らないほうがいいよ
0010前スレ943
2013/06/08(土) 00:05:18.83http://play.island.ac/codepaste/code?id=1532
これまでのコードはどれも計算結果をメモリ上に保持していたので、
プログラムが終了するたびにその計算結果は消失していました。
今回の変更では、blogオブジェクトをディスクへ保存/読み込みできるようにします。
実装方法としては、前スレ982で紹介されていた標準ライブラリ pstore を利用します。
== 主な変更点
* クラス Model::Store を追加(これは PStore のサブクラスです)
この変更により、Webアプリケーションとして「とりあえず動く」という
試作品(プロトタイプ)のレベルに到達できたのではないかと思います。
モデル(Model)はできたので、あとはビュー(View)とコントローラ(Controller)、
そしてRSS取得処理が用意できれば、アンテナサイト開発にとって最初の一歩になるでしょう。
Rails使いなら ActiveModel を使うのが簡単かもしれないし、
あるいは前スレ#973で紹介があったHaml(ビュー?)とSinatra(コントローラ?)も面白そうです。
次回は、写真の重複問題について検討する予定です。(正直に告白すればバグ対策です....)
0011デフォルトの名無しさん
2013/06/08(土) 00:17:10.21ありがとうございます
MVCってやつですね RSS取得は既存のrssライブラリで簡単でした
仕様上重複はないのですがありがたいです よろしくおねがいします
0012前スレ943
2013/06/08(土) 00:17:36.03クラス PStore には(ハッシュと同様に)キーで複数のオブジェクト(=値)を管理できるので、
今回の変更では、ついでに複数blogサイトにも対応させています。
また、コードの先頭にあるコメントについて、以下の行を書き漏らしていました。
<Store> = { <Blog> }.
5行目の後に挿入されているものとして見てください。
0013前スレ943
2013/06/08(土) 22:48:21.10>オブジェクト思考は人間にわかりやすいと書いてありましたがぜんぜんそんなことないです(笑)
今回のケースで言えば、手続き型脳だと、
(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)という手順が必要となるのですから、
オブジェクト思考が難しいのはごく当たり前の話だと思います。
「手続き型脳」では、課題を与えられるといきなりコンピュータに向かい、ゴリゴリとコードを書いていきます。
その姿はきっとカッコいいプログラマに見えるでしょうし、自身も言語を自在に操っている満足感が得られます。
これはワンライナーやせいぜい数百ステップ程度の使い捨てプログラム、あるいはアルゴリズムの勉強等といった
多くの局面では(特に初心者では)、決して間違いであるとは言えません。
でも今回のアンテナサイトのような(ある程度)実用性のあるソフトウェアを開発しようとするのであれば、
いきなりコードを書き始めるのではなく、じっくりと思索にふけることが必要になるでしょうし、
その時に(上で述べた)「オブジェクト思考脳」を育てるトレーニングを心がけ、初心者の壁を乗り越えませう。
0014前スレ943
2013/06/08(土) 23:14:27.84X: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト思考分析/設計)です。
O: こうした主題/概念の分析を体系化したものが、いわゆるOOA/OOD(オブジェクト志向分析/設計)です。
0015デフォルトの名無しさん
2013/06/08(土) 23:25:04.21ブログでやって
0016デフォルトの名無しさん
2013/06/08(土) 23:43:11.28なるほど すげーわかりやすいです
まずは作りたいものの設計をつかむ。大事なことですね
がんばります
0017前スレ943
2013/06/09(日) 00:31:18.81X: こうした主題/概念の分析を体系化したものが、いわゆる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で述べたのは、上記節における「データ中心設計(属性による定義)」と「機能中心設計(内包で定義)」です。
残る「分類中心設計(外延で定義)」、いわゆる継承(インヘリタンス)はこれから検討結果を反映させていく予定です。
0018デフォルトの名無しさん
2013/06/09(日) 00:37:50.63かなりの分量がありますね。落ち着いたら全部読みたいです。
わかりました。部分的に読んでみて設計を考えます。
0019デフォルトの名無しさん
2013/06/09(日) 01:34:02.960020デフォルトの名無しさん
2013/06/09(日) 02:30:24.440021デフォルトの名無しさん
2013/06/11(火) 07:08:06.91PowerPoint(PPT) にWin32OLEを適用して、選択したオブジェクト(図柄,文字列)の
参照を取りたく思います。
例えばある位置にURLリンクを持つ図柄S01,S02があったとき ← [ URL1 ] [ URL2 ]
S01を選択するとDOSプロンプト側に
位置 100,200 の URL1 の図柄を選択しました
と表示したくおもいます。
※PPT側のオブジェクトはVBでは PowerPoint.Slide.Shapesで参照できるようです。
宜しくお願い致します。
002221
2013/06/11(火) 07:32:02.31中途半端な書き込みになりゴメンなさい。
質問は、>>21を実現するためのヒントとなるようなサンプルまたは
サイトをご存知ないですか? ということです。
PPTの各図柄(オブジェクト)には名前を付けられないので、代わりに
それらが持つリンクURLを参照したく思います。
0023前スレ943
2013/06/12(水) 23:03:18.05また、約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の分析で残った「分類中心設計(外延で定義)」の部分です。
なお、更新は次回で終了する予定です。
0024デフォルトの名無しさん
2013/06/13(木) 06:35:37.190025デフォルトの名無しさん
2013/06/13(木) 07:48:12.90>>9
0026デフォルトの名無しさん
2013/06/13(木) 19:20:50.61やろうと思えばできなくも無いかも知れんがどうしてrubyで?
0028デフォルトの名無しさん
2013/06/14(金) 00:05:13.740029前スレ943
2013/06/14(金) 21:12:55.88http://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)時にブログの順序性は保証されません。
0030デフォルトの名無しさん
2013/06/14(金) 23:09:32.57Rubyでやる理由なんてないわ
0031デフォルトの名無しさん
2013/06/15(土) 00:04:06.57検索結果から取得する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
0032デフォルトの名無しさん
2013/06/15(土) 00:37:22.18確かにDBへ保存されています、ですがarr_descがこれだと入れられず…
for t in arr_title
T_result.create:product_flag => 0,:product_name => t
end
多分やり方としてtitleレコードを一度参照させて該当すればフィールドに値を追加する
と言う様な処理を書けばやろうとしている事は実現出来るのかなと考えているのですが、
多分凄い初歩的な何かが分かっておらず普通は1レコードに一回で突っ込めるはずだと…
0033デフォルトの名無しさん
2013/06/15(土) 00:43:13.990034デフォルトの名無しさん
2013/06/15(土) 00:51:39.34すいません、DBへの接続はActiveRecordをrequireしています。
Rails本体は使ってません。
0035デフォルトの名無しさん
2013/06/15(土) 01:57:16.84desc が入ってるのは 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
0036デフォルトの名無しさん
2013/06/15(土) 02:21:58.65ありがとうございます。早速試してみましたがやはりproduct_descフィールドは
空っぽでした。。。またなぜか.textの箇所がundefined methodと呼ばれました。。。
putsでは値は取れてたので大丈夫だったのですが、う〜ん、、、もはや素人過ぎて
次何を試せばいいのかも八方塞がりです…
ただ配列の中に処理を書いて更にそれをカンマで連結可と言うのは初めて知りました。
何かここにも大きくヒントがあると思いますので理解出来る様勉強したいと思います。
0037デフォルトの名無しさん
2013/06/15(土) 02:39:35.17度々すいません、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 に
しない限り解消出来ない気がしており配列の中身に更に手を加える方法と言うのがあるのでしょうか。
0038デフォルトの名無しさん
2013/06/15(土) 09:23:50.62とりあえずこちらで再現するために環境と検索に使った URL を示してくれないか
0039デフォルトの名無しさん
2013/06/15(土) 09:33:59.66文字列(String)であるということが確実にわかっているのではない限り(あるいはわかっていても)通常はpを使う
irb> obj = [1]
irb> puts obj
1
irb> p obj
[1]
objは文字列ではなく整数の配列(と考えていいと作者に言われているオブジェクト)だということがわかる
putsではなくpを使うようになると対象オブジェクトが(たいていの場合)はっきりするので「なぜか」じゃなくなる
nil、空文字列、空の配列、空の文字列が入っている配列、nilが入っている配列、そういったものが区別できる
とりあえずデータベースに入れて確かめるのはやめとけ
絶対完全に間違いのないオブジェクトが得られる確証ができてからおもむろにデータベース部分のスクリプトを書き始めろ
0040デフォルトの名無しさん
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としてみたり取り敢えず値がどれかに
まず入ってるのか程度でしか使ってなかったのでそれぞれの違いを理解する
様にがんばります。
0041デフォルトの名無しさん
2013/06/15(土) 16:31:46.11その 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
0042デフォルトの名無しさん
2013/06/15(土) 21:50:44.74すいません、ご報告があります。
# エラー:`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等で繋ぎ取得させるというような記述例が見つけられず全く検討がついてませんでした。
絶対的な経験不足はあるのですが、何かもし他に今のレベルじゃここ読め!
みたいなのがあったら是非教えて頂けると幸いです。。。
0043前スレ943
2013/06/15(土) 21:54:21.10http://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".
(次レスへ続く ....)
0044前スレ943
2013/06/15(土) 21:56:12.45ここで、この記述を「集合の外延的定義」とみなして各集合間の「交わり(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" }
(次レスへ続く ....)
0045前スレ943
2013/06/15(土) 21:56:57.89これら集合間には、以下に示す「互いに交わりのない部分集合(nested set)」関係が存在します。
Component ⊃ Container, Component Photo ⊃, Container ⊃ Blog, Container ⊃ Aticle
http://www.h6.dion.ne.jp/~machan/tmdoc/example/Blog.book/subset.png
最後に先頭の継承の定義で述べた「継承 = 部分集合関係」に従って各集合をクラスへ置き換えると、継承階層が完成します。
前回(>>29)と比較すると各クラスの定義が簡潔になり、クラスの責任分担がより明確になったのではないでしょうか?
長々とカキコ連投を続けてきましたが、質問等の反応が無ければこれで終了です。スレ汚し失礼しました。
0046デフォルトの名無しさん
2013/06/15(土) 22:05:08.57>何かもし他に今のレベルじゃここ読め!
http://doc.ruby-lang.org/ja/2.0.0/class/Enumerable.html
0047デフォルトの名無しさん
2013/06/15(土) 22:29:56.70ありがとうございました。前回確かに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の形にしてみたいなやり方を試したいた経緯がありました。
0048デフォルトの名無しさん
2013/06/15(土) 22:31:44.36おぉぉ有り難う御座います!今まで見た事ありませんでした。
早速熟読したいと思います。
0049デフォルトの名無しさん
2013/06/15(土) 22:39:43.96おつかれさまでした ありがとうございました
>>45さんのものより随分ちんけな形で完成したので、参考にしてグレードアップさせたいと思います
ありがとうございました
0050前スレ943
2013/06/17(月) 00:15:03.99時間はかかるかもしれませんが、自分のペースで理解を進めていってください。
直感的なプログラミングを否定しているわけではなく、理屈と実践を反復することが大切です。
最後に、別スレへカキコした内容をコピペして終わります。がんばってくださいね。
> 235 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/09/22(水) 01:12:40
> >>232
> それでいいんじゃないかと。自分はF#は使ってないから一般論になってしまうけど、
> 理屈先行型の頭でっかちもダメだし、結果的に動くプログラミングしかできないのもダメ。
> 関数型言語の勉強という理屈とプログラミングという実践を繰り返し続けること、
> 言い換えると「抽象化(理屈) <-> 具体化(実践)」の反復プロセスが大切だと思う。
>
> その全体像は螺旋階段(スパイラル構造)のようであり、成長度の傾きはごく緩やかで、
> 暗闇の中で階段を一歩一歩上ることは焦りや不安が常につきまとうものだけど、
> ある時、ふと下界を眺めてみると、過去の自分が別人のように見えることに気付く。
> 自分の経験になるけど、新しいパラダイムの勉強と成長とは、そんなものだと思う。
0051デフォルトの名無しさん
2013/06/19(水) 18:43:12.21何故なのでしょうか? 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
===> 一瞬で終わる
0052デフォルトの名無しさん
2013/06/19(水) 19:57:28.14コマンドプロンプトは不安定っすなー
0053デフォルトの名無しさん
2013/06/20(木) 21:46:10.28おすすめのサイトなり勉強法があったら教えてください
今使ってるライブラリはDXrubyですがそれ以外でも大丈夫です
ruby自体はある程度勉強しました
0054デフォルトの名無しさん
2013/06/20(木) 22:21:16.40http://www.google.co.jp/search?q=dxruby+スクロール
0055デフォルトの名無しさん
2013/06/20(木) 22:21:49.20という手順を経るので、元の××システムの勉強が必要
元の××システムを知らなくても××接続ライブラリが使えるということはぜんぜんない
DXRubyの場合はDirectXとWindowsAPIだね
0056デフォルトの名無しさん
2013/06/21(金) 14:08:18.59回答ありがとうございます
スクロールというのは一例でそういうのがまとまって乗ってるサイトが知りたかったんです
言葉が足りなくてすいません
55さん
とういうことは初めてゲームプログラミングをするならrubydxを学ぶよりdirectxとかを先に学んだ方がいいってことでしょうか
0057デフォルトの名無しさん
2013/06/23(日) 16:30:39.11http://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証明書をどうにかするらしいですがさくらサーバーでの具体的な解決策は
わかりませんでした どなたかご教授頂けないでしょうか
0058デフォルトの名無しさん
2013/06/23(日) 17:16:06.32Net::HTTP#ca_file = に設定する。
間違っても verify_mode = OpenSSL::SSL::VERIFY_NONE になんてしないように。
0059デフォルトの名無しさん
2013/06/24(月) 00:29:12.38コマンドで実行する時にruby a.rb 1とか指定すると1という値が渡せますが
例えば'あああああ[ここ]あああああ'の[ここ]の部分に代入することはできますか?
※置換ということではないです
0060デフォルトの名無しさん
2013/06/24(月) 00:59:35.18式展開で "あああああ[#{ARGV[0]}]あああああ"
ARGV[0] に a.rb でなく 1 が入るのと展開するときはダブルクォートを使うのに注意
0061デフォルトの名無しさん
2013/06/24(月) 01:09:50.70ありがとおあああああああああああああああ
0062デフォルトの名無しさん
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"] (正常)
よろしくおねがいします。
0063デフォルトの名無しさん
2013/06/25(火) 09:13:38.20EUC-JPの文字符号化方式には、「CP51932」と「eucJP-ms」というのがあって、
「�a」は前者では「0xFB 0xA6」、後者では「0x8F 0xCB 0xEA」になるみたいです。
Windowsでは前者を使用しているみたいですが、
Rubyでは後者に変換してくれちゃってるみたいです。
うーん。面倒くさい・・・
ありがとうございました。
0064デフォルトの名無しさん
2013/06/25(火) 21:36:56.70006563
2013/06/26(水) 19:37:10.32ふええ・・・別の方法で対処した後に知ったよう・・・
#coding: cp932
str = "�a"
p str.encode("cp51932") #=> "\x{FBA6}"
p str.encode("eucJP-ms") #=> "\x{8FCBEA}"
p str.encode("euc-jp") #=> "\x{8FCBEA}"
0066デフォルトの名無しさん
2013/06/28(金) 11:23:21.08ruby2.0でmechanizeが上手く入らないんですけど
0067デフォルトの名無しさん
2013/06/28(金) 11:56:28.950068デフォルトの名無しさん
2013/06/28(金) 12:05:46.790069デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN結局NKFつかってる。
0070デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANただし、変換元のバイト列のエンコーディングと変換先のエンコーディングに関して大雑把にでも理解指定できているということが大前提
申告に虚偽があっても勝手に不可逆変換して情報を取り戻せなくなるNKFなんかよりはよっぽど誠実
ただしとても使い辛い
想像や無知で申告されたエンコーディング名をそのまま使うとほぼ確実に変換失敗する(HTMLのmeta charset名とか、「○○だから××だろう」とか)
これは「世の中が悪い」んではあるんだけども
まあエラーで止まってくれるんだったらその情報を頼りにエラー回復処理すればいいじゃん
0071デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN自分はpythonの文字列処理のたびに例外に面食らったが
この板で馬鹿には無理と言われて勉強し直して覚醒したよ
>>70 の言うように勝手に暗黙の変換してデータ壊すより
エラーで止まってくれた方がよほど誠実だと納得した
0072デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0073デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANソースをutf8で書いていて、varchar型ににASCIIデータをを格納しようとしたところ、
ascii-8bit扱いになって実態参照でDBに格納されるので、encode("ascii")の連呼になってしまい。。
0074デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANSQLite3にはvarcharなんて気の利いたものはないぞ、拒否らないだけで
sqlite3-rubyは返されるデータオブジェクトにエンコーディングを設定しない
設定しないってことはBINARY、Rubyで言うところのASCII-8BITだ
エンコーディング情報のない文字列にエンコーディングを設定するのは道理
0075デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN0076デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN0077デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN0078デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANforce_encoding(エンコーディング情報だけ付け替え) ではないかい?
0079デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN0080デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN0081デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANだれも目をつけてない名前で登録して
あとからそれだめって言われてもな
0082デフォルトの名無しさん
2013/07/12(金) NY:AN:NY.AN0083デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.AN008479
2013/07/13(土) NY:AN:NY.AN特別な名前でもないので思い切って登録してみます。
0085デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.AN0086デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANフレームをdestroyする時パックされてるボタンも一緒にdestroyされますか?
何か残骸みたいのが残ってたら気持ち悪いので
0087デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANどこが悪くてどうすればいいのか、どうか教えて下さい。
プログラムの目的:ニコニコ動画にログインする。
OS:Windows7
Ruby2.0.0を使っています。
(続きます)
0088デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANrequire '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)
0089デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0090デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANmech = 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になるな
009187
2013/07/17(水) NY:AN:NY.ANエラーメッセージが長くてここに書けなそうです
009287
2013/07/17(水) NY:AN:NY.AN0093デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN意味を把握してない疑いが…
標的となるフォームの構造は
<dt><label for="mail">ログインメールアドレス/電話番号</label></dt>
<dd><input id="mail" name="mail_tel" type="text" class="txt"></dd>
だからな。
009487
2013/07/17(水) NY:AN:NY.ANownway.info/Ruby/index.php?mechanize%2Fabout
0095デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANrequire '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
009687
2013/07/17(水) NY:AN:NY.AN0097デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANなんてエラーメッセージ?
個人情報伏せたうえで pastebin とかに貼ってもいいよ
009887
2013/07/17(水) NY:AN:NY.ANC:/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)
(続きます)
009987
2013/07/17(水) NY:AN:NY.ANfrom 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'
(続きます)
0100デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANWindows だとうまくいかないんだって
http://rubydoc.info/gems/mechanize/Mechanize:cert_store
よくわかんなかったら 証明書 mechanize windows でぐぐって
010187
2013/07/18(木) NY:AN:NY.ANfrom 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'
010287
2013/07/18(木) NY:AN:NY.ANfrom 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>'
(終わりです)
010387
2013/07/18(木) NY:AN:NY.ANエラーが出なかったということは、成功で良いのですよね?
確認する方法が分からないので少し不安ではありますが
0104デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANいわゆるモダンブラウザが自動でやってる手順の多くを手動で書かないといけないからね
で、今なにやってるかというと、サイト利用のためにログイン済みクッキーが必要なので、
ログインページでログインしてMechanizeにクッキーを持たせてるんだ
Mechanizeオブジェクト(の、中)にクッキーが書き込まれてるので、そのままトップページや動画を読み込んでみればいい
たとえばトップページならユーザー名がHTMLに埋め込まれて送られてきているはず
ログイン失敗ならそのようなHTMLが送られてきているはず
余談だけどクッキーを外部保存して再利用することはニコ動ではおすすめできない(他のサイトでは可能)
これはサイト側の制限で、こちらではどうしようもない
0105デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN二重管理だと看做されると
強制ログアウトさせられるぬ
0106デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.AN下の階層ごと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
0107デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.ANありがとう
0108デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANstring->bignumに変換する良いやり方教えてください
0109デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN=> 156291440
0110デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANirb> require 'digest/md5'
irb> Digest::MD5.hexdigest('test').to_i(16)
=> 12707736894140473154801792860916528374
0111デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0112デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANMD5版使わせてもらいます
ありがとうございます
0113デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANarr=["aaa","aab","aac", ...... ] とい文字でできた長〜い配列から
1つおき、2つおきに取り出してくるようなメソッドてありますか?
普通にループの処理を書いたほうがいいでしょうか。
(数字が並んでたら、select{}のなかに式を書いてでできることはわかりました。)
0114デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANarr.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]
0115デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0116デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN>>115 これはうまくいきました。ありがとうございます。
slice(N)でN個ごとにとりだして、
mapでN並ぶ配列の先頭だけの配列にするのですね
0117デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0118デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANhttp://takuya-1st.hatenablog.jp/entry/20120101/1325427164
0119デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANみたいな感じで文字列の各文字の対応する数字を合計して返すプログラムを作りたいのですが
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に対応させるのって手打ちじゃなくて簡単な方法ってありますか?
0120デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0121デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANASCIIコード表 の 97 から112 をsprintfで取り出す
http://e-words.jp/p/r-ascii.html
p sprintf("%c", 97) #=> "a"
0122デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0123デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0124119
2013/07/21(日) NY:AN:NY.AN早速試してみます
0125デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN>> (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}
0126デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANカウンター変数みたいなの作って、ループ処理内でキーの部分に代入
ループ毎にカウンター変数+=1してけば自動化できない?
0127デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANの
Ruby 2.0.0-p247 (x64)
落としたら
ノートンがws reputation 1検出して削除されるんだけど
なにこれ誤検出?
0128デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANWindowsDefenderだけど
特に問題なかった
0129デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0130デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0131デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANRubyみたいなのを使うとき問題が出る
自分はリアルタイム保護のSONAR拡張モードって奴をOFFにしてる
0132デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANネトゲ起動しっぱなしでも他作業余裕
0133デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANやってみた
Hash[[*1..26].map{|e|[(e+96).chr,e]}]
0134uy
2013/07/22(月) NY:AN:NY.ANアホみたいにレベル下がったなこのスレ
0135デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0136デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0137デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANついinjectを使ってしまうからコードが読みづらくなる
0138デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN("a".."z").each.with_index(1).inject({}) { |hash, (key, val)| hash.update key => val }
もし inject を使うなら、こうだろ
0139デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANほんまや・・・ありがとう!
0140デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0141デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0142デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN例:object, array, klass, data, dir, io, file, mutex, range, string, struct, symbol, thread, time, errno, process, signal,
0143デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0144デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANttp://doc.ruby-lang.org/ja/1.9.3/method/Object/i/hash.html
0145デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANでは訂正しよう、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?
0146デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN>>141
がどうやら最小コードのようだ
0147119
2013/07/23(火) NY:AN:NY.ANサンキュー
0148デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN具体的にはwindow.confirmで出てくる奴の「はい」か「いいえ」を選択したいのですが・・・・
0149デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANHTTPとHTMLとJavaScriptを知っていればわかることだが、Mechanizeに相応のGETまたはPOSTをさせればいい
なにを言っているのかわからないのなら、HTTPとHTMLとJavaScriptに関する勉強が必要
なんか上のほうでも書かれていたが、ふつうのWebブラウザがどんな挙動で何をやっているかを知らないとMechanizeは全く使えない
0150デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN通常のWebブラウザ設定を汚して壊す必要があるので、完全自分用でもなければそうそうできるものでもないが一応
0151uy
2013/07/23(火) NY:AN:NY.AN色んなものの知識習得をすっ飛ばして初心者でも簡単にスクレイピング出来るようにしたのがmechanize
js絡むものはmechanizeでやるの効率悪いから諦めたらいい
0152デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANどうしても無理っぽかったら、いっそHSPでもさらりと習得すればいい
ダイアログ使うの簡単な言語だから、rubyプロセスと命令の受け渡しだけ出来ればいいし
0153デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0154デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN下のプログラムに「ファイル名.rb:16:in `<main>': undefined local variable or method `html' for m
ain:Object (NameError)」というエラーが出てしまいます。
(つづく)
0155154
2013/07/27(土) NY:AN:NY.ANプログラムの目的:ニコニコ動画で任意の動画をマイリストに登録する
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
0156154
2013/07/27(土) NY:AN:NY.ANdef 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
0157デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN課題:以下の質問に、深入りしない程度にてきとーに答えなさい
・ トップレベルとはなにか(必須)
・ 変数スコープとはなにか(必須)
・ "undefined local variable or method" の英文的な意味(必須)
・ これまでに作ったことのあるスクリプトの大まかな機能(参考)
もし答えられない項目があるのなら、あなたはまだいてはならないところにいます
動詞が変化することを知らずに英文で手紙を書こうとしているようなもので、根源的な基礎知識が足りません
もっと単純なスクリプトをたくさん書いて練習するべきだと思うし、もしそんな手間をかける理由がないというのなら
おそらく目的専用の出来合いのライブラリやらアプリケーションやらを単体で使ったほうが速くて安くてうまくいきます
自力でわけのわからないプログラミング言語を無闇にいじくり回すこともないでしょう
0158デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANへえ最近はRubyにもurllib2やsplitlines()が…
ねえよ!(ペシッ
0159デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANRuby def で検索かけて、使いかた覚えといたほうがいいよ
申し開きできないくらい基本的な事だから
0160デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0161デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0162デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0163デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN>「ファイル名.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()
0164154
2013/07/27(土) NY:AN:NY.ANtoken = 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
0165デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANfor m ではなく for main:Object
urllib2 が未定義
0166163
2013/07/27(土) NY:AN:NY.AN指摘ありがとう、>>163を訂正しよう
翻訳すると「トップレベル(main:Object)ではローカル変数(属性)または
メソッドとしてhtml が定義されていない」であり、エラー発生箇所は16行目とある。
要は、html という名前がどこにも定義されていない、という意味。
なお、メソッドurllib2に関しては、この先で未定義エラーとなる可能性は高いと思うけど、
今回のエラーの原因が「識別子 html が未定義」である事に間違いは無いと考える
まずは目の前のhtml問題を解決し、それからurllib2問題に目を向ければいいのではないかと
0167デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN理屈としては間違ってないけど
>>156 にまるまる Python のコードをぶちこんでくる質問者に対して
その粒度でちまちまレスしてくのは教育的にも2ch的にも筋がいいとは思えないな
今回に関しては入門書読んでこいでいいと思うわ
0168デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0169デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANスレタイ嫁
Ruby本スレならその理屈でいいと思うが、ここは初心者スレだ
質問者のレベルに応じて解答するのが望ましいと思うわ
誰だって最初は初心者だったわけで、自分が質問者よりも「いくらか」レベルが高いからといって、
見下したようなレスを返すのは、いかがなものかと
たぶん>>154はPyhtonで書かれたコードをRubyで書き換えようと(移植しようと)考えたけど、
それ以前に「定義と呼び出しの違い(>>163)」が理解できていないレベルだった、たそれだけのこと
だから、返答ではそれを指摘して、後は質問者本人がどうするか考えればいい
スレが質問カキコで溢れきっていて、返答レスが追いつけない状態にあるのなら話は別で、
「本嫁」の一言で終わらすのもアリだとは思うがね
0170デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN木を教えても森はわからないよ。
ありえないほどレベル低すぎなんだから、まず入門書で勉強しろで正解でしょ。
0171デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN森がわかるようになるかは質問者の努力しだいだけど、
その可能性を切り捨てて、木を教えることさえ拒絶するのは、いかがなものかと
一昔前はともかく、最近は初めてのプログラミングをRubyで学ぶ人も増えている
熟練者であれば「ありえない」ほど些細なことでつまずくのが、そんな初心者だと思う
0172デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0173デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN君に初心者を扱うのは無理だ
既にあらゆるものを忘れ去っていて、柔軟性に欠き、その実、初心者を本当は一番馬鹿にしている
質問者はPythonなど知らない
Mechanizeで検索した結果をくっつけただけだ
そして、MechanizeにはPythonのライブラリとRubyのライブラリがあることを知らず、
そのページがRubyを扱ったものかPythonを扱ったものかを判断する知識もなく、
なおかつコード片からRubyなのかどうかを判断することもできない
だから「Mechanizeのスクリプト」として混ぜ書きしている
0174デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0175デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0176デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANクロスできない2chのシステムでは
マルチするしかない
0177デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANおなじ質問を何度もみるのはイヤ
0178デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN「24時間以上、待っていましたが回答が得られませんでしたので、ここで改めて質問します」
0179デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0180デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANなら初心者むけの回答しろ無能
0181デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN>>163で何かご不満でも?
0182デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANぼくがかんがえたさいきょうのしょしんしゃ 向けの回答じゃないからって回答者叩くのおかしくね
ちなみに>>163の回答はすごくいいと思います
0183デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.ANはいはい、スゲースゲー
0184154
2013/07/28(日) NY:AN:NY.ANこれから1つずつ調べたり試したりしていこうと思います
プログラミングに関してはRubyが初めてで(Python挫折しました)常識程度も知らずにお手数かけてすみません
試したことに対して結果が出たら、また報告させてもらいます
0185デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANdef使った定義命令や定義関数マスターしたら、ほぼどんな言語でも一気にプログラミングが楽になるし、幅が広がるよ
まあ頑張れ
0186デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN0187らくだ
2013/07/28(日) NY:AN:NY.AN(´;ω;`)ブワッ
0188デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN> ・回答は1行以内で簡潔に。 例:man hoge
やっぱり、先輩の言っていたことは正しかったんだ…
0189デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN一行レスが、もっとも無難な回答なのかな
0190デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN0191デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANa=(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]
}
で対応するつもりなのですが、もっと大きいサイズの場合にどう対応すればいいのか分からないので
0192デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANa.permutation(n){*arr|
p [arr[0..n-m],arr[n-m..n]]
}
でいいのか
0193デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0194デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANsubjects = %w[apple orange banana] と needle = %w[ana ple] があった場合、
needle の部分文字列を含む配列要素だけsubjects から選択したいのですが (appleとbananaだけを得たい)
作業変数で力技でやる方法は分かるのですが、綺麗な方法はあったりしますでしょうか
0195デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANsubjects.select{|sbj| re =~ sbj }
subjects.select{|sbj| needles.any?{|ndl| sbj.include? ndl } }
0196デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0197デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0198デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANおそらく>>196は、FPの関数構成子(あるいはコンビネータ)を応用した、
変数を一切使わないコードしか認めないと思われる
あるいは作業変数という単語について、
なにか別の意味が定義された異世界の住人なのかもしれない
0199デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0200デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0202デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANa=[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]に変換する方法ってあります?
0203デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANFile#readはselfから読み込んで文字列オブジェクトとして返す
ので、単にそういうふうに作られたメソッドだからというだけのお話だっていうかマニュアルは慎重に読もうきちんと書いてある
で、配列やHashはよく使われるので、「ファイルに"保存"して"再生"したい」という要望が多い
のでできたのがyamlだ
これは文字列だけが含まれている配列やHashをテキストファイルとして保存して(外部編集してから)読み込むことができる
Rubyのオブジェクトが含まれていて、それをまるっと保存再生したいという場合はpstoreを使う
これはRubyの扱うほぼ全てのオブジェクトをバイナリファイルとして保存して読み込むことができる
あと、RubyではFileオブジェクトのopenはブロックを使うのが普通
File#closeを書くことはまずない
File.open('test.txt','wb'){|f| f.puts(str) }
0204デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN丁寧な解説ありがとうございます
m(__)m
0205デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANdef 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)
こんな感じになったのですがもっと早い方法ってありますか?
それとも回線速度とか他の要因によって決まるからプログラム自体ではどうしようもないのかな
0206デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANbm do |x|
x.report("o_uri:"){o_uri(50)}
x.report("net:"){net(50)}
end
こんな感じでやりました
0207デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN(Rubyに限らず)I/O待ち時間が大半を占めるから、
性能改善のポイントは、いかに「無駄な待ち時間を減らすか」となる
具体的には、スレッドを使って並行に(=複数のI/O処理を同時に)実行するとか、
キャッシュを用いてI/O処理の実行回数そのものを減らすといった手法がある
>>205,206のようなベンチマークを目的にしたコードに、改善の余地は無い
0208デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN「ノーマルなHTTPのやりとりの範囲内ではそれ以上は速くなりませんので我慢してください」が回答
ふつうのWebブラウザで画像OFFのJavaScriptオフで読み込んだのとそう大差ないと思うんだけども
0209デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANこれは仕方ないと思うなあ
0210デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN0211デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN「スレッド」という言葉は初耳だったので手元にある本を開いたところそれっぽいことが書いてあったのでやってみます
>>208
聞き方が悪かったみたいですいません
1回あたりの時間を短くできるかどうかを聞いてたのですが
質問の本意としては「複数回アクセスする場合、かかる時間を短くできる方法があるかどうか」を聞きたかったんです
並列処理って概念を知らなかったので勝手に脳内で
複数回アクセスする場合時間を短くできる方法があるかどうか=一回あたりの時間を短くできるかどうか
って読み替えて聞いてしまっていました
どちらも参考になったので助言ありがとうございました
0212デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANRuby 1.6の頃に必要だったことが有る指定で、今は要らない。
0213デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN「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
0214デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN「Ruby おまじない」でぐぐると「utf-8」がサジェストされる
死んでしまえばいいのに
気持ちはわかるけども
0215デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN装飾はなくていいとわかったとしても、やっぱいまいち自信がない
というかそもそもあれの部分の本名を知ってる人はそんなにいないと思うというか正式名称あったっけ
説明のための検索できないから困るんだよねあれ
0216デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANスレッドってやつを使ったら同じ50回アクセス条件で15秒→2.5秒になりました
0217デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN1秒間に何回もメインファイル群にアクセスがあれば普通はアク禁対象だ
一足飛びに警察に通報されたパターンもあるというか、あったというか、1秒1回でも逮捕されたな…
0218デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN岡崎図書館
0219デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.ANmagic comment?
0220デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN0221デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN10分に1アクセスくらいにしておかないと・・・・
0222デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN1 => 'aaaa'
2 => 'bbbb'
3 => 'cccc'
といった要素が入ってます
ハッシュを結合してキーで昇順や降順にするにはどうすればいいでしょうか
0223デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0224デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN・ Rubyではメソッドとif等の制御構造以外は基本すべてオブジェクトである
・ オブジェクトは自分を作り出したクラスを憶えている
・ オブジェクトにはメソッドを持たせることができる
・ オブジェクトが持つメソッドは特別に「自分自身」を操作対象にすることができる
よし勉強した。これよりわかることは
・ ハッシュはHashクラスのオブジェクトであり、Hashクラスのメソッドで操作できる
だ。
つまり、ハッシュをどうにかしたいのならHashクラスのメソッドを見てみるといい
この理屈はRubyの基本であり、探し物の基本
配列、ハッシュ、文字列はよく使うだろうから、それぞれArray、Hash、Stringのクラスの(インスタンス)メソッドは見ておくと捗る
絶対に損はしない
0225デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANまず最初に検討すべきなのは、複数のハッシュ間でキーが重複していた場合、
どのように処理するのが望ましいか、という事柄
望ましさの基準は一般論では決められないから、与えられた問題に応じて各自で考える
ここで、もし重複時に何らかの対処が必要であると考えたのなら、(>>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 を参照のこと
0226225
2013/08/05(月) NY:AN:NY.ANX: 各ハッシュを配列へ変換(Hash#to_a)してからソート(上記と同じ)する
O: 各ハッシュを配列へ変換(Hash#to_a)し、結合(Array#+)してから
ソート(1.8: Array#sort, 1.9/2.0: 上記と同じ)する
0227デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANありがとうございました
やってみます
0228デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANdef fuga
end
foo do
end
end
この場合のfooってのは、クラス内のローカル変数で、do endブロックのポインタなのでしょうか?
0229デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANブロック引数付きのクラスメソッド呼び出しだと思う
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)のまわりも確認したほうがいいだろう
それでも見つからなければ、動的にメソッドを定義する、いわゆるメタプログラミングによって
定義されたクラスメソッドかもしれない
0230デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANhttp://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/
0231デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN嫌がらせか?
0232デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0233デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANお盆(3個)と正月(6個)の分が引いてあるんじゃないのか?
0234デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANありがとうございました。
ソースはこれです。
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
特に定義がないメソッドでも、引数としてブロックを渡せるんですね。
0235デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANuidやinfoの定義は91行目からの文字列のclass_evalだな。
&block というのが受け取るブロック。
ブロックを付けて呼び出す
→対応する名前のインスタンス変数にそれをProcインスタンスとして保存する
→と同時にメソッドの返値ともなる。
ブロックを付けずに呼び出す
→保存されているはずの対応インスタンス変数(=Procインスタンス)を返すだけ。
0236229
2013/08/07(水) NY:AN:NY.AN> 特に定義がないメソッドでも、引数としてブロックを渡せるんですね。
いや、ブロック引数を伴うメソッドは、リンク先ソース(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)続いて面倒になるので、
こういったメタプログラミングで短く書いているのだと思う
0237デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANありがとうございました
勉強になりました
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcall.html#block
0238デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANirbでキーボードから入力した文字が表示されるのに
時間がかかる場合が頻発します。(数秒〜数十秒)
今まではこのようなことはありませんでした。
Nortonが悪さしているかと思い無効化しても解決しませんでした。
解決方法がわかる方、いらっしゃいましたらご教示ください。
0239デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0240デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANLinux install
0241デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0242デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN適当にirbrcにでも書いとけ
Readlineが必要になったときどうすればいいのかは知らん
マシなReadlineを別途インストールすればいいんだろうけど
0243デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN夏休み明けてからだから随分先になるけど
0244デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANp=-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は<なのか≦なのかもいまいち分からないんです
0245デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0246デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN変更も容易だし、なによりこれからの効率が違う
Rubyにはブロックにも引数が渡せ、ブロック作成またはその回のループ開始時に適当な値が代入される
10.times do |x|
p x
end
1.upto(8) do |x|
p x
end
ところでその++pの位置そこでいっすか
0247デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANfor (int k=-p; k<=delta-1; ++k, ++p)
と書く習慣がないだけかも
0248デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0249デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0250244
2013/08/20(火) NY:AN:NY.ANforの前にk = -pとか書いたり
break if k <= deltaとか書いたり
しないといけないんですね
Rubyって意外に不便ですね
0251デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0252デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANgem使えると思ったら大間違いですョ・・・
0253デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0254デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN各行の処理(正確には、各行の前後にあるかもしれない処理)のせいでこちらからなにもできん
まあ、ループの書き方くらいはきちんと自分で理解して書いて欲しい
下手するとコピペで書いていただけでループや繰り返しの概念がないようにも見受けられる
0255デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANだからRubyは少しだけ中途半端な言語
0256デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANa..bてのがある。
点がふたつ。これは、他のスクリプト言語にもある。
a = -p
b = delta - 1
for k in a..b do
処理
end
0257デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANcatch :out do
end
という処理を書いたら、catch句の中にはいってくれないのはどうしてですか?
0258デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0259デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN知りたいのはループ方法だけなんです
>>256
ありがとうございます。
でもその構文でインクリメントを2にするには、next if...とか使うしかないのでしょうか?
0260デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN違うと思う
たぶん>>254の見立てが正しそうだ
0261デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN(a..b).step(2)
ググレ
0262デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANb=[1,1,2]
に対して a-bを実行すると[3,4]が返ってくるのですが
[1,3,4]が返ってくるようにするにはどうしたらいいですか?
0263デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANいまは高校数学で、ベクトル、行列、群論とかやってないのかな
0264デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN% 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]
うおお
0265デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN高校数学で群論やってたのっていつの時代だよ?
0266デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANa=[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]
というのは直感と反してるかもな。
0267デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANa+(b-b) => [1,1,1,2,3,4]
0268デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANありがとうございます
初心者なのでgemってよくわからないんですが
通常のarrayクラスの演算では求めるような操作を行うことはできない'multiset'モジュール?を使え
という理解でよろしいでしょうか?
0269デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANググるくらいしろ
0270デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANhttp://play.island.ac/codepaste/code?id=1551
0271デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN[1,1,1,2,3,4].diff[1,2,1] => ?
0272デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANいつものアレだから無視しろ
0273デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.ANa = [1, 2 ,3]
a.select.with_index(0) {|val, i| i == 0 || i == 2 }
#=> [1, 3]
0274デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.ANTime.now - s
これで求めた時刻って、単位はなんなのでしょうか?
0275デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.AN0276デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.ANArray#values_at
0277デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.AN[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) }
0278デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.ANありがとうございました
秒なんですかね?
なんか1秒ぐらいかかってる処理が0.02秒で終わるのですが
0279デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANvar func = function(i) { //すっげー長い処理 }
func(1);
func(255);
func(1000);
}
こういう処理をRubyで書きたいんですが方法が分かりません。
def method
func = lamda { |k|
}
end
これはなんか違う気がします
0280デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANなぜlambdaでは駄目だと思うのか120文字程度で言えるもんなら言ってみろ(15点)
0281デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANend
func(10)
これで普通に上のJavaScriptと同じように動くのですか?
0282デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANfunc.call(10)
こうでした
Rubyって短く書くこと推奨なのにcall()が必要なんですね
0283デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.AN好きなの使えばいいと思うよ
0284デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANそんな推奨はない
0285デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.AN0286デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.AN0287デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANProcオブジェクトという態を捨てるわけにもいかないし
メソッド化するという機能があればいいんだろうけど
0288デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANfor ( i=0 ; c = getc© != EOF ; i++)
{
ほにゃ
]
c = STDIN.getc
while ( c != nil)
ほにゃ
c= STDIN.getc
end
って面倒くさい書き方になっちゃうんですけど、もっと上手いやり方ないですか?
0289デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.AN0290デフォルトの名無しさん
2013/08/25(日) NY:AN:NY.ANend
じゃね?
0291デフォルトの名無しさん
2013/08/26(月) NY:AN:NY.AN0292デフォルトの名無しさん
2013/08/26(月) NY:AN:NY.AN0293デフォルトの名無しさん
2013/08/26(月) NY:AN:NY.ANI/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
0294デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANhtml→css→php→rubyの順にしようと思うけどこれでいいと思う?
0295デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN0296デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANどんな順番がいいと思う?
0297デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANそしてなおかつそれの知識がないのだとしたら、
そりゃHTMLやCSSやJavascriptの勉強から始め「なければならない」と思う
極める必要などさらさらないが、区別分別できるくらいの知識は必要
0298デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANjsもいるのか
ありがとーRuby始められるくらいのレベルになったらまたここくるわ
0299デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN1. 情報を発信してー
2. HTMLを勉強する
3. 見栄えを良くするために CSS を勉強する
4. 細工したくて JavaScript 勉強する
5. 動的にしたくて CGI を勉強する
CGIでどんな言語を選択するかのが分岐点になる。
2000年はPerlの一強
0300デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN初心者が「やれそう!」と思うようなものは簡単で基礎的なものだろうから
後々無駄になることは多分おそらくあまりないんじゃないかなと思わなくもない
0301デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN遅くなりましたがありがとうございました!
0302デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN計算するだけのアプリとかなら、いきなりrubyでいいだろ。
0303デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN0304デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANこれは義務教育で算数や数学を学んでいて計算ができる前提だな。
0305デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN0306デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.ANサンクス
勉強してみます
0307デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0308デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.ANconfigureからmake installまで1時間30分ぐらいかかりました
ホストOSがWindowsのCeleronの1コアのCPUです。
みなさんの環境ではどのくらいの時間でコンパイルできるのでしょうか?
20〜30分切れるというかた,スペック教えてください
0309デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN新しい一番安い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)
0310309
2013/08/28(水) NY:AN:NY.AN79,800円の方だった。
2.3GHzクアッドコアIntel Core i7(Turbo Boost使用時最大3.3GHz)、6MB三次キャッシュ
0311デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.ANやっぱり買い替えます
ありがとうございます
0312デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0313デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.ANLinux?ってやつで開発するとどんなメリットがあるの?
0314デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN無視して
0315デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0316デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN>>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 が要(あるいは不要)か?に対する明確な答えは分からなかった....
0318デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN開発ツールが豊富で簡単で安定してる。使い方によるだろうから、自分にあった環境使えばいいよ。
0319デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANnokogiriのGemファイルには他にもminitestやhoeといったGemが書かれているのですが、nokogiriとmini_portileしかインストールされないのは何故でしょうか?
0320デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0321デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0322デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN適当に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の実行中に元オブジェクトの変更は出来ませんでした。
何かいい手段があれば教えてください。
0323デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANGemfileではどのgemもgroupに:developmentと:testが指定されているのですが、開発時に必要なものと実行時に必要なものが指定されているのは別のファイルでしょうか?
0324デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0325デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANNokogiriって、 gemspecファイルないんだな。
Gem::Specification.find {|spec| spec.name == 'nokogiri'}.dependencies.map(&:type)
を見て。
0326デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0327デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANジェネリクスが無効化される方法でお願いします。
0328デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0329デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN0330デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANオブジェクト指向を学ぶのにRubyは適していますか?
0331デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANオブジェクト指向を学びたいならJavaを学んでください
0332デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANHoe使ってRakeファイルの中でgemspec作って依存性管理してるのかなという結論に至りました。
ありがとうございます!
0333デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.AN配列の中身はすべてハッシュで{: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
書いてみましたが・・・なんか糞です。・・・もっと上手い書き方はないものでしょうか?
0334デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.ANcaseが使えるはず
インデックスは要素位置だとして、配列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"]
0335デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.ANAとCの配列、BとCの配列を作り、六つ以上連続するCがあったら
前後の3つを残して中側のCを削除する
あと杞憂かも知れんがAB分割する前と後の±3では結果が異なってくるぞ
[ABBBC]なら
分割前はalpha=[A],beta=[BBBC]
分割後はalpha=[AC],beta=[BBBC]
0336デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.ANありがとうございます。
助かりました。
AB分割後の配列の±3で問題ないです。
0337デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.AN9x9の問題を縦・横・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
0338デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.AN0339デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.AN0340デフォルトの名無しさん
2013/08/30(金) NY:AN:NY.ANをどう書くのか考えてみた
簡略化して要素は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使ったほうがいいのかな
0341デフォルトの名無しさん
2013/09/01(日) 01:12:22.21temp = []
start = 0
array.each_with_index do |e, i|
if e == "\r"
temp << array.slice(start..i)
start = i + 1
end
end
なんでgが切り出されないのでしょうか?
0342デフォルトの名無しさん
2013/09/01(日) 01:50:12.540343デフォルトの名無しさん
2013/09/01(日) 01:57:45.89のようなことをしたいのだろうか。。。
0344デフォルトの名無しさん
2013/09/01(日) 02:18:47.26splitとかscanを使うと平易に書けるかもしれない
0345デフォルトの名無しさん
2013/09/01(日) 06:12:15.59Rubyでは標準入力/ファイル読み混みは行単位または文字列全体として受け取るのが一般的
0346デフォルトの名無しさん
2013/09/01(日) 10:21:03.93そのバイトストリームを扱う様々なメソッドが提供されている
・バイトを単位として扱う -- 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クラスはなかなか面白い
0347デフォルトの名無しさん
2013/09/01(日) 11:04:03.73temp = [ ["a", "b", "c", "\r"], ["\n", "d", "e", "f", "\r"], ["\n", "g"]]
これを期待しているんです。
0348デフォルトの名無しさん
2013/09/01(日) 11:05:22.42下2桁45を取得方法をおしえて
0349デフォルトの名無しさん
2013/09/01(日) 11:09:52.34a.to_s[-2..-1]
0350デフォルトの名無しさん
2013/09/01(日) 11:12:05.34たとえば変換するメソッドとかは頭に必ずto_って付く縛りになっているものでしょうか?
0351デフォルトの名無しさん
2013/09/01(日) 11:18:27.75a % 100
でいいんじゃね?
0352デフォルトの名無しさん
2013/09/01(日) 11:24:28.53a.join.split(/(.*?¥r)/m).reject(&:empty?).map(&:chars)
ruby 2.0 未満では String#chars が Enumerable を返すので、
さらに .map(&:to_a) が欲しいかもしれないが、
Enumerable のままでも十分かもしれない。
0353デフォルトの名無しさん
2013/09/01(日) 11:25:28.22消しわすれ。
0354デフォルトの名無しさん
2013/09/01(日) 11:26:19.13お茶飲んで落ち着く。
0355デフォルトの名無しさん
2013/09/01(日) 11:30:49.32元のソースを尊重するとすれば、最後の行に
temp << array.slice(start..-1)
を追加すればいいだけ。
tempは"\r"発見時にしか内容が更新されないから、each_with_indexを抜けたあとに、arrayの余り部分を処理させる必要がある。
0356デフォルトの名無しさん
2013/09/01(日) 11:32:59.62これってgithubで公開されてないんですか?
0357デフォルトの名無しさん
2013/09/01(日) 11:38:46.35array.chunk {|e| e == "\r" }.map(&:last).each_slice(2).map {|a| a.inject(&:+) }
なんか冗長な気がするが動く
0358デフォルトの名無しさん
2013/09/01(日) 11:45:10.78かなり冗長だけど、injectだけで書いてみた
http://play.island.ac/codepaste/code?id=1555
0359デフォルトの名無しさん
2013/09/01(日) 11:49:13.43github.com/rurema
0360デフォルトの名無しさん
2013/09/01(日) 13:32:14.020361デフォルトの名無しさん
2013/09/01(日) 13:38:59.990363デフォルトの名無しさん
2013/09/02(月) 08:09:49.380364デフォルトの名無しさん
2013/09/03(火) 01:06:28.680365デフォルトの名無しさん
2013/09/03(火) 06:51:15.72ルビー信者のくせに言葉使うなww
死ねやゴミクズw
0366デフォルトの名無しさん
2013/09/03(火) 08:10:31.99似た言語が2つあるのは明らかに悪い影響出してると思うのですが
0367デフォルトの名無しさん
2013/09/03(火) 08:25:52.60CとPascal(Modula)って統一しないんですかね --> Ada 誕生
英語/仏語/独語..etcって統一しないんですかね --> エスペラント語誕生
0368デフォルトの名無しさん
2013/09/03(火) 13:31:55.420369デフォルトの名無しさん
2013/09/03(火) 14:13:01.94あんまり考えたことなかったけど
言われてみればあれだな
自然言語が複数種類あるのはバビルの塔が原因らしいけど
プログラミング言語が複数種類出来たのはなんでだろうね
0370デフォルトの名無しさん
2013/09/03(火) 14:17:31.610371デフォルトの名無しさん
2013/09/03(火) 14:36:05.30本質的にはプログラムはアセンブラで必要充分です
人間が手順を考えてハードウェアにほぼ直接、一連の指示を与えればいいだけだから
アセンブラへの指示をまとめたのがC言語
C言語での指示をまとめたのがRubyなどの(Cで書かれた)各種プログラミング言語
Rubyでの指示をまとめたのが、たとえばRailsなどのアプリケーションフレームワーク
str = 'hello!'
puts str
とほぼ同じだけの安全寄り動作をするC言語のソースは大量になり、アセンブラだと莫大になるだろう
0372デフォルトの名無しさん
2013/09/03(火) 14:44:14.61プログラミング言語が複数できる理由は、
我々が処理を関数やサブルーチンやメソッドにしてまとめてしてしまうのと完全に同じ
我々が関数やメソッドやクラスを作るのと同じように、言語製作者はプログラミング言語を作る
0373デフォルトの名無しさん
2013/09/03(火) 14:44:15.080374デフォルトの名無しさん
2013/09/03(火) 14:45:00.920375デフォルトの名無しさん
2013/09/03(火) 14:47:02.780376デフォルトの名無しさん
2013/09/03(火) 14:51:19.56情報系の資格とるほうが楽だしアピールもしやすい
0377デフォルトの名無しさん
2013/09/03(火) 19:47:31.60組み込みの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
0378デフォルトの名無しさん
2013/09/03(火) 21:05:58.79ひらがなとカタカナは、漢字から分かれてできたわけで
0379デフォルトの名無しさん
2013/09/04(水) 01:07:09.660380デフォルトの名無しさん
2013/09/04(水) 01:38:51.69ハングルって最近出来たものじゃないの。
0381デフォルトの名無しさん
2013/09/04(水) 03:53:20.15ただしカタカナは,新羅の仏教僧が仏典に注釈をいれるのに使っていた符号が先行の可能性がある,との説があるようだ
0382デフォルトの名無しさん
2013/09/04(水) 07:45:21.43なんでマジ議論してんだよ
0383デフォルトの名無しさん
2013/09/04(水) 08:02:32.980384デフォルトの名無しさん
2013/09/04(水) 12:06:24.73何か決定的な対応できない不具合みたいなのがあるのでしょうか?
0385デフォルトの名無しさん
2013/09/04(水) 16:05:23.240386デフォルトの名無しさん
2013/09/04(水) 21:27:02.300387デフォルトの名無しさん
2013/09/05(木) 01:31:29.760388デフォルトの名無しさん
2013/09/05(木) 14:45:29.80ゴミが残らない方法を教えてください。
0389デフォルトの名無しさん
2013/09/05(木) 14:46:55.780390デフォルトの名無しさん
2013/09/05(木) 15:12:29.96で、インストールのときにコピーされたファイルとディレクトリは削除される
パッケージが勝手に作成・ダウンロードしたファイルで、パッケージのディレクトリ内にないものはたぶん消えない
0391デフォルトの名無しさん
2013/09/05(木) 16:20:44.43ありがとうございます。
問題はあれですよね、そのパッケージ動かした時にできるファイルがどこに作られるのかとか、
それって個々に調べるしかない感じですか?
0392デフォルトの名無しさん
2013/09/05(木) 17:29:07.81readme に書いてある
0393デフォルトの名無しさん
2013/09/05(木) 22:27:49.72ありがとう!!!
これで元に戻せなくなる心配をせずにrubyに入門できる!!!
0394デフォルトの名無しさん
2013/09/05(木) 23:26:10.09対応してるぞ
俺先月複数回Windowsにmysql2いれたし
ただしコンパイラがどーのこーのヘッダファイルがどーのこーのすげー面倒くせーよ
0395デフォルトの名無しさん
2013/09/05(木) 23:40:30.45それがいやなので最近はbundlerだけをシステムgemとしてインストールして、
あとはアプリのGemfileに書いたものをvendor/bundleに入れるだけ、にしてる。
使わなくなったら bundle clean するだけ。
Webアプリ屋としてはこれで十分。
日常のスクリプト書きに使う人には適さないと思うけど。
0396デフォルトの名無しさん
2013/09/06(金) 00:05:23.50何それ役に立ちそう!!
やりたいのは基本Ruby on Railsだけだから、
それで出来るのならそっちでやりたい!!!
ちょっと明日ググってみるわ!!ありがとう!!!
0397デフォルトの名無しさん
2013/09/06(金) 00:18:09.780398デフォルトの名無しさん
2013/09/06(金) 00:25:22.01rpmやdebなどの依存関係を定義できるパッケージマネージャを使って削除。
0399デフォルトの名無しさん
2013/09/06(金) 01:53:01.61railsすらbundlerで入れるのみ、で通すのは少々手間が必要(可能では
ある)なので、rails本体とその依存物くらいまではシステムに入れても
いいかもね。
0400デフォルトの名無しさん
2013/09/06(金) 11:36:15.59バーチャルホストに対応したRubyのサーバってありませんか?
0401デフォルトの名無しさん
2013/09/06(金) 11:36:54.96gemで入れられるRuby用のサーバご存知の方教えてください
0402デフォルトの名無しさん
2013/09/06(金) 22:37:49.24[ {: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
以外にもっと良い書き方はありますか?
0403デフォルトの名無しさん
2013/09/06(金) 23:10:17.03arrayやhashと書かれている場合はなにか意図を探してしまうので使わないほうがよい
それと、配列の要素はelementのeだ
で、まあ、回答としてはそれ以外には特にないというか、
それ以外の書き方をしてなんらかの理由でテクニカル()に動作してもおそらく意図が伝わらないのでやめといたほうがいい
arr.map{|e| e.map{|h| h[:char]}.join}.join
0404デフォルトの名無しさん
2013/09/06(金) 23:26:03.60ありがとうございました
0405デフォルトの名無しさん
2013/09/07(土) 04:15:34.400406デフォルトの名無しさん
2013/09/07(土) 06:03:44.60=> "abcefgh"
0407デフォルトの名無しさん
2013/09/07(土) 09:54:41.70to_sとか
0408デフォルトの名無しさん
2013/09/07(土) 14:45:17.25とか
array.flatten.flat_map(&:values).join #これは駄目か
0409デフォルトの名無しさん
2013/09/07(土) 16:12:12.73array.map{|e1|
e1.map{|e2| e2[:char]}.join
}.join
一番内側から考えるといいです。
{:char=>'a'} から 'a' を取り出すコードを書く。
次に、[ {:char=>'a'}, {:char=>'b'}, {:char=>'c'}] から 'abc' を取り出すコードを書く、という具合に。
0410409
2013/09/07(土) 16:13:22.150411409
2013/09/07(土) 16:16:34.040412デフォルトの名無しさん
2013/09/08(日) 13:13:40.50$\って何を表現してるんでしょうか?
改行マッチっぽい気はするんですが、何故これで改行になるのかわかりません。
予約語でしょうか。
0413デフォルトの名無しさん
2013/09/08(日) 16:36:43.68ttp://doc.ruby-lang.org/ja/1.9.3/class/Kernel.html#V_--5C
0414デフォルトの名無しさん
2013/09/08(日) 22:23:24.83こんなのあったんですね。ありがとうございます。
0415デフォルトの名無しさん
2013/09/08(日) 23:51:16.470416デフォルトの名無しさん
2013/09/08(日) 23:55:09.400417デフォルトの名無しさん
2013/09/09(月) 00:05:54.530418デフォルトの名無しさん
2013/09/09(月) 00:15:58.04もし、RoRを忌諱する理由が「理解できなかった」なのなら、おそらくSinatraもWEBrickも「理解できない」可能性が大
0419デフォルトの名無しさん
2013/09/09(月) 02:00:35.200420デフォルトの名無しさん
2013/09/09(月) 07:35:51.520421デフォルトの名無しさん
2013/09/09(月) 07:46:42.330422デフォルトの名無しさん
2013/09/09(月) 09:52:00.560423デフォルトの名無しさん
2013/09/09(月) 10:02:27.460424デフォルトの名無しさん
2013/09/09(月) 10:04:16.640425デフォルトの名無しさん
2013/09/09(月) 10:25:34.170426デフォルトの名無しさん
2013/09/09(月) 16:46:44.94Rackでいいんだろうけど、ActiveRecordの代替はどうしよう
0427デフォルトの名無しさん
2013/09/10(火) 00:20:21.41どうしてでしょうか。。
0428デフォルトの名無しさん
2013/09/10(火) 00:34:09.35どうしてでしょうか。。
0429デフォルトの名無しさん
2013/09/10(火) 00:41:58.840430デフォルトの名無しさん
2013/09/11(水) 00:42:26.660431うゆ
2013/09/11(水) 20:59:57.66そしたら、急激にネットワーク関連の知識と技術が増えてきて
ついに「本物」になってしまった・・・・
一瞬で、ネットワークの負荷分散や学校や企業みたいに沢山のホスト扱うノウハウとか
知識がついた
設定やってって言われたら多分、出来る
ネットワーク技術者()の資格とかそういうのもあったけど、あれってなんなの?俺にとって一瞬で身に付くレベルのことを
皆必死に勉強して、資格とって・・・
ねえl、なんで俺はいつも、pc関連になると本を読むわけでもなく「一瞬」で理解しちゃうんだろ?
適正っていう物なんだろうけど・・・我ながら異常性を理解してるんだ
自分がごく自然に、やってる事が、いかに異常かってのを気付かせてもらったのは、
昔、知り合いのpcのBIOS設定やってるときだった、「英語読めんの?」 → 「んー、読めないけど、感でやってる」
これだ。
これが"一般人"には出来ないというのが、分かった。俺は確かに英語が読めない、でも・・・・PC関連が少しでも関わってると
なぜか読めない英語も読めるようになってしまうんだ
英語の文章単体では読めないものの、英語+PC技術関連になると、俺はその文章を読むことが出来る・・・程度の能力
つうか、"字"を読んでるんじゃなくて、「伝えたい意図」を詠んでる から
俺にとっては単語の一つ一つが読める必要すらない・・・
0432うゆ
2013/09/11(水) 21:13:06.61ソースコードに対しても「読んでる」わけじゃないんだろうな
「詠んでる」が、正しい
tor使い始めて1日目で、理解して、
3日目にはhidden serviceの使い方を理解して、
1週間経った頃には、torのソースコードを見ることもなく、
torの仕組みをほぼ理解し、作ってって言われたらミニチュアくらいを自分で作れるところまで来てしまったのかもしれない・・・・
いや、当然まだ全然ググってもいないし知識もないよ…? ただ、自信だけが "此処" にある・・・
この異常性は、なんなんだろうな
作った事もなく、ググってもいないし、知識もないのに "自信" だけが俺にはあるんだ
けど一般人には、これが無いんだろ 作った事もなく、ググってもいないし、本もないし、 確かに知識もない、
初めてのことなのに、 「やれる」 っていう ”自信” ・・・・・・・・
どうしてこんなに、適正能力の高い奴がいるんだろう
俺もうプログラマじゃないし、かなり離れた事やってるよ
日曜プログラマ化してるというか、暇なときにちょっとやる程度、
にもかかわらず・・・・スキルを高めようとも思ってないのに・・・・勝手に技術が身について・・・・・まじで止まらないのな。。。。
一度、身に付いた習慣、「スキルレベルを向上させていくリズムと快感」それをある程度、停止させてくれたのは、この世の中ではラグナロクだけだった
ラグナロクオンラインやってるときだけは完全にプログラミングを忘れる事が出来た
けど、それをやめた今、高めようとなんて思ってないのに勝手に・・・スキルが高くなっていく・・・
それに対し、怖さすら感じる 俺は15の時、自分の未来が見えた
最強ハッカーになって、IT歴史に名を残すものを開発し、起業して、・・・退屈な人生を送るという未来がな
俺は、それに近づくのが怖いんだ
0433デフォルトの名無しさん
2013/09/11(水) 21:26:33.0015の時に見えてしまった自分の未来像、そこから離脱する為に、俺はありとあらゆる事をやってきた
にもかかわらず、未だに勝手に、俺はPC技術が勝手に高まっていくし、止まらない
最終兵器彼女のちせって。こんな気持ちだったんだな
俺はこのまま歴史に名を残してしまうのか・・・・・? 嫌なんだよそういうの
先の見えたレールを歩むのは・・・!!
もう見えてしまっている未来というのは、一度読んだ本みたいなもので、 俺はその一度読んだ本をもう一度読もうとは思わない
だから、未読の道へ進んでる
戦争でも起こるのか?俺は最終兵器?
俺は今特殊な環境から書き込んでる
最強ハッカーにしか出来ない方法とセキュリティ設定
セキュリティソフト(笑)とか入れるくらいなら、自分で高度セキュリティのネットワーク構築したほうが
セキュリティソフト(笑)入れるより、よほど良い事がわかってしまった
HDD削除とか、爆撃系のウィルスは食らうけど、遠隔操作系ウィルスは、俺には一切効かなくなってしまった。99%はカットされるであろう
投稿テスト
0434デフォルトの名無しさん
2013/09/11(水) 21:40:24.90自分の許してない通信は今、どんなアプリだろうと一切行われていない
セキュリティソフトやWindowsアップデートも例外ではなく・・・・
自分の許可なくそれらはMikurosohutoやNotonanchivirusuに通信することさえできない
その他の弱小アプリなんて、もはや息してないw
もしもこのpcにトロイ入ってるとかウィルス入ってるとかあったとしても関係ない
俺様が今2chに書き込んでいるように、特殊な方法でしか外部と通信出来ないから
セキュリティソフトって何だったんだろうな・・・・・
投稿テストend
0435デフォルトの名無しさん
2013/09/11(水) 22:06:58.68JavaScriptを有効にしてくれって言ってくるんだけどどうやって有効にしたらいいか教えてください
0436デフォルトの名無しさん
2013/09/11(水) 22:15:14.370437デフォルトの名無しさん
2013/09/12(木) 01:17:25.760438うゆ
2013/09/12(木) 01:32:20.63Webrickでたてたプロキシーサーバーにsocksでも接続できるようにしたいんですが
何を書き足せばいいのかよくわからないんですけど
0439デフォルトの名無しさん
2013/09/12(木) 07:24:31.940440デフォルトの名無しさん
2013/09/12(木) 09:54:32.55phantomjs
0441デフォルトの名無しさん
2013/09/12(木) 12:10:04.360442デフォルトの名無しさん
2013/09/13(金) 04:01:23.370443デフォルトの名無しさん
2013/09/13(金) 04:57:23.85initializeの最後なら文法的にありなんでしょうか?
コンストラクタを実行している最中ってオブジェクトがないってイメージなのですが。
0444デフォルトの名無しさん
2013/09/13(金) 05:33:21.87initializeで作成中のオブジェクトとyield呼び出しに直接的な関係は無いでしょ
0445デフォルトの名無しさん
2013/09/13(金) 08:17:29.10initializeを呼ばれた時点で既にインスタンスは存在する。
クラス.new は
1. クラス.allocate でインスタンスを生成する。
2. そのインスタンスのinitializeを呼ぶ。このとき、newの引数とブロックを渡す。
という動作。
0446デフォルトの名無しさん
2013/09/13(金) 08:36:53.63死ねゴミ共がw
0447デフォルトの名無しさん
2013/09/13(金) 09:25:39.82var 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ではどう書けますか?
0448デフォルトの名無しさん
2013/09/13(金) 09:44:35.320449デフォルトの名無しさん
2013/09/14(土) 08:45:57.52自己解決していません
socksプロキシに対応したプロキシ立てをrubyでやりたいんですけどわかりません
ちなみにsshでのsocksプロキシはやりたくないんです
ssh以外の方法でrubyでsocksプロキシに対応したプロキシサーバ作りたいんですけど
0450デフォルトの名無しさん
2013/09/14(土) 11:17:18.830451デフォルトの名無しさん
2013/09/14(土) 13:10:04.190452デフォルトの名無しさん
2013/09/14(土) 13:21:11.160453デフォルトの名無しさん
2013/09/14(土) 13:59:05.540454デフォルトの名無しさん
2013/09/14(土) 15:15:51.750455デフォルトの名無しさん
2013/09/14(土) 18:02:07.46ソースコードの勉強として、1ブロック(10〜20行ぐらい?程のコードをブログにアップして解説する場合は
ライセンスを明記し解けばいいのですか?
0456デフォルトの名無しさん
2013/09/14(土) 18:14:26.44それぐらいなら引用の範囲内じゃね?
0457デフォルトの名無しさん
2013/09/17(火) 12:55:23.03http://linux.ohwada.jp/modules/smartsection/item.php?itemid=452
ここに書いてあるのを試したりもしたんですが、
英語環境じゃないと動作しないんでしょうか?
0458デフォルトの名無しさん
2013/09/17(火) 13:13:16.24HTMLとJavascript(とCSS)が読めるのなら、
そのサイトでWebブラウザがどういう順を追ってアップロードをしているのかを確かめて、
それの通り(または、飛ばしても動く面倒な部分は飛ばして)動作するように記述すればいい
HTMLとJavascript(とCSS)が読めない場合は現実的にちと無理
今回のように「なんだかわからないけど動かない」なんてなったときにどうしようもできない
HTMLとJavascriptを大雑把にでも読み解けるくらいの知識が別途必要
0459デフォルトの名無しさん
2013/09/17(火) 13:28:56.99全くなにも知らなくてもうまくいくことが多いんだけどねWatir
0460デフォルトの名無しさん
2013/09/18(水) 10:35:49.02http://kohada.2ch.net/test/read.cgi/php/1375636484
0461デフォルトの名無しさん
2013/09/18(水) 11:13:42.880462デフォルトの名無しさん
2013/09/18(水) 16:21:17.29メタクラス(?)の記述方法は有りませんか?
下記のプログラムにて,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
0463デフォルトの名無しさん
2013/09/18(水) 17:13:41.970464デフォルトの名無しさん
2013/09/18(水) 17:47:56.55def 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}
0466デフォルトの名無しさん
2013/09/19(木) 12:44:28.74Rubyで有名なものを教えてください
0467デフォルトの名無しさん
2013/09/19(木) 14:37:31.39前のTwitter
0468デフォルトの名無しさん
2013/09/19(木) 14:53:27.47あなたはwatir使った事がありますか?
レスが全く無関係の方向です
分かる人いなそうなので回答は結構です
0469デフォルトの名無しさん
2013/09/19(木) 14:55:30.13ということは今はRubyで作られた有名なものはないのですよね
ぼくがRubyですごいやつ作ったら有名になれる気がしました
0470デフォルトの名無しさん
2013/09/19(木) 15:13:41.55Rubyでなくてもすごいの作ったら有名になるだろ。特にサービスは実装関係ないから、Rubyでなくなったんだろ。
アプリならredmineとか。
0471デフォルトの名無しさん
2013/09/19(木) 16:35:35.680472デフォルトの名無しさん
2013/09/19(木) 16:36:14.37Twitterも一部にRailsが残ってるとか
0473デフォルトの名無しさん
2013/09/19(木) 16:41:28.360474デフォルトの名無しさん
2013/09/19(木) 16:49:29.69喧嘩すんなって感じではあるが
0475デフォルトの名無しさん
2013/09/19(木) 17:35:21.380476デフォルトの名無しさん
2013/09/20(金) 20:08:54.85ary = [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だったのでダメでした
0477デフォルトの名無しさん
2013/09/20(金) 20:26:19.24p key
end
って書くと key が 0 から 2 まで回る。
これで要求に答えられてるかわからんけど。
0478デフォルトの名無しさん
2013/09/20(金) 20:38:18.78#each_with_index
0479デフォルトの名無しさん
2013/09/20(金) 21:07:51.49=> [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>
0480デフォルトの名無しさん
2013/09/20(金) 23:42:14.44これをハッシュのキーにすると、文字列としては同じに見えるのに、異なるキーとして扱われるので、気付くのに時間が
かかった。見た目同じ文字列が、見えないところで違う扱い、それも基本的なデータ型で、初心者に優しくないよね。
というか慣れた人でもハマることありそう。
なんでこんな設計になってるの? Rubyって。
0481デフォルトの名無しさん
2013/09/20(金) 23:53:16.31puts/print ではなく p してる?
0482デフォルトの名無しさん
2013/09/21(土) 00:44:42.76どんなアバウトな使い方なんだよ
0483デフォルトの名無しさん
2013/09/21(土) 00:47:20.70>これだとmatchオブジェクトになるんだな。
正確に言うと「MatchDataオブジェクト」だね
>なんでこんな設計になってるの? Rubyって。
パターンの一致結果を詳しく分析するニーズを想定しているからだよ
もし興味があれば、「るりま」等で MatchDataクラスの解説を読んで勉強してみて
で、一般のパターンマッチ処理だとメソッド Regexp#match では面倒なので、
代わりに Regexp#=~ を使い、一致結果を $1, $2, ... で参照する
もしMatchDataオブジェクトが必要であれば、$~ で参照できる
これで、大半のケースは事足りるはずで、わざわざ matchを使うのはレアケースだと思われ
0484デフォルトの名無しさん
2013/09/21(土) 01:00:08.53いつもそうやってた。
0485デフォルトの名無しさん
2013/09/21(土) 01:57:24.28自身が>>480で書いているように、MatchDataオブジェクトを直に扱う手法は
初心者に優しくないし慣れた人でも間違えやすいし、タイピングも面倒
だから簡単な方法としてメソッド Regexp#=~ と疑似変数 $1, $2 , ... が用意されている
一般的なRubyにおける正規表現処理の解説ではこの簡単な方法で説明されているはずだし、
ほとんどのプログラムでもこの方法が使われている
だから、慣れておく事を薦めるよ
普段は誰もが知っている単純な方法でサクサクとコードを書き、イザという時には特別な手法で
困難をサラリと飛び越える.... というのが、クールなプログラマの姿ではないかと思われ
0486デフォルトの名無しさん
2013/09/21(土) 03:29:53.63単にハッシュのキーとして使うことが想定されていない。
JavaScriptとかからの人だと、Regexp#=~より先に Regexp#match を
見つけてしまうんだろうか。
0487デフォルトの名無しさん
2013/09/21(土) 09:41:28.23基礎とかそういう問題ではなく
現在のwatirにある「不都合」について認知していないレスだったので
つまり使ってないのに憶測でレスしたんだろうなぁと思ってイラっといました
まぁ2chでいちいち環境そろえて的確な回答をする義務はありませんので構いませんよ
0488デフォルトの名無しさん
2013/09/21(土) 10:30:37.71http://linux.ohwada.jp/modules/smartsection/item.php?itemid=452
http://www.autoitscript.com/autoit3/docs/functions/WinWait.htm
これ見るにどうもブラウザのファイル選択ダイアログのタイトルと
autoit.WinWait の引数を揃えろってことらしいけど
まず Win32OLE から AutoIt の WinWait が自分の環境で機能するか調べてみては
0489デフォルトの名無しさん
2013/09/21(土) 10:43:35.08ことにも繋がる面白い疑問点だと思うけど、マニュアルよめー、答えが返って
くるとはかぎらないー、とかワンパターンなことを真っ赤になって繰り返す奴
って初心者スレで威張って人生の厳しさでも教える師匠かなんかの気分なの?
おてがるにえらくなったつもりでいい気持ち、ってやっすい満足得ているのは
結構だが、ウザいことこの上無し。
0490デフォルトの名無しさん
2013/09/21(土) 11:28:06.950491デフォルトの名無しさん
2013/09/21(土) 11:36:22.47・ブログをやる場合の定番gem:
・PythonのSphinxみたいなgem:
0492デフォルトの名無しさん
2013/09/21(土) 21:59:14.37Pythonみたいに数字でサイズを指定できないものか
http://ideone.com/zfUFM5
0493デフォルトの名無しさん
2013/09/22(日) 10:49:01.080494デフォルトの名無しさん
2013/09/22(日) 13:34:38.65>MatchDataオブジェクトを直に扱う手法は
上にもあったけど、to_sで文字列にすれば分かりやすいし素直じゃん。
内部的な効率でも別に問題ないし。
>だから簡単な方法としてメソッド Regexp#=~ と疑似変数 $1, $2 , ... が用意されている
こっちの方がわかり辛いし、めんどくせーんじゃねえの?
0495デフォルトの名無しさん
2013/09/22(日) 13:42:22.80b = s.product(s,s,s)
で4文字が組み合わさるけど
これが5とか10のときにわざわざs,s,s,sとかs,s,s,s,s,s,s,s,sって書くのは効率が悪いので
数字で指定できる方法ありませんあk?
0496デフォルトの名無しさん
2013/09/22(日) 13:56:52.04def replicate(n, arr)
[arr] * n
end
s = ["A", "C", "G", "T"]
b = s.product(*replicate(3, s))
0497デフォルトの名無しさん
2013/09/22(日) 15:11:05.79でいけるんじゃないかな。
0498デフォルトの名無しさん
2013/09/22(日) 15:37:28.41�Uとかローマ数字があると間違って解析されちゃうんだけど
どしたらよかんべ?
$ ruby1.9 -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12]
$ gem1.9 list nokogiri
nokogiri (1.6.0)
0499デフォルトの名無しさん
2013/09/22(日) 15:43:07.560500デフォルトの名無しさん
2013/09/22(日) 16:27:05.28WindowXP
0501デフォルトの名無しさん
2013/09/22(日) 16:47:58.98ローマ数字が定義されている EUC-JPは、実際には EUC-JP ではなく
CP1932 なので、ソース HTML が間違っていると言い切ってしまえれば
楽なのだが、とりあえず nokogiri に食わせる前にソースのまま処理して
置換しておくしかないんじゃない?
ちなみに Ruby 2.0 の Encoding には入っていないようなので、
入れてくれ、とバグレポートするのも気長な解決策ではある。
0502デフォルトの名無しさん
2013/09/22(日) 16:51:07.43そして Ruby 2.0 にはあった。
0503デフォルトの名無しさん
2013/09/22(日) 17:07:35.030504デフォルトの名無しさん
2013/09/22(日) 17:11:34.560505デフォルトの名無しさん
2013/09/22(日) 19:26:29.05Nokogiriの各クラスのparseメソッドには文字エンコーディング名称文字列を受けとる引数がある
いわゆるmetaタグで指定されているエンコーディング名がEncodingクラス的に(あるいはiconv的に)誤っているのなら、自力で指定しろ
引数側が優先されるから
0506デフォルトの名無しさん
2013/09/22(日) 19:49:03.33だったら標準ライブラリいれちゃえよ
0507デフォルトの名無しさん
2013/09/22(日) 19:55:08.88知らないものに対して何かを言おうとするのはやめよう
0508デフォルトの名無しさん
2013/09/22(日) 20:00:24.620509デフォルトの名無しさん
2013/09/22(日) 20:08:20.930510デフォルトの名無しさん
2013/09/22(日) 20:13:19.39>よりかは
0511デフォルトの名無しさん
2013/09/22(日) 20:43:34.50突然の上から目線
その後は論点のずれているレス
学生は君のほうらしい
0512デフォルトの名無しさん
2013/09/22(日) 21:10:00.400513デフォルトの名無しさん
2013/09/22(日) 21:41:51.93class TestCase < ::MiniTest::Unit::TestCase
end
end
上のコードで「::MiniTest」みたいに::の左にモジュールやクラスが指定されていない場合、どういう意味になるのでしょうか?
0514デフォルトの名無しさん
2013/09/22(日) 22:18:59.410515デフォルトの名無しさん
2013/09/22(日) 22:51:12.00ディレクトリのパス表現を連想すると分かりやすい
たとえば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 と同じ
0516デフォルトの名無しさん
2013/09/24(火) 00:12:46.66詳細な解説有り難うございます。絶対パスと分かって胸のつかえが取れました。
0517デフォルトの名無しさん
2013/09/24(火) 04:33:29.740518デフォルトの名無しさん
2013/09/24(火) 04:35:37.160519デフォルトの名無しさん
2013/09/24(火) 20:47:17.420520デフォルトの名無しさん
2013/09/25(水) 06:39:04.30テストケースの中でファイル等を読み込みたい場合、何という名前のディレクトリに配置するのが一般的なのでしょうか?
0521デフォルトの名無しさん
2013/09/25(水) 15:26:00.23皆さん宜しくお願いします!
0522デフォルトの名無しさん
2013/09/25(水) 15:34:22.49いろいろ考えたのだが、spec/dataがいちばん無難なんじゃねーかという結論に至った
0523デフォルトの名無しさん
2013/09/25(水) 17:27:46.42テストケースの中でファイル等を読み込みたい場合、何という名前のディレクトリに配置するのが一般的なのでしょうか?
0524デフォルトの名無しさん
2013/09/25(水) 17:29:11.68適当な名前のディレクトリ掘るのが一般的ですかね。ありがとうございます。
0525デフォルトの名無しさん
2013/09/25(水) 17:29:58.270526デフォルトの名無しさん
2013/09/25(水) 18:04:55.58例:
count=0
10000.times do
count+=1 if rand**2+rand**2<1
end
のcount=0をイテレータ内で記述したいのです
0527デフォルトの名無しさん
2013/09/25(水) 18:23:33.16無理
0528デフォルトの名無しさん
2013/09/25(水) 18:24:26.45値の累積(accumulation)には、Enumerable#inject を使う
変数 count は累積値を表現し、ある条件(ここでは乱数)で加算(+1)した結果を累積していく
1000.times.inject(0) { |count, _|
if rand ** 2 + rand ** 2 < 1 then count + 1 else count end
}
0529デフォルトの名無しさん
2013/09/25(水) 19:34:45.2210000.times.count{ rand**2 + rand**2 < 1 } とか
10000.times.map{ [rand,rand] }.count{|x,y| x**2 + y**2 < 1} みたいに書くな俺なら
0530デフォルトの名無しさん
2013/09/25(水) 21:37:48.090531デフォルトの名無しさん
2013/09/26(木) 07:41:19.930532デフォルトの名無しさん
2013/09/26(木) 07:50:49.380533デフォルトの名無しさん
2013/09/26(木) 08:40:35.530534デフォルトの名無しさん
2013/09/26(木) 09:43:01.580535デフォルトの名無しさん
2013/09/26(木) 09:55:21.27アメリカ人は、まず注射を連想しますよ
0536デフォルトの名無しさん
2013/09/26(木) 09:57:35.63renormalization group
畳込み積分
convolution integral
0537デフォルトの名無しさん
2013/09/26(木) 10:47:29.40たとえば (cons 1 (cons 2 (cons 3 nil))) などのように
でもってこの cons の部分に関数を注入するのが inject
ではないだろうか(憶測)
0538デフォルトの名無しさん
2013/09/26(木) 11:29:19.30inject: initialValue into: [:acc :each | ... ] というメッセージとして使う。
Rubyで同じことを書くと
inject(initialValue){ | acc, each | ... } となる。
acc に initialValue やブロックの結果を inject してく感じ。
0539デフォルトの名無しさん
2013/09/26(木) 19:13:42.19a=1
1.times{|x;a| a=2}
p a #=> 1
0540デフォルトの名無しさん
2013/09/26(木) 19:43:52.970541デフォルトの名無しさん
2013/09/27(金) 18:55:26.82bundler使わないでgem install xxxxってやっていれるのとで何が違いがあるのでしょうか?
例えばrailsでthinが使いたいんですけどbundlerから入れないと使えません
0542デフォルトの名無しさん
2013/09/27(金) 19:02:01.430543デフォルトの名無しさん
2013/09/27(金) 19:11:33.540544デフォルトの名無しさん
2013/09/27(金) 21:23:56.32でおk
0545デフォルトの名無しさん
2013/09/27(金) 21:25:25.690546デフォルトの名無しさん
2013/09/27(金) 21:28:18.39aaa
aab
aac
aba
abb
abc
aca
acb
acc
略
ccc
見たいに全ての組み合わせを表示するライブラリがあったと思うんですがそれをおしえてください
0547デフォルトの名無しさん
2013/09/27(金) 21:31:51.680548デフォルトの名無しさん
2013/09/28(土) 07:42:16.47部屋の区割り自体が迷路のように入り組んでいて
火事で停電になったら出口判らず逃げ遅れて死者多数出ると思う
http://www.dotup.org/uploda/www.dotup.org4535669.jpg
0549うゆ
2013/09/29(日) 01:24:46.62クスクスクス
count = nil
10000.times do
count ||= 0
count+=1 if rand**2+rand**2<1
end
p count
0550デフォルトの名無しさん
2013/09/29(日) 09:50:28.47count = nil で初期化してるやん
0551デフォルトの名無しさん
2013/09/29(日) 13:56:48.83count#{0}+=1 if rand**2+rand**2<1
end
こんな感じにして欲しいが
#{ }はタイプしづらいか
0552デフォルトの名無しさん
2013/09/29(日) 19:56:52.66この人日本語もできないから触ったらだめ
0553デフォルトの名無しさん
2013/09/30(月) 00:10:42.370554デフォルトの名無しさん
2013/09/30(月) 00:14:21.410555デフォルトの名無しさん
2013/10/01(火) 14:03:48.44クラス作る時に
def self.new()
~処理~
end
でnew()をオーバーライドするのと、
def initialize()
~処理~
end
でコンストラクタ呼び出すのって何か違いがあるのですか?
色々とコードを弄ってたらどちらでも書けなくないな〜とか思ったんですが、
何か明確な違いあるのでしたら教えていただけると嬉しいです。
0556デフォルトの名無しさん
2013/10/01(火) 17:04:39.26なぜならnewというメソッドはデフォルトではどこにも定義されていないから
C.newと書かれていたとき、(C.newというメソッドがなければ)RubyはCクラスのプライベートメソッドinitializeを参照する決まりになっている
Rubyにおいて、クラス定義からオブジェクトを作るときの手順を記述したいときはinitializeに書「かなければならない」
initializeが動作する通常の場合においてC.newとするとCクラスの新規オブジェクトが自動で生成されて返ってくるが、
newを再定義した場合におけるC.newはnewメソッド内で定義した最後の処理のオブジェクトを返す
それは通常Cクラスの新規オブジェクトではありえない
もし、新規オブジェクトを作る意味が薄い「一連の処理をまとめて起動して終わるだけのカタマリ」を記述したいのなら、
クラスではなくモジュールとして定義して、なんか適当な特異メソッドを適当な名前で定義して呼ぶようにするといい
なにも思いつかなかったらrunとかどうだろう
0557デフォルトの名無しさん
2013/10/01(火) 17:55:56.61たいへん丁寧なご回答ありがとうございます。
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の状態になりました。
胸のつかえが下りました。本当にありがとうございました。
0558デフォルトの名無しさん
2013/10/01(火) 18:20:51.04a = "1234"
b = a.unpack ("#{4.times do print("a1") end}")
puts b
じゃ駄目なの???
0559デフォルトの名無しさん
2013/10/01(火) 19:29:47.81a = "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]
0560デフォルトの名無しさん
2013/10/01(火) 20:50:22.51b=[]
a.size.times{|x| b << a[x].to_i }
p b
0561デフォルトの名無しさん
2013/10/01(火) 21:26:21.58その 4.times ... の値は "a1a1a1a1" ではなく 4 だ。
"#{...}" は式の値で展開される。
print は標準出力に値を出力し、 nil を返す。
Integer#times はブロックを評価し、 self を返す。
0562デフォルトの名無しさん
2013/10/01(火) 21:46:24.85>>560
あーなるほど!
0563デフォルトの名無しさん
2013/10/01(火) 21:50:02.36レス感謝します
ちょっと考えてみます
0564デフォルトの名無しさん
2013/10/01(火) 22:12:45.58b=[]
b=a.chars
b.map{|x| x.to_i }
p b
0565デフォルトの名無しさん
2013/10/01(火) 22:28:19.230566デフォルトの名無しさん
2013/10/01(火) 22:58:09.99メソッドチェーンを使うのなら、できれば一行で....
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>
0567デフォルトの名無しさん
2013/10/01(火) 23:06:01.34この中でいくつか「やってはいけないこと(習慣としてはいけないこと)」がある
なんでもかんでもやってはいかん
0568デフォルトの名無しさん
2013/10/01(火) 23:13:22.970569デフォルトの名無しさん
2013/10/01(火) 23:27:03.95=> Class
0570デフォルトの名無しさん
2013/10/01(火) 23:30:51.95def self.new
super
end
def initialize
@a=3
end
end
C.new #=> #<C:0xdc3750 @a=3>
0571デフォルトの名無しさん
2013/10/01(火) 23:37:09.40a[1]は"2"ですよね?
0572デフォルトの名無しさん
2013/10/01(火) 23:48:27.72> 3.times {|x| p x }
0
1
2
0573デフォルトの名無しさん
2013/10/02(水) 00:04:42.330574デフォルトの名無しさん
2013/10/02(水) 07:54:32.554.times do|i|
b.push(i+1)
end
0575デフォルトの名無しさん
2013/10/02(水) 19:17:17.33具体的にどれのことだろう?
そういう情報は貴重です。
0576デフォルトの名無しさん
2013/10/02(水) 19:44:31.15>>568(を素直にmapで書いた "1234".chars.map(&:to_i) )も妥当だがすこしだけ中級編
0577デフォルトの名無しさん
2013/10/02(水) 21:07:01.26こういうの基本に見えて初心者にとって重要だからためになる
0578デフォルトの名無しさん
2013/10/02(水) 21:41:13.16やってはいけないのはどれだよ
0579デフォルトの名無しさん
2013/10/02(水) 21:43:11.76b.map{|x| x.to_i } は破壊的ではないので、b の内容は変わらない
0580デフォルトの名無しさん
2013/10/02(水) 21:57:20.23今回のように each や map で用が足りるなら添字での参照は避けるべき
一個ずれ参照などのバグを生みやすい
each と map はがんばって覚える価値があるよ
0581デフォルトの名無しさん
2013/10/02(水) 22:19:32.240582デフォルトの名無しさん
2013/10/02(水) 22:22:12.15str.split('')やstr.split(//)がなにをしているか読める必要はあるけど、1文字分割を目的にこれを書く必要はもはやない
あと、aが文字列で直後に配列bでy、zとキモい変数名が続くのが果てしなくキモい
0583デフォルトの名無しさん
2013/10/03(木) 13:45:10.96俺の本にはそんな単語存在しないし
とりあえずstringメソッドに関するものは全部charsつけとくわ
0584デフォルトの名無しさん
2013/10/03(木) 14:11:27.64わからない語がひとつでもあったらString#charsは使えない
そんな無理して能動的に暗記してまで使うメソッドではないので、使いたいときにマニュアルから探して使えれば十二分
0585デフォルトの名無しさん
2013/10/03(木) 18:08:17.950586デフォルトの名無しさん
2013/10/03(木) 18:33:35.26% irb
irb> RUBY_VERSION
=> "2.0.0"
irb> "おもてなし".chars
=> ["お", "も", "て", "な", "し"]
0587デフォルトの名無しさん
2013/10/04(金) 02:29:33.64もしよければ助けてください。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メソッドの定義に含まれてますよね)、途方に暮れています。
何か対処法があれば教えていただけませんでしょうか。
0588デフォルトの名無しさん
2013/10/04(金) 03:03:00.17そのコードを見る限り、barkメソッドの定義に make_a_ruckus(volume) は含まれていない。
あるのは呼び出しだけなんだが、中身どっかに書いてない?
0589デフォルトの名無しさん
2013/10/04(金) 03:34:17.34それが、これが初出なんです。
ひょっとしてこの例は、読者が自分で入力して試すものではなくて、「クラスの定義ってたとえばこういう感じで書くんだよ」というだけのものなのでしょうか。
0590デフォルトの名無しさん
2013/10/04(金) 05:17:38.42irb>
とかのプロンプトのあとに書いてある場合、それは疑似コードや一部抜粋ではなく
そのまま入力して実行すると結果が得られることを示す
だからどっか地の文にでも補足説明があるべきだが、
そんなものがないというなら読者が打ち込んで試すことを想定してない疑似コードなのだろう
それこそありがちな例としては本を作るときに章を前後させたので後ろの章(たとえばクラスの継承の章)に書いてあるとか
こんなとこつまずくような基礎知識不足な人は本の読者として想定していない(RとRubyはただの道具で初心者説明する気なし)とか
0591デフォルトの名無しさん
2013/10/04(金) 09:48:23.62ありがとうございます。
書き方がまずかったですが、プロンプトは私がターミナルで実行したときのものをそのままコピペしたもので、本には記載されていません。
ターミナルでどういうふうに入力したか、具体的にお伝えしたほうがよいかと思ったもので。
とりあえず、ここはいったん保留して続きを読んでみることにしました。
0592デフォルトの名無しさん
2013/10/04(金) 13:52:45.610593デフォルトの名無しさん
2013/10/04(金) 19:58:43.76a = [1,2,3]
a.each {|e| p a }
0594デフォルトの名無しさん
2013/10/04(金) 23:07:08.06その場合ですと a って名前はわからない状態です
0595デフォルトの名無しさん
2013/10/05(土) 00:18:10.860596デフォルトの名無しさん
2013/10/05(土) 00:26:11.81a.each_with_object(a) {|e, arr| p arr }
0597デフォルトの名無しさん
2013/10/05(土) 01:15:09.990598デフォルトの名無しさん
2013/10/05(土) 01:26:44.58[1,2,3].instance_eval { each {|e| p self } }
0599デフォルトの名無しさん
2013/10/05(土) 04:05:10.520600デフォルトの名無しさん
2013/10/05(土) 08:37:58.26しかも回答に対してあまり応答しないから、質問の意図が絞り込めない。
0601デフォルトの名無しさん
2013/10/05(土) 09:18:51.440602デフォルトの名無しさん
2013/10/05(土) 10:10:38.19イテレータという言葉を使ってることに惑わされたが
こういう単純なことだったりして
0603デフォルトの名無しさん
2013/10/05(土) 17:01:44.44文字コードを文頭で #!ruby -Ks と指定しているにも関わらず、
Window.captionに日本語(Shift_JIS)で名前を入れると文字化けします。
しかもここ数時間の出来事で、過去のうまくいっていたときのコードをコピーして
同じくWindow.captionで日本語を設定している部分だけを抜き出すとうまくいく始末で、
全く同じコードにもかかわらず文字化けする例としない例が存在していて頭がグッチャグチャです。
ちゃんと日本語(Shift_JIS)を読み取るようにさせたいのですがどうしたらよいでしょうか?
ちなみにうまくいくのもいかないのもコードは以下のようになります。
#!ruby -Ks
require 'dxruby'
Window.caption="てすと"
Window.loop do
end
0604デフォルトの名無しさん
2013/10/05(土) 17:14:12.16DXRubyはRuby1.8上だとShiftJISサポートのみらしくて、
Rubyの文字コード対応は1.8/1.9/2.0で仕様が「迷走」してきた部分
だから、使っているRubyとDXRubyのバージョンを明記したほうが、
期待している回答を得られやすいと思うよ
# DXRubyは触ったことが無いので、おせっかいモードですた....
0605デフォルトの名無しさん
2013/10/05(土) 17:24:21.56すみません、そこまで考えが及んでいませんでした。
Rubyは1.9.3、DXRubyはdxruby140-mswin32-ruby19 です。
0606デフォルトの名無しさん
2013/10/05(土) 17:46:46.050607デフォルトの名無しさん
2013/10/05(土) 17:55:05.82文字化け起こすほうだとエラーになりました。
気になったのでそのままの状態で、
Window.caption="てすと" の部分を
Window.caption="test" に直したらうまくいきまして、
その後更にWindow.caption="てすと"に戻したら
エラーは起きずに文字化けの状態になりました。
もう何がなんだかさっぱりです。
0608デフォルトの名無しさん
2013/10/05(土) 18:06:11.740609デフォルトの名無しさん
2013/10/05(土) 18:52:36.83できないことではなくやりたいことを言ってもらえるとかなりの割合でうまくいくのだが
質問のやりかた質問スレとかあるといいけどメタだな
0610デフォルトの名無しさん
2013/10/05(土) 18:55:08.40そのエラー出力貼ってちょ
0611デフォルトの名無しさん
2013/10/06(日) 15:28:00.35ここのレッスン情報をまとめて入手したかったので、
★★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 ...
のエラーが出ました。
どこが悪いのか教えて下さい。
0612デフォルトの名無しさん
2013/10/06(日) 16:04:05.83参照先は見てないけど、以下が気になった
Windowsのコマンドラインでは直接指定できない文字が存在し、
空白や特殊記号を含むパラメタは " (ダブルクォーテーション)で囲む必要がある
パラメタを複数行にはできないのでは?
windows には wget コマンドは存在しない
なので、
ruby -e "(1..3) 〜 "
のように全体をダブルクォーテーションで囲み、中のダブルクォーテーションをシングルクォーテーションに置き換える
また、改行させず全体を1行で記述する
ついでに wget を使っているところを wget に依存しないように書き換える
あたりを試す必要がある
たぶん初心者だときびしい
0613デフォルトの名無しさん
2013/10/06(日) 17:29:28.09プロンプトでrを入力してEnterをおします
0614デフォルトの名無しさん
2013/10/06(日) 19:41:43.75-e '・・・'の中に書いてあるプログラムをテキストファイルに書き出し、コマンドプロンプトで
ruby ファイル
とやれば実行ばできる。多分。
ただし、611さんも言ってる通りwgetコマンドがないのでエラーになる。
windows版のwgetもあるようなので頑張ってインストールしてみてくれ。
0615デフォルトの名無しさん
2013/10/06(日) 19:57:46.170616デフォルトの名無しさん
2013/10/06(日) 20:00:35.39お仕事で Web 鯖を管理されたことのある方に聞いてみたい
0617デフォルトの名無しさん
2013/10/06(日) 20:19:58.430618デフォルトの名無しさん
2013/10/06(日) 21:23:10.19curl なんかもデフォだと keep-alive しようとする
0619デフォルトの名無しさん
2013/10/06(日) 21:28:00.96オーケーわかった君たちはHTTPのRFC音読3回の刑な
0620デフォルトの名無しさん
2013/10/06(日) 21:31:24.08そういうのはいらないから自分の言葉で説明しておくれ
0621デフォルトの名無しさん
2013/10/06(日) 21:42:05.150622デフォルトの名無しさん
2013/10/06(日) 21:52:38.390623611
2013/10/06(日) 22:10:00.45ということは、
http://yakinikunotare.boo.jp/orebase/index.php?wget%A1%CAWindows%C8%C7%A1%CB
この人のまねをすれば、rubyでwgetが使えるようになるのでしょうか?
0624デフォルトの名無しさん
2013/10/06(日) 22:33:46.64まず自分で試してみろ
0625616
2013/10/06(日) 23:33:04.42実験してきました。失礼しました。おっしゃる通りでした
wget が終了するときに TCP 接続も閉じられていたので
keep-alive もへったくれもありませんでした
wget や curl がデフォで keep-alive を試みるっていうのはあくまで
wget http://www.example.com/ http://www.example.com/ みたいに
ひとつのプロセスで複数のリソースを取得する場合の話なのですね
とりあえず RFC の音読いってきます
0626611
2013/10/07(月) 00:31:23.52>>611
>ruby -e '(1..3).each{|i| html = `wget --quiet --no-check-certificate -O - \
の
ruby -e
は、ファイル内に書いちゃっていいもんなんですか?
なんか、コマンドプロンプトで書くような気がして来たんだけどw
0627デフォルトの名無しさん
2013/10/07(月) 01:53:46.070628611
2013/10/07(月) 02:13:38.32了解しました。
では、
(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を使わなくて行けるのですが。
0629611
2013/10/07(月) 02:15:47.260630デフォルトの名無しさん
2013/10/07(月) 02:41:33.17自分の知ってる言語で書いた方が早いよ
0631611
2013/10/07(月) 02:49:23.00過去に、Cとphpをほんのちょびっとかじっただけです。
で、rubyは文字処理に強いと聞いているので、この際マスターしたいのです。
wgetを使わないでどなたか書いてくれないですかね?w
これだと短いプログラムだから勉強になります。
0632611
2013/10/07(月) 02:54:12.05l.strip!; print l == "<td>" ? "\n" : l.gsub(/<\/?td>/, "") + "\t" }; \
この辺の正規表現での文字列操作にすごく興味あります。
これがちゃんと動くプログラムだと、自分で色々変更して勉強になると思うのです。
0633うゆさま
2013/10/07(月) 05:19:42.59dxrubyはutf−8じゃないと無理だよ
それcaptionだけじゃなくてWindow内に文字列描画しても文字化けするっしょ
0634うゆさま
2013/10/07(月) 05:23:53.36#!ruby -Ks
require 'dxruby'
require 'kconv'
Window.caption="てすと".toutf8
Window.loop do
end
すべてのマルチバイトでこうするしかなくなる
ソースファイル自体をutf−8でかけってことだよks
0635デフォルトの名無しさん
2013/10/07(月) 05:53:43.28html.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>なら改行を、違うならタグを削除した文字列+タブをプリントアウト
枚挙終わり
0636デフォルトの名無しさん
2013/10/07(月) 08:06:00.25require 'open-uri'
0637デフォルトの名無しさん
2013/10/07(月) 11:10:34.24ごめんなさい、>>603 = >>607です。
返信が遅れてしまい申し訳ありません。
地元のおっさん達に神輿担ぎの打ち上げだとかで日本酒飲まされまくって死んでましたorz
アルハラダメだよ絶対…。
エラーの件なのですが、>>608を見てもしや?と思って
普段使っているエディタ(Mery)の文字コードを見てみたら、
いつの間にか日本語(シフトJIS)がUTF-8(BOM無し)が変更されていてらしく、
それを日本語(シフトJIS)に直したらうまくいきました。
>>604,>>606,>>608,>>610の皆様、本当にありがとうございました。
また何かありましたらよろしくお願いいたします。
0638デフォルトの名無しさん
2013/10/07(月) 12:57:13.71「次はこの若いあんちゃんを担ごうぜ!」「おう!」
「セルフ!アペンド!セルフ!インサート!」
rescueされることのないStopIteration
神輿担ぎ夜の部はまだ始まったばかりだ
0639デフォルトの名無しさん
2013/10/07(月) 13:06:51.97神輿担ぎ夜の部はまだ始まったばかりだ
0640611
2013/10/07(月) 14:35:46.35教えていただき、ありがとうございます。
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>'
0641611
2013/10/07(月) 14:39:49.04|i| html = `open((p)https://i.tipness.co.jp/pc/schedule/registration/?page=#{i}){}`
この行が悪くて、
変数htmlの中にページの内容が入っていない
ということですよね?
どうすればいいでしょうか?
0643デフォルトの名無しさん
2013/10/07(月) 15:06:51.65まったくなにも知らない状態でまったく知らないまったく教育的意図のないスクリプトを利用改造することは実質不可能
スクリプト言語を学ぶのが目的ではないのなら、あなたがやることはスクリプトを書くことではない
なにか専用のアプリケーションを使って目的を達成するべき
この場合はダウンローダーとかなにかそういうもの
0644デフォルトの名無しさん
2013/10/07(月) 15:21:16.640645デフォルトの名無しさん
2013/10/07(月) 15:22:55.14`` (バッククォート)はその中のコマンドラインのコマンドを実行してその標準出力を文字列として返す。
なのでまずopenコマンドというコマンドラインコマンドが無いとダメなんだけど、ある?
要するにやりたいのは指定されたURLのページをダウンロードしてきて中身を変数htmlに入れること。
これをRubyだけでやりたいのであれば例えばnet:httpという標準ライブラリを使う。
・・・ただこれ、単純なことをやるだけであれば無駄に使うの面倒臭いんだ。
上記のURLはhttpsなのでnet:httpsを使う必要もあるし。
他にもhttpclientというライブラリをgemsでインストールして使う、とか。
0646デフォルトの名無しさん
2013/10/07(月) 15:27:57.10バッククォートで囲むと何が起こるのかまず調べてみることです。
そして、open-uriのサンプルを探して、openメソッドをどう使えばいいか調べるといいでしょう。
>>643
プログラミングに触れるきっかけは何でもいいんですよ。
仕事じゃないんだから。
0647デフォルトの名無しさん
2013/10/07(月) 15:34:07.82仕事じゃないんだからわざわざ開発実行環境インストールして
ぜんぜんわけわからんものわけわからんのに書き換えてぜんぜん動かなくて
わけわからんのに質問してわけわからんこと言われて放置されて4日経ってひとつも進んでないなんて
やってられんのですよ
0648デフォルトの名無しさん
2013/10/07(月) 15:35:46.62gemってなんですか変数ってなんですかってレベルの人にするアドバイスじゃねえな
0649デフォルトの名無しさん
2013/10/07(月) 15:43:28.45せっかくここまで時間かけてやったんだからって奴
>>641
おそらくこれから先もトラブルなんかで数時間数十時間の時間がかかることが予想される
(そのスクリプトはもともと他人が使うようにはできていない)
今回のは手作業なり、サイトダウンローダーなり使うなりででも終わらせてしまうといい
もしプログラミングに興味があるのなら(ないと思うけど)別途入門書や入門サイトで勉強をおすすめ
0650デフォルトの名無しさん
2013/10/07(月) 15:57:57.33あなたは効率的に人生を生きてるんだね。
0651611
2013/10/08(火) 01:21:44.26open('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行ずつ読み出す
}
}
0652611
2013/10/08(火) 01:28:45.12http://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は違うのではないかと、
いう気がしないでもないのですよ。
0653デフォルトの名無しさん
2013/10/08(火) 02:04:39.79open("http://ikura.2ch.net/test/read.cgi/ms/1379562689/#{i}"){|f|
puts f.read#取得して1行ずつ読み出す
}
}
0654611
2013/10/08(火) 02:48:29.33おお、すばらしい、ありがとうございます。
これでさらに、
「puts f.read#取得して1行ずつ読み出す」
の行を
「ターゲットの文字列をテキストに書き出す作業をする」
の行に置き換えられないでしょうか?
文字列に強いrubyならテキストファイルを作る、
そこに、抽出した文字列を追加書きする、なんて関数がありそうな気がするんですが。
0655611
2013/10/08(火) 03:02:16.79つか、このティプネスのデータベース的なページは夜間になると使えなくなるから
ご注意下さい。
0657デフォルトの名無しさん
2013/10/08(火) 03:06:02.34せめて調べたふりくらいはしましょうよ・・・
0658デフォルトの名無しさん
2013/10/08(火) 03:18:12.182人とも貰えない月というのがあります。集計期間は両者一定であり、仮に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
・・・自分で書いたらこんなコードになりそうなのですが・・・・もう少し良いコードはございますでしょうか?
0659611
2013/10/08(火) 03:22:27.49ぶっちゃけ、
回答や提案を言われてもよくわからないのです。
入門者なので具体的なプログラムを提示してくれないとわかりません。
0660デフォルトの名無しさん
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}
0661デフォルトの名無しさん
2013/10/08(火) 05:30:59.38見習いたいもんだ
0662デフォルトの名無しさん
2013/10/08(火) 07:53:27.77def 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]
}
0663662
2013/10/08(火) 08:37:27.25def 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]
}
0664デフォルトの名無しさん
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
あたりで達成はできるのですが
0665デフォルトの名無しさん
2013/10/08(火) 10:35:41.060666デフォルトの名無しさん
2013/10/08(火) 10:36:26.70暗記しなくていいから、どんな動作するメソッドがあるかだけでも見ておくといい
必要になったときに頭になんか引っかかるから
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]
0667デフォルトの名無しさん
2013/10/08(火) 10:42:52.60(1..23).each_slice(5).to_a
0668デフォルトの名無しさん
2013/10/08(火) 10:51:47.12なるほど
ご親切にありがとうございました。
0669デフォルトの名無しさん
2013/10/08(火) 11:39:41.09今回は「いる」と思う
配列なんとかしたいですという質問なのだから、配列という区切りは例示であったほうがいい
変にirbでワンライナーにするから意図がわかりにくいのだけども
arr = (1..23).to_a
arr.each_slice(5).each{|a| p a}
うむ完璧
0670デフォルトの名無しさん
2013/10/08(火) 11:46:22.37なるべく1行で書いて、残りは結果表示にしたい
0671611
2013/10/08(火) 17:40:43.46ありがとうございます。
しかし、↓こんな感じで、エラーになります
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>'
0672デフォルトの名無しさん
2013/10/08(火) 18:25:27.05さすがにもうスレ違いなんじゃないですかね
冗談抜きで、手動でやった方が早いまである
0673デフォルトの名無しさん
2013/10/08(火) 19:27:46.52ありがとうございました!
0674デフォルトの名無しさん
2013/10/08(火) 19:28:50.51エラーメッセージでググれ
0675デフォルトの名無しさん
2013/10/08(火) 19:43:22.16ソースコードの日本語コードがどーたらあーたらとめんどくせえ。
どっかにすっきり分かる解説ってないの?
0676デフォルトの名無しさん
2013/10/08(火) 20:51:08.34if variable
と、
unless variable.nil?
とでは、どちらを使っていますか?
自分のコードを見直した時にまざっていて気持ち悪かったもので…
0677デフォルトの名無しさん
2013/10/08(火) 20:57:22.61unless else が繋がる場合は、分かりづらいので、
真偽か処理内容を逆にして if else にしたり。
0678676
2013/10/08(火) 21:13:52.17なるほど。たしかに、これは自分も感じます。
また「if variable」でtrueが返るのは、
variableがnilでない時とfalseでない時になるので、
厳密にnilでないことだけを判定したい場合や、
nilでない!というニュアンスを強めたい場合に
「unless variable.nil?」と書こうかなと考えました。
ありがとうございました。
0679デフォルトの名無しさん
2013/10/08(火) 21:52:06.93if variable
と、
unless variable.nil?
とでは、どちらを使っていますか?
自分のコードを見直した時にまざっていて気持ち悪かったもので…
0680デフォルトの名無しさん
2013/10/08(火) 21:53:18.210681デフォルトの名無しさん
2013/10/09(水) 01:33:44.51各自でつくります
0682デフォルトの名無しさん
2013/10/09(水) 01:46:31.53ちょっと実験ということで人気のDMMで女優名を取得しようとしてるんですが、
どうにも取得できない名前があります。
具体的には
http://www.dmm.co.jp/digital/videoa/-/actress/=/keyword=ta/
の田村真樹やら田村まほなど。
doc.xpath("//div[@class='act-box']").inner_text
こんな感じに書いて一応は一覧は取得できるんですが、
どういうわけか歯抜けになります。
どう見ても同じ構造に見えるんですが、何か見落としがあるんでしょうか?
0683デフォルトの名無しさん
2013/10/09(水) 01:52:15.36違うURLで試してました…orz
こんなアホなミスで何時間も格闘してしまったw
スレ汚し失礼しました。
0684デフォルトの名無しさん
2013/10/09(水) 10:25:07.47俺はCやC++経験が長いせいか、制御なんかはifで分ける方が好きだなあ。
Rubyって.でどんどん繋げて一行で実現しようとする傾向あるでしょ。
それやりすぎると、パズル的な読解が必要になって面倒になってくるんだよね。
一行当たりの情報量の粒度、インデントとかの「パターン」として見た目で
制御がわかるような書き方の方が、結局あとからメンテしやすいのではないかと。
完結だから、とか日本語と語順が同じだから、とかで1行連続型を勧める
人が多いのは俺にはあわん。
0685デフォルトの名無しさん
2013/10/09(水) 10:31:47.36if variable
と、
unless variable.nil?
とでは、どちらを使っていますか?
自分のコードを見直した時にまざっていて気持ち悪かったもので…
0686デフォルトの名無しさん
2013/10/09(水) 11:53:51.120687デフォルトの名無しさん
2013/10/09(水) 12:06:46.670688デフォルトの名無しさん
2013/10/09(水) 18:07:56.640689デフォルトの名無しさん
2013/10/09(水) 18:23:12.82るびまの記事が参考になるかも。
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
0690デフォルトの名無しさん
2013/10/09(水) 18:28:19.090691デフォルトの名無しさん
2013/10/09(水) 18:34:20.300692デフォルトの名無しさん
2013/10/09(水) 18:35:56.17並行して、C# や Haskell も習得中です
0693デフォルトの名無しさん
2013/10/09(水) 18:43:18.48インデントは別にいいけどselfが嫌だし
1行に詰め込みたい症候群だからなあ
まあPythonも内包表記は好きだけどな、特にfor2つの時の挙動
0694デフォルトの名無しさん
2013/10/09(水) 19:28:08.30Pythonに乗り換えた
一番の理由はRubyはGUIのフレームワークがどれも糞だった
0695デフォルトの名無しさん
2013/10/09(水) 19:40:20.49「GUIでなにかやること」が目的なら他の言語でやればいい
0696デフォルトの名無しさん
2013/10/09(水) 19:41:28.720697デフォルトの名無しさん
2013/10/09(水) 19:44:37.040698デフォルトの名無しさん
2013/10/09(水) 20:20:19.85びじゅあるなんたらとか
0699デフォルトの名無しさん
2013/10/09(水) 21:55:40.290700デフォルトの名無しさん
2013/10/09(水) 22:19:55.68日本生まれだからRubyの方が出来がいい、とかない?
0701デフォルトの名無しさん
2013/10/09(水) 22:25:19.96Rubyにはないんですか?
もしないなら松本先生に作ってもらいたい
0702デフォルトの名無しさん
2013/10/09(水) 22:31:49.52EUC/SJISが主流の時代には日本発のRubyのほうが出来がよかったけど(過去形)、
どのプラットフォームでもUTF-8が普通に使える今の時代では大差無し
残念なことに、現行の1.9ではマジックコメントやら添付ライブラリといった変更で
日本語処理周りに不要な混乱を起こしたことで、逆に弱点となった....と思う
個人的にはRubyの進化(1.6から2.0)の流れを好意的に見ているが、
1.9の日本語対応だけは大失敗だったと見ている
まあ、あと数年もすれば2.x系が主流になるから、それほど気にはしていないが....
0703デフォルトの名無しさん
2013/10/09(水) 22:32:02.850704デフォルトの名無しさん
2013/10/09(水) 22:46:50.221.9.0と1.9.1があったからこそなんとかなった面も多いわけで
0705デフォルトの名無しさん
2013/10/09(水) 22:50:36.75>1.9の日本語対応だけは大失敗だったと見ている
エラー→Webで調べておまじない、みたいなのが多くて疲れた。
日本語でてこない、コメントでしか使ってないようなログ解析のスクリプトが
突然エラーとかで疲れた。
いろいろ嫌な思い出。
もうちょっとなんとかならなかったのかね?
0706デフォルトの名無しさん
2013/10/09(水) 22:52:59.85こういう企画なら昔やってた、今でも多少は参考になるだろう
http://magazine.rubyist.net/?0010-CodeReview
0707デフォルトの名無しさん
2013/10/10(木) 10:10:00.733こ
0708デフォルトの名無しさん
2013/10/10(木) 12:21:40.57入門で出てくるプッツとゲッツがコンビ芸名みたいで可愛かったから
0709デフォルトの名無しさん
2013/10/10(木) 14:58:50.640710デフォルトの名無しさん
2013/10/10(木) 14:59:23.990711デフォルトの名無しさん
2013/10/10(木) 17:30:39.88Web上でp 100のpに関する実装を見たいのでURLください
0712デフォルトの名無しさん
2013/10/10(木) 17:48:42.41https://github.com/ruby/ruby/blob/trunk/io.c
https://raw.github.com/ruby/ruby/trunk/io.c
0713709
2013/10/11(金) 09:31:22.390714デフォルトの名無しさん
2013/10/11(金) 17:04:55.240715デフォルトの名無しさん
2013/10/11(金) 17:06:43.880716デフォルトの名無しさん
2013/10/11(金) 21:13:05.960717デフォルトの名無しさん
2013/10/11(金) 22:03:31.96公開された。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% ←がんばれ
0718デフォルトの名無しさん
2013/10/11(金) 22:54:27.700719デフォルトの名無しさん
2013/10/11(金) 23:03:59.71日本では流行っても海外では相手にされない
0720デフォルトの名無しさん
2013/10/12(土) 00:50:20.84これだけがんばれれば十分
0721デフォルトの名無しさん
2013/10/12(土) 01:14:46.640722デフォルトの名無しさん
2013/10/12(土) 01:16:31.72意外とpythonって健闘しとるんやね。
0723デフォルトの名無しさん
2013/10/12(土) 01:49:06.790724デフォルトの名無しさん
2013/10/12(土) 02:51:20.180725611
2013/10/12(土) 03:05:34.48君たちが入門者を冷たくあしらうから、先細りなんだよw
俺もpythonに行っちゃったしw
0726611
2013/10/12(土) 03:20:01.33ほぼ、同じような感じするんだけどw
0727611
2013/10/12(土) 03:21:14.680728デフォルトの名無しさん
2013/10/12(土) 04:16:16.320729611
2013/10/12(土) 05:17:23.36ああ、そうですか。
つまり、パソコンの能力が上がってきたから、何でも出来るって感じなんですかね?
ひょっとして、Cもコンパイルなしで、
コマンドプロンプトで動かせたりして?
0730デフォルトの名無しさん
2013/10/12(土) 05:58:50.260731デフォルトの名無しさん
2013/10/12(土) 08:31:43.87C++インタプリタも存在してるね
まあスレチだし自分で調べるかC関連のスレで聞いてくれ
0732デフォルトの名無しさん
2013/10/12(土) 11:11:36.89image similarity ruby でぐぐったら similie という gem があったけど、
これはハミング距離だから出力範囲がアレだな。
0733デフォルトの名無しさん
2013/10/12(土) 11:12:44.91cint でぐぐれ
0734デフォルトの名無しさん
2013/10/12(土) 15:30:56.38おれもそうおもう
0735デフォルトの名無しさん
2013/10/12(土) 16:17:10.34おれもそうおもう
0736デフォルトの名無しさん
2013/10/12(土) 16:47:15.73おれもそうおもう
0737デフォルトの名無しさん
2013/10/12(土) 16:53:24.790738デフォルトの名無しさん
2013/10/12(土) 17:07:09.860739デフォルトの名無しさん
2013/10/12(土) 17:44:30.68Rubyが気になって気になってしかたないんだねえ....
0740デフォルトの名無しさん
2013/10/12(土) 18:09:38.810741デフォルトの名無しさん
2013/10/12(土) 18:16:42.630742デフォルトの名無しさん
2013/10/12(土) 18:18:14.63ブランチ名はなににしたらいいのかおしえて
バグをみつけたけどこのへんのルールがわからん
0743デフォルトの名無しさん
2013/10/12(土) 19:19:48.360744デフォルトの名無しさん
2013/10/12(土) 20:09:22.340745デフォルトの名無しさん
2013/10/12(土) 21:02:02.070746デフォルトの名無しさん
2013/10/12(土) 21:16:41.09あとiOSやAndroidのアプリが簡単にできるフレームワークっていいのある?
0747デフォルトの名無しさん
2013/10/12(土) 22:02:06.400748デフォルトの名無しさん
2013/10/13(日) 02:57:01.330749デフォルトの名無しさん
2013/10/13(日) 16:40:19.39どっちの本が好きですか
0750デフォルトの名無しさん
2013/10/13(日) 16:45:39.530751デフォルトの名無しさん
2013/10/13(日) 16:48:05.82ロケールで自動的に日本語サイトに飛ばしたり英語サイトに飛ばすのやめてもらいたい
そんなのサーバ側で勝手にやるのはおせっかい
俺は英語でみたいんだよ
0752デフォルトの名無しさん
2013/10/13(日) 17:10:03.68それは公式サイトの管理者へ(メール等で)直接要望を伝えるか、
または公式メーリングリスト(ruby-talk)で物申せばいいのではないかと....
ここ(=2ch)でグダグダと文句を言うだけでは何も始まらないよ
0753デフォルトの名無しさん
2013/10/13(日) 17:14:50.04だって俺はRubyはメインで使ってないから
0754デフォルトの名無しさん
2013/10/13(日) 17:18:24.970755デフォルトの名無しさん
2013/10/13(日) 17:24:34.16要するに愚痴を聞いてもらいたかっただけなんだろ
0756794
2013/10/13(日) 17:40:58.21書店に行くから参考にしたいと思って聞いたのに誰も答えてくれないし
後の書き込みへの罵りばっかりってここけっこう民度ひどくないかな
0757デフォルトの名無しさん
2013/10/13(日) 17:41:29.670758611
2013/10/13(日) 17:41:52.360759デフォルトの名無しさん
2013/10/13(日) 17:45:10.460760デフォルトの名無しさん
2013/10/13(日) 17:47:24.42本の良し悪しなんてその人次第だからなあ、答えようがない
誰かにとって良い本が他の誰かには糞だったりもする
万人に糞な本ならしばしばあるが、万人に良い本は本当に稀
てか答えようがないものに対してスルーされるのはマシなほうの対応よ?
スレによっちゃ割とまともな質問すら罵倒しかこないのに
0761デフォルトの名無しさん
2013/10/13(日) 18:16:28.350762デフォルトの名無しさん
2013/10/13(日) 18:25:42.881時間くらいで答えが帰ってくるほど人いないよ。
おれは、たのしいRubyが好きだな。
プログラミング言語Rubyは2.0は出ないんだろうか。
0763デフォルトの名無しさん
2013/10/13(日) 18:44:05.55やっぱり講演だけで食ってるんですかね
俺も金持ちになりたいので日本を代表するまつもと先生にあこがれてます
あとdankogaiさんとか堀江さんとかいますけど
こういう人は何で儲けてるんですかね
プログラミングができるだけじゃ食っていくのは難しいのでしょうか?
そりゃそうですよね
今は高校生でプログラミングする人おおいですもんね
0764デフォルトの名無しさん
2013/10/13(日) 18:49:09.96ひとつだけいえることは,
今,君が「プログラミングで儲けている」という人も
またプログラミングで名声を得ている人ですらも
「その人自身は,はじめた当初はそれを全然期待していなかった」
ということだね
0765デフォルトの名無しさん
2013/10/13(日) 20:11:48.13http://magazine.rubyist.net/?0042-FollowUpKirishimaRuby
>ヒロキは某社内では人並み以上にプログラムが書ける自信があり、実際にエースとし
>て扱われているわけです。 しかし、ヘタに人並み以上にプログラムが書けてしまう
>がゆえ、自分が「スゴイ級」のプログラマではないことも痛感していました。 天才
>ハッカーみたくイノベーティブなプロダクトを作れる気がしなかったのです。 その
>ため自分がこれから先、何を目的にプログラミングをしていけばよいのか意味を見い
>だせなくなっていました。
これもおもしろいよ。
0766デフォルトの名無しさん
2013/10/13(日) 20:34:43.10naoyaのはてなダイアリー:
http://d.hatena.ne.jp/naoya/20131013/1381651545
内容云々以前に写真に写っているのは見事にMacばかりだなぁ。
まあOSXの方がWinより都合が良いよね。
0767デフォルトの名無しさん
2013/10/13(日) 20:44:21.17>「その人自身は,はじめた当初はそれを全然期待していなかった」
>ということだね
こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?
ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。
0768デフォルトの名無しさん
2013/10/13(日) 20:57:27.11レストランとはちょっと違うんじゃない。
Javaやってた人にはわかりやすくても、C言語しかやってない人にはさっぱりわからない本とかもあるだろうし。
好みじゃなくて、対象を絞って書かれているから。
0769デフォルトの名無しさん
2013/10/13(日) 20:58:31.92逆はあるかも。
0770デフォルトの名無しさん
2013/10/13(日) 21:00:31.170771デフォルトの名無しさん
2013/10/13(日) 21:01:16.56これはさすがにnaoya宣伝乙って言われても仕方ないよね
0772デフォルトの名無しさん
2013/10/13(日) 21:03:43.440773デフォルトの名無しさん
2013/10/13(日) 21:05:43.060774デフォルトの名無しさん
2013/10/13(日) 21:17:19.66科学系の場合
失敗してそれが成功のきっかけっていうのが
ノーベル賞選定の条件にあるらしいよ
0775デフォルトの名無しさん
2013/10/13(日) 21:20:40.940776デフォルトの名無しさん
2013/10/13(日) 21:28:50.54>こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?
>
>ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。
とても分かりやすい比喩だね、某半島国家のノーベル賞事情とまったく同じ構図だ.....
普通の国(日本を含む):
知性的探究心と世界貢献のために研究に励んでいたら、気がつけばノーベル賞を次々と受賞
某半島国家:
個人(ないし国家)が受ける称賛への強烈な渇望により、ノーベル賞獲得を目指して
苛烈な嫉妬や競争を繰り広げたあげく、未だにノーベル賞ゼロ記録を絶賛更新中w
0777デフォルトの名無しさん
2013/10/13(日) 21:29:50.73みんながこうだと思ってるような本命予想を証明する研究の場合、規模の勝負になりやすい
カミオカンデとか素粒子を検出するだけでアホみたいな巨大な設備要するし
物事が予想通りに進むだけなら、単純に規模が大きい方が体力の差で押し勝つだけになってしまう
科学に限らずどの分野でもそうなんじゃないか?
0778デフォルトの名無しさん
2013/10/13(日) 21:31:46.170779デフォルトの名無しさん
2013/10/13(日) 21:34:39.87naoyaさん知らないのか
Ruby初心者スレッドで名無しの振りして宣伝してた偉人じゃないか
0780デフォルトの名無しさん
2013/10/13(日) 21:37:17.13光センサーの浜松ホトニクスと東大の宣伝になるぐらいで誰かが儲かるってことは特に無いんじゃないか知らんけど
0781デフォルトの名無しさん
2013/10/14(月) 06:18:55.29DXrubyなりSTARrubyなり、探せばいくらでもGUIライブラリあるだろ
0782デフォルトの名無しさん
2013/10/14(月) 09:17:06.32かんたんだよ
いろんなかきかたがあってとまどうけど
0783デフォルトの名無しさん
2013/10/14(月) 10:29:58.54gitでデータを管理するwiki
あれってどうやってgitからデータを取得しているんですか?
コマンドラインにgit logみたいなのを渡して結果を取得してる感じですか?
それともgitにはそういうapiがあるのですか?
0784デフォルトの名無しさん
2013/10/14(月) 10:30:26.50人類が月に行けても、人類そのものとして、行ったことそのものとしては「儲からなかった」のと同じ
月になにかがあったわけでもないし、道中結構人死んでるし、開拓航路のようになにか持ち帰って売れたわけじゃない
0785デフォルトの名無しさん
2013/10/14(月) 11:20:44.75未開の宇宙人に出会って
高価なものをだまくらかして安値で買って来て
こっちの糞価値のものをあっちで高値で売って来るのが貿易だよな
0786デフォルトの名無しさん
2013/10/14(月) 11:43:54.81現在の課題は輸送コストと核融合の実現だけど、それらがクリアできれば....
0787デフォルトの名無しさん
2013/10/14(月) 15:39:15.12一旦内部エンコーディングとは別の文字コードにinvalidオプション付きのencodeで変換して
そこからもう一度内部エンコーディングの文字コードにencodeとかアホか
0788デフォルトの名無しさん
2013/10/14(月) 16:34:14.612.1で String#scrub というのが追加される。
プレビュー版で使えるので使用感を試して見てくだされ。
0789デフォルトの名無しさん
2013/10/14(月) 16:36:29.840790デフォルトの名無しさん
2013/10/14(月) 17:32:14.68tkでorcaしてみたけど単純なアプリでも起動にごっつり時間かかるのが泣けるなあ…
0791デフォルトの名無しさん
2013/10/14(月) 17:36:00.190792デフォルトの名無しさん
2013/10/14(月) 19:20:23.57>>776
日本を含む東アジアは似たようなもんだよ.
日本人が自国の研究に対して手放しに評価することはほとんどない.田中耕一氏の場合も海外からの推薦だったという.
ただし,東アジアでダントツに日本の受賞が多いのは,それだけ優れた研究がなされていたということではある,それは誇っていいのだろうね.
ruby もおんなじだね.
0793デフォルトの名無しさん
2013/10/14(月) 19:21:59.80月面上でエネルギーに変換して地上に送る,と思うよ.もう核炉を地球上に作らせてもらえる時代じゃないよ…
0794デフォルトの名無しさん
2013/10/14(月) 21:13:48.850795デフォルトの名無しさん
2013/10/14(月) 21:32:44.93その点ではコンピュータプログラム言語はみんな同じだけども
0796デフォルトの名無しさん
2013/10/14(月) 21:44:36.410797デフォルトの名無しさん
2013/10/14(月) 22:04:26.140798デフォルトの名無しさん
2013/10/14(月) 22:24:59.64人によってRubyを好きになる理由はそれぞれだけど、
以下は自分の場合(比較対象は他のスクリプト言語)
・純粋オブジェクト指向言語である(ただし、Smalltakほどではない)
* あらゆるすべてのデータがオブジェクトなので、柔軟なプログラミングができる
* 最初からオブジェクト指向たることを目的に設計されているので、
素直なオブジェクト指向プログラミングができる(OOPの学習にも適している)
たとえば手続き型言語に後からオブジェクト指向を接ぎ木したPerlにはblessが、
Pythonには__self__といった意味不明な規則があるけど、Rubyにはそれが無い
・関数型プログラミングに適している(Matzによれば、Rubyの先祖はLispであるとのこと)
* あらゆるすべての構文が式なので、柔軟なプログラミングができる
たとえばPythonでは同じ条件分岐でも文と式を使い分けなければならないけど
Rubyでは気にする必要が無いし、同じくPythonのラムダ式の本体に変数宣言が書けない
といった(後から関数型を接ぎ木したことを要因とする)制限が無い
* Smalltalkから引き継いだブロック構文により、高階関数を簡潔に書ける
あと個人的には、Raccという完成度の高いパーザジェネレータが初期(=1.6の時代)から
存在した事も、Rubyを選んだ(=Perlから乗り換えた)理由として大きかった(そして、今でも大きい)
0799デフォルトの名無しさん
2013/10/14(月) 23:53:11.290800デフォルトの名無しさん
2013/10/15(火) 00:14:55.94あと言語経験少ない人から見た可読性もよろしくないからチームの開発に向いてない
ただ書いてて楽しい黒魔術面白すぎだは
0801デフォルトの名無しさん
2013/10/15(火) 01:05:42.630802デフォルトの名無しさん
2013/10/15(火) 01:09:48.53いいえ
0803デフォルトの名無しさん
2013/10/15(火) 06:51:25.47要領を得ない答え方ですね
0804デフォルトの名無しさん
2013/10/15(火) 07:43:20.90もはやRubyで幸せになれるのはRubyを作ってる連中だけなんじゃないの?
という希ガス
0805デフォルトの名無しさん
2013/10/15(火) 07:47:22.450806デフォルトの名無しさん
2013/10/15(火) 07:48:43.960807デフォルトの名無しさん
2013/10/15(火) 08:09:34.29これをメインの言語として勉強したりこれを使って使って大きなものを書く予定が
無くとも、第二言語や便利な小道具として知っていて損はない言語。
0808デフォルトの名無しさん
2013/10/15(火) 10:52:56.45Rubyの代わりいくらでもある
0809デフォルトの名無しさん
2013/10/15(火) 13:07:57.21じゃあ他の言語使え
無理すんな
0810デフォルトの名無しさん
2013/10/15(火) 13:12:13.93とか書くと
なんでこのスレ見てんだ
とか言うんだろうな
きもいな
0811デフォルトの名無しさん
2013/10/15(火) 13:15:10.35なんでこのスレ見てんだ
08121/2
2013/10/15(火) 14:51:07.24def 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 ...
08132/2
2013/10/15(火) 14:51:59.10モジュールの中にはHoge1だけで使うメソッド、Hoge2だけで使うメソッド、両方で使うメソッドが存在していて
これだと不必要なメソッドまでインクルードしてしまうということで分離したい
ただモジュール自体を分離することはなるべく避けたい
(モジュールの更新、追加時に余計な手間がかかるため)
モジュールのメソッドのアクセス制御をインクルードされるclass別に設定するみたいなことって出来ないんだろうか?
このモジュールのメソッドはHoge2にインクルードしてもHoge1からしかアクセス出来ないよーみたいな
もしくは設計そのものを見直すかうーん
0814デフォルトの名無しさん
2013/10/15(火) 14:58:20.67○ foo = Hoge.connect("setting1")
こうだなすまん
あーなんでめんどくせー他人の尻拭いせにゃならんのだ
0815デフォルトの名無しさん
2013/10/15(火) 15:37:52.99再定義したらうまいこと出来るような気がする。
0816デフォルトの名無しさん
2013/10/16(水) 20:47:08.63青木峰郎さんに感謝やな
彼はドラゴンブック参考にしたらしいけど
一橋大学出た文系プログラマってとこもミソな
0817デフォルトの名無しさん
2013/10/17(木) 22:06:11.34id_array = Array.try_convert(id) || [id]
みたいに書くのまどろっこしくて。
0818デフォルトの名無しさん
2013/10/17(木) 22:12:18.460819デフォルトの名無しさん
2013/10/17(木) 22:18:39.39それだ!
0820デフォルトの名無しさん
2013/10/17(木) 23:10:59.63やめといたほうがいいと思わないなら止めないけど
0821デフォルトの名無しさん
2013/10/17(木) 23:35:11.105678 def
という内容のtest.txtみたいなファイルを作ります。
で、rubyのワンライナーで
ruby -Ku -n -e 'print if /¥d¥d¥d¥d¥d/' test.txt
と入れます。
行頭が5桁の数字にマッチするので、何も出力されないのが正解なはずです。
Mac OSでは確かにそうなるのですが、WinXPにインストールしたRubyだと
マッチして両方の行が表示されてしまいます。
何が違うんでしょうか?
0822デフォルトの名無しさん
2013/10/18(金) 00:39:01.620823デフォルトの名無しさん
2013/10/18(金) 07:56:40.88ワンライナー内でダブルクォート文字列使いたい時は qq 使う
0824デフォルトの名無しさん
2013/10/18(金) 14:35:02.14なので表示されるのが正常動作
なぜMacだと表示されないのだろうか?
Windowsしか所持してないのでわからない
Ruby自体は、自前でコマンドラインをパースしなおすから '' でも ""でも大丈夫だが
CMD.EXEは ""しか認識しないので 特殊文字を引数にしたいときには注意
ついでにファイル名補完もRubyがやってくれて
(UNIXのshellみたいな)Dir.globと同仕様なので何気に便利
ruby hoge.rb foo{1[89],2[012]}.txt
とかできる
0825デフォルトの名無しさん
2013/10/18(金) 16:31:03.52¥になってるというオチで終了
0826デフォルトの名無しさん
2013/10/18(金) 18:30:28.29XPでも表示されなかったぞ
0827デフォルトの名無しさん
2013/10/18(金) 18:48:17.00元の文がわかりづらいが、Windowsのコマンドプロンプトで表示されるのがおかしいという意味だね
俺のはLinuxのシェルだが、そこでマッチしないのがコマンドプロンプトではマッチする
シングルクオートで囲まれた領域で-eオプションだと、プログラム本文と同一ということだと思っていたが、違うんだな
詳しい人の解説&追試求む
0828デフォルトの名無しさん
2013/10/18(金) 18:52:38.41821が書いた数字は4連続なんだが。
単に勘違いか。
俺はMacしか持ってないから確認できない。
$& でマッチした文字列を表示してみたらどうなる?
0829デフォルトの名無しさん
2013/10/18(金) 18:55:53.050830デフォルトの名無しさん
2013/10/18(金) 20:31:04.43>>823って事じゃないの?
0831デフォルトの名無しさん
2013/10/18(金) 21:14:49.79Win8 + Ruby2.0.0 で試したけど " と ' どっちで括っても再現しなかった
とりあえず再現できる人の OS と ruby -v が知りたい
0832デフォルトの名無しさん
2013/10/18(金) 21:38:08.51Win32APIを使ってクリップボードから文字列の値を取得したのですが、
どうも上手く行きません。
クリップボードは空になっているようなのでEmptyClipboardは働いているようなのですが…
どこがおかしくて、どう直せば動くでしょうか?
環境はWin7 64bit Ruby-2.0.0です。
主にここを参考にしました
ttp://d.hatena.ne.jp/nagachika/20100419/ruby19_dl2_windows_clipboard
以下プログラムリスト
0833デフォルトの名無しさん
2013/10/18(金) 21:38:42.86CloseClipboard = 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")
0834デフォルトの名無しさん
2013/10/18(金) 21:39:18.34return 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
0835デフォルトの名無しさん
2013/10/18(金) 22:22:08.75勘違い
コピペせずに
適当に5桁の数字入れてた
0836デフォルトの名無しさん
2013/10/18(金) 22:38:18.31WinXP Ruby1.8.7
再現しない(表示されない)
0837デフォルトの名無しさん
2013/10/19(土) 06:02:25.45置換文字列をどうすればいいのでしょうか?
できなかった例(値を2倍)
hoge='Q=123'
print hoge.gsub(/Q=(\d+)/,'Q=\1*2')
0838デフォルトの名無しさん
2013/10/19(土) 07:53:24.96文字列を数値または式に変換する必要がある
前者なら、数値部分だけを数値変換
Q = hoge.sub(/Q=(\d+)/, '\1').to_i * 2
後者なら全体を式として評価
eval(hoge.sub(/Q=(\d+)/, 'Q=\1*2'))
0839デフォルトの名無しさん
2013/10/19(土) 08:38:19.770840デフォルトの名無しさん
2013/10/19(土) 09:27:17.37これがやりたかった事なのかは疑問
hoge.gsub(/(?<=Q=)\d+/) {|s| s.to_i * 2 }
0841デフォルトの名無しさん
2013/10/19(土) 09:49:15.560842デフォルトの名無しさん
2013/10/19(土) 12:22:51.730843デフォルトの名無しさん
2013/10/19(土) 15:28:03.080844デフォルトの名無しさん
2013/10/19(土) 20:45:44.48俺は主にprint文のデバッグなのだが
0845デフォルトの名無しさん
2013/10/19(土) 20:58:06.840846デフォルトの名無しさん
2013/10/19(土) 21:16:16.45pryかわいいよpry
0847デフォルトの名無しさん
2013/10/19(土) 21:20:23.61pryなんて初めて知った。
なんか良さげだね。ありがとう。
0848デフォルトの名無しさん
2013/10/20(日) 01:16:31.38pry-nav→pry-debugger→pry-byebugというdeprecated巡りを一通りしてしまった
0849デフォルトの名無しさん
2013/10/21(月) 14:06:12.08今はこう書いています。キーが重複した時のことは考慮しなくてよいです。
array = [{id: 1, name: "hoge"}, {id: 2, name: "piyo"}]
hash = Hash[array.map {|item| item[:id] }.zip(array)]
0850デフォルトの名無しさん
2013/10/21(月) 14:47:57.21とか
hash = array.each_with_object({}) { |a, h| h[a[:id]] = a }
とか?
なんかあんまりスマートじゃないね
ごめん
0851デフォルトの名無しさん
2013/10/21(月) 15:01:31.38ran_hash.merge(dom_hash[:id] => dom_hash)
}
0852デフォルトの名無しさん
2013/10/21(月) 21:35:17.350853デフォルトの名無しさん
2013/10/21(月) 23:53:40.500854デフォルトの名無しさん
2013/10/22(火) 00:28:10.460855デフォルトの名無しさん
2013/10/22(火) 11:47:43.96ありがとうございます!
0856デフォルトの名無しさん
2013/10/22(火) 18:00:42.06Lstrcpy = 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
でよかったりする
0857デフォルトの名無しさん
2013/10/22(火) 22:23:36.00できました!
ありがとうございます!
リファレンスマニュアルをちゃんと読んだら
確かに書いてありました…
お手数かけて申し訳ありません。
0858デフォルトの名無しさん
2013/10/23(水) 17:30:50.46ある変数名を文字列として返すメソッドはあるのでしょうか?
イメージとしては以下の例で"hensuu_to_str"としたような使い方のできるメソッドです。
hensuu = "test"
result = hensuu_to_str(hensuu)
puts result # => "hensuu"
文字列を評価するevalがあるので、もしかしたらできるのかな?と思い質問させていただきました。
よろしくお願いいたします。
0859デフォルトの名無しさん
2013/10/23(水) 17:42:32.45ありません
0860デフォルトの名無しさん
2013/10/23(水) 17:56:39.48def foo()
a = "b"
c = 3
p(local_variables())
end
foo()
これを実行すると、
[:a, :c]
と出力される。
0861デフォルトの名無しさん
2013/10/23(水) 18:07:13.38…、ないな
0862デフォルトの名無しさん
2013/10/23(水) 18:12:44.310863858
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
0864uy
2013/10/23(水) 19:15:35.280865uy
2013/10/23(水) 19:16:06.420866uy
2013/10/23(水) 19:18:50.77puts a = "死ね"
def f
def func h
puts h
end
puts b = "死ねゴミ"
puts c = "しね"
func local_variables
end
f
0867デフォルトの名無しさん
2013/10/23(水) 19:29:59.31m9(^Д^)
0868デフォルトの名無しさん
2013/10/23(水) 21:30:18.840869デフォルトの名無しさん
2013/10/23(水) 21:36:15.210870デフォルトの名無しさん
2013/10/23(水) 22:32:09.92標準語苦手でわからないので、教えてください
0871デフォルトの名無しさん
2013/10/23(水) 22:43:02.470872デフォルトの名無しさん
2013/10/23(水) 23:13:36.250873デフォルトの名無しさん
2013/10/23(水) 23:15:48.41bash < <(curl -B https://rvm.beginrescueend.com/install/rvm )
ってやったのですが、Connection refused.っとなってしまいます。
コピーなのでつづり間違いとかは無いと思っているのですが、
他にありそうな間違いってなんでしょうか?
0874デフォルトの名無しさん
2013/10/23(水) 23:37:16.210875デフォルトの名無しさん
2013/10/23(水) 23:46:30.73それによっちゃまったく別の解決方法とかあるかもしれんしな
0876デフォルトの名無しさん
2013/10/24(木) 07:04:31.90これは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冊購入し、シェルの勉強からはじめることを薦める
0877デフォルトの名無しさん
2013/10/24(木) 07:52:28.860878デフォルトの名無しさん
2013/10/24(木) 08:46:01.89Ruby(の作者たち)は、この手のイントロスペクションを
絶望的に軽視しているからなぁ…
0879デフォルトの名無しさん
2013/10/24(木) 09:09:23.45コールスタックがオブジェクトじゃないこと?
0880デフォルトの名無しさん
2013/10/24(木) 11:48:39.18そういうことやりたきゃRubinius使え
0881デフォルトの名無しさん
2013/10/24(木) 12:05:11.81驚き最小の法則
0882デフォルトの名無しさん
2013/10/24(木) 12:57:19.90Rubiniusだって無理だろ
そもそもそんなことが出来る言語あるか?
0883870
2013/10/24(木) 13:17:05.17ありがとうございます。
勉強会の配信とかみてるとル(↑)ビー(↑)って言う人がちょくちょくいるんですけど
あれは違うんですか?
0884デフォルトの名無しさん
2013/10/24(木) 14:31:33.59ソースをパースする前に加工したり、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さんならあっさりやってのける、気がする
0885デフォルトの名無しさん
2013/10/24(木) 15:57:21.30>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' "
0886デフォルトの名無しさん
2013/10/24(木) 22:49:50.81ありがとうインストールできた!
これでRuby入門できます。
0887デフォルトの名無しさん
2013/10/26(土) 04:55:35.22apache形式のログから、コマンド実行時から直近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]の行だけを取り出したいのです。
おねがいします。
0888デフォルトの名無しさん
2013/10/26(土) 06:01:21.82ダブルクリック一発で結果が表示されないと発狂すると見た
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11115380386
0889デフォルトの名無しさん
2013/10/26(土) 06:03:21.34awkとかperlでフラグ立てる。
0890デフォルトの名無しさん
2013/10/26(土) 06:03:53.33rubyスレだったw
0891デフォルトの名無しさん
2013/10/26(土) 06:16:14.94require '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
0892デフォルトの名無しさん
2013/10/26(土) 06:25:00.01rotatelogsコマンドにログファイルを渡し「1日分切り出せ」と指示を出す
0893デフォルトの名無しさん
2013/10/26(土) 06:29:36.88>>611の悲劇が再び…
0894デフォルトの名無しさん
2013/10/26(土) 07:43:54.860895891
2013/10/26(土) 08:30:49.720896デフォルトの名無しさん
2013/10/26(土) 12:02:30.48[1, 2, 3] にするイディオムありませんか
0897デフォルトの名無しさん
2013/10/26(土) 12:05:01.87せめてググることくらいはしようぜ…
0898デフォルトの名無しさん
2013/10/26(土) 12:53:16.38答えたくないなら答えなくていい
0899デフォルトの名無しさん
2013/10/26(土) 14:40:59.07大した時間もかからん
0900デフォルトの名無しさん
2013/10/26(土) 14:49:40.370901デフォルトの名無しさん
2013/10/26(土) 15:42:51.890903デフォルトの名無しさん
2013/10/26(土) 22:54:58.300904デフォルトの名無しさん
2013/10/26(土) 22:57:08.25File.open('hoge', 'r:ASCII-8BIT')
0905デフォルトの名無しさん
2013/10/26(土) 23:03:36.43すみませんが、質問をよく読んでから回答をお願いできますでしょうか。
0906デフォルトの名無しさん
2013/10/26(土) 23:09:11.39ロケールを設定するしかなさそう
0907デフォルトの名無しさん
2013/10/26(土) 23:34:59.36そうですか。ありがとうございます。
すると、端末とファイル名とで文字コードが違う場合は、
任意のファイルシステムエンコーディングを設定するのは事実上不可能ですね。
Encoding.filesystem= とかがあっても良さそうなのに。残念です。
0908デフォルトの名無しさん
2013/10/26(土) 23:49:34.03Unixの場合はバイト列をいじってるわけじゃない(エンコーディング情報を付けてるだけ)だから、force_encodingで
何とでもできそう
MacはMacの世界で閉じとけ
Windowsは窓から放り投げろ
0909デフォルトの名無しさん
2013/10/27(日) 04:30:45.200910デフォルトの名無しさん
2013/10/27(日) 13:06:58.34確かに、こまめに force_encoding すれば済む話かもしれませんね。
面倒なので String#b! が欲しいところですが。
0911デフォルトの名無しさん
2013/10/27(日) 14:41:08.27ダックタイピングから遠ざかった気がするのですが
0912デフォルトの名無しさん
2013/10/27(日) 15:01:36.91each が文字単位なのかバイト単位なのか行単位なのかは使うシーンによって変わるから
0913デフォルトの名無しさん
2013/10/27(日) 15:03:41.580914デフォルトの名無しさん
2013/10/27(日) 15:24:09.470915デフォルトの名無しさん
2013/10/27(日) 15:47:24.240916デフォルトの名無しさん
2013/10/27(日) 16:28:32.900917デフォルトの名無しさん
2013/10/27(日) 16:49:41.920918デフォルトの名無しさん
2013/10/27(日) 23:23:42.400919デフォルトの名無しさん
2013/10/27(日) 23:42:41.18のに、サロゲートペアだのどんどん複雑怪奇になっていったよね。
韓国が使いもしない自国漢字ねじ込んだり。
0920デフォルトの名無しさん
2013/10/28(月) 10:38:32.530921デフォルトの名無しさん
2013/10/28(月) 11:29:02.34:key => value としたときの :key のように色を付けたいのですが可能でしょうか?
0922デフォルトの名無しさん
2013/10/28(月) 17:49:53.711〜2行処理を追加したメソッドを使いたい場合どうしてる?
重複部分を記述しないで済む方法があれば教えて欲しい
0923デフォルトの名無しさん
2013/10/28(月) 19:38:00.16def aa
にゃん
にゃん
にゃか
にゃん
end
があって、これをちょっとだけ変えた
def aa2
にゃん
にゃん
にゃら
にゃん
end
を作りたいときどうしようという話でいっすか
0924デフォルトの名無しさん
2013/10/28(月) 19:54:43.70おかしいね
手元では色つくよ
emacsのバージョンとruby-modeの入手元は?
0925デフォルトの名無しさん
2013/10/28(月) 22:01:42.76そそ
そんな感じのを特定のクラスで使われる時のみ動的に適用させたい
分かり辛くてすいません
0926デフォルトの名無しさん
2013/10/28(月) 22:04:54.11サンプルのユースケースを出してみてよ
いまいちピンとこない
0927デフォルトの名無しさん
2013/10/29(火) 03:27:37.79RubyとかSmalltalkで書いてたらモンキーパッチ使いたくなることなんて山ほどあるだろ
ただ1〜2行拡張する程度ならメソッド再定義した方がわかりやすいだろから止めたほうがいいと思う
0928デフォルトの名無しさん
2013/10/29(火) 08:58:29.72キモいなあ、トリッキー過ぎて別の方法考えるかもしれない
0929デフォルトの名無しさん
2013/10/29(火) 18:53:11.32なんでいままでこれをスルーしていたんだろう
はぁ・・ _| ̄|○
0930デフォルトの名無しさん
2013/10/29(火) 20:24:26.77デザインパターン知らなくても、そのやり方自体は使ってたりもすることもあるし。
名前をつけることで認識を共有できるのがメリット。
もちろん人によっては知らないパターンもあるだろうけど、それはその人の分野では使うポイントが少なかったりすることも。無理に使うものではない。
0931デフォルトの名無しさん
2013/10/29(火) 21:00:33.300932デフォルトの名無しさん
2013/10/29(火) 21:24:20.78>名前をつけることで認識を共有できるのがメリット。
そう、これがデザパタの存在意義だね
今まで夢中でOOP(プログラミング)を楽しんでいた段階から一歩成長して
OOD(設計)にも目を向けられるようになったからデザパタの存在を認識できた訳で、
落胆するよりも新たなステップアップの目標として、前向きに考えるのがいいと思う >>929
>>931
デザパタは理論ではないし技術ですらない、単なる(>>930のいう)ネーミングとカタログ化だ
だから、デザパタにおける「車輪の再発明」とは、ある設計様式にオレ様流の命名をすること
>>929を車輪の再発明と言うのは、デザパタの認識がズレていると思われ
0933デフォルトの名無しさん
2013/10/29(火) 21:48:15.20StrategyとかSingleton辺りは知らずに使ってたってことはままある
最初は頭の隅に入れとく程度でいいんじゃない
必要性を感じた時に否が応でも勉強したくなるから
0934デフォルトの名無しさん
2013/10/29(火) 23:01:19.45デザインパターンは「何らかのライブラリとして実装したもの」の名前ではない。
0935デフォルトの名無しさん
2013/10/29(火) 23:04:37.260936デフォルトの名無しさん
2013/10/29(火) 23:27:02.11はじめて1人がアイディアを思いつく
アイディアを思いついた人の数が10人を超えた時、
はじめて1人が実装に取り掛かる
実装する人の数が10人を超えた時、
はじめて1人が実装を公開する
公開できる実装を作った人が10人を超えた時、
はじめて1人が実用的なものを公開する
世の中そんな感じにできてるから、車輪の再発明も無駄じゃない
俺はまた一つ実用品までのカウンターを増やしたんだ
(と思い込む)
0937デフォルトの名無しさん
2013/10/29(火) 23:45:48.030938デフォルトの名無しさん
2013/10/29(火) 23:52:19.11四角形に近い形なんだよね。
これが丸になるまで何万年かかったと思う?
そしてそこから木になるまでは?
そう考えると再発明は奨励されるべきだよね。
0939デフォルトの名無しさん
2013/10/30(水) 06:15:17.13どっちかっていうと、再開発の方がしっくりくる
0940デフォルトの名無しさん
2013/10/30(水) 06:51:37.880941デフォルトの名無しさん
2013/10/30(水) 07:08:51.48勉強してみて、rubyならもっといいやり方があるのにって思えればいいけど
0942デフォルトの名無しさん
2013/10/30(水) 07:20:05.290943デフォルトの名無しさん
2013/10/30(水) 07:32:17.890944デフォルトの名無しさん
2013/10/30(水) 07:42:41.52散々言われてることなのになあ
0945デフォルトの名無しさん
2013/10/30(水) 07:51:15.100946デフォルトの名無しさん
2013/10/30(水) 07:55:31.27rubyのために書かれた本で学ぶのは良いかもしれない
そんな本があったような気がする
0947デフォルトの名無しさん
2013/10/30(水) 09:06:24.42結構良本だった気がする
0948デフォルトの名無しさん
2013/10/30(水) 10:58:36.44フェケイド?
フェケテリゴ?
0949デフォルトの名無しさん
2013/10/30(水) 15:36:15.010950デフォルトの名無しさん
2013/10/30(水) 15:43:49.11デザパタ:戦略
0951デフォルトの名無しさん
2013/10/30(水) 15:52:26.55デザパタ:戦略
0952デフォルトの名無しさん
2013/10/30(水) 16:00:11.80知らないとすげぇと思われるのがデザパタ
0953デフォルトの名無しさん
2013/10/30(水) 16:37:21.46それは言えるかもな
「デザパタ出来る前から使ってたよ」
とかサラっと言ってみたい台詞だな
0954デフォルトの名無しさん
2013/10/30(水) 17:02:55.18> 「デザパタ出来る前から使ってたよ」
> とかサラっと言ってみたい台詞だな
GoFの凄いところは、暗黙知を形式知にしネーミングしたところ。
GoF以前からみんなやってたよ。
0955デフォルトの名無しさん
2013/10/30(水) 20:04:26.190956デフォルトの名無しさん
2013/10/30(水) 20:32:11.41言語仕様として取り入れられることが多くなって、デザインパターンとして見えることがなくなった
他のデザインパターンの多くも、ゆくゆくは言語や付属ライブラリ等に吸収されていくことだろう
0957デフォルトの名無しさん
2013/10/30(水) NY:AN:NY.AN>>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脳から関数型脳へ脱却できるか否かを決める大きな壁になると考える
0958デフォルトの名無しさん
2013/10/30(水) NY:AN:NY.AN>>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 }
なお、直積は「集合の直積集合」、直和は「集合の直和分割」とも呼ばれている
そして、言語上では直積はタプル型やレコード型として、直和は代数型として表現される
0959デフォルトの名無しさん
2013/10/31(木) 11:07:52.69ん?
0960デフォルトの名無しさん
2013/10/31(木) 11:41:42.860961デフォルトの名無しさん
2013/10/31(木) 13:35:12.38(しかし クラスを抽象データ型に使うアイデア=静的型OOP よりはよく出来た)
型システムの話の区別がつかないのだろうか。不思議だ。
0962デフォルトの名無しさん
2013/10/31(木) 14:48:44.710963デフォルトの名無しさん
2013/10/31(木) 21:19:21.14>> OOPではデザパタとして神格化され高度な技法と見られていた概念
これは、静的型付けOOPL、特にJava使いの間でデザパタが
神格化され絶対視されている傾向を指している
ただし、Rubyだと(>>941,944が指摘しているように)デザパタを強く意識するケースは
ほとんど無いから、ここのスレだとピントが外れた記述になるね
>>961
自己紹介乙w
関数型、関数型って騒ぐやつらはなんでこうも、
「(関数型プログラミング向け)データ構造」の話と
「型システム」の話の区別がつかないのだろうか?
>>957,958は型システムとは直接的には関係しないし、
まったく触れてもいないのに。不思議だ。
0964デフォルトの名無しさん
2013/10/31(木) 23:57:45.63全体的にうさんくさい。神格化ってなんぞ?
0965デフォルトの名無しさん
2013/11/01(金) 07:09:43.440966デフォルトの名無しさん
2013/11/01(金) 08:42:45.14教えてエロい人!それは関数型言語ならどんな型システムを持つ言語でも活用できる
パターンなの?
0967デフォルトの名無しさん
2013/11/01(金) 19:10:15.412つの質問が含まれているね
最初は1つ目の「どこが関数型プログラミング(FP)向けなのか?」について
まず、おさらいとして慣れ親しんだ手続き型プログラミング向けデータ構造を考えてみよう
手続き型プログラミングによる(要素の追加/削除といった)ツリーへの操作では、
操作によってツリー(=操作対象)そのものが変化する
それに対して、関数型プログラミング向けデータ構造である>>957のツリーへの操作では、
操作のたびにツリーが新たに生成され、操作対象である元のツリー(の値)は変化しない
具体的な設計や実装の例については、スレ「LLにおける関数型プログラミング」の#101を参照
次に「どの言語でも活用できるパターンなのか?」について
動的/静的や型システムに関係なく、ほぼすべての関数型言語であれば活用できるのはもちろんのこと、
(直積としての)属性と(直和としての)継承を持ち、動的メモリ管理機構(いわゆるガーベジコレクション)を持つ
多くのオブジェクト指向言語で活用できる
特にRubyは、動的型付けな関数型言語として、このパターンの活用に最適
0968デフォルトの名無しさん
2013/11/01(金) 21:12:17.67関数型ワナビーのru厨だから放置した方がいいぞ
0969デフォルトの名無しさん
2013/11/02(土) 00:43:34.190970デフォルトの名無しさん
2013/11/03(日) 12:37:42.670971デフォルトの名無しさん
2013/11/03(日) 12:40:21.280972デフォルトの名無しさん
2013/11/03(日) 13:08:18.81https://github.com/styleguide/ruby
0973デフォルトの名無しさん
2013/11/03(日) 13:09:51.51インデント2だとみずらい
0974デフォルトの名無しさん
2013/11/03(日) 13:13:33.39自分一人でコーディングするなら好きなインデント使えばいい
チームで開発するとかオープンソースで公開するとかなら合わせた方が吉
0975デフォルトの名無しさん
2013/11/03(日) 13:15:34.140976デフォルトの名無しさん
2013/11/03(日) 13:19:37.940977デフォルトの名無しさん
2013/11/03(日) 13:29:05.04そうね
2以外はほとんど見かけたことがない
0978デフォルトの名無しさん
2013/11/03(日) 13:41:27.680979デフォルトの名無しさん
2013/11/03(日) 14:02:17.180980デフォルトの名無しさん
2013/11/03(日) 14:16:43.64git-blame で探してみると面白いかも
0981デフォルトの名無しさん
2013/11/03(日) 14:25:21.42行の先頭、いわゆるインデント(字下げ)のところにタブ文字を使い、
それ以外の行揃えは(タブ文字ではなく)空白文字を使う規約がお薦め
この規約に従ってコーディングしておけば、
後からエディタ等でタブ幅を2, 3, 4, 8等へ切り替えても整形が乱れない
0982デフォルトの名無しさん
2013/11/03(日) 14:55:40.74エディタ(emacs)の設定で3スペース幅になるようにしている。
https://github.com/tdiary/tdiary-core/blob/master/tdiary/application/configuration.rb#L31
endの列が綺麗だから、だっけ?
0983デフォルトの名無しさん
2013/11/03(日) 19:03:02.85Dir::entries(fullpath)
パスがルートではない場合. と .. も含まれ、
ルートであれば含まれないのですが
このピリオドを除外してディレクトリ一覧のみほしいんですがどう書くのでしょうか?
0984デフォルトの名無しさん
2013/11/03(日) 19:50:48.040985デフォルトの名無しさん
2013/11/03(日) 22:47:56.88ありがとうございます
0986デフォルトの名無しさん
2013/11/04(月) 13:53:05.720987デフォルトの名無しさん
2013/11/04(月) 20:16:28.42ってことは理論上はそれらより実行速度上る可能性も0じゃないわけですか?
それとも型付けの強弱と実効速度は無関係?
0988デフォルトの名無しさん
2013/11/04(月) 21:11:54.17いや、言語としてのRubyの型付けは弱いというか、
他と比較して決して強いわけじゃない
言語ユーザ(=プログラマ)から強いように見えるのは、
ライブラリで実行時に(=動的に)型検査しているから
たとえば 1 + "a" という式は、JavaScriptだと "1a" という文字列に、
Rubyでは TypeError となるから、JSよりRubyのほうが強く見える
でも、これはRuby処理系(インタプリタ)が(静的に)型検査しているわけではなく、
1 の数値クラスのメソッド +(x) の内部で x が数値であるかを(動的に)型検査する
だからたとえRubyの型付けが強く見えても、(現状の)実行効率は悪い(=遅い)
ただし、将来的にRubyにも(JavaScriptエンジンのような)最適化を目的とした
型推論メカニズムが導入され、飛躍的に性能が改善する可能性は否定しない
0989デフォルトの名無しさん
2013/11/04(月) 23:56:18.45解釈時でなく実行時に型検査するから
むしろ実行速度は遅くなる方向に働くということですね
0990デフォルトの名無しさん
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に近い日をキーに持つハッシュを探すにはどうすればいいのでしょうか?
0991デフォルトの名無しさん
2013/11/05(火) 02:06:14.57仮に 10月19日と10月21日のデータがあったらどっちを返すんだろう。
0992デフォルトの名無しさん
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|
/^(¥d+)-(¥d+)-(¥d+)/ =~ key
(($1 + $2 + $3).to_i - 20131020).abs
}
=> ["2013-10-23", 104]
0993デフォルトの名無しさん
2013/11/05(火) 03:03:42.17Rubyには標準では無いから悩ましい
0994デフォルトの名無しさん
2013/11/05(火) 03:14:16.58min_by のブロックの中は
(Date.parse(key) - Date.parse("2013-10-20")).to_i.abs
などとする必要がある
0995デフォルトの名無しさん
2013/11/05(火) 10:25:12.22http://toro.2ch.net/test/read.cgi/tech/1370530209/
0996デフォルトの名無しさん
2013/11/05(火) 12:28:30.97http://toro.2ch.net/test/read.cgi/tech/1382307475/
0997デフォルトの名無しさん
2013/11/05(火) 20:41:05.48ありがとうございます。
確かに同じだけ近い日の扱いが指摘されてないなど質問が不十分でした
min_by なんてあるんですね
0998デフォルトの名無しさん
2013/11/05(火) 22:51:53.23http://play.island.ac/codepaste/code?id=1565
>>991から指摘があった日数差の等しいケースについて、
デフォルトだとエントリの並び順上で先頭に近いものを返す
あるいは、オプションのブロック引数指定によって
「比較可能(メソッド <=> に返答できる)」オブジェクトを返すことで、
任意の順序規則を指定できる
>>994から指摘があった「月またぎ問題」について、
標準ライブラリのTimeクラスを使って正しく日数差を計算できるようにしてみた
0999デフォルトの名無しさん
2013/11/06(水) 00:56:33.601000デフォルトの名無しさん
2013/11/06(水) 00:59:24.8210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。