Rubyについて Part 39
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/02/06(土) 23:48:01まったりと行きましょう。
Ruby Home Page
http://www.ruby-lang.org/ja/
= 前スレ
Rubyについて Part 38
http://pc12.2ch.net/test/read.cgi/tech/1257079004/
過去スレ・関連スレは >>2-
0153デフォルトの名無しさん
2010/02/22(月) 15:53:09>It looks as if someone cut and paste the text from
>the original into a new document, quickly converted
>the Java examples to Ruby (without testing or review,
>given some of the errors), and went to press.
mjd?
0154デフォルトの名無しさん
2010/02/22(月) 16:15:100155デフォルトの名無しさん
2010/02/22(月) 16:39:160156デフォルトの名無しさん
2010/02/22(月) 16:42:340157デフォルトの名無しさん
2010/02/22(月) 18:50:49コードを綺麗にする方式の提示もさることながら、
ある方式を実施するにあたってコードを壊さない一連の手順を
提示したのが大きい訳で、サンプルとして例示したコードが動かないんじゃ
有り難みも半減だよなあ。
0158デフォルトの名無しさん
2010/02/22(月) 21:22:21作者からの課題かもしれない。
0159デフォルトの名無しさん
2010/02/22(月) 21:25:11それは仕様を変えたということでリファクタリングになってないだろ
0160デフォルトの名無しさん
2010/02/22(月) 21:43:33なんであんなわかりにくいだろうね
めちゃくちゃ区別しにくい
0161デフォルトの名無しさん
2010/02/22(月) 21:44:50なんでやねん
0162デフォルトの名無しさん
2010/02/22(月) 21:49:160163デフォルトの名無しさん
2010/02/22(月) 22:13:47ということらしいので,動作を変えるような変更はリファクタリングではない.
0164デフォルトの名無しさん
2010/02/22(月) 22:25:39動くようになったコードをリファクタリングするフェーズとを厳密に分離する必要があるという話だな。
1フェーズ目の成果をリファクタリング前のコードとして掲載して
2フェーズ目の成果をリファクタリング後のコードとして掲載せよと。
……もういいからYuguiさんが凄いリファクタリング本書いてくれるの期待しようぜwww
0165デフォルトの名無しさん
2010/02/22(月) 22:26:56リファクタリングなんてせずに黙って食え。
0166デフォルトの名無しさん
2010/02/23(火) 00:04:09http://tsushima.2ch.net/test/read.cgi/newsplus/1266846976/
0167デフォルトの名無しさん
2010/02/23(火) 01:32:28リファクタリングで不安定なプログラムが安定するなんて当たり前にあることだろ
役に立たない言葉の定義なんてどうでもいいわ
0168デフォルトの名無しさん
2010/02/23(火) 02:03:590169デフォルトの名無しさん
2010/02/23(火) 02:35:350170デフォルトの名無しさん
2010/02/23(火) 02:44:070171デフォルトの名無しさん
2010/02/23(火) 06:02:420172デフォルトの名無しさん
2010/02/23(火) 07:02:270173デフォルトの名無しさん
2010/02/23(火) 08:11:41それは普通に改善とか修正とかリストラクチャリングって
呼べばいいんじゃね。
機械的な手順やツールによる自動化が提供されていなかったり、
単に作業者がプアだったりした時に、
リファクタリングのつもりで違う何かをしているというのは
よくある話。
0174デフォルトの名無しさん
2010/02/23(火) 10:37:07プログラミングだけでは金にならんし意味がないからという理由で
営業もプログラミングに含めるというような行為と同じ
0175デフォルトの名無しさん
2010/02/23(火) 10:43:120176デフォルトの名無しさん
2010/02/23(火) 10:49:59それでいいのならリファクタリングという概念が持て囃されることは永遠になかったはず
リファクタリングはソフトウェアとして新しい動作を一切組み入れない
ソースコード管理において安全度優先の書き換えを行えるようにする知識を供給する
うまくいかないことも少なくないが、俺コードで書き換わって不用意に破壊されるよりは諦めがつく
0177デフォルトの名無しさん
2010/02/23(火) 11:27:090178デフォルトの名無しさん
2010/02/23(火) 11:57:48どこかできっちりと決めたものがあるのか?
0179デフォルトの名無しさん
2010/02/23(火) 12:08:06ちがう罠
0180デフォルトの名無しさん
2010/02/23(火) 12:23:38あるよ
0181デフォルトの名無しさん
2010/02/23(火) 12:29:34あるというならどこにあるのかも書いてくれないと
0182デフォルトの名無しさん
2010/02/23(火) 12:34:21つうかそれを提唱したのがファウラーのリファクタリング本だよな。
そのレベルのクォリティを期待されてたRuby版がうんこだったからこそ
大炎上なんだし。
0183デフォルトの名無しさん
2010/02/23(火) 12:43:53なんて言ってたような連中へ突きつけられた現実解が
リファクタリングだしな。
本読んでなきゃ開発ツールに付いてる便利なリネーム機能ぐらいの
認識かもしれないが。
0184デフォルトの名無しさん
2010/02/23(火) 12:53:430185デフォルトの名無しさん
2010/02/23(火) 13:13:30リファクタリング本に書いてあるし、著者本人のwikiにも引用されてるし、
それの有志による邦訳すらあるなあ。
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?DefinitionOfRefactoring
まあWikipediaを根拠にしてるあたり釣りなんだろうけどさ。
0186デフォルトの名無しさん
2010/02/23(火) 13:25:38少なくとも「リファクタリングとは本に書いてある一連のやつ」という認識は共通だ
そういうレベルでオレオレの入り込む余地はない
本を読んだ上で個々の効果の議論をするのは有効
0187デフォルトの名無しさん
2010/02/23(火) 13:26:40pediaにしたって英語版にはそんな記述なくて要出典ものだけど
それでも「外部からの動作を変えずに」と書いてるな
0188デフォルトの名無しさん
2010/02/23(火) 13:28:54逆にいうと、そういうので困った参った恨んだ吐いた経験がないと意味がわからないかもしれない
それこそ、「俺が書き換えたほうが早い」
0189デフォルトの名無しさん
2010/02/23(火) 13:39:15ttp://d.hatena.ne.jp/textfile/20070116/refruby
の件が関係してるのかな
0190デフォルトの名無しさん
2010/02/23(火) 13:43:13「○○○で困った経験があるだろ?」
「ないよ」
というのは意外と地味に困る
0191デフォルトの名無しさん
2010/02/23(火) 19:57:44いつも他人に尻拭いさせてりゃ困ることは無い罠
0192デフォルトの名無しさん
2010/02/23(火) 20:23:130193デフォルトの名無しさん
2010/02/23(火) 20:56:26誰か読んだ?
0194デフォルトの名無しさん
2010/02/23(火) 23:16:13とても気になるが、対象範囲が漠然としてるタイトルだな
Railsなのか、生Rubyなのか、それともWEBアプリ関係ない汎用的な
クックブック的な物なのか
そもそもRubyの一般的なフィールドってのがよくわからんのに
best practiceも何もって気がする
0195デフォルトの名無しさん
2010/02/24(水) 01:00:25興味あるけど英語でオライリーの本1冊はおれにはきついなあ
英語の技術書をまるごとは読んだことないのだが、
サンプルプログラムとかあるから実は割といけるのだろうか
0196デフォルトの名無しさん
2010/02/24(水) 01:42:27ttp://edn.embarcadero.com/jp/article/38182
0197デフォルトの名無しさん
2010/02/24(水) 10:00:200198デフォルトの名無しさん
2010/02/24(水) 10:15:25昨今のコンピュータ序論または一般教養的にホントに有効なのかどうかという
0199デフォルトの名無しさん
2010/02/24(水) 10:31:46というかインタビュー内容の感想書け
0200デフォルトの名無しさん
2010/02/24(水) 10:37:25「継続は力なり」くらいしか伝わってこない
0201デフォルトの名無しさん
2010/02/24(水) 10:38:44ワロタw
0202デフォルトの名無しさん
2010/02/24(水) 10:46:22本人の今日夕飯に何々食いましたとかいうブログ記事以下の興味内容しかもてないとか悲しすぎる
0203デフォルトの名無しさん
2010/02/24(水) 11:13:10> Ruby Best Practices って本はどうなのよ?
無料公開中。今のところ、5章まで。
ttp://blog.rubybestpractices.com/
0204デフォルトの名無しさん
2010/02/24(水) 11:14:330205デフォルトの名無しさん
2010/02/24(水) 12:39:46thx
0206デフォルトの名無しさん
2010/02/24(水) 16:11:21歌が下手なアイドル歌手の「熱唱」みたいな表現ですね。
0207デフォルトの名無しさん
2010/02/24(水) 21:47:15のサイトによると、
「Rubyがカタログ上のスペックで劣るため、採用されないというのも不本意」
ということなんだけど、RubyInlineというCを埋め込むライブラリを標準添付
にして、単純な比較は上位になるようにしてしまえばいいのに。
RubyInlineは、今ではWindows(mingw版)でも動くみたいだし。
0208デフォルトの名無しさん
2010/02/26(金) 02:27:430209デフォルトの名無しさん
2010/02/26(金) 21:58:00外部コマンドを実行できて,かつ複数行コメントの機能がある
プログラム言語やマクロ言語ならなんでもRubyスクリプトを埋め込めるのな
Windowsのバッチファイルのためだけに存在するのかと思ってた
今日から秀丸マクロにRubyスクリプトを埋込みまくりだぜ
0210デフォルトの名無しさん
2010/02/26(金) 22:07:56ネットニュース(掲示板)やメールに載せたスクリプトを、
記事の件名などのヘッダ込みのまま実行できる。
0211デフォルトの名無しさん
2010/02/27(土) 01:58:240212デフォルトの名無しさん
2010/02/27(土) 09:30:08多くとか、elifとか、BEGIN END(これはさらにawk由来でもある)とか
__END__ とか。正規表現の拡張のうちPerlが初めてやったものも結構
入ってるよな。初期からあるドキュメンテーションコメントが=begin
=endなのもPOD由来と見た。
0213デフォルトの名無しさん
2010/02/27(土) 11:31:29クオートのエスケープ抜きで正規表現書けるのはちょっと素敵
0214デフォルトの名無しさん
2010/02/28(日) 03:05:20$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, ‘track=#NowPlaying’);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, ‘http://stream.twitter.com/1/statuses/filter.json’);
curl_setopt($curl, CURLOPT_USERPWD, $_CONFIG['twitter']['username'] . ‘:’ . $_CONFIG['twitter']['password']);
curl_setopt($curl, CURLOPT_WRITEFUNCTION, ‘progress’);
curl_exec($curl);
curl_close($curl);
function progress($curl, $str)
{
print “$str\n\n”;
return strlen($str);
}
0215デフォルトの名無しさん
2010/02/28(日) 03:16:190216デフォルトの名無しさん
2010/02/28(日) 04:34:06PHPはよく知らんがたぶんこんな感じ
require 'uri'
require 'net/http'
postfields = {'track'=>'#NowPlaying'}
uri = URI('http://stream.twitter.com/1/statuses/filter.json')
uri.user = $_CONFIG['twitter']['username']
uri.password = $_CONFIG['twitter']['password']
res = Net::HTTP.post_form(uri,postfields)
print "#{res.body}\n\n"
0217デフォルトの名無しさん
2010/02/28(日) 18:22:56あと、CurlはRubyバインディングがあることはあるが、
作者いわく「Linuxでしかテストしてないよ」な代物なので注意な。
Windowsとかの場合はDLとか使って無理矢理呼ぶ必要がある。
0218デフォルトの名無しさん
2010/02/28(日) 21:00:30Rubyの宿題教えてください。2限目
0219214
2010/03/01(月) 04:38:35ありがとうございます。
trackurl = 'http://stream.twitter.com/track.json?track=http'
c = Curl::Easy.new do |curl|
curl.url = trackurl
curl.userpwd = USERNAME + ':' + PASSWORD
end
$VERBOSE = nil
while true
body = c.on_body do |data|
result = body ? body.call(data) : data.length
next if !result.is_a?(Integer)
s = JSON.parse(data) rescue next
user = s['user']
next unless user && user['lang'].include?('ja')
links = s['text'].scan(/(https?:\/\/[-_.~a-zA-Z0-9;\/?:\@&=+\$,%#]+)/).flatten
links.each do |link|
p "url => #{link}"
end
result
end
c.perform
end
見よう見まねでこんな感じになったんですが、これをずっと動かしているとStackErrorとかで止まります。
後は>>218の方で聞く事にさせて頂きます。どもでした。
0220デフォルトの名無しさん
2010/03/01(月) 20:25:39open 用だなんて俺場面的に超便利な使い分け機能だと思ったのに
てかこのマニュアル古いな
0221デフォルトの名無しさん
2010/03/02(火) 22:26:12Pathname#to_s と Pathname#to_str って実質的に同じメソッドですよね?
to_s ではダメで to_str でないと具合が悪い状況が思いつかないのですが。
0222デフォルトの名無しさん
2010/03/02(火) 22:30:18irb> open(C.new){}
TypeError: can't convert C into String
irb> class C; def to_str; "./"; end; end
irb> open(C.new){}
irb>
0223221
2010/03/03(水) 00:01:46なるほど Kernel#open が引数に対して to_str を呼ぶという仕様絡みですか。
ググッてみたら、open 内で to_open を呼ぶようになったので Pathname#to_open
を実装したら、みたいな話が以前にあったようですが、最終的にどうなったのかな?
Pathname#open があるのでそれを使えということなんですかね。
0224デフォルトの名無しさん
2010/03/03(水) 00:26:24ドライブ文字とかどうしてるの?
0225デフォルトの名無しさん
2010/03/03(水) 00:34:51ドライブ名つきのフルパスを扱いたいときは D:\somedir のように \ を区切り文字に使う
ということだったと記憶
0226デフォルトの名無しさん
2010/03/03(水) 00:39:30リファクタリングRuby版が届いたが
† 現行では動作しません
という訳注はどうやらないようだ
まだ手は動かしてない
0227デフォルトの名無しさん
2010/03/03(水) 00:41:47マイコンピュータは仮想的なフォルダであり、Windowsのドライブ変更はUNIXではルートのマウントし直しに該当する
…とRubyでは考えてる、ように見える
/ はカレントドライブのルートを返す(つまり普通は C:\)
時々、/c/windows や /d/somedir のようにマウントされてるとみなすソフトもあるけどね
こっちのほうが正直便利なんだけども、いまさらそんなこと言っても
0228デフォルトの名無しさん
2010/03/03(水) 02:41:150229デフォルトの名無しさん
2010/03/03(水) 02:46:41気にせず使ってるけど、それでエラーに遭遇したことがないよ。
0230デフォルトの名無しさん
2010/03/03(水) 03:08:01ドライブ指定があろうが、UNCだろうが / で通る
Ruby内で閉じてるのなら \ は使わずにすむよ
確かDOSのころから \でも/でもよかったんじゃないの?
スイッチのキャラクタが/だったんで コマンドライン引数では\のみがディレクトリセパレータになっただけで
Windowsのコマンドプロンプトでもコマンド自体は
>c:/windows/notepad.exe
とかで起動できるよ
0231デフォルトの名無しさん
2010/03/03(水) 03:19:03確かに起動出来るね
>dir "c:/windows/notepad.exe"
ファイルが見つかりません
0232デフォルトの名無しさん
2010/03/03(水) 03:20:41/cygdrive/c/hogehoge
/cygdrive/d/fugafuga
0233デフォルトの名無しさん
2010/03/03(水) 10:51:52> Windowsのコマンドプロンプトでもコマンド自体は
> >c:/windows/notepad.exe
> とかで起動できるよ
だからそれはcmd.exeの処理だと何度言えばわかるですかもう堪忍袋の緒が切れました
0234デフォルトの名無しさん
2010/03/03(水) 11:05:120235デフォルトの名無しさん
2010/03/03(水) 11:44:050236デフォルトの名無しさん
2010/03/03(水) 13:41:39まああんたには関係ない話だろうな
0237デフォルトの名無しさん
2010/03/03(水) 14:02:03お前らは素直にコロン使ってろよ
しかも相対パスと絶対パスの見かけが逆とか
/A/B/C → A:B:C
B/C → :B:C
0238デフォルトの名無しさん
2010/03/03(水) 14:10:120239デフォルトの名無しさん
2010/03/03(水) 14:19:180240デフォルトの名無しさん
2010/03/03(水) 14:29:170241デフォルトの名無しさん
2010/03/03(水) 14:54:300242デフォルトの名無しさん
2010/03/03(水) 18:14:53cmd.exeがなにか特別な処理をしてるとは思えんのだが
コマンド名はそのまま プロセス起動APIに渡してるんじゃないの?(これも正確か知らんけど)
直接CreateProcessに/区切りで渡しても起動するよ
Rubyで system('C:/windows/notepad.exe') だとあまり直接っぽくないし、かといって
require 'Win32API'
Win32API.new('kernel32','CreateProcess','PPPPILPPPP','I').call('c:/windows/notepad.exe','',nil,nil,0,0,nil,nil,[68].pack("L")+"\0"*64,"\0"*64)
じゃ長いかなと
Win32APIで例をあげるなら、カレントディレクトリの変更なんてのが短くていいか
require 'Win32API'
Win32API.new('kernel32','SetCurrentDirectory','P','I').call('c:/windows/')
p Dir.pwd
0243デフォルトの名無しさん
2010/03/03(水) 18:30:060244デフォルトの名無しさん
2010/03/03(水) 18:59:570245デフォルトの名無しさん
2010/03/03(水) 21:05:48驚愕させられることになるよな
ワイルドカード展開が各プログラムで自力とか
プロセスの引数がARGVで取れるのはCランタイムが
頑張って分割してるだけとか
0246デフォルトの名無しさん
2010/03/03(水) 21:31:270247デフォルトの名無しさん
2010/03/03(水) 21:54:18echo * | grep hoge すると out of memory とかなんとかで死ねる
0248デフォルトの名無しさん
2010/03/03(水) 22:04:27"ソフトエイジェンシー、Rubyのソースコードを暗号化する「RubyEncoder」
del.icio.usに追加
Twitterに投稿
livedoorクリップに追加
Google Bookmarks に追加
Yahoo!ブックマークに追加
はてなブックマークに追加
株式会社ソフトエイジェンシーは3月3日、Ruby/Ruby on Railsのソースコードを暗号化する「RubyEncoder」を発表した。
価格は3万1500円/ライセンスで、3月8日より提供する。
RubyEncoderは、Ruby/Ruby on Railsのソースコードをバイトコード形式に変換する製品。簡単に解読できなくすることで、
商用アプリケーションとして配布する際などに知的財産の保護が実現する。特長は、多彩なアプリケーションロック機構を搭載する点。
IPアドレス、MACアドレス、ドメイン名が一致しないとアプリケーションをロックして動作不能にできる。これにより、安易なコピーを防げるほか、
アプリケーションに有効期限を設定して体験版も容易に作成可能。また暗号化とは別に、アプリケーションの実行に必要なライセンスファイルも作成できる。
これにより、評価版や製品版など異なったライセンス配布が可能だ。
製品構成は、エンコーダとスクリプトローダの2種類。暗号化するエンコーダは1ライセンスで1台のみインストールが可能。複合するスクリプトローダは無制限で利用できる。
動作環境は、Windows/Mac OS X/Linux/FreeBSD、Ruby 1.8.6/1.8.7/1.9.0//1.9.1。 "
http://enterprise.watch.impress.co.jp/docs/news/20100303_352389.html
0249デフォルトの名無しさん
2010/03/03(水) 22:37:430250デフォルトの名無しさん
2010/03/04(木) 00:25:580251デフォルトの名無しさん
2010/03/04(木) 01:27:43どこをパース時にエスケープしたのかきちんと区別して喋れって思うはず
というか、parse なんだから、文字列をそのままオブジェクト化するでいいんじゃないの
オブジェクトにする際に不正なものがあれば例外出して落ちると
ユーザーの利便性はラッパーとか作ってねみたいな
build2 があるなら parse2 があってもいいじゃんという感じはする
0252デフォルトの名無しさん
2010/03/04(木) 09:43:52日本語URLなんてのもあるし
■ このスレッドは過去ログ倉庫に格納されています