Ruby 初心者スレッド Part 60 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 59
http://echo.2ch.net/test/read.cgi/tech/1475394638/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/ >>前1000
どうしてもインデックスの計算やメンバ検索などで
間にRubyのコードが入ってしまうので結局遅くなるよ まつもとがmrubyに力いててるからなぁ
Ruby3頑張ってほしいわ Matzは最適化には興味ないでしょ
大半のRubyプログラマも然り Mastodonの急な流行によりRubyに脚光が!
浴びてないな
浴びてないね
Railsも微妙 >>8
mruby-cli?
mrubyからDLLを叩けるようになればWin32ネイティブで動くアプリを作れそうとは妄想している
mrubyは2.x.xと比べてもかなり遅いのが悩みどころ。2.x.xのつもりで書いていると速度が悲しいことになる JRubyのドキュメント少ないなあ
JRuby+JavaFXでGUIアプリ作ってみたい JavaFXの方もほとんど誰も使ってないぞ
パイオニアといえば聞こえはいいが後を追う人も誰もいなさそう JRubyってCRubyより実行が速いって言われるけど自分が使う範囲だと遅いんだよなぁ
起動とかCRubyだと10msもかからないプログラムの終了に数秒かかるしあほらしくなるくらい遅いし
肝心の実行速度自体も速くない。1.8.x比ならともかく2.x.x比だと優位性は感じられなかった rubyで書かれたデスクトップアプリは何があるんだろう
個人的に知らないので、有名所があれば教えて欲しい 昔プライベートなGUIツールをwxRuby+exerbで作ったことがあるけど大分苦労させられた RubyでGUIは遅すぎて話にならなかった記憶しかない。 いんや。
起動がdll読みまくりだからC#の起動時よりさらに遅いのよ。
起動が終わればまあ、気にするほどじゃ無いんだが。。。
C#の起動でさえ焦れったいから、我慢の限界超える遅さ。 wxRuby+exerbで作った奴は一瞬で起動するよ
Javaや.NETの方が遙かに待たされる
Ruby2.x.xでwxが使えればなぁ・・・ HTMLですむ&RScriptをインストール出来るならActiveScriptRubyを使ってHTAと言う手もあるな
GUIを英語とにらめっこせずに標準的に書けるから結構楽 Rubyは遅いと言われるけど実際の処理だとそうでもないんだよなぁ
大容量のバイナリデータを読み込んでゴリゴリ演算するような用途だと
PythonやLuaにしたところでインタプリタ稼働率の上昇やI/O性能で
コーディング量が増える割に速くならない
Rubyでも標準のCライブラリを積極的に使うような書き方をすると以外と
大差ない速度が出ちゃったりするし CPUはあまり関係なくね?自分は同じマシンで比べているよ
ベンチマークによってはRubyはPythonやLua(JITな奴)の1/数やそれ以下の速度しか出なかったりするけど
自分が試した限りそんなことはないな。圧倒的な速度で処理できるのかと期待すると肩すかしになる
JRubyやIronRubyも同じで、速くはならないどころか自分が試した限りでは遅くなったw
起動が遅くて実行も遅いのでは出番なし エレクトロンの本ポチってみた
これでGUI作ってみるわ・・・ >>31
ホントに?自分が試したのは1年ちょっと前くらいだからそんなに大昔じゃないぞ
当時すでにJRubyの速度はCRubyに対して明確に速いのが常識的な風潮だったんで
試してみたら全然そんなことなかった
今作っているのがCRuby 2.1.xで数十秒から数分かかる代物なんでこれが1/数で終わると嬉しいなぁ >>33はきっとライブラリの実装がボトルネックになってるんだろうな 簡易的な計測なので参考程度だけど計ってみた
処理内容
25MB程度のWaveファイル読みながらフィードバックタイプのエフェクトを掛けてWaveファイルに吐き出す
読み出しはダブルバッファリング。書き出しは直書き
計測方法
数回計ってそれっぽい時数を採用
jruby 9.1.8.0 (2.3.1) 2017-03-06 90fc7ab Java HotSpot(TM) Client VM 25.25-b02 on 1.8.0_25-b18 +jit [mswin32-x86]
65sec程度 メモリの使用は440MB程度
ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mswin32_100]
75sec程度 メモリの使用は200MB程度
ruby 2.4.0p0 (2016-12-24 revision 57164) [i386-mswin32_100]
90sec程度 メモリの使用は130MB程度
インタプリタの起動時間は含まないからJRubyはこれに2〜3秒加算される
jruby 1.7.12だと100秒以上かかっていたからかなり速くなっているけど、CRubyと
比べて劇的に速いってほどじゃないな。速度差はGCのさじ加減のような気も・・・
あと2.4を使ったら速くなるかと思ったら遅くなったw ruby 2.4.0p0 (2016-12-24 revision 57164) [x64-mswin64_100]
70sec程度 メモリの使用は230MB程度
やっぱりCGのさじ加減? >>36
それIOがネックになってないか?
CPU使用率を開示せよ すまん、正確には「IOのためのAPI呼び出しのコスト」だな
CPU使用率が仮に100%でもRubyコードそのものの実行時間を測ってるのかどうかは疑わしいよ >>38
IOは足を引っ張っている。最初は処理単位(2Byteや4Byte)で呼んでいて洒落にならないほど遅かった
今は512KB単位で読み込んでいる。25MB程度の場合はreadの呼び出し回数が50回程度の
はずでかなり抑えられているはず
ただしバックグラウンドで読んでいるためにオーバーヘッドは増えている
オンメモリで処理すれば多少速くなるのは確かだろうけど扱うデータ量が多いと数百MBに達する
可能性があることを考えるとあまり現実的はないか
dl経由でCreateFileを叩いてFILE_FLAG_SEQUENTIAL_SCANを付けて開いてWinAPI経由で読み込むとか
などまだ改善しそうな策はあるけどどこまで速くなるかは何とも・・・ >>40
そんなことはない
速い言語ではメモリアクセスがボトルネックになることもある
それに、能力の低いプログラマはやたらとメモリを食うプログラムを作る傾向がある 画像処理みたいに同じデータにアクセスするコードが少ないか、Rubyインタプリタみたいにループで同じデータ(この場合Rubyコード)にアクセスするコードが多いかの違いだろ。
メモリ確保した割に速くなかったからバランス取ったんじゃねーの? caseでラベルがラベルではなくラベルの文字列としかマッチしないって酷い仕様だな
アリエンティーすぎる Ruby初心者スレ的には使用メモリを気にするのは初心者の証
こういうスクリプト言語なんて自分のぶんの処理が速ければそれでいいのだ
ただし脱中級者認定要件に「Cレベルでのメモリ動作を理解し適宜気にする」という項目があるにはあるがw def f1(n,r)
n
end
def f3(n,r)
(n+1)%2
end
def f4(n,r)
n%2
end
def f5(n,r)
(n%r)==0?1:0
end
fs=[f1,f1,f3,f4,f5]
fs[3](21,7)
みたいに関数を配列に入れて使いたいんだが触って5時間の初心者なんでわからん。
具体的なコード教えてくれめんす。 >>47
技術的には可能ではあるがカレーを箸で食べる方法を工夫するようなものだ
まずは何を食べるときの話なのか教えてくれると最初からスプーンを勧めることができるぞ ありがとうございます。
詳細は明かせないです(説明すると人として恥ずかしいレベルのあれやこれやの理由で)。
関数の集合と適用順番を求める処理が上位にあって。
そこから降ってきたものを具体的に計算したりするときに使いたいのです。
引数の値に対応する関数リストがあるときに関数の適用順序をif文で分岐するとコードが偉いことになるので。
引数に1が来たら関数2,3,5
引数に2が来たら関数3,7,8,12,23
、、、
引数にnが来たら関数1,13を適用
みたいな対応表で、if文で適用関数を区別せず、リストとかで処理を記述したいわけです。 >>49
単純に引数で処理変えたいなら、case文で場合分けすればええんで?
def fn(a,b,c)
case a
when a = 1
puts sum = b + c
puts sum = 2*b
when a = 2
puts sum = b - c
when a = 3
puts sum = b * c
when a = "div"
puts sum = b / c
end
end
fn(1,10,5)
#=>15
#=>20
fn(2,10,5)
#=>5
fn(3,10,5)
#=>50
fn("div",10,5)
#=>2 Ruby始めてすぐなのならどっかででっかい条件分岐させて「実行したいメソッドとその処理順方法」を記した何かを紐づける記述が絶対に必要
それをたとえばデータ配列なんかに持つことは愚行であって(だいいちそのデータだけ見てもなにしてるか読めないし改変追加しんどいだろ)
素直に地の文で論理を記述するべきだろうね
てなわけで被らない分岐をすべて>>50のcaseで分岐させ、メソッドを実行する順番を書いただけの分岐後専用メソッドにぶん投げるのが妥当では
分岐が数十個超あるならクラス作ってファクトリーメソッドとかあのへんに行くんだろうけど1か月くらい早いと思う 話脱線するけど、上のメソッドにp使うと
p fn(2,10,5)
#=>5
#=>nil
って表示されるけど、何に対してnilを出してるのかが分からん >>42
firefox/realplayerの悪口はもっと言え >>52
Rubyのメソッドはすべて戻り値を返す
返すべき適当な値がない場合はnilを返す
んでirbとかはメソッド戻り値も律儀に表示する
irb> def m1; end
irb> m1
=> nil
そいで画面表示するメソッドを使うと標準出力内容とメソッド戻り値が2段表示になる 親切な返答ありがとうございます。
なるほど全然ダメな発想だったのですね私。
将来的な話なのですが、ゲームの雑魚敵を配列に入れた複数の関数で動きや思考や攻撃防御を制御して、
雑魚敵の部位ダメージ量や探索モードや怒りモードなどへの条件を満たすと、配列内の関数を入れ替えることで雑魚敵の挙動を制御したい。
という現時点での目標があります。
とりあえず教えてもらったコードを理解できるか今から頑張ってみます。 ロボットの動きなどは、case文で書く方がまれ。
右に動く関数とか、上に動く関数とかを、Hash か配列に入れておく
キーマップなどもそう。
キー A〜Z に該当する動きを、case文で書くのは大変
呼び出される処理を、ブロックで書く。
ブロックを呼び出すのは、yield
yield(引数)とすると、その引数は、ブロック引数として渡ってくる。
{ |引数| 処理 }
処理が2行以上あるなら、do 〜 end を使えばよい
-> (引数){ 処理 }
lambda{ |引数| 処理 }
Proc.new{ |引数| 処理 }
proc{ |引数| 処理 }
Proc.new, proc では、return が使えないから、->, lambda を使えばよい >>56
enemy[0]=Slime.new
enemy[1]=Goblin.new
enemy[1].state=Angry.new
enemy[0].action #普通に弱い
enemy[1].action #Angryのメソッドにより強い
こういうことならオブジェクト指向について学ぶといい
ただ敵の数が多いとハードコーディングしないでメタプログラミングのがいいかもな
基礎を覚えたら スライムとゴブリンを別のクラスにする意味はないだろ
そんなもんデータが違うだけ 普通、スライムとゴブリンは、振る舞い・攻撃パターンが異なるから、
別の基本クラスを継承する
スライムは、無形モンスター。
ゴブリンは、小鬼か妖精族? 2dのRPGやシューティングは作りやすかったけど
3dは他の使った方が良い
興味ないか…… いま流行りのますとどん
Rubyを学ぼうというインスタンスはないものか rubyの求人が無くて泣く
プログラマになりたいと思って勉強したのに・・・…
これからrubyとrailsの需要が爆発的に伸びるとかってありえますか? >>66
オブジェクト指向とか別の言語だろうと役に立つ
構文覚えただけならrubyの仕事増えようと役に立たない
それか言語を規定してない仕事でrubyを提案すればいいだろ RubyもRailsも落ち目で衰退する一方だよ
でも所詮それらは道具であり大して重要なことではない
AWSとかのインフラ方面の知識を身につけて一通り自分で作れるようになるとか、
実際にサービス作って運用してみるとか
とにかくモノ作れる奴にはいくらでも働き口はある 趣味または職業プログラマーとして「生きていく」のにRubyは強力に役立つ
ただし職業プログラマーとして「働く」のにはあまり役に立たない
これはそういうものだ
食べていくのならRubyだけじゃなくRuby「とそれ以外」を身に着けろ それってRuby以外の言語でも言える事じゃね?
というか国はプログラマーの育成に力を入れているようだけどその実態はコーダーの育成
世界で戦っていく上で必要なのは英語の意味でのシステムエンジニア(≠ソフトウェアエンジニア)だろ・・・ ハローワークでも、Pythonの求人は、ほとんどないけど、
Rubyの求人は、たまに見る Ruby覚えたら次はJavaでもC#でも飯の種になりそうな言語覚えれば良いじゃん
他の言語について知ると元の言語の理解も深まるから
それこそプログラマとして働くなら特定の言語だけしか使えないなんてありえないよ 日本に必要なのは質の高いプログラマーだと思うぞ
世界で戦えるサービスやアプリが少ないのはプログラマーの質の問題が大きい
教育面で言えばごくごく一部の大学と大学院を除くと
日本の大学よりCourseraで受けられる講義のほうがレベル高いからな
小学生にプログラミング教育するより高等教育に力入れないと話にならん
あとハローワークは知らんがRubyの求人は普通にあるよ
Rubyで人とるようなところはハロワに出さないだけじゃないの
リクナビとか一般的なサイトで調べてみたら? とりあえずRubyで色々作れるなら、他の言語でも文法とライブラリ覚えりゃ作れるでしょ。
ある日Javaでこれ作って。って言われたらJava入門書とWebのドキュメントで翌日には学びながら作り始めるのが当たり前の世界よ?
ソースはおいら。 ねえねえ、Rubyバイナリのバージョン管理って今でもrbenvでいいの? >>78
https://ideone.com/zCU275
評価順が違う
戻り値をそのまま使う時は {}
そうでなければ do end が普通かな これはdo...endと{}の結合の強さの違いによる問題だね
ここ参照して
http://rurema.clear-code.com/2.4.0/doc/spec=2fcall.html#block
上でも言われてるけどブロック付きメソッドの戻り値をpしたいときは{}使わないと思ったように動かないよ >>79
コメントありがとうございます.
しかし手元の教科書(たのしいruby)では
obj.method(list) do | ブロック変数|
式
end
と
obj.method(list) { | ブロック変数|
式
}
は互換であると書いてあります.評価順序の違い,とは >>78 のプログラム例では,どのような順序になるから,違う,といえるのでしょうか? 例えば
p (1..10).map{|i| i**2}
は(1..10).map{|i| i**2}の戻り値をpするけど
p (1..10).map do |i| i**2 end
は
p((1..10).map) do |i| i**2 end
と同じ動きをする。
互換というのは明らかな誤謬。 >>82
なるほど,よくわかりました
丁寧な回答ありがとうございました ついでに、いちいち書き換えるのが面倒なら
(1..10).map do |i| i**2 end.display
(1..10).map do |i| i**2 end.tap{|e| p e}
とかって書くのもありだね 結合の強さって初めて知ったわ
こんな仕様あったのか 教えてください。(当方Rubyまったく無知です。)
下記のスクリプトを走らせるとSSLエラーが出るので、
拾ってきた証明書を読ませて何とかしたのですが、
open-uri.rb:359:in `open_http': 403 Forbidden (OpenURI::HTTPError)
と、エラーが出ます。UserAgentや認証やら何かでけられてると思うんですが。
403.1とかのサブエラー返してくれればまだしも原因わからず。
※Yahooボックスから一括DL
ttp://lp6m.hatenablog.com/entry/2016/08/12/184232 つまりそのためにYahooのアカウント取ってBOXに何か入れて検証しろと 普通に認証失敗してんだろ
認証に成功してるかどうかもわからないコード使って
Ruby無知です、わかりません、教えてくださいって酷いゆとりだね Rubyを学んでいないのならこんな古臭いスクリプトをわざわざRuby入れて使う必要はない yahoo box さらうプログラムなら他にもあるよな 私たちはあなたのような人を売るほど見てきてるのですよルンルン >>80-84
{ }, do〜end は互換じゃなかったのか!
しかし、ブロックの外側に、p を付ける方が、おかしい!
ブロックの外側に、p を付けるって事は、ブロック全体の戻り値を表示する事になる。
ブロック内の各処理の結果じゃない >>87-92
たぶん、Rubyの問題ではない
「403 Forbidden OpenURI::HTTPError」で検索! case文書く時に
case 比較したいオブジェクト名
when 値1 then
文1
って書いてあるけど
別に比較したいオブジェクト名を省略しても動くよね
ただリファレンス見てもその辺の注釈が無いけど、どういう理屈で動いてるんだろう >>96
caseに値を指定するかどうかでwhenの値の扱いが変わる
特に不思議な仕掛けがある訳じゃなく、単純に文法上別の動作をするってだけのこと
リファレンスにも普通に書いてあるぞ >>94
>しかし、ブロックの外側に、p を付ける方が、おかしい!
なるほど、何もしらない初学者だから、こういったこともよくわかっていなかったのです
今後ともよろしくお願いいたします。
今演習をしていますが、
s = "Ruby is an object oriented programming language"
に含まれるアルファベットの頻度をカウントしようとして
s.each_char do |c| で、手がとまっています s.chars.uniq.each_with_object({}){|c,h|h[c]=s.count(c)} あと別にブロックの外側に、p を付ける事はおかしくない
ブロック全体の戻り値が知りたいときだってあるでしょう >>97
よく読んだらcase文の最後の所に
省略した場合の挙動が書いてありました・・・・・・申し訳ないです
しかしこれで色々と楽が出来そうです、ありがとうございました >>98
Rubyに限った話じゃないけどある処理を実装しようとする時は
その処理の入力と出力の型を最初に考えるといいと思うよ
(厳密に定義されてる型じゃなくても別によくて入出力の形式くらいの意味)
例えば
文字列の文字出現頻度をカウントするメソッドの入出力は
string -> hash {“a” => 3, “b” => 5, …}
でeach_charに渡すブロックの入出力は
char -> hash
でcharを1つずつ受け取って意図したhashを返すにはどうするのかを考える (続き)
例えば特定の文字が出てくるたびにインクリメントすればいいと考えれば
最初は↓こういう実装でもいい
s = "Ruby is an object oriented programming language"
result = Hash.new(0)
s.each_char do |char|
result[char.downcase] += 1
end
上のコードが手続き的で副作用が気持ち悪いと思うようになってくればreduceに変える
s.chars.reduce(Hash.new(0)) {|result, char| result[char.downcase] += 1; result}
reduceだとブロックの最後に明示的にresultを返してやらないといけないのが美しくないと思えばeach_with_objectに変える
s.chars.each_with_object(Hash.new(0)) {|char, result| result[char.downcase] += 1}
文字の集合をgroup byすればいいというふうに考えれば↓こういう感じとか(パフォーマンスは上のほうがよいけど)
s.chars.group_by{|char| char.downcase}
.map{|key, value| [key, value.length]}
.to_h
入出力の型を考えて、ロジックを考えて、ロジックをコードで表現する方法を見つける 大学すら行ったことのない人は「演習」の意味も分からず>>103-104みたいなことを書くのだ
気をつけようね reduceは考え方が手続き型に近いので、関数型特有のトップダウンな思考が身についてない人にも馴染みやすいためか、低スキルな人が好んで使うよね
故に>>104のように無自覚に副作用書いちゃう馬鹿野郎も多い ruby の記述力には感動すら感じさせられますね
今回、必要があって ruby を始めましたが、末永くお付き合いさせていただくことになりそうですね、C/C++ だけに眠っていたのは損失でした… >>98
>s.each_char do |c| で、手がとまっています
手が止まるのは、習っていない事をしようとするから。
そりゃ出来ないはず
先に「たのしいRuby 第5版、2016」を3回読めば、ほとんどの事は書いてある >>104
すでに>>105が指摘しているけど、破壊的代入は副作用の一つだよ
副作用の無い「関数型プログラミング」と呼ばれる作法に従えば、
以下のコードになる
http://ideone.com/d48CGm
詳しくは以下の文書を参照
・Rubyによる関数型プログラミング
http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html
あと蛇足を加えると:
・上記のコードでは、reduce ではなく inject を用いた
・効率という視点では破壊的代入を用いる>>104のコードのほうが優れている
・わざわざメソッド String#chars で文字列を文字の配列に展開するよりも、
ブロックを伴わないメソッド String#each_char は列挙オブジェクト
(enumerator)を返すから、それを直接inject(あるいは reduce)へ
チェーンさせたほうが効率的である >>109
ちゃんと覚えるつもりならRubyの一般的なコーディングルール調べてからのほうがいいよ
自然に do end と {} の使い分けも出来るように考えられてたりとか
無駄な時間を減らせるようになってる reduceという別名をつけてくれたのはありがたいことだと思う
厄介な人間の区別がつけやすくなったからな >>115
Rubyのreduceは別にreduceしてるわけではないし
関数型やってるわけでもないのに「わざわざ」reduceと呼ぶのは
・reduceの動作を理解していない
・Rubyと他の関数型言語等との区別をつけられていない
という点で危険人物の可能性が高い
そして実際にそうだったわけであって >>112
副作用って書いたのはステートメント単位の話ね
each_charとcharsの違いはたかだか知れてるけど
インクリメントのたびに新しいHash作ってたら
100倍・1000倍のオーダーでパフォーマンス変わるよ Rubyではほとんどの場合injectだよな
reduceという名前で書きたい処理だと思ったことはRubyではまだないわ
名前重要、は組み込みライブラリにも適用されるのだ ループはwhile最強のはずと思ったけど、配列や文字列の添字参照は引数のパースにコストがかかるし
何文字目か数えないといけないからeach_charsのほうがマシだな effective rubyに倣ってreduceだわ Rubyist Magazine - map と collect、reduce と inject ―― 名前の違いに見る発想の違い
http://magazine.rubyist.net/?0038-MapAndCollect
俺はmap/reduce派 >>123
長ったらしいな。
まず、Rubyは他の言語を参考にした。
map と collect、reduce と inject と2つあるのは
Lispを参考にした名前が、mapとrecude、
Smalltaikを参考にした名前が、collectとinjectである。
というだけだろう?
ここまででRubyの話は終わりじゃないか。 JavaScriptに標準であるのは、mapとrecudeだな。 配列の関係でお聞きしたいです
http://ideone.com/ntTNm5
こんな感じで任意の文字列を受け取って、それを1文字ずつ分割するっていう動きなのですが
配列を使って繰り返そうとすると上手くいかないです
http://ideone.com/ePxuDp
どうすれば配列に値を返すことが出来るのでしょうか? スクリプトのちぐはぐさから見て、おそらくコピペ継ぎはぎだけで体系的な学習を全くしてないと思われる
書籍のたのしいRubyを買えとまでは言わないので、なんかどっか適当なアフィサイトででも勉強するといいよ
制御構造と変数のスコープについての勉強が足りない
第6章とか第7章とかそのへんまで読破だ 最初のスクリプト修正
input = gets.chomp
s1,s2,s3 = input.split(" ")
a = s1.split(//)
b = s2.split(//)
c = s3.split(//)
p a,b,c
次のやつの例
input = gets.chomp
arr = input.split(" ")
result = []
arr.each do |s|
result << s.split(//)
end
result.each do |e|
p e
end
うまく処理が行われるように変数名を変えたのがポイントであるが眠いので説明はほかの人に譲る
とにかく基礎知識が足りないので焦らずにまずは変数とかそのへんの解説を読むのだよ 追記、1行で書くアホが湧くかもしれないがその人は自分のことしか考えてないので現時点では無視してよい
あなたに必要なのは基礎なのだから
ではお先におやすみなさい >>128
あ、新しく空の配列作っておいて
繰り返しの時に、分割した結果をその中に入れるっていう処理にすれば良かったんですね
ありがとうございました! 違う
ローカル変数やブロック変数の動作を全く理解してないのだ
だから自己代入してバグっても何も思わない >>131
あー、確かにその辺は凄い曖昧ですね・・・・・・
もう一回その周辺含めて勉強し直します 結局、会社出入のSIの担当に個人的にお願いしました。
10分で数行追加して解決してくれました。Win10の問題とファイル100ケ問題2点があったとか。
自分で解決するのは無理でしたね。
解決してくれた方には10万くらい謝礼を考えていたのですが、この方には辞退されてしまいましたので
二人で銀座のクラブで豪遊して、逆に初任給相当くらいぶっとばしてしまった・・・
孫の写真をEOS-1D X で撮影した数千枚をぜんぶYAhooBOXにに保管していて、家内に怒られており
苛立ってしまい、お騒がせして申し訳ございませんでした。 MonoにあるIronRuby(ir.exe)でRubyスクリプトを走らせようとすると
unknown: no such file to load -- gem_prelude.rb (LoadError)
というエラーが出て終了してしまいます。
どうすれば良いでしょうか? IronRubyは全くメンテされてないゴミ
諦めてC#使おう 「gem_prelude.rb LoadError」で検索!
初心者は、paiza.IO, codepad などで、ブラウザでプログラミングするのが簡単 Rubyとは直接関係ないのですが
RubyMineの補完機能で、入力した段階で自動的に一番上が選択されるようにするにはどうすれば良いのでしょうか?
(IntelliJの方では最初から自動的に選択されてました)
RubyMineとIntelliJの比較
http://i.imgur.com/fgCFVJa.png
http://i.imgur.com/yv6XKJk.png
RubyMineを使ってる方で分かる方はいらっしゃらないでしょうか Rubyでスクレイピングしたいんですが、串がうまく動かないです。串はTorを使いたいと思います。
p "Creating tor agent..."
p "My raw ip address is #{Mechanize.new.get('http://ifconfig.me/ip').body}"
tor ||= TorPrivoxy::Agent.new '127.0.0.1', '', {8118 => 9150} do |agent|
begin
sleep 10
p "My ip address is now chenged to #{agent.ip}"
p tor.get("http://ja.wikipedia.org/wiki/Privoxy").encode(Encoding::SJIS)
rescue
p "エラーです".encode(Encoding::SJIS)
end
end どの行で、どんなエラーメッセージが出るの?
そのエラーメッセージで検索すれば? rubyでは現在の行とファイルをだすような__LINE__とか__FILE__はないんですか? 標準的な動作で不足であるという場合
その不足な動作自体を満たすライブラリの有無を質問するのではなく
そもそも何のためにそれが必要だと考えているのかを述べてみなされ Rubyの作者の技術力ってどのくらいなの?
低くはないとおもうけど、そんなにたかくもないの? マルチスレッドや文字コード系はあんま詳しくないから詳しい人に手伝って貰ってたとか日経ソフトウェアの昔の対談記事で書いてたな。
ギークって程じゃないと言う印象。 技術力は知らんが心の底からプログラミング好きなんだなぁとは思うな、言語オタクだから言語作ったそうだし >>151
マルチスレッドや文字コードの仕様もぜんぶ知ってないと、技術力は高いといえない?
日本で技術力が高い人ってどのくらいいるんでしょう。
Ruby作った人でも技術力が高くないといわれたら、道が険しすぎる。 言語処理系、特にパフォーマンスを度外視したスクリプト言語の実装ってそんなに難しくないよ
Rubyの互換実装って驚くほど短期間で作られたりするし 言語処理系の実装って、経験のない人はなぜかそれがすごく高度なことだというイメージを持ってるよな
やってみたらわかるけど、動かすだけなら意外と全然難しくないよ
ゲームとか作る方がずっと難しい 思ったほどには「あらゆることを深く知っている」必要はないよね
言語作成センスと時の運とコミュニティへの頭の下げ方だと思うわ >>151
おいおい、Matzをもって
> ギークって程じゃないと言う印象。
とは、本気か?おまえどんだけえらそうなの。
>>153
> Ruby作った人でも技術力が高くないといわれた
だれじゃ、そんなこと言ったのは。
初歩的なインタプリタは学生でも作れるけど、rubyぐらい完成度の高いのは無理だろ。 >>154
そりゃ仕様をまるごとパクって作れば短期間で作れるでしょ。理由がおかしい。
整合性のとれた言語仕様を考えるところがいちばん大変だろうに。
>>155
> 動かすだけなら意外と全然難しくないよ
だからといってrubyの作者がギークって程じゃないとは、ここはすごいプログラマの集まりですね。 あらゆる分野においてエキスパートじゃないと技術があるとは言えない、と本気で思い込んでる
人がちらほらいるようで
そんなウルトラスーパーハカーなんて世界に何人いることやら これでも貼ってみるか
マツドサイエンティスト・研究日誌 保存版 システムエンジニアリング(その4) 超人にならなくていい
ttp://anoda.web.fc2.com/weblog/20050424.html
日本は完璧主義だからか平気で完璧超人を求めるよね 多分「完成度」の基準がみんなバラバラすぎて上手くコミュニケーションが取れてないな
Brainfuck系言語というか、いわゆる難解プログラミング言語みたいなジョークみたいな物だったら
確かに「実装」は簡単
が、Ruby、PHP、Pythoみたいに一つの主要言語にまで昇華させるには
言語設計まで含めてめちゃくちゃ大変な作業が必要になる
なので
Rubyっぽい、プログラム言語っぽく動く何かを作る→頑張れば出来る
RubyやPythonの設計思想を受け継ぎながら、独自の言語設計に基づいて言語を作る→並大抵の人間には出来ない代物
っていう感じかな「 >>158
だれだったか忘れましたが、ツイッターでだれか言ってました。
有名人?なのかな、それなりに有名っぽい人だったので、技術力の高い低いってどういう基準で判断するのかなと思って。 RubyはMatzが数学苦手なのが良かった
結果、平均的なPGの頭に合った言語になった
頭の良すぎる人が作った言語は結局一部の人間のオナニーで終わっちゃう
FortranとかCとかJavaとかC#とかは頭の良い人たちが本気でボリューム層向けに作った完璧な「製品」だけど、
そういうのに比べるとRubyはまあ適度な頭の緩さが馴染みやすいよね >>164
誰っていわれても、ツイッターでみかけただけでどこのだれかまでは覚えてないです。
ごめんね。
たくさんのひとがリツイしてたから、自分で探したら出てくるかもよ。 それいいな。俺も困った時に使ってみよう
たくさんのひとがリツイしてたから、自分で探したら出てくるかもよ。 うーん、あまりにも初心者過ぎてあれなんだが、プログラミングを学び始めて
まずrubyを真面目にやろうと思ったんだ。他の言語もさわりはしたんだけどね。
でも、実際に環境を構築しようとrubyをインストールして、
環境変数のPathの設定も本の通りに確認したんだけど
実際に打つと#とかで内部コマンド〜ファイルとして認識されていませんって
出るんよ、 Pathって打ってみるときちんとCドライブのRubyのbinを
参照?してるんだけど・・・私はどこを間違えているんだろう。 >>168
答えじゃなくてすまんけど感想を。
そういうことを聞ける場所が2chしかないのが残念だよね
Rubyを始める人のコミュニティってないものか
ずっとそういう場所を探している >>169
そですねー、私もまずコミュニティ的なものを探したんですけど
勉強会みたいなのはあるのに、こういった掲示板的なものは
みつけられないんですよね。初心者はわりかしきついですね。
相変わらず四苦八苦してますw
2chはマイナーなものは、あまり素人は歓迎されない気もしますね。 まさか生のrubyコードをコマンドプロンプトに『打ち込んでるんじゃ >>170
無いなら作れってところなのだけど
それを作る技術を得るためには・・・
堂々巡りで困ってる
2chには妖怪が住んでいるからなぁ >>171
なるほど!
ruby -v
を試してみればいいんだな
#とかでという意味がよくわからないけど きっと「#」で始まる行をコピペしてコマンドプロンプトにそのまま張り付けたんじゃないのかね
binにパス通ってるならirb起動すれば幸せになれるかもね >>171
あははw
いろいろあって混乱してたんだw
本にもテキストエディタで書けって書いてあったw
その前にPath関係の確認させられてたから勘違いしてしまった。
すごいあっさり大事なことが色々かいてあるとこ見逃してたw
C言語の勉強をrubyの勉強する前に触っておこうと思って
コンパイラに書いてたような感覚でやってしまったw
rubyのさわりもブラウザ上で書く感じの勉強だったんだ
だ、だから違うんよ?うん、違う違う。知ってた知ってた。 まあ、初心者ってこういうくだらない質問するもんだから、許して笑ってくれさい。
そして、そういう初心者用のコミュニティは作れないっていうか、
初心者が作っても人集まらないだろうからここでできれば助けて下さい。
rubyスレ希少なんです・・・という初心者の声なのでした。 2chって「初心者」って言葉に食いつく妖怪もいるからなぁ >>179
それは見てなかったなぁ
よっしゃ
これからそこへ質問入れてみるぞ >>172
掲示板を立ち上げること自体は難しくないけど、管理維持するには住人やISPなどのバックアップが必要不可欠
個人で運営する場合は、住人による自治が基本になるしそれで対応しきれない案件に関しては管理人やISPによる強権発動で対応
これらの支援を受けられなくなって久しいし、荒らしに対応できなくなるのは目に見えていて長期的維持を望めない
あと技術の初心者は構わないがコミュ力初心者は遠慮願わないと。今や「初心者は免罪符ではない」などと言われることも無くなったしなぁ・・・ >>179
そこのRubyカテゴリは1ヶ月眠ってるがな 2ch以外で質問できそうな所っていうとこの辺のサイトか
質問できる所
テラテイル
https://teratail.com/
スタック・オーバーフロー
https://ja.stackoverflow.com/
Rubyの記事投稿が多い所
Qiita
http://qiita.com/ >>183
teratailもstackoverflowも質問することがはっきりしてる場合なんだよね
ある程度のレベルがいるし。
Qiitaいいたっては聞くというより情報発信サイトかと思われる
でも
今Qiitaに登録したったw >>170
まずWindowsを使いこなせてないからだな
言語のスレだとみんな環境違うしそういう知識は身につかないかも
適切なとこ見てれば質問のしかた(必要な情報)もわかってくるはずだ >>186
stackoverflowあかんの?
ちょいとその辺の事情をお願い 日本語のスタックオーバーフローって検索の上位に出てこないイメージ
ってことは・・・・・・ Ruby2.4のリファレンスマニュアルをダウンロードするにはどうしたらいいのー 階層構造を保持したままローカルに保存できるソフトでも使えば 古いバージョンのマニュアルと最新のならダウンロードできるようになってるんだけどね >>164,166
どこの誰かは覚えてないといったけど、ふと思って探してみたら、あっさり見つかった。
ttps://mobile.twitter.com/kmizu/status/857032083046256641
> ソフトウェア分野一般に通じる「技術力」というのは実際には
> 存在しないのにあると信じられている幻想だと思う。その幻想が
> 広く信じられている結果として、たとえば著名プログラミング言語の
> 作者はスーパープログラマのように思われがちだとかいう現象が発生する。
たしかこれだった。 JavaとかC#の作者は実際凄いらしいね
Matzは祭り上げられてる割にはRuby以外でほとんど実績らしい実績を聞かない JavaとかC#の作者の名前は?
Matz個人、人間一人と渡り合えるなんて、すごい人だろうね。 >>195
自分で調べたら?
どっちもチーフアーキテクトは個人崇拝されてる有名人だよ 「チーフアーキテクトは」ってことは
それ以外の役職の人がいるってこと?
Matz一人に対して複数の人があつまらないと
対抗できないってのはちょっと恥ずかしくね? >>197
それを言うならRubyだってMatzが全部決めてる訳じゃないよ コンパイラとインタプリタじゃ難易度全然違うしな。
C#の作者なんかはTurbo Pascal,同C,同C++,Delphi,C++Builder,Visual J++,VC#,TypeScriptと、言語もだけどライブラリも設計してる。
ベテラン中のベテラン。
センスも経験も数段上。 あ、言語はオリジナルはC#とTypeScriptだけだから、コンパイラとライブラリの設計がほとんどやね。 JavaとかC#はチームで作ったものだからね
基本的な部分はチーフがやったとしても全体を作り上げたのはチームだから
チーフがすべての部分についてウルトラスーパーハカーである必要はないんだよ Javaは忘れたがC#はアンダース・ヘルスバーグって人が作ったもん、余談だがDelphi作った人だからC#はとてもDelphiくさい 日本人って何かにつけて神とあがめ立てて思考停止する奴が多いよね。なぜそうなのか、どうやったのかとか考えようとしない 4月に、Win10の、Windows Subsystem for Linux(WSL)の大きな更新があった。
誰か、WSLから、Rubyを使っている人、いる?
居たら、報告して
日経Linux 6月号に、WSL の特集あり >>193
ツイートが連続してて、そのリンクはろうとしたけどめんどくさいので、かわりにこれで。
ttp://i.imgur.com/uCg2V4P.png
だんだん思い出したけど、スーパーハッカーとかスーパープログラマーで調べてたんだった。
ルビーの作者でもスーパープログラマーじゃないなら、どうしていいのかわかんないな。日本にいなさそう。 すごいプログラマだけどもスーパープログラマーという方向性の人ではないと思う
なんというか、仮面ライダーとウルトラマンくらい傾向が違う
だいたい正義の味方のだいたい超能力人間なんだけど、まとめると違和感 >>206
プロの一流の選手を、ドラフトにひっかかりもしなかった三流が「あの選手は大したことない」と言ってるみたいな感じか。
たまにいるよな、こういうの。 こんなレベルの人の集まりかと思わせる雑談だな
これもパートスレの弊害だろ >>205
rbenv で入れて使ってる。
ちょっとしたスクリプト動かすのに便利。 >>208
どちらかというと、半分以上は嫉妬心だと思う。つまりやっかみ。
大学の演習で作るようなレベルのものと、世界中のサービスで使われるレベルのものとでは、難易度がはるかに違うのにな。 設計技術と実装技術って無関係とは言わずとも別物だけど区別出来ていない人は多い
プログラミングは後者である Matzさんはプログラミング言語の知識は凄いけど最適化周りは今一つってのは共通認識だと思っていたが…昔からずっと「Rubyは遅い」って皆でブーブー言ってたじゃない
でも前者の能力持ってる人は稀有だからやっぱりスーパープログラマーに違いないと思うよ
アニメーターの大塚康生さんが「宮さん(宮崎駿)は描くの早いけど絵は上手くない」って評してるけどMatzはプログラミング言語界の宮崎駿みたいなもんだよ
ある方向は秀でてるけどある方向はそれほどでもない。だけどスーパー○○には違いない Rubyが遅いのはコーディング技術の不足よりシステム設計の制約だと思っていたけど違うのか?
あのシステム設計がJIT化の障害にもなっているみたいだし、Intelのプログラマー陣に書かせたら
爆速に!とはいかないと思うんだが 愚直なプログラミングだからドキュメントなしでやってこられたけど、未だにドキュメントが完成してないのは驚きである ○○がないなんて非常識で公式やる気なさすぎでウチでは使えないよ、という人たちにスルーされたからこそ今があるのでは
Linuxみたいなもんだw >>213
> だけどスーパー○○には違いない
スーパーマツモト? いまさらかもしれないがプログラマってすごく偏ってるのかな
存在も考え方も C#の作者は普通の企業戦士としてクソ有能らしいね
ハッカーやアーキテクトとしての専門的技能を十二分に備えた上で、
マネージャとしてチームを率いて製品を作り上げられる超人 Rubyが普及(ω)したのはドキュメントを書かなかったからだよ 軽々しく他人のことを神だの超人だの言っちゃう人って実力は大したことないのにプライドだけ高いんだなろうな
しかも多分その自覚が無い。自分の能力が大したことないことを自覚できていればそういう表現の仕方はしないはずだし
神格化するより研究し自分の能力を伸ばすことを考えるはず よっぽど何かコンプレックスあるんだろうねこの人
ああ、この人ってのはこのスレに何日も同じようなことグチグチグチグチとえんえん書き続けてる人ね 矛盾を含んだ文章ってスパゲッティコードみたいだよね そうだ
Rubyが好きなのは
Pythonみたいにインデント強制されないし
Javaみたいに大文字小文字まで強制されないからなんだ >>206
なんで時系列が逆順なんだよw
2chでも古い書き込みが上で新しいほど下になってるだろ。
そのほうが自然なんだからそうしろ
>>223
>よっぽど何かコンプレックスあるんだろうねこの人
成功した人に嫉妬してる暇があれば自分で何か作ればいいのに、そうする人は少ない 自分で何もできないから他人に嫉妬する、まあ俺のことなんですけどね 実際に結果を出した人は
その結果の現実における実在性から人生に安定感なり心の余裕が出てくるように見えますよね。 本当の天才や神もたまにいるけどきわめて稀。ほとんどの場合は普通の能ある人
大抵の場合聞き上手&話し上手でコミュ力が高いのと論理的な思考・判断が出来る
嫉妬している暇があるなら成功している人を分析した方が建設的だし結果を出す近道だろう キチガイか・・・
この言葉の取り方も人それぞれだろうけど。
もっと適当な新しい言葉はないものかね
ネットコミュニティで使えるような・・・
粘着、凝り固まった、共鳴しがたい論理、複数人を装うタイプ
ついでに嫉妬、妬みもいれとこか
そんな人をいう言葉 そんなことより
誰かマジで教えてくれないか
herokuでRubyを動かしたいんや
RoRじゃなくてただのシンプルなRuby
Ruby環境のあるレンサバだとindex.rbで動くやん
あれと同じようにwebページを表示したい
windows7でやってる
gitでpushまでは出来るのだけど
どうしてもトップページが表示できない
Qiitaとかの情報はぐぐりまくってるいのだけど
ピッタリのものはない
php,node.jsがQiita情報では優勢や
rackというのがキーワードだということまではわかった
Gemfile,Gemfile.lock,Procfile,config.ru
も整えたつもりなのだけど
中身がまずいんやろなぁ
もういちど書くけど
RoRじゃなくて素のRubyで
一番シンプルにsinatraとかフレームワークを使わずに
herokuでindex.rbをトップページに表示したい >>233
これだけじゃ意味が伝わらないかもしれないから
やってることをわかってもらえるようなgithubを
24時間以内に用意するわ
なんせrubyもgithubもherokuもやり始めたばかりの素人なもので
ちょっとしたことでも時間がかかるので24時間以内な chef, vagrant から、VirtualBox で、Linux
それか、4月に、Win10の、
Windows Subsystem for Linux(WSL)の大きな更新があったから、WSLでするとか? IniFile使って初期化ファイルに"a\\b\\c\\r\\z"と書き込んで読み出してみたら
"a\\b\\c\r\\z"になっててハマったという愚痴 >>233
Qiita記事漁ってたらそれっぽいの見つけたけど
やりたい事ってこういう事?
Herokuで単純なrubyスクリプトを定期的に実行する
http://qiita.com/kasei-san/items/909f17c2c42b7e3a8489 >>233
PythonかNode.jsでAWS Lambdaおすすめ >>239
それは見てなかった
でも最初の設定のgithub元はRailsのようだ
もっと単純にやりたい
どっちかというとこれに近いと思う
http://qiita.com/higuma/items/9baac9e97eeb862ef64e
これどおりにしても動作しなかったけど。 233の続き
誰かが間違いを指摘してくれることに望みをかけてここに公開する
244のqiitaを参考にしているのだけど
やったこと
githubは
https://github.com/sasisu/aiue01
これからherokuの方へdeploy
そうすると
https://aiue01.herokuapp.com/
このAplication errorのページになる
herokuはheroku/rubyのBuildpacksを適用
何かが足りないか間違えてるか
それとも全く勘違いなことをしているのか
わからない 👀
Rock54: Caution(BBR-MD5:b95868ef2c0ed5e765a4d10ada4cf289) Herokuの説明書を読んだら?
それか、自分が書いたファイルに、1行ずつ、p を書いて、
変数の内容を表示するとか
まず、どこでエラーが起きたのか、切り分ける。
それがデバッグの基本 24時間経っても>>243の応答が無いのでリンク先は削除しておきます
これからレスをしてもらってもすぐには見れないと思うので。 >>206
これはScalaの有名な人だね。調子こいたことを言ってMatzにたしなめられることが複数回あったようだから、逆恨みしてるんだろう。
なお有名な言語の作者たちは互いに尊敬しあってるよ。一流ってそういうもの。 1.8.xの頃の拡張ライブラリを最近の2.x.xで使えるように改造したいのですが
Rubyの各バージョン間の拡張ライブラリのインターフェイスの差異がまとまっている資料とかないですかね? 『Rubyレシピブック 第3版 303の技』という本を書店に残っているのを偶然見つけたのですが
Ruby1.8〜1.9、JRuby1.5を対象にしているとあり
現行の2.2系、2.3系と互換性があるのかが分からず購入を迷っています
またもしあれば1.8系、1.9系、2.xx系以降の互換性や追加機能をまとめたサイトなどがあれば教えて欲しいです プロジェクトマネージャーとしては絶望的にセンスが無いとは思ったことはある。 Ruby2.0なら使えるんだけどね
それ以前のは「どうして使えないのか」「どこを変えればいいのか」の手間と情報の加減上全く勧めない
問題は2.xの逆引きレシピ本のいいのが現行では無いことだが レシピ本には、そんな長いコードは載っていないから、
動かなければ、自分ですぐに修正できるのでは?
数値を3桁ずつ、カンマ区切りにする関数は、参考になった
Railsの1日後とか、良いよな。
1.days.from_now >>248
すいませんが若気のいたりということで大目にみてもらえませんか?
日本のScala界では貴重な人材なので。
それよりMatzの講演について話そうぜ!
http://srknr.hatenablog.com/entry/2017/05/20/235839 >>252
やっぱり2.x系のもので無いと互換性が厳しいですか・・・・・・
新しいレシピ本が出るまで見送りたいと思います Ruby で文字列が英数字とハイフンのみで構成されていることの確認 (バリデーション) を正規表現を使わずに実現するのに、
string.delete("a-zA-Z0-9-").empty?
っていうやり方でとりあえず間に合わせてるんだけど、他にスマートな書き方ある? 正規表現を使わない理由がわからないと
何言ってもそれはなしでと言われそう >>256
ぱっとリファレンス見てきたけどcountに条件逆で渡した上で0か調べるってどうかな ascii_only?ってメソッドあるけど完璧な動作ではないよなぁ多分 >>258
おお、情報ありがとう!
こんな感じかな。
たしかに処理的にだいぶ分かりやすくなったかも。
string.count("^a-zA-Z0-9-").zero? >>257
どうしても正規表現を使わないと実現出来ない処理でもないんじゃないかと思ったのと、セキュリティ的にチェック漏れが怖いっていうのが理由かな。
正規表現に詳しくて、間違いない自信があれば正規表現でも良いんだけど、俺にはその自信がない。。 >>259
たしかに ascii_only? だとやりたいことに近いけど、アンダーバーとかその他記号も OK になっちゃって、希望する判定基準とは少し違ってきてしまうんだよね。 >>261
deleteの独自ルールも不安だな
どっちにしろちゃんとテストコード書いとけとしか 「ヒットしてほしい正規表現にマッチするかどうか」で書かれてたほうがよっぽど漏れがないし間違いがないしコードとしても明瞭で安心すると思うがね
countの引数の仕様は知ってる? あれってtrというUNIXコマンドと一緒なんだよ
アレに頼って長々書かれるよりは正規表現のほうがいいな俺は OK な文字列以外はどんな含まれ方をしていようと一概に弾くように、delete とか count で OK な文字列だけを列挙する指定の仕方を考えたんだけど、よく考えるとそれでも抜けがある可能性は依然として否定できないわな…
正規表現を使うか使わないかは宗教的な話になりそうだけど、テストコードを書けっていうのはまさしくその通りだわ。 JavaScript では正規表現だな
2回以上、同じ正規表現を使うなら、
コンパイルを1回だけして、使いまわすことで、やや速くなる evenArry, oddArry = [], []
ARGV.each_with_index{|arg, i|
evenArry.push(arg) if i.even?
oddArry.push(arg) if i.odd?
}
evenArry.zip(oddArry){|x, y| print [x,y] } if evenArry.size < oddArry.size
oddArry.zip(evenArry){|y, x| print [x,y] } if evenArry.size >= oddArry.size
puts
このコード、Pythonのzip関数は短い方に合わせてくれるのに、rubyのzipメソッドが長い方に合わせて、
短い方の不足分に勝手にnil入れるから、長さ比べて短い方でzipメソッド使うようにしてるんだけど、nilを省くメソッドあったら一行浮く。
何か良いメソッド知りませんか? >ruby tes.rb 11 22 33 44 55 66 77
["11", "22"]["33", "44"]["55", "66"]
という出力をしてほしいだけなら
ARGV.each_slice(2).take_while{|e| e.size == 2}.each{|a| print a} >>268
おお!
次世代言語スレで紹介して貰ったやつのエラー出ない版ですね?
そっちが動くならそっちが良いですね。
>>269
compactですか。
まさに小さい方に合わせるっぽいメソッド名。
両方コードで試してみます。
ありがとうございました。 pg gemをbundle installするとこける
gem install では通るんだけどなんでかな rubyからWin32APIのGetLastErrorを使用したいんだけどエラーが出てしまう。
どうしたらいいか教えてください。。
module WIN32API
extend Fiddle::Importer
dlload 'C:\\Windows\\System32\\user32.dll'
extern 'short GetKeyState(int)' #こっちはOK
extern 'char* GetLastError()' #こっちはNG
end
--以下エラー
cannot find the function: GetLastError() (Fiddle::DLError) 「user32.dll getlasterror Win32API」で検索!
Library - Kernel32.lib
DLL - Kernel32.dll
には、有りそうだけど、user32.dll には、あるかどうか分からない
DllImport("kernel32.dll", SetLastError = true) >>273
早速ありがとうございました!
無事読み込めました。。。
参考までに修正版のコードはこちらです。
module WIN32API
extend Fiddle::Importer
dlload 'user32.dll','kernel32.dll'
include Fiddle::Win32Types #DWORDとか使えるようにする
include Fiddle::BasicTypes
extern 'DWORD GetLastError()'
end
WIN32API.GetLastError すみませんもう一つ教えてください。
SendInputを使って最終的にはマウス入力/キーボード入力を行おうと考えていますが
うまくいきません。何がおかしいのでしょうか。。
---
module WIN32API
extend Fiddle::Importer
dlload 'user32.dll','kernel32.dll'
include Fiddle::Win32Types
extern 'int SendInput(int,void* ,int)'
extern 'DWORD GetLastError()'
MOUSEINPUT=struct(["DWORD type","int dx","int dy","DWORD mouseData","DWORD dwFlags","DWORD time","ulong dwExtraInfo"])
end
module SendKey
INPUT_MOUSE = 0x00000000
MOUSEEVENTF_ABSOLUTE = 0x00008000
MOUSEEVENTF_MOVE = 0x00000001
end
input = WIN32API::MOUSEINPUT.malloc
input.type=SendKey::INPUT_MOUSE
input.dx=500
input.dy=500
input.dwFlags=SendKey::MOUSEEVENTF_ABSOLUTE|SendKey::MOUSEEVENTF_MOVE
p WIN32API.SendInput(1,input,28) #出力:0 備考:sizeof(MOUSEINPUT)=28
p WIN32API.GetLastError #出力:87(パラメータが間違っています。)
----- 今回の件と関係あるかはともかくWIN32APIってもう非推奨じゃなかったっけ? Win32API非推奨なんですね。。
ググってみた感じいまはWSHSHELLとかでしょうか?
ちなみにRubyは64bit版を使ってました。。。 非推奨とか言い出したらそもそもWinでRuby自体がアウトだから気にしなくてよい >>272 >>274
そもそもGetLastErrorは最後に呼んだAPIのエラーだから
rubyみたいに前後の行の間で何呼ばれるかわからん環境でまともなエラーとれるとは思えない 意図するライブラリがロードされていない or 意図しない関数がコールされているんじゃないか?
C/C++で同じ動作をするコードを書いて何のファイルのどの関数が呼ばれているのか調べた方が良さそうな気も
Rubyから呼ぶ場合に限らずその辺の管理は全てプログラマ任せの上に純正のSDKやIDEの支援も得られないしな
あとWindowsAPIを叩いて作業するならWindowsSDKはほぼ必須 >p WIN32API.GetLastError #出力:87(パラメータが間違っています。)
カッコを付ければ?
p WIN32API.GetLastError() case文でgetsを使って入力を受け付けたいとき日本語ってどうするんです?
hand = gets.chomp
case = hand
when "あ"
puts "グー”
.
.
.
else
puts "反則"
end
例えばこんな感じの簡単な文だけど
"あ"の中身の部分を1にしたり
そもそも .to_iにして数値にしたりすると
ちゃんと働いてくれるから
そもそも日本語入力はなにかいるんじゃないか、もしくはできないんじゃないか
と思っていて、検索してもわからんのです print "input anything and Enter> "
input = gets.chomp
puts "default file encoding:"+ __ENCODING__.to_s
puts "actual external encoding: " + input.encoding.to_s
実行結果 (Windowsコマンドプロンプトで単に ruby test.rb と実行)
input anything and Enter> nya-
default file encoding:UTF-8
actual external encoding: Windows-31J
ということで文字列のエンコーディングが違うので別物だと思われてる
Windows-31Jの「あ」とUTF-8の「あ」は比較上別物になる
irb> str = "にゃー"
=> "にゃー"
irb> str.encode("Windows-31J") == str.encode("UTF-8")
=> false
「Rubyの文字エンコーディング」について調べて自分で理解するんだ
これはここでちらっと「おまじない」を述べても逆に泥沼になるぞw >>285
ごめん=はいらんね
まちがえて打ってしまった。それは元の方では書いてない
>>286
よくわかんないけど、とりあえず先に進むよ。
逆に今、文字エンコーディングについて調べても理解出来る自信がないし、
おまじない、もいづれ出てくるかもしれない。
わいみたいな本物初心者にも答えてくれて
ふたりともありがとう。 しまった「いづれ」ではなくて「いずれ」だった、なんかこういうミスのほうが
恥ずかしい・・・
しかし文字エンコーディングの件で気になったけど
それは文字コードを指定している場合でも・・・?
なんか最初にそれこそ、そこをおまじないと言っているのかもしれない
けど、# coding: utf-8
みたいなの書いとけって言われるじゃない。
文字化けしないようにとか、そんな感じで。 狭義的にはスクリプトファイルのエンコーディングと外部入力文字列のエンコーディングを揃えないといかん
STDINのエンコーディングをスクリプトファイルのエンコーディングに合わせるのが楽だと思う
ruby -E UTF-8 hoge.rbでスクリプト起動しろ
getsで入ってくる文字列が全部UTF-8になる >>289
ちょっとわかんなかった。
色々言っていることの推測はしたんだけど、
そんなファイルねーよ!からはじまり
そんなエンコーディングネーム知らんといわれ、ランタイムエラーといわれ
あ、コマンドプロンプトって文字コードシフトJISとかいうのだから
あかんのかな?って思って
utf-8にしてみたけど、判定がelseに行くのだった。
あははは。
わざわざありがとう。でも、私初心者だからだめみたいだぜ。
おまえなんかwhile文の勉強でもしてなさいってことだと思うわ。 コマンドプロンプトなら"chcp 65001"しないと駄目なんじゃない?
ちょっと手許にwindows機ないからわかんないけど cmd exe の chcp65001 はバグがあって使い物にならない VSCode使っている人いない?
デバッグモードでのgetsのって値入力処理はどうすればいいのか分からなくて困っている。 STDIN/STDOUTのねじ曲げは現行のIDEでVSCode「でだけ」できない
素のRubyではできるのにね
require 'stringio' if $DEBUG
$stdin = StringIO.open("にゃーん".encode("Windows-31J")) if $DEBUG
puts "You are a cat" if gets.chomp == "にゃーん".encode("Windows-31J") 極薄view用意して、そこだけ手動でテストすればいいよ コマンドプロンプトは、Windows-31J, CP932 か
PowerShell, PowerShell_ise は、UTF-8 じゃないの? windowsで真面目にRuby使うならコマンドプロンプトのままじゃ辛い
コンソールエミュで良さそうなの探して入れると良いよ いやVirtualBoxの上のLinuxにSSHクライアントで接続した方がいいよ 出力はワイド文字に変換してくれるのでpythonみたいにchcp 65001しなくていいから楽ちん。
入力は気を利かせてくれてないから、$stdin.set_encodingで設定したほうがいいかな
あとはARGVとかDirで取得するファイル名とかをデフォルトでUTF-8にしてくれたらうれしいな
全般的にWindowsに気を利かせてくれているけど、そのノウハウをまとめたページがないから
不親切に見えるだろうな ネットにはデマ情報がいっぱい残ってるので正しい情報をメモ
cmd で UTF-8 使える方法 (chcp 65001 について) ttp://nazochu.blogspot.jp/2011/08/blog-post_26.html
mintty ttp://dogmap.jp/2011/11/15/mintty/
mintty ttp://tanakh.jp/posts/2011-11-15-windows-terminal.html
↓
色々紆余曲折あったけど Git インスコして GitBash 使うのが一番楽っぽい
https://git-for-windows.github.io/ >>301
こういうWindows版を使ったこともなさそうな人がおせっかいで書く情報が迷惑でしかない 今回の民法改正、ソフトウェア受託開発の場合、(検収後ではなく)バグ発見後1年瑕疵担保責任があるということで、地獄かよ、と思ったが、
元々問題が起きがちな受託案件がビジネス的に成立しなくなることで強制的に業界再編につながるなら良いことかもと思うようになった。
一部で地獄を見ても。
https://twitter.com/yukihiro_matz/status/869061879389343744 契約自由の原則は消えないんだよな
http://www.techvan.co.jp/media/quality/civil-code
rubyとかだと小さいシステムやプロトタイプが多いだろうから
契約に漏らさず明記しておくのが大事か
5年とかもう使えないようなバージョンとか出てきて作り直しになりかねない 個々の契約のほうが優越なのだからふつうはそんなに問題は起きない
最低最悪のラインを決めただけ
いちばん騒いでるのが働いたことのない人といういろいろ縮図なやつだ >>309
最低最悪ではなく、平均では?
労働基準法みたいな契約より優先されるものが最低最悪で。 客が瑕疵担保責任法の法改正を知ってくると思うから、今後5年無償保証をお願いされるだろう
営業がそれでも仕事を取ってこれるか?たぶん無理だろう。無限の直していたら赤字になる。
こういう保守に弱い言語、ころころ仕様が変わる言語は仕事として発生しなくなってくる。
これは変わり目だ。お前らも早く逃げたほうがいいぞ。RubyやPHPなど動的言語は確実に廃れる。
保守に強い言語のみ生き残れる。 客が瑕疵担保責任法の法改正を知ってくると思うから、今後5年無償保証をお願いされるだろう
営業がそれでも仕事を取ってこれるか?たぶん無理だろう。無限の直していたら赤字になる。
こういう保守に弱い言語、ころころ仕様が変わる言語は仕事として発生しなくなってくる。
これは変わり目だ。お前らも早く逃げたほうがいいぞ。RubyやPHPなど動的言語は確実に廃れる。
保守に強い言語のみ生き残れる。 保守に強いとか関係ないだろ
結局は技術力が高かろうと
エラーは出るからな るびまの ePub 版ってないの?
たまに話題に出てたり個人的にやってる人はいるみたいだけど。 >>308
民法程度なら上書き可能……客の説得が面倒になる、という話だけど
ライブラリのバージョン変えても動くこと、という要件は突っぱねれば5年は持つわね
そりゃどこぞの誰かさんが書き換えてるのに同じように動くかどうかわかりませんわ
こっちが確認したのは特定のバージョン決め打ちでっせ、とね
>>312
C#とJavaは耐性強そうだ
Pythonはダメだ(2のを3でも対応する系クソゴミ改修案件をやった人の意見)、グイドは自称するほど互換性を大事にしねぇ
「もう二度とやりません」と、Cバインディングをぶっ壊したのととString-Bytesでいいやがったんで、次もやる >グイドは自称するほど互換性を大事にしねぇ
2から3の書き換えの感想でそんなこと言ってるのか
頭沸いてんな >>316
そんなことできるのね
チャレンジしようぜ あっ 勘違いしてた
「るびま」と書いてあったな
オレが関心あるのは「るりま」の方だった るりまは元が html5 になってるみたいだし、
メタ情報をちょろっと追加してパッケージングすりゃ ePub になるよ。
そんなに難しいことじゃない。 >>321
教えて欲しいんだけど
例えば2.0.0のバージョンのドキュメントをまとめてダウンロードするにはどこに行けばいいんだろ?
https://www.ruby-lang.org/ja/documentation/ 322はできることなら削除したい
もうレスを確認する為にここに来ることはない windowsでirb使うとき何か一文字打たないと
↑キーで履歴が出ないんだけど何とかならない?
ググってreadlineとかbinに入れてみたけどダメだった マジか。>>325はActiveScriptRubyだがいろいろ試した結果(環境はWin7 32bit)
ActiveScriptRuby 出ない
+ readline.dll 出ない
RubyInstaller 出ない
+ readline.dll 出る うちのRubyInstaller2(Win8.1)ではirbやpryは大丈夫
jirb(JRubyのirb)は何か一文字打たないと↑が反応しない
あとruby -pe ""も何か一文字撃たないと駄目な模様 これからrubyをやる意味ってなにが考えられますか? 過去に一度だけプチブームになったことがあったんだけど
その原因と、そのあと下火になった理由を探求するとかかな
駄目と分かっている人は初めから駄目だよ、って言ってたんだけど
残念ながら世の中の全員が賢明というわけではなかったから
やはり、一過性のブームとか、時代でとか、そういうのはあるもので
今から追体験したければRubyはよい選択だと思うよ
ただ、さっきも書いたけど、全員が間違ったわけじゃないんだよ
半数以上かそれ以上の人はダメって初めから言ってたんだよ
あとはMarzの勉強かな
あの人、頭の弱い人を騙すことに関してはものすごい技術を持ってるから
そういうのに興味があればって感じ
具体的には「モノ」を中心に考えさせて、大事なものを見えなくさせたり
一見効率的に見えて実は遠回りっていう「局所解」に追い込んだりするその手法
おもしろいのはRuby3.0をどうするのか、なぜか今本人も困ってるところ
人を呪わば穴二つって言うように、他人を追い込むツールを作ってるつもりで
自分自身もまた追い込まれるってのは在るみたいね >>329
日本人の場合
あらゆる言語の中で一番易しいプログラミング言語
(子供用のおもちゃを除く) どうしてもやりたいならjruby+jrubyfx楽よ >>333
rubyでは向いてないからGUIやめとけ
pythonでGUIやるといいよ >>330 の文章とか論理展開とか見てて何かに似てるなーと思っててずっと思い出せなかったが
やっと思い出した
これって、「ゲンダイ」の論調に似てるんだ!w まつもと氏は合理主義のようだけどGUIにはそういうのは及んでないんですか? >>339
まつもと氏の行動原理は「IT土建屋死ね」
だからWinでのGUI開発でRubyが広く使われるようなことはあってはならない >>329
普通にメジャー言語だから
そのメリットはあると思うけど
他のメジャー言語でも別にいいが
日本語情報が豊富なのが良い >>333
Tkが(旧)標準
見た目が簡素だが覚えやすいので
最初はこれがオススメ >>330
何がダメでどうすればいいのか言わないなら
たんなる代替なき批判に見える
あとMarzってなんだよ! >>339
Tkを標準にしたのは合理的だと思うけど?
もしPythonに移ってもTkは使えるからね あぁごめんな
ただあの人のインタビューとか読めばわかるけど
逆張り逆張り言ってる
あの人自身もRubyの筋が良いとかメインストリーム的な思想であるとは
考えてないんだよ
ただ、自分の人生の中で逆張りした場合にうまくいくことが多かったので
逆張りし続けているんだとか
だからRuby3.0でも逆張りの一種として
静的型の機能は導入しない方向を検討しているんだろうな
ただそう何度も逆張りが上手くいくとは思わないし
逆張りはしょせん逆張りだろ?あだ花というかなんというか
そういうこともあって結局Rubyはプチブームで終わった現状があるわけだし
変なことして注目を集めることはあってもそれは一過性だよ、芸人じゃあるまいし
しかも逆張りしたときに自分にとって都合がよいことが多かったってだけで
使い手のことは別に考慮されてないんだよなー >>345
あいかわらす週刊誌レベルの根拠ない批判しかできないんだなー 普通に考えたら静的型を導入しない理由は全くないんだよ
ただ、あえて理由を挙げるとしたら、最初Rubyは動的型で出発したから
いまさら静的型の機能を入れ込むのは非常に難しいってことなんだよ
過去との互換性もあるし、そういうコミュニティーになっちゃってるしな
もちろんこれは動的型に「逆張り」した結果なんだろうけど
あとあと苦しいわなー >>347
もうちょっと言語について勉強してから長文で語ってくれないかなー
正直今のレベルではゲンダイにも載せてもらえないレベルのただの妄言だしさ ただここまで静的型が「ハマる」とは俺も想像してなかったし
Matzも想像できなかったんじゃろな
何だか知らないが、静的型はすべてにおいて丁度よい感じになってるんだよな
神がかった偶然がいくつも重なってるかんじで、最適解になってる
この牙城はなかなか崩せないよ、一つや二つのメリットじゃないからね
なんでこんなに上手くいったんだろうね >>347
>普通に考えたら静的型を導入しない理由は全くない
そんなことない
Python、JavaScriptなど
メジャーな言語が導入してるんだから まず動的型の根本的な慢性的ともいえる文法上の悩みの種は
どうにかして変数宣言をなくしたい欲求にかられるって点にある
動的型であるから変数宣言に型を書く必要がないので
なんとかして変数宣言自体をなくしたいっていう
まぁ分からなくもない
しかしながら変数宣言には変数の型を決める役割があるのとは別に
「変数のスコープを決める」という役割もあったわけで
安易に変数宣言を削除してしまったRubyやPythonのような言語は
大体において変数のスコープが奇妙なことになっているのじゃ
例えばRubyにおいては「@」であったり、ブロックローカル変数であったり
Pythonであればnonlocalであったり、なにか場当たり的だし
実質的な変数宣言の一種のような気もする
あと、if文や繰り返し文の後ろに続くブロックなどでスコープを持てなくなって
しまったりもな、なんせ、文法上、宣言を代入で代用しているから
代入と宣言の区別がつかないような状態で、かゆいところに手が届かない
だから結局、実は変数宣言は有ったほうが良いんじゃね?ってなって
ならついでに型も書けばってなって、今はさらにこれに加えて
型を書きたくなければ型推論使えば?ってことにまでなっちゃってる
型推論使えば変数宣言をする手間はほぼなくなるし
スコープを細かく制御できるようになるんだから
もう変数宣言が無いことはメリットにならなくなってしまった
まぁこんなのは氷山の一角でジャブだ
コンパイラによる型チェック云々言いたくなるところだがそれ以外にも
文法上の問題としてこういうのもあるということ
その他にも実行性能であったり、ドキュメントの自動生成であったり
リファクタリングの容易さであったり
IDEの入力補完etcのサポートのしやすさであったり
人間も型があったほうが読みやすいんじゃないかとか
結局コメントで型を書いてるんじゃね?とか
色々あるわな
なんか複合的なんだよ
動的型がここまでケチョンケチョンになるとは流石に想像できなかったわ ただ動的型にも良い点があって
「処理系の実装が楽」
しかしこれも実用性を考えて突き詰めていけばJSのV8エンジンのように
加速度的にむしろ大変なことになるというね
とにかく旨みが無い LISPみたいに動的型でも宣言ある言語の方がスコープが分かりやすい 動的型付けでダックタイピングみたいに
組みやすくなってるメリットがあるから
実際Ruby以外にもPerl、Python、PHPの
P言語はみんな動的型付けになってる
小規模Webサービスのサーバサイド言語
としての用途には動的型が合ってる >>357
何か勘違いしてるみたいだけど、ダックタイピングっていうのはオブジェクト指向言語の実装手法の一つで、プログラマにメリットなんかないよ
特にRubyだと多態をダックタイピングに任せるのは嫌われる傾向があって
無意味でも空のメソッドを定義しておいて継承したりするし ちなみに、Rubyでダックタイピングが好まれないのはドキュメントよりもコード読めという文化のせいだと思ってる
ダックタイピングだと「このパラメータにはアヒルを渡してくれ」じゃなくて
「このパラメータにはアヒルのように歩きアヒルのように鳴くものを渡してくれ」といちいちドキュメントに書かなきゃいけない
(静的型になる前の)Pythonはドキュメントを重視する文化だから実際そういうドキュメントの書き方をすることもあるんだけどね
Rubyだとそれを避けるために無意味とわかっていても空のスタブとしてアヒルクラスを定義しておいて「アヒルを渡してくれ」と書くわけ >>352
Rubyが動的型って言うより、
型宣言不要と特徴付けるのがええんちゃうかなぁ。
変数宣言なしは良いとして、変数のスコープが判りにくくなったってのは、
そうかも。 ダックタイピング任せはメンバの追加がしづらいのも問題
静的型ならインターフェースにメンバを足せばコンパイルエラーになるからエラー箇所を直せばいいが
完全なダックタイピングだと手掛かりがなく修正漏れが発生しやすい
とりあえずスタブを継承させるようにしておけばメソッドを足してもメソッド未定義のエラーにはならない >>358
>Rubyだと多態をダックタイピングに任せるのは嫌われる傾向
>>359
>Rubyでダックタイピングが好まれない
勝手に決めんなって
それはJavaみたいな静的型の発想で
Rubyを使おうとする奴の話だろ
インターフェイスの継承不要なのが
ダックタイピングのメリットだから Rubyのスクリプトをバックグラウンドで動かすにはどうすれば良いでしょう?
>ruby someScript.rb &
と実行してもTerminal.Appを閉じるとrubyも終了してしまいます。
OSはmacOS Sierraです。
以前、HP-UXで作業して居た時には、xtermを閉じても、logoutしてもバックグラウンドで動き続けてくれました。
launchdとかいうdeamonをコントロールするコマンドがある様なんですけど、これを使って動かさないといけないのでしょうか? >>365
レスTHX
terminal multiplexerを使えば良いのでしょうか?
someScript.rbを動かすには、someScript.plistを書いて
>launchctl load someScript.plist
ってやるらしいのですが、plistファイルなんて書いた事ないぞぉ。
書き方がよく判らん。
なにか、勘違いしてたら、ご指摘を! >launchctl load a.plist
/work/a.plist: Invalid property list
property listの書き方がよく判らん。
ただのxmlファイルじゃないのか?コメントの放り込み方が悪いのか?
無効なproperty listだとぉー? やったぁー。動き出しタァ。
Terminal.Appを閉じても動いてる。ふぅー。 俺的忘備録
必須key、3つ
<key>Label</key>
<key>ProgramArguments</key>
<key>KeepAlive</key>
3つ目のやつを<true/>にしないとbackgroundで動かん!
さらに、最後のはOnDemand=falseと等価なのだが、
OnDemandはshould not use!だって。
man launchd.plistに詳細が記載。 Invalid or missing service identifier man lauchd.plist
して/stdout
すれば出て来た。 >>364-368
Linux では、プロセス間に親子関係がある。
端末から、Aプロセスを起動すれば、端末が親で、Aが子
「親亀こけたら、子亀もこける」から、端末が終了すると、Aも終了する。
端末から、SSHで、リモートサーバーへアクセスしても、
接続断などで、リモートのシェルが終了すると、
シェルから起動したコマンドも終了してしまう
リモートで、tmux をずっと起動させておけば、コマンドは動き続ける
他には、サービス・デーモンのように、プロセスの親をなくす(デーモン化)
ptree コマンドで、プロセスツリーを見てみ >>364
マッキンは知らんので、Linuxだとして。
おそらくプロセスを切り離さないと。
nohup、disownとかぐぐれ。 >>374
そんな面倒なことしなくても
hoge.app &
でよくね? >>376
それやっても親子関係が残るからだめだっつってるのに文盲か? >>375
THX
mackin’でもnohup使えた。
launchctlなんて使わなくて良さそう。
>>376
hoge.app&ではterminal.appの終了時にhoge.appがkillされちゃうんだよねぇ。
mackin’では。Linuxでは違うのか?
最近LInux触ってないのでよく知らんのだ。 pstree コマンドで、プロセスの親子関係をツリー表示して、見てみれば?
結局、Ruby を学んでも、OS を学んでいなければ、
システム系のプログラミングは出来ない
だから普通、プログラマーよりも、LPIC資格を持っている、
サーバー構築・運用者の方が、給料が高い × システム系のプログラミング
○ 運用系のプログラミング >>379
system callを知らなくても、まあ、一部知ってるけどRubyスクリプト、スマホアプリは作れるよ。
OSを学ぶって、言うけど、それ幅が広すぎ!
まあ、パタ・ヘネ位は読んでます。 まあ、プログラマーで、プロセスに親子関係があるとか、
cron の使い方とか、tmux とか、知っている奴はいない
cron あるあるとか、SSH あるあるとか、Linuxでは定番 >>382
プロセスに親子関係がある。コマンド実行時にshellがforkされるのは知ってたんだけど。。。
以前はnohupなんて使わなくても、
>someCommand &
とすれば
>nohup comeCommand &
した事になったのに!
いつから、nohupなんて現れたのだ? どうやらbashは終了時に起動したプロセスにSIGNHUPを送るらしい。
俺が昔使って居た、csh, tcshではそんな事はなかったのに!
時代は変わったんだな。 >>384
ああそれか
なんでbashみたいな糞が流行ったんだろ zshってのが便利だってのを、webの記事でよく見るけど、
どうなん?
bashが糞なら、zshを使って見るかな。
zshもbashの親戚みたいな動きをするなら、zshも糞って事になるけど。 >>387
zsh もデフォの振る舞いは bash とおなじ。
設定で setopt nohup すれば、hup 送らなくなる。
bash でも huponexit オプション外せば送らなくなる。
ソフトウェアのマニュアルも読まずに糞とか言うのは、
自分は所詮そのレベルの人間ですと言ってるようにしか聞こえないよ。 >>388
はい!
無闇に糞って言った事を、反省します。 >>388
うぅーん。
macOS Sierraのbashにもshopt huponexitってのがあるが、
どうも、最初からoffになってるにも関わらず、signhupを送ってる。
ためしにonにしてみたが、bash終了時にbackground実行しているプロセスが死んでしまう事に、変わりなし。
nohupコマンドを付けないと、background実行できないみたいだ。 >>390
bash の終了を exit じゃなくてウィンドウ閉じるでやってない?
明示してないのにバックグラウンドで動きっぱなしになっていて欲しいユースケースってどんな時なの?
nohup/disown の方が好きな自分からは想像できないわ。 >>391
Scrapingスクリプトをproxy経由で動かす場合、proxyのレスポンスが悪いので、数時間掛かります。proxyは10箇所を順に変えながらScrapingします。
ruby someScript.rb &で即backgroundで動いて欲しいです。
まあ、慣れればいいだけかもしれんけど、nohupっていうprefixが必要なのは、ちょいとなぁ。 >>391
Terminal.appは動かしッパでも構わないのですが、
Vim7.4, Vim8.0が時々落ちます。その際、Terminal.appも巻き添いなんです。
すると、Scrapingも落ちちゃって困ってたのです。 Vimが落ちるのはterminal typeがxterm-256colorが悪さをしていて、ansiへ変更がwork aroundだと聞いて、今様子を見ているところです。 >>393
vim 上の shell で実行してるの?
tmux か screen の上で動かすか、あきらめてnohup 書く癖を身につけるしかないかと。 >>395
nohup書きます。
時代はnohupなんすね。
macOSアプリ作り始めたけど、AppKitってUIKitと似てるけど違うので、混乱するわぁ。 >>392
> 即backgroundで動いて欲しいです。
冷静になったら、そうでないほうがたしかによい、と思うはず。
誤ってbgにしたり、bgにしたまま忘れたりした状態でログアウトした場合のリスクを考えれば。 むしろ、WSH で、Excel など外部アプリを起動すると、Excel のプロセスが残り続けるから、
どんどん、Excel のプロセスが増えていき、
これらをどうやって終了するのか、皆苦しんでいるんだが 初心者です、自作の汎用関数を定義したのですが、いちいちスクリプト内にコピペするのが面倒なので
外部ファイルにして冒頭でrequireすることにしました。
ですが、ここに具体的なファイルパスを書くと、ファイルの設置場所を変えたい場合に問題があるのでパスは書きたくないです。
require 'myfunc'
と簡便に書ければいいのですが、どこに置けばいいでしょうか? 現実の開発ではきちんとバージョン管理するのでフォルダの構成変更なんかそんなに頻繁にやることではない
だからリポジトリを分けるほどでもないなら気にせずパス決め打ちでいい
独立性と再利用性が高いものであればリポジトリを分けてgemにする rails で、自作ライブラリの、autoload なら、
lib/モジュール名/クラス名.rb
lib/foo/bar.rb
module Foo
class Bar
ファイル名は小文字で、単語の区切りは'_'に変える
class FooBar
lib/foo_bar.rb >>400
“終了しない excel application”でググったら出てきたけどこの仕様は罠だろ・・・ >>409
COM経由で起動させてるんなら自動で終了する方がきもちわるい >>411
自動化処理に使ったプロセスが不要になっても残りっぱなしの方が気持ち悪い >>404
モジュールファイルへの相対パスなら確定できる場合はrequire_relative。
特定ディレクトリの設定だけなら許容できる場合は、そのディレクトリを$:に追加。 瑕疵担保責任(かしたんぽせきにん)
瑕疵担保責任のポイント
民法改正で事実上期限が「無制限」になった
バグや設計のミスなどは、瑕疵担保責任
納品物に不具合があれば損害賠償を請求される可能性もある
不具合を指摘されたらすぐに行動をとるべし
軽微なミスでも先延ばししない
http://www.atmarkit.co.jp/ait/articles/1706/26/news014.html
http://itpro.nikkeibp.co.jp/atcl/news/17/052601508/?rt=nocnt
改正法では欠陥に気付いてから1年以内にITベンダーに通知すれば、
通知後5年以内は修正や報酬の減額などを求められるとしている
全ベンダーが泣いた民法改正案を解説しよう その1
http://www.atmarkit.co.jp/ait/articles/1609/14/news009.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_2.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_3.html
ポイント1:修補や損害賠償、契約解除の期限がなくなる
従来あった「瑕疵担保期間は引き渡しから1年」という考えはなくなる。
条文にある通り、注文者は成果物が契約の目的に適合しないことを発見したら、
その「発見したときから1年以内」ならさまざまな請求ができる。発見が10年後なら、
11年後まで請求可能なのだ。
もっとも、現実のユーザーとベンダーの関係でも、たとえ契約書に「瑕疵担保責任期間は納品から1年と」明記されていても、
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、無償で改修するだろう。 366 :nobodyさん 2017/05/29(月) 16:07:39.16 ID:6v4UcGhE
今回の民法改正、ソフトウェア受託開発の場合、(検収後ではなく)バグ発見後1年瑕疵担保責任があるということで、地獄かよ、と思ったが、
元々問題が起きがちな受託案件がビジネス的に成立しなくなることで強制的に業界再編につながるなら良いことかもと思うようになった。
一部で地獄を見ても。
https://twitter.com/yukihiro_matz/status/869061879389343744
367 :nobodyさん 2017/05/29(月) 16:28:06.55 ID:6v4UcGhE
ニュース - 改正民法が成立、「瑕疵担保責任」などシステム開発契約に影響大:ITpro
http://b.hatena.ne.jp/entry/itpro.nikkeibp.co.jp/atcl/news/17/052601508/
372 :nobodyさん2017/05/29(月) 19:10:37.12 ID:???
Railsでシステム作って納品する
↓
Railsはマイナー、メジャーのアップデートが半年以内に必ずある
↓
客がアップデートする。アップデートによるエラーやバグ、動作の不具合に気づく
↓
気づいてから1年以内に通知すれば、5年間無料保証ゲット
↓
つまりRailsがアップデートするたびに、無償の修正作業を発生するということかな
376 :nobodyさん2017/05/30(火) 09:20:20.09 ID:L5po86sS
>>378>>379>>375
客が瑕疵担保責任法の法改正を知ってくると思うから、今後5年無償保証をお願いされるだろう
営業がそれでも仕事を取ってこれるか?たぶん無理だろう。無限の直していたら赤字になる。
こういう保守に弱い言語、ころころ仕様が変わる言語は仕事として発生しなくなってくる。
これは変わり目だ。お前らも早く逃げたほうがいいぞ。RubyやPHPなど動的言語は確実に廃れる。
保守に強い言語のみ生き残れる。 > RubyやPHPなど動的言語は確実に廃れる。
軽々しくこういう断言する人間の言葉は話半分どころか1/4以下にして聞け、ってばっちゃが言ってた Rubyが現在進行形で廃れていってるのは確かな事実だけどね ぶっちゃけて言えば、意味論的には普通なのに文法がぐちゃぐちゃすぎて使いづらい。
Perl のあまりの一貫性のなさに Ruby を試したりしたこともあるが、
多少はマシって程度でうんざりするような無茶苦茶さを指向していることにかわりない。
parse.y が黒魔術の塊だというのは聞いていたが、実際に見てみると常軌を逸している。
せっかく yacc を使ってるのに純粋な LALR として解釈できないようなわけわかんないクソが埋め込まれてて、
もはや統制が取れてない。
mruby をベースにして拡充していった方がいい気がする。 使いづらいなら他の言語使えばいいじゃん
わざわざRubyスレ覗いてRubyの悪口書いてる暇があるなら他の言語でコード書こうぜ >>420
だからもう十年以上使ってない。
事実として文法規則のごちゃごちゃしたところはあるという話だよ。
そして事実として私はそれを気に入らなかったという話だよ。
よくある場面を短く書けるとか人間の一般的な感覚に合わせたりもした結果だというのはわかっているし、
Ruby に向いた用途があるのは知ってるよ。
ただ、それの行く先には実装上の行き詰まりが生じそうだという懸念だ。 >>421
うん、そんな人間がなぜRubyスレを覗いてて、なおかつ悪口を書き込むのか
はっきり言えば粘着質で気持ち悪い Rubyは読み書きしやすいから使ってる
規則が統一された文法が良ければLispを使えよ rubyは上級者には不満があるのかもしれんが、俺の様な素人が使うには使いやすい。
メソッドチェインも「.」でつなげていくだけだし、
正規表現使うのにimportとかしなくていいし。
でも複数行のコメントアウトは面倒。 >>422
Rubyスレに来て悪態さらすヤツってのは、喩えて言えばこんな感じだ。
最初は、良い会社だと思って就職した。
けど、外から見るのと、入って見るのとでは大違いで、内部は火の車だった。
(例:最近の東芝、タカタ)
転職活動も、うまくいかず、悪態をつかざるを得なくなる。 >>427
そうかぁ?殺人予告とかあったんだぞ!
そんでもって、本当に発生してビックリなんてのが、2chなのだ。 >>425
> でも複数行のコメントアウトは面倒。
初心者スレということでいちおうマジレスしておくと
=begin
=end
で囲むと一挙にコメントアウトできる >>429
たしか、こんなのも
__END__
以下の行は全てコメント!
うる覚えだが。 >>429
こんな糞みたいなの教えたって誰も使わない >>429
すみません。知っているんですが、
jsとかみたいに/**/とかだと入力がラクだなーって話です。 >>432
メモ帳使ってるわけじゃないんだろうからそれぐらいショートカット使えば差はない タイピングの文字数に拘るあたりが初心者だよな
(↑それが悪いことだとは言っていないし、一切の悪意は無い)
プログラミングを指の労働と捕らえてるんだよな >>429
>>430
どっちもコメントアウト用じゃないから >>435
=begin, =end は一時的なコメントアウトにはよく使うよ >>434
それはMatz批判か?
処理系を黙らせるためだけの冗長な記述を強いられることは屈辱であると神が仰っている そんなperlのパクリ機能なんかもう使ってる人いないよ
普通は#で複数行コメントアウトするようなエディタ使ってるでしょ 一時的に処理から外したいときは「そういやRubyにも複数行コメントの記述法があったななんだったかな」と思いながら
#と方向キーを交互に連打してるかコメントリージョン機能を使ってるかどっちかだな atomやvscodeだったら Ctrl + / で行コメントの挿入削除 俺は if false 〜〜〜 else 〜〜〜 end を使ってる
あるいは後置 if false
元の処理を走らせる場合は否定演算子を付けて if !false みたいにしてるなあ >>434
まったくその通りだな
「=begin」程度でタイプ数多くてダルいとか
Rubyは記述だと簡潔な方だし
コメントアウトを多用するなんて
書き方してたらそもそも筋が悪い 同じ処理をさせようとしても
初心者が書くのと慣れてる奴が書くのとですでに差が出てる
a = ['a', 'b', 'c']
b = []
i = 0
a.each {|c| b << (i.to_s + c); i += 1}
p b
↑こーいう書き方する人ほどタイプ数に拘り
↓こーいう人はもはやそこでは騒がない
c = %w(a b c).each_with_index.map {|c, i| i.to_s + c}
p c いい加減壁に向かって物言うのやめたら
誰もそれを話題にしてはいないよ >>446
それはわかる
ダメな奴は抽象度を上げようとせずに同じことを短く書こうとする
地頭悪いのをプログラミングの小手先のスキルで誤魔化してる奴にありがち >>448
そうそうw
なんかこう、間違った努力をしちゃうんだよねえ >>443
駄目でもないのじゃ。
違う処理を簡単に試してみたいときなんかは、外したい部分にも最低限の文法チェックがかかるので、事故が少なかったりな。 b = []
b << 要素
1つずつ、配列に追加していく処理だけど、
エラー処理などがいらないなら、簡潔に書くべき >>446
> 初心者が書くのと慣れてる奴が書くのとですでに差が出てる
せやね
お前が書くと
c = %w(a b c).each_with_index.map {|c, i| i.to_s + c}
俺が書くと
c = %w(a b c).map.with_index {|c, i| i.to_s + c}
これはタイプ数の問題じゃねーよ?
配列から配列に変換して入れる処理で
eachって単語がでてくることキモいって話 関数厨は、Ruby・JS のスレにやって来て、
何でもかんでも、map を使って、1行で書いてしまうからなw >>452のようなことに特に興味がなくて
正直どっちでもよくね?
って考える普通の人はRubyを使わなくてもよいってことなんだよ
まさにこれがRuby
「タイプ数にこだわるのは初心者」
「そうそうそうなんだよね〜」
とか言いながら動的型言語を使うのって最高でしょ いくらRubyのコード効率が良いと言っても可読性を犠牲にするつもりはないな
無用に行数を減らしたりオブジェクト名の長さを減らしたりはしない
そういう書き方をすると後で苦労するのは自分だし >>456
可読性というのは読むべき「単語」を減らすものであって
行数を減らすことやオブジェクト名を減らすことは
単語を減らすことにはつながらない。
例えば行数を減らしたとしても、それが 空行や { などの
カッコだけの行を減らした所で単語数は変わらない。
むしろ空行がある方が読みやすい文章となることもある
名前も、短い名前にしても単語数は変わらない
単語数を減らすと結果的に行数が減ることはあるが、
行数を減らすことは可読性を上げる行為ではない。 >>453
本当の関数厨は今時map程度に拘らんぞ。
どの言語でも採用されてるしな。
{|c, i| i.to_s + c }
のがどうにか出来ないか気になるw ちなみにさっき書いたこれ。
c = %w(a b c).each_with_index.map {|c, i| i.to_s + c}
c = %w(a b c).map.with_index {|c, i| i.to_s + c}
下の方が「単語数」が減っている。
each with index map ・・・ 4単語
map with index ・・・ 3単語 >>458
できるぞ
c = %w(a b c).map.with_index {|c, i| "#{i}c" } あ、間違った。こうなw
c = %w(a b c).map.with_index {|c, i| "#{i}#{c}" }
俺としては、なんでmapがデフォルトでindexを持ってないかのほうが気になるな。
JavaScriptならこれでいいのに
a = ['a', 'b', 'c']
c = a.map((v, i) => i+v) >>461
というかJavaScriptが特殊なんだよ
引数の数のチェックをしないからな JavaScriptはJavaの名前にあやかっただけで全くJavaじゃないって本当ですか? >>462
Rubyでもこの文脈では引数の数のチェックをしてないようですが?
%w(a b c).map.with_index {|c| "#{c}" } # 引数が足りなくてもエラーなし
%w(a b c).map {|c, i, x, y, z| "#{i}#{c}" } # 引数が多くてもエラーなし >>463
Rubyも宝石の名前にあやかってるだけで全くRubyじゃないよw >これはタイプ数の問題じゃねーよ?
と言いつつも
>可読性というのは読むべき「単語」を減らすものであって
と言うのであった
そして多くの人はこう思うのであった
「単語数と可読性ってそんなに関係あるか?」
「ここで言ってた可読性って、少々冗長であっても
読みやすいほうが良いって話じゃなかったの?」
>下の方が「単語数」が減っている。
>each with index map ・・・ 4単語
>map with index ・・・ 3単語
一単語減らせて本当によかったね
>これはタイプ数の問題じゃねーよ? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) >>468
> >これはタイプ数の問題じゃねーよ?
> と言いつつも
> >可読性というのは読むべき「単語」を減らすものであって
> と言うのであった
矛盾してないよ?
例えばコピペ、コピペを使うとタイプ数は減る。
CTRL+vとたった1文字タイプするだけで、
過去に書いたコードを複製できる。
だけど、読むべき単語は倍増していく
可読性のためにやらなければいけないのは、タイプ数を
減らすことではなくて単語数を減らすこと >>468
> 「単語数と可読性ってそんなに関係あるか?」
> 「ここで言ってた可読性って、少々冗長であっても
> 読みやすいほうが良いって話じゃなかったの?」
日本語に置き換えて考えればわかるだろ?
文章はシンプルな方が読みやすい。
ただそれだけのことなんだが。
まああと付け加えるとするならば「誰にとって」の話だな。
もちろんプログラマにとってだ。
これは数学に例えればわかるか?
数学者同士が会話をする時、数式を使ったほうがより簡単に説明できる。
数学者同士の会話で素人がわかるように数式を使わないで
会話するのは話をわかりにくくするだけ
なぜか? 数式を使えば短い単語数で説明できるから。
ここで素人でもわかるように難しい単語を使わない方がいいという意見は
数学者同士の会話で、素人でもわかりやすく話せといってるようなもん。
素人のために生産性を大きく落とすだけ プログラムを書くのであれば誰しも可読性が良いプログラムを書きたいと考える
部分があるかもしれないが、そんなとき、単語数などというものの脳内に
占めるウエイトは、ほぼ無い
「あのプログラムのソースコードは単語数が少ないから非常に読みやすかったよ〜」
なんて会話は、無い
というと、じゃあ単語数が多いほうが良いのか?と言い出すかもしれないが
そもそも単語数など論点にするのがピンボケ
労力の方向がおかしいし、論点がおかしい >>472
> 「あのプログラムのソースコードは単語数が少ないから非常に読みやすかったよ〜」
> なんて会話は、無い
無駄がないとかシンプルっていう言い方をしてるはずだよ。
無駄がないとかシンプルとはどういうことか?というと
それは殆どの場合単語数が少ないことを意味してる
単に言い方の違いだねw ついでに言っておくと、俺は別に冗長に書けばわかりやすくなるとも思ってない
元の人がそのようなことを言っていたから、そういった風なことも書いたが
俺自身はそうとも思っていない
というか、そういったことは、割とどうでもよいというか
多少コードがシンプルになったぐらいで一喜一憂する気分ではない
そりゃ少しはうれしいが、それはまぁなんていうか、青信号だったラッキー、みたいな感覚
どちらかというと、1円見つけた!のほうが嬉しいかなー > 多少コードがシンプルになったぐらいで一喜一憂する気分ではない
割合で考えようか?
4単語が3単語になったら、25%もシンプルになったとみなすことができる ほらもう、プログラムの美的センスがまるでないでしょ
>無駄がないとかシンプルとはどういうことか?というと
>それは殆どの場合単語数が少ないことを意味してる
大体において、ソフトウェアの可読性について考えたとき
そのほとんどは設計に依存していると考える人は多いっつーか
まぁ普通の感覚であるところだけど
じゃあなるべく素晴らしい設計をしようって意気込んだ時
「できるだけ単語数を減らせるような設計にしよう」
なんてこと考える奴居るのかね
そんなことがシンプルさの基準になるんかね
これはコードレベルでも同じことだろう
と、俺は思っているわけ >4単語が3単語になったら、25%もシンプルになったとみなすことができる
なんでシンプルさの基準が単語数なのか本当に不思議な奴だ
プログラム書いたことないんじゃね?説 >>477
> 「できるだけ単語数を減らせるような設計にしよう」
> なんてこと考える奴居るのかね
いるだろうな
言語とかライブラリの比較みてみ?
あの言語・ライブラリではこんなに面倒なコードが
たったこれだけのコード(単語数)で書けるって
話になってるから。 >>478
> なんでシンプルさの基準が単語数なのか本当に不思議な奴だ
単語数だけじゃないけど?
それ以外の条件が同じ時。
単語数が少ないほうがシンプルなコード
それ以外の条件っていうのは、単語の長さはどちらも同程度であること
一行の文字数はどちらも同程度であること
関数の行数はどちらも同程度であること
ファイル数やクラス数や関数数はどちらも同程度であること
それ以外の条件を同じか、同程度にした時
単語数が少ないほうがシンプルなコードになる。 各「.」で何の型が返ってきているのか、実装を見ずとも自明になっている。
最悪でも、マウス当てただけで自明になる書き方。
これを守ってるほうが遥かに重要だわ。 >>477
同意
プログラミングの難しさは設計の難しさ
コードの美しさは設計の美しさ
それが分かっている奴は
初心者が騒ぐ観点で騒がない
真顔で黙ってる
タイプ数が少ない?よかったね
単語数が少ない?よかったねえ >>422
改善してほしいところさ。
Ruby を使いたいのに全然使いこなせる気がしない部分をなんとかしてほしいっていう要望は悪口なのか?
いや、ユーザーたちは本当にクソだと思わずに使ってんの? 既存の言語が気に入らないんなら
自分で作ってみればいいんじゃね?
クソじゃない言語とやらを >>487
使ってて言うのならまだしも、10年使ってない人間が言ってもそりゃ悪口にしか聞こえないだろうよ
しかも10年使ってないのにRubyスレを覗いてるという粘着性の高さ Java + Groovy = Kotlin
Groovy == Ruby
つまり、Kotlin は、Ruby, Groovy に静的型チェックを付けたもの。
型チェックがあるから面倒くさいが、型推論もある
または、Java に関数型を付けたものとも言える >>461
>デフォルトでindexを持って
それは思う
「with_index」って冗長だし
eachでもデフォで持ってて欲しい デフォでindex持ってたらそれこそ冗長じゃないの >>494
たしかに記述が冗長か構成が冗長かだけど別に良くね
イテレータがインデックス持っててもおかしくない
配列はデフォで配列の長さ分かるじゃん
そんなようなもん 構成が冗長ってどういうことだろう?
普通、冗長ってそういう意味に使わないよね? >>493
each_with_index は素の each に比べて 3~4 割遅い。
each のデフォルトで index を持つよりは、遅くても index が使いたいときに明示するという使い方の方がリーズナブルだと思うけど。 でもそういう使い分けこそ、まつもとさんに言わせればムダなわけだし
あのひとは機械にできることはすべて機械にやらせるべし、って言ってるからね
コンパイラはインデックスを必要としているかどうか、判断できるわけだから
勝手に使い分けてくれればよいんじゃね?
てことでRubyを静的型にしてオーバーロードで解決すればよいだろう
静的型にするとコンパイル時に型チェックをさせることができるし
最適化もかけやすくなるし、入力補完との相性もよい
機械で出来ることがどんどん増えるから
まつもとさんの機械にできることは〜の考えによく合ってるね >>499
> あのひとは機械にできることはすべて機械にやらせるべし、って言ってるからね
発言を自分に都合よく拡大解釈してない?
> コンパイラはインデックスを必要としているかどうか、判断できるわけだから
あなたの脳内のコンパイラはそれができるみたいだけど、
現状のMRIにその機能は無いよ。
> てことでRubyを静的型にしてオーバーロードで解決すればよいだろう
> 静的型にするとコンパイル時に型チェックをさせることができるし
> 最適化もかけやすくなるし、入力補完との相性もよい
機械で出来ることがどんどん増えるから
現時点で解決したいならCrystal使ったほうがいいよ。
変数の型を変えると言う言語の根幹に影響する変更が受け入れられるとは思わないけど、あなたがそんなに強く望むのならコミュニティに参加して意見が通るほどの功績を積むのが最短の道。 まあ別にeachにインデックスを渡してても良かったと思うけどね
(3..9).each_with_index {|e| p e } つーかeach_with_indexが長いから
each_iとかで良かったんじゃね?
極端な省略だけどto_iとかもあるから オブジェクト指向なんだからオブジェクトによって振る舞いが変わればよくね?
なんでこっちで使い分けなきゃならんの? 最初に each_with_index つくったのがいまとなっては浅はか
もしかしたら当時 Enumerator がなかったんかもしれんけど それとは別でeach.with_indexもあるって言うね。。。 JavaScriptみたいにcallback関数(ブロック)の引数の数で
挙動を変えられるようにできたら良いんじゃね?
つまり
[1,2,3].map(v => v) だったらインデックスなしのコードが実行されて
[1,2,3].map((v,i) => i + ':' + v) だったらwith_index相当 話をぶった切るけど
Rubyで人工知能、それもワトソンのクローンを作りたいんだけど
Ruby界隈ではどうやって人を集めたら良い?
成果としてRubyの人工研究関連の書籍がだせるし、出来上がったソフトかそのサポートでビジネス出来る可能性あるし、何かの縁で研究関連の所と一緒に仕事できるかもしれないし、政経的な所に話を持っていける実績つくしで、
良いことばかりだからやってみたいんだけど
基本、金は出したくないけど、Rubyで大きな事がやりたい >>506
流れに逆らうけど勝手にindex乗るのはきもい
Enumerator#with_index
のみならよかったとおもってる 補足しておくとJavaScriptは
function foo() {}
function bar(i) {}
function baz(i,j) {}
foo.length => 0
bar.length => 1
baz.length => 2
のように関数定義の引数の数が取得できる
const hoge = (i) => i+1
hoge.length => 1
アロー関数でも使える
function map(callback) { console.log(callback.length + ' arguments') } みたいにしておくと
map(i => i+1) => 1 arguments
map((i, j) => i+1) => 2 arguments
map((i, j, k) => i+1) => 3 arguments
みたいに関数の中で、コールバック関数の引数の数で処理を変更することができる >>508
人は金に群がるから、その性質を利用して人を集めるが良し。
ただし、若い人は、やり甲斐とか求める人も居るから、うまく説得
するのも良し。 ワトソンの解説みたいなのをRubyでコード実装して試す本、
ってのなら割と興味もたれて売れると思うんだよ
どうかな? >>508
ワトソンは厳密にはAIでは無い。
人口無能ってやつだ。基本、失敗した技術。
マーケティング的に成功している。
クイズの回答をさせるのとか、いかにも考えて居る風に装って、
実は探索を行うのだ。 >>512
Rubyで作る人工無脳、って本があったはず。 >>514
>Rubyで作る人工無脳
はじめてのAIプログラミング―C言語で作る人工知能と人工無能
こんなのもある。 しってるしってる
だからワトソンのクローンをRubyでつくるんだよ
で、あの人工無能のどこに深層学習やら何やらの技術が使われてるかRuby使って解説する本を出すんだよ >>508
ワトソンよく知らないけど、これが本当なら泥臭いソフトだと思うわ
https://wirelesswire.jp/2016/11/57683/
> しかし、それは失望と呼ぶしかないものでした。
> WatsonのAPIとして提供されているものは、「自然言語分類」
> 「検索およびランク付け」「文書変換」「会話」「音声認識」
> 「音声合成」といったもので、これは基本的にはディープラーニングとは
> 無関係な、既存技術の寄せ集めに過ぎません。もっというと、
> Watsonを有名にしたはずの、クイズに正解する機能すらありません。
> 少なくとも汎用的は皆無です。
人工無能でも膨大なデータを投入して、ちゃんとした
検索エンジンを使えば、それなりに使えるものができる。
みたいな認識。 >>512
ontrogy、オントロジーってのを学ぶのがよろしい。
AI冬の時代ってのがあって、ontrogyを追求した結果、だめだぁー、となって冬の時代に突入した。 ワトソンは人工知能ではない
だが商業的には成功している
人工知能ではないが使える技術はある
使える技術=検索エンジン
↓ってことでこれなw
本当に必要ものは人工知能ではなくて検索エンジン [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498937148/
検索エンジンを求めている客に
人工知能ですよという言葉で近づいて
検索エンジンを売る商売w >>510
引数の数は取得できるし、この話はそういうことじゃなくて、引数の渡し方の問題 先ずはワトソンを、組織的かつ学術的に解析するために、
資料集めたり研究者に聞きにいったりする必要があるんだけど、
一人でやるのとは違うから会社みたいに事務というか書類や議事といった形式をまとめないといけない
で、Rubyでやるわけだから誰かruby界隈での人の集め方知っているかな?って思いでレスしたんだ
出版社さんあたりが絡んでくれると、バックボーンができるから(確実に出版にまで漕ぎ着けられるから)うれしいんだけど 人工知能とは、Neural Net、しかも学習済みのNeural Net(スペル自信なし)なのだ。
NNの構造に、自己学習、つまり入力から入力を出力するNNを取り入れて居るところに、昨今のNNのbreak throughがある。
この認識でOK?エロい人? >>521
大学の図書室へ行ってまずは、文献調査するのが良いでしょう。
会社も交通費出してくれるでしょう。
少なくとも、二百人位の俺の会社は、文献調査に金出してくれるよ。 >>520
mapはデフォルトでインデックスあり(with_index相当)であればいいのにって話じゃないの?
そしたらwith_indexは遅いって話が出たから、
ブロックの引数を見て、indexを参照しているときだけ
with_index相当にすれば、速度は遅くならないって話をしてるんだけど >>521
あんたが、どういう組織に属し、これまでどの様な実績を積んできたか、知らんが、出版社に飛び込みで、話しをしに行ってみれば!
多分、鼻で笑われる。けど、それも良い経験だよ。 そもそも人工知能研究ってその当代の計算機性能で出来る、自動で組み合わせて問題を解く研究なんだよ
でも計算機性能で無限じゃないからできることには制限がある
だから人の手等をつかって計算量を減らしたり人手で統計を用意したりして、計算機性能の低さをカバーしてきた
それが計算機性能があがっていきできる事が増えてきた、というのが現在
ワトソンでクイズに答えられるようにまなった
人工知能研究の成果で出来た物は本来はもう人工知能とは呼ばないんだけど、
マーケティング用語というか通りが良いから人工知能ってつけてるわけなんだ ID変えてネガキャンする流れからは変えられたみたいだけど今度は人工知能に噛み付きだしたか
そんなに噛み付いて荒らすだけならrubyスレにくるな
rubyの興隆が気にくわないとか知ったことではない >>524
rubyでeachの速度なんて気にする人はwhile使うからそんなこと考えなくていいいよ Rubyで人工知能って書籍はすでにいくつかあるけど、
Rubyでワトソンを解説するってのは凄く面白いと思う
いままでワトソンの資料を個人的に集めて見てきたけど、
ワトソンをRubyで誰でも作れるようになれば、これってrailsの次のRubyブームにならない? >>528
俺もwith_indexなんかやめてJavaScriptみたいに
map(やそれに類するもの)は全てインデックスがあればいいと思ってるよ。
速度よりもシンプルさ、可読性のほうが重要 深層学習はPythonが有名だけど、
みんながみんな深層学習じゃなくてワトソンのような、技術そのものじゃなくて実用できるものを作りたいんだと思う
だったらRubyで大元の部分をつくっちゃえば良くない?って考えなんだけど 昨日と同じく、眠くなってきた。
カフェインを摂取した。 >>531
そうするとRubyで?ことになるんだけどな。
なんでかっていうと、ワトソンみたい物を作る時、
「自然言語分類」にはどのライブラリを使うか?
「検索及びランク付け」にはどのライブラリを使うか?
「文書検索」には略
「会話」には略
「音声認識」には略
「音声合成」には略
これらのライブラリをRubyで再実装するわけじゃあるまい?
再実装するならRubyで作るって話でいいけど
そうでないなら何を組み合わせるか?って話で
検索エンジンであればSolrやElasticsearchを使いましょう。
とかになるだろうし、
Rubyで作るというよりか、既存のオープンソースの何かを使って
システムを構成しましょうって話になると思うよ。
Rubyで大本の部分を作るんじゃなくて、大本の部分はあるから
Rubyでそれらをつなぎましょう程度じゃね? 深層学習という技術そのものにおいて相も変わらずPythonは有力な一つの候補だし、ネイティブな所は相も変わらずC/C++で書かれたライブラリがあるわけだけど、
(大勢の人がワトソンクローンを理解、組めるように)Rubyなら(コードを)書きやすい、書き換えやすい、(個人的に)図示しやすい
だからRubyで
という話なんだ
ライブラリの選択どうするの?本の構成どうするの?細部をどうするの?ってのは紙面に依るとしか言えない
ページをだいたいこのぐらい見積もるから、こういう構成で行きましょう、ここはこういう形で行きましょう、というのが一般的な普通の流れ
ページが無限ならそれこそRubyの内部の仕組みから全て書けるわけだけど、残念ながらページは有限、でもって何ページになるのかも未定の状態
要はページ数によって内容がダイナミックに変わってしまうという事
それに対して、ページ数やら構成を考えるのに、判断の元となるものが必要となる
個人で書ける本ならその人の持ってるあんちょこでも別段かまわないんだけど、じゃあ複数人でっとなった場合はその個人一人のあんちょこじゃ問題がある(「それって結局、君の場合でしょ?」で終わってしまう)
だからこそ決め打ちでは語れないし、判断の元になるものを"公"に"形式"をとって、(誌面に載るかどうかはおいて置いて)網羅的に準備しなければならないわけなんだ
決め打ちしてそれに基づいて必要とする資料だけを集めて済むなら万々歳なんだけど、そうはいかないんだ
で、Rubyを基本とするからRubyできてもらわなければ困る
だからRuby界隈での実動者が私を含めて必要になるわけなんだよ
自前で用意するものが出てくるかもしれないという話は、当然だけど結局は誌面やら規模やらで判断される NIH症候群にかかるのは企業の要職ばかりではない
フルスクラッチネイティブではない外部ライブラリ拡張ライブラリを「正しくない」と考えてしまうことは…どうしてもある
優れた使い心地のラッパーを作るということは元APIと主言語とUIのすべての理解と研究が必要なのだからもっともっと技術的に誇っていいのだけどもね やっぱりいつの時代も本を書く上ではページ数が全てだよ イテレータの美点は
今までつきまとってきた添え字文化を切り離したとこにあるんだよ
最大サイズ、インデックスの準備、インデックス操作、このへんは本質的じゃないよね
我々がしたいのはホントは、集まってるオブジェクト一個一個を触りたいだけだよねっていう
そのへんわきまえてるのがrubyだと思う
インデックスがデフォで付いてたりするのは原始人じみてる >>537
なるほど!
初めてeachを見た時、面食らったのを思い出した。 >>508
IBMがワトソンにどれだけ投資したかという話
タダで同じものを作るとは虫が良すぎる >>513
ワトソンは人工知能でしょ
そこらへんのボットは人工無能だけど
ワトソンはクイズに答えたり
病気の治療見つけたりして有能だから
「無能」じゃないでしょ? >>522
ニューラルネットだけが人工知能じゃないよ
NN系のディープラーニングの
取り上げられ方が目立つってだけで
定義にしちゃうのはただのミーハー >>521
人を集める、特に企業と絡むっていうのは
先に一部でも成果を公開しないと難しい
向こう側にメリットがないでしょ? >>529
>ワトソンをRubyで誰でも作れるようになれば
無理無理
誰でもワトソンは無理
誰でもボットなら可能
Rails本体を誰でも作るのは無理だろ
Railsを利用してブログを作るとかなら可能
だからAPIを使ってボットを作るみたいのなら可能 「俺がRubyを使いたいから」で金が集まると本気で思ってるのかな
まあ国内技術を使うことが重要であるとか言ってうまく騙せば公的機関から引き出せるかもしれないけど
君のやろうとしていることは本質的には不必要なガラパゴス化を招き日本の衰退を加速させるだけの国賊行為であることを忘れないように >>537
インデックスそのものと、インデックスを使ったループは別だと思うよ。
ハッシュのmapでキーが取れるように、
配列の場合はキーの代わりにインデックスってだけだと思う。
キーとインデックスって本質的には違いはないでしょ? >>543
誰でもワトソンを作るは無理でも、
誰でも既存のオープンソースを繰り合わせて
ワトソン相当を作ることは可能だよ。
ただクイズ番組とかワトソンの成果っていうのは
ワトソンというソフトよりも、大量のデータを投入させた所にあるので、
仮にワトソンそのものを入手したとしても、クイズ番組優勝とかは無理だよ
膨大なデータをひたすら入力する地道な作業が必要 >>546
>ワトソン相当を作ることは可能だよ
甘く見過ぎ
そんな簡単ならIBMより先にもっとできてた
>膨大なデータをひたすら入力する地道な作業が必要
それもワトソンのうちなんじゃないの?
ゲームからデータ抜いたらゲームじゃない
知能から知識抜いたら知能じゃない >>547
ワトソンは知識はユーザーが与えるんだよ
単なる検索エンジンと思えばいい >>543
Rubyでワトソンを解説ってのがスッポ抜けてるけど大事なところだよ >>548
ワトソンはたんなる検索エンジンじゃない
仕組みが似てる部分はあるけど
たんなる検索エンジンはクイズに答えられない
知識の与え方と引き出し方も
エキスパートシステムのうち
そこをすごく甘く見てる ネガキャンが人工知能に噛み付いてくたおかげでスレがいくらか平和になったな
相変わらずうざいけど >>549
ワトソンは無理だから絵に描いた餅だよ
Rubyで人工無能みたいな本はあるし
その辺のラインが現実的だと思う ワトソンの解説をRubyのコードをつかって行うって事が重要なのに
ってなんか話が噛み合わないなと思ったら単にレスを適当にしか読んでなかったのか
納得 >>547
> >膨大なデータをひたすら入力する地道な作業が必要
> それもワトソンのうちなんじゃないの?
そこに一般の人が考える人工知能の違いがあるんだよな。
大変な仕事をコンピュータが自動でやってくれるのと同じように考えてしまう。
人工知能は自動で知識をあつめてくれるわけじゃない。
コンピュータが利用できる形にデータ化されているものであれば
それを解析するのは得意だけど、そうなってないものを
データ化する作業っていうのは人間がやるしか無い。 >>553
あのね
WindowsみたいなOS、Googleみたいな検索エンジン、
作ったら大もうけできるのに何で寡占されてると思う?
そこまで行かなくてもRubyみたいな言語作ったら
解説本くらいは書けるだろうけど
Rubyと同じくらい普及してる日本発の言語はないよね?
なんでワトソンなら自分にもできると思っちゃうの? >>554
違う違う
データを全自動で集めると思ってるわけじゃない
その「データ化する作業」も含めてワトソンでしょって言ってるの >>550
> たんなる検索エンジンはクイズに答えられない
だからクイズに答えれるように人間がデータを入れるんだよ。
クイズの多くは知識問題。
例えば総理大臣の名前とか。
ありとあらゆるクイズの問題と答のペアを登録していくことで
クイズ専用のデータベースを作る。
ウェブサイトの検索エンジンがクイズに答えられないので
データベースががウェブサイトだから。
ウェブサイトは人間用の文章がほとんどなのでクイズのデータとしては適切じゃない
だからクイズに適したデータベースを作り上げる。
そういう作業を人間が行うんだよ。
それを行える人間は知能があるということになるし、
人間の知能を使ってデータベース化すれば
人工知能とやらはデータベースを検索するだけでいい。 >>566
> その「データ化する作業」も含めてワトソンでしょって言ってるの
人間が行う作業も含めて、ワトソンっていってる?
例えば自動車を運転する人間は、自動車の一部。みたいな >>557
それは対話UIの部分を軽視してる
たしかにエキスパートシステムも
DBの問い合わせは行うが
たんなる検索エンジンとの違いは
対話システムを備えているところで
そこが思っているほどかんたんじゃないんだな IBMのビジネスモデルは基本的にパッケージ販売とSIなので、
学習済みのワトソンのAPIを提供して終わり、だとあまり意味がないわけ
IBMとしては、クソ高いパッケージとして買わせてサポートもがっつり付けてもらって、その上あわよくば下請人員まで投入して大規模案件を作りたい
だからワトソンはセルフサービスでなきゃいけないんだよ
応用として医療分野を執拗に推してるのも、医療分野はプライバシーの問題があるのでSaaSに食われにくいという面があるの >>558
たとえばRubyは標準ライブラリまで含めて
みんなRubyとして使ってるでしょ?
Rubyのコアな言語の文法だけを模倣するなら
誰でもできるかもしれないが実用に耐えない
同じようワトソンのコアな検索部分だけなら
模倣できるだろうけど実用に耐えない
ワトソンなんて検索エンジンだから簡単だよって言うのは
Rubyなんてインタプリタだから簡単だよって言ってるのと同じ >>559
対話システムは難しいが、その反面間違っても
許されるシステムだから、ある意味簡単とも言える。
そもそも人間同士であっても、相手の言ってることが100%
通じるわけじゃない。言う側に問題がある場合だってあるしね
ある程度正しければ許されるシステムだから裏技が使える。
それは意味を理解しなくても、単語の重要度さえ判断できればいいんじゃないか?
ということ。人間とは違ったアプローチで実装できる。
対話システムというよりも、重要度判断システム
それでもいいんだよ。ある程度の正しさがあれば許されるからね。 >>560
> 学習済みのワトソンのAPIを提供して終わり、だとあまり意味がないわけ
面白い(当たり前?)のは、分野ごとに学習済みデータが存在するということ
素人(?)考えで言えば、すべての分野を学習させたスーパーワトソンを
一つだけ提供すればいいと思うかもしれないが、そうはならない。
ようは学習というのはデータベースにすぎないので、
違う業界のデータベースを混ぜて使うと、関係ないデータが
検索で引っかかるようになる、つまりノイズが多い。
そういうところを柔軟に判断してはくれないんだよね。
知能があるわけじゃなくて、単なる検索エンジンだから。 結局重要なのはデータベース(学習データ)であるし、
そのデータベースを作るのは人間の地道な作業で、
ワトソンっていうのは最終的には学習データ販売ビジネスになります。 ID:8gzuv+lo
ID:nYPV9UDZ
ID:jC9x4mB4
この三つのIDが延々ワトソンの謎を話し合っているけど、けっして誰もワトソンの構造について説明しようとしないよな
自演かこれ
誰か団子呼んでこいよ >>565
ワトソンの構造はこちら
https://wirelesswire.jp/2016/11/57683/
> サンプルのソースコードはGithubで公開されています。
>
> まずは、IBMが先端技術と考える、その素晴らしい
> "コグニティブコンピューティング"のソースコードを御覧ください。
データがないと何もできないってのがわかるだろう? 同じ話の繰り返しになるからそろそろ切り上げたいけど
Googleなんて検索エンジンだから簡単かっていえば困難でしょ?
データを含まないデータベースの問い合わせ部分だけならできても
ネット全体の規模で検索できるから普及したわけであって
それをなんでワトソンなら自分にもできると思っちゃうのか?
っていうのが言いたい まあワトソンと同等レベルのソフトウェアはできるだろう。
だけど、データベース作成の人力作業コストはどうにもならないってことだ。
データがオープンになればいいんだがねw ワトソンのことはよく知らんが、>>566のリンク先のことが本当だったとしたら
あまり面白いものではないな
それはそうとして、別の観点からちょっと思うことがあって
2chで人を集めて研究して本を出版しようって発想がかなりアレなんだわな
2chで人を集めたってゲームですらまともに完成するほうが珍しいってのに
本を出版したりアプリ売って金儲けとかもうね
もし本当にそういうことがしたいんなら、本人だけで
ほぼ完成させて、デモも動いているんだけど、どうよこれ
ぐらいまでは最低でも持って行っておかないと誰も相手にしないっつーかありえないよ
そこまでやっても多分うまくいかないと思うけど
本来なら本人が優秀なら実社会で勝手に人が集まってきて勝手に輪ができて
それでどうこう、って話なんだよ
それを、なんで、2chで人集め?
って時点でもう
それもこんな人の減った末期の2chで 粘着野郎は食事か風呂のどっちかか
あいつ0時過ぎたらまたID変えてまくって何食わぬ顔で荒し行為繰り返しやがる
うぜー >>508
多分Ruby使える人で人工知能に詳しい人を探すより、大学訪ねて人工知能に詳しい人にRuby教えた方が手っ取り早い。 ちょっと前まで何十億掛けてAIに東大の入試問題解かせて合格させようってプロジェクトがあったけど
それ以上のプロジェクトを気軽に始めようとする人って素敵☆()
壮大な目的はあるけど人集めが初心者スレなのは笑う所かなw 案外そういう怖いもの知らずのが成功するから世の中分からんね。
パラボラアンテナもスパコンのけい 途中で送信。。。
スパコンの京も、海外より予算少ないのに海外より性能良かった。
パラボラアンテナなんか、それで世界に広がった。 フロッピーディスク、切り口で怪我をしない缶詰めetcetc... まずまともな人望があったらこんなところで人集めの質問しないだろってのがあってだね
逆に一人でもやり遂げてやるぜって訳でもなさそうだし
そーゆー部分を見て、判断しよるよ、大人は
内容とか以前に どうやって正答のための元となるデータを形成するか、どうやって問から正答を導く処理を行うか
この二つがワトソンにとって重要な部分なんだけど、文で色々書くよりRubyのコードで示した方がわかりやすいと思う
IDをかえて一人で書き込んでいる人のレスみてるとやっぱりそこを理解できていないみたい っつーかむぎ茶も出所しておまいらくらいの歳になってんだな
2chに住み着いてるかもな スレの流れをぶった切って質問。
当方、数日前に
Rubyを2.1.5 -> 2.4.1へとアップグレードしたのだが、
なんかスクリプトの実行速度が3割から4割遅くなった。
実際のところ、以前の2.1.5はgcc5.3.0でソースからビルドしたブツで、
今回入れた2.4.1はgcc7.1.0(これもちょっと前に入れた)でビルドしている。
ちなみにうちの環境だとdtrace関係でminirubyが落ちるので、
configure --disable-dtraceが必要だった。(2.1.5は無い)
正直rubyが遅くなったのかgcc等他に問題があるかどうかも判らないんだが、
2.1以降の各バージョンでのベンチマークとか、
変更点で遅くなったとかの情報が集まっているサイト等、
知っていたら教えて欲しい。
ちなみにOSは32bit版FreeBSD 10.1系とかなりマイナーな環境。 >>584
ruby-2.4.1もgcc5でビルドして比較してみたらどう?
あるいはruby-2.1.5をgcc7で比較するとか
新しいものが常に最良とは限らないし >>586
自己補足
個人的で尖りまくったものを述べるよ
以前、とあるInteger関係のベンチマークを比較した事があったけど
(速い) ruby-2.4 > (ruby-2.3, ruby-2.2) > ruby-2.0 > ruby-2.1 (遅い)
という結果になった
ゴンパイラはgcc8-devel、FreeBSD-11-AMD64上で実行 http://takenaka-akio.org/etc/benchmark/
どうも、40倍〜200倍ぐらいは遅くなることを覚悟しないとダメ見たよ
仮に100倍遅くなるとしたら、3GHzのCPUが「30MHz」相当になるってことだから
ちょっと無視できるようなものではないね
コードの書き方を工夫するなどしても、100倍の差はなかなか埋まるものではないよな
もともと1秒で済んでいたはずの処理に100秒もかかることになるし
ここまで遅いと、ちょっとしたことが命取りになってくる
最初見積もっていたより処理に二倍の時間がかかかるようになってしまった場合
1秒が2秒になるのは1秒増えるだけだから我慢できても
100秒が200秒になるのは、追加の+100秒もは我慢できないとおもうよ すまん
誰か>>588 の言っている事を翻訳してくれ 処理の規模によってはアルゴリズム考えないとヤヴァイぞ☆
って言ってる。 二つの意味が含まれているから確かにわかりにくな
まず一つ目は、既に100倍ぐらい遅いんだから
今更、3〜4割遅くなったぐらいで騒ぐほどのことじゃない
速度が欲しかったらほかの言語を使え
二つ目は、100倍も遅いということは、3.0GHzの最新CPUを使っていたとしても
実質30MHzのCPUを使っているようなものだから
ほんのちょっとしたことが命取りで、更なる3〜4割もの性能ダウンは到底無視できない
考えてもみれば、100MHzのCPUが主流だったころは、本当にシビアだったとおもう
最適化最適化で、1クロック縮めるのに命を懸けている人たちもいたね
今更そういった時代に逆戻りしてしまうのはなんだかなーと思うし
速度がほしかったらほかの言語を使え
何故か同じ結論にたどり着くわけだが、Rubyではよくあること 昔はね。
C++でさえCからすれば遅い言われてた。
(これは理論上今でも、再利用性を得る代わりに遅くなる。C++はCの後継として、遅くなるのを最小限に抑える仕様。でも確実に遅い)
でも、CPUの進歩やコンパイラの進歩で人間が直接アセンブラ触るより速いと言われてる。 Railsみたいに、I/O 処理があれば、C/C++でも遅くなるから、Rubyと大差ない
一方、数学・アルゴリズム系で、I/O 処理がなければ、C/C++が断然速い つまりちょっと前からいるIDを変えてトンチンカンな書き込みを続ける例の荒らしだな
失せろ、スレチだボケェ >でも、CPUの進歩やコンパイラの進歩で人間が直接アセンブラ触るより速いと言われてる。
まさにその通りだ
ここでもいくつかのことが言えて
一つ目は普通にC/C++使っとくのが現状最速だろうってことと
二つ目は当時はアセンブラと比べたらC/C++ですら遅いといわれていたが
別に100倍も遅かったわけではない、ということと
三つ目は、二つ目の続きなわけだけど
アセンブラと比べてC/C++が遅いといっても100倍も遅かったわけではないんだが
CPUがあまりに遅かったからちょっとのことで騒いでいた
Rubyは3.0GHzのCPUを使っていても実質的には30MHzのCPUでプログラムを動かしているようなものだから
まるで当時のような状況、ちょっとのことが命取りな状況、ということと
四つ目は、100MHzのCPUが主流だったころ、もし100倍の性能のCPUが発売されたら
みんなそっち使うよね、ってこと
できることが全然違う、速度的には新幹線と徒歩ぐらい違う
東京から大阪へ行くのに、新幹線なら、考えうる限りの寄り道しまくっても絶対徒歩より早く着く
と、言い切れるぐらいには速度差がある、ので、コーディングで手を抜けそうだね、ってことと
五つ目は、既にC/C++の最適化は鬼のような状況で、普通の人がアセンブラで書いても
到底太刀打ちできない(SEEは別)
C/C++はアセンブラより速くなったといえるだろうし、克服したといえるし、良い選択になっているが
一方で、今現在、RubyはC/C++よりも100倍遅いという現実がある
「でも、CPUの進歩やコンパイラの進歩で
(Rubyを使ったほうが)人間が直接C/C++を触るより速いと言われてる。」
という風な文章は成り立たない >>596
その代わり面倒なコードがてんこ盛りで生産性の落ち方が半端ない
そこまでの速度を要求されるコードなんてほとんどないんだから、生産性の方が重要だよね、
ってのが高級言語の考え方なんだから速度だけにフォーカスした考えは世の中の高級言語を
すべて否定するものだ >>597
またいくつか言えて
>その代わり面倒なコードがてんこ盛りで生産性の落ち方が半端ない
本当にそう言えるのかどうなのか
今現在の状況で、静的型言語に比べて動的型言語の生産性がはるかに高い
と言い切れる人はいったいどれだけいるんだろうか
むしろ動的型言語のほうが生産性がない、という風潮ではないだろうか
だってここ最近新しく出てきた言語は当たり前のように静的型だし
それを売りにしている
で、これもかなり譲って、生産性は同等ぐらい、と考えるのなら
「実行速度100倍差」が重くのしかかる
3.0GHzの最新CPUを使っても30MHzと同等
ここまで遅いと、別の方向で頭を使う
C/C++が新幹線の「のぞみ」だとしたら
JavaやC#は「ひかり」ぐらいの速度、あるいはそれ以上は普通に出る
これなら同じ土俵に立っているといえるし
そのうえで生産性などを考える、これはわかる
だから俺は別に生産性etcの高級言語の考え方を否定する立場はとってない
しかしRubyの速度は「徒歩」である
こうなればまた考え方が変わってくる >>598
JavaだってC/C++に比べれば降級言語で速度も遅いが、普通に使われている
それはC/C++より生産性が(まだ)マシだからだ
これは静的型とか動的型とかは関係ない
つまり速度だけにフォーカスした比較は大きく間違ってるということだ 続きは「C/C++はRubyより100倍早いスレ part24」でやってくれ 588ってどのレスへの返しなの?
遡って100レス程見たけどどこからも繋がっていないように見えるんだけど
こういうのはちょっと怖い >>599
C/C++が新幹線の「のぞみ」だとしたら
JavaやC#は「ひかり」ぐらいの速度、あるいはそれ以上は普通に出る
これなら同じ土俵に立っているといえるし
そのうえで生産性などを考える、これはわかる
だから俺は別に生産性etcの高級言語の考え方を否定する立場はとってない
しかしRubyの速度は「徒歩」である
そのうえ、生産性が高いかどうかすら分からないというのは
>>598に書いた通り >>602
徒歩でも問題ない場面であれば気にしなくてもいい
そして世の中のほとんどは徒歩で問題ない
徒歩でも問題ないところに「いや新幹線が必要なんだ!」なんてのはもはや技術的な問題ではなく、
ただの思考停止 >>602
zlibで圧縮処理する場合、Cとrubyでどんだけ差が出るかわかる?
rubyを徒歩に例えているけど、途中で新幹線を利用してるんだぞ それは「徒歩」とか「新幹線」という言葉にとらわれすぎである
これは単に、あまりにも速度差が有るということを表現するために
「徒歩」とか「新幹線」とか言っているわけで
利便性その他まで含めて比喩しているわけではないんだぞ
なおかつ、生産性が高いかどうかすら怪しいというのは>>598にも書いたし
実際世の中そういう空気になっているじゃろ
生産性が低くて速度が遅かったら後は何が残る?
もし生産性が同程度だったとしても、それならば速いほうが良いだろ
100倍も圧倒的な差があるんだから
多少非効率な書き方したっておつりがくるぞ >>598
> 今現在の状況で、静的型言語に比べて動的型言語の生産性がはるかに高い
> と言い切れる人はいったいどれだけいるんだろうか
どちらかがどちらかを上回るって話じゃないからなぁ。
動的言語だと書くのが楽。型を書かなくてもいい場面が多いから
短いコードで目的を達成できる。その点で生産性が高いと言えるが、
大規模アプリでは、型が書いてないためにコードの把握に時間がかかる。
静的型言語では要所要所に型が書いてあって、記述量は増えるが
その分コードを把握しやすく、コンパイラが見つける矛盾の量も増える。
だから開発するものがどれだけの規模のコード量かで生産性が高い方が決まる。
つまり静的型言語の方が高い場合と、動的型言語の方が生産性が高いかの境目があるということ
しかしその境目がまた問題で、技術力が高い人であれば短いコードでシンプルに書くことができる。
だから境目は技術力が高い人ほど動的型言語の方が生産性が高いことを示すことになる。 >>605
> それならば速いほうが良いだろ
別に?
徒歩5分のところに行くのに新幹線と車と自転車と徒歩とどれがいい?とか聞かれても「どれでもいいや」
って思うだけだし 徒歩5分のところに新幹線や車を使ったら
たいてい遅くなるぞw 技術力が高い人ほど動的型を好むのは
たまたまとかいうわけじゃなくて、
短く書けてしまうから「この程度の小さな規模」の
コードになってしまうことが多いからなわけだよね >>607
あるコマンドかアプリか処理か、何か知らんが、何かあって
処理に5分もかかったら、対話性などというものはないし
まず使い方そのものからして考え直さなければならない
進捗ぐらいは表示したいし、アプリの構成そのものからして考えないとな
5分という時間は何もしないには長すぎるので、作業いったん中断ってところだな
これが100倍速いと3秒で終わる
3秒なら、まぁ、待てるかな
ちょっと遅いが、ギリギリ、リアルタイムな対話といえるレスポンスだな
作業は中断しないな
5分と3秒の違い、わからない?
あと、徒歩五分のコンビニに行くにしても、瞬間移動が使えるなら
俺はそういった能力、ほしいな
大は小を兼ねるというし
瞬間移動が使えることで生産性が落ちるわけでもないしな まぁフォトショップでフィルタをかけるとか、なんでもよいんだけど
5分待たされるのはしんどいよ
ほんと、作業が中断しちゃう
コーヒー飲むかタバコ吸うかウンコするか
3秒ならまぁ何とかってところ >>610
徒歩というたとえだから5分と設定しただけだよ
実際に計算だけで5分かかるような処理ならそりゃC/C++を使うだろうし、そんな処理をガンガン書く場面は
想定できないし問題ないよ 要するに徒歩5分はスクリプトで言えば1秒以内に終わる処理だね
1秒を0.01秒に縮められます!とか言われても、でも1秒で十分なんでって思うだけだしね 結局何を主張してるのか理解出来ねえ
rubyなんざ使い物にならねえよって>>610が言いたいのか?
同意を得たいなら他のスレで暴れろよな そもそもからしておかしいんだよ
プログラムの実行速度が速すぎるのが原因で生産性が落ちることはない
聞いたこともない
大は小を兼ねるということわざが当てはまって、速すぎて困るということはない
プログラムの実行速度が速いことのトレードオフだけど、これも良くわららない状況だ
今現在はどちらかというと静的型のほうが生産性があるんじゃないか、とすら言われている
そんな状況で100倍も遅かったら、どうなるんだ?
3.0GHzのCPUでも実質的には30MHz相当
あと、静的型言語が速い傾向があるといっても、本当に誰も何もせずに速いってわけじゃなく
コンパイラが最適化を相当キバってくれているから速いわけだ
プログラマがちまちま考えなくてもコンパイラが頑張ってくれる、という方面での生産性という見方もあるし
速くなった分は余裕ができるのでプログラムを手抜きできるっていう生産性もある
また、動的型言語であっても速いのはある
例えばJSは静的型と同じ土俵に立てるぐらいに速いだろ?
これをもってしてMatzは動的型でも速度は出せるって言い張るんだけど
そのような実装を用意できてない状態でそんなこと言って何になるんだ? >>615
> 大は小を兼ねるということわざが当てはまって、速すぎて困るということはない
別にRuby程度の速度で困ることもない場面がほとんどなので、問題はない > そんな状況で100倍も遅かったら、どうなるんだ?
> 3.0GHzのCPUでも実質的には30MHz相当
その計算をすることに意味はない。
今後一切やめてくれって言いたいレベル。
現実としてその違いは、重大な問題を引き起こすかどうかで決まる。
わからないと言うならば、問題は起こってないということだ。 > プログラムの実行速度が速すぎるのが原因で生産性が落ちることはない
当たり前だ。実行速度と生産性は無関係だからだ。
無関係といったんだ。実行速度を速くしても生産性は落ちないとは言ってないからな。
無関係ということは、実行速度を速くすることで
生産性が落ちる場合もあるし、
生産性が落ちない場合もある
生産性が上がる場合だってある
ということだ
> 大は小を兼ねるということわざが当てはまって、速すぎて困るということはない
速くするため生産性が落ちるのであれば困る。 Rubyが今の100倍速くなったとしたらどうなんだ?
前のままで十分だったから遅くしてくれ、戻してくれ、とはならんだろ
速いほうがいいに決まっているのに、遅くてもよいと言い張るのは
すでに普通の感覚を失ってしまっている
Ruby3.0ではどうにかネイディブスレッドを導入しようという話だが
これもどうにか実行効率を上げよう試みだ
結局速いほうが良いという話
ものすごく変な言い方をすると、Rubyが今の100倍速かったら
もっといろいろなことにRubyを使えるはずなのに
そういったことをユーザー自ら否定してしまうのは変なコミュニティーだ
「自分たちはこれでよいんだ」的な
でも1億あげるっていったら間違いなく飛びつく
速度を落としてまで動的型にしたが
それもちょっと前からどちらかというとメリット無いんじゃねと言われていて
今ではその評価もすっかり固まってしまったが
これなら何故速度を犠牲にしたのか意味がよくわからない状況 >>619
> 結局速いほうが良いという話
大事な前提条件が抜けている
「コードが変わらないならば」という条件がな 必ずしもコードが変わらない場合にのみ速度が速いことが歓迎される
というわけでもなかろう
処理系の実行速度が速いことには何時でも一定の価値基準がある >>621
> Rubyが今の100倍速くなったとしたらどうなんだ?
君がこういう前提を出したんだよ? 周りを見渡せばRubyよりも100倍速い言語や処理系が既にあって
しかもRubyのような動的型は失敗だったんじゃないかという空気だ >>623
君の頭の中ではそうなんだろうね
世間に出た方がいいと思うよ >>623
お前が吐き出した空気じゃねえか
澱み杉 失敗も何も動的言語は生まれた時から「動作は遅いが作るのが早くできるので素晴らしい、しかしそれゆえ脆いので長期堅牢には向かない」ときちんと認識されていた
完璧を目指していたことなど一度たりとてない そもそもMatzが遊びで作った言語だろ?
それをわざわざ公開してくれて
我々は彼の善意によってタダで使わせてもらってんだろ?
そのへんの間隔というか距離感というか
忘れちゃってる奴おるよな
自分のオカンに対して無限に批判するような態度の リファクタリングのRuby版読むと、
Rubyのコードが如何に解説するのに向いているかわかる
こんな感じのRubyのコード使った解説本はもっと増えて良い とりあえず
> 今現在はどちらかというと静的型のほうが生産性があるんじゃないか、とすら言われている
このソースが欲しいとこだな
まーこいつの妄想だろうが リファクタリングするときとかIDEの力を借りれば
静的のほうが生産性が上がるかもとは
散々言われてきたが? >>631
それ暗にRubyはクソコードはが多いとdisられてるんじゃね >>619
> Rubyが今の100倍速くなったとしたらどうなんだ?
速い代わりに、C++言語みたいになったりしたら
戻してくれって言うよ。生産性が落ちるんだから当たり前じゃないかw プログラム言語っていうのは道具だからね。(その言語の開発者以外は)
一般的な道具で考えてみればわかる
速いけど不便。少し遅いけど便利。
遅くても実用上問題なければ、便利な方を
取ることの方が多いだろう。
誰もがF1カーに乗るわけじゃあるまいしw 既存の言語に文句いうやつが
その言語以上の素晴らしい言語を作った例は皆無
あるとしたら…それこそperlに対するrubyくらいのもん 633 :
デフォルトの名無しさん
2017/07/06(木) 13:20:06.18 ID:YVvleWfm
リファクタリングするときとかIDEの力を借りれば
静的のほうが生産性が上がるかもとは
散々言われてきたが?
634 :
デフォルトの名無しさん
2017/07/06(木) 13:39:42.81 ID:tNWdrmh7
>>631
それ暗にRubyはクソコードはが多いとdisられてるんじゃね
流石にこれは気持ちわる過ぎる >>633
> リファクタリングするときとかIDEの力を借りれば
> 静的のほうが生産性が上がるかもとは
大規模システムの場合はそうだけど、
小規模の場合は大差ない。
そして技術力が高い人ほど、システムを小規模に保つことができる。
技術力が高い人ほど動的の方が生産性が高い場合が多くなる OpenGLのgemつっこんでぐりぐり動かしてるけど、
テクスチャ関連やアニメーションモデルのデータの持ち方がいまいちピンと決まらない
その場で決めても後日、なんか手をいれなければならなくなる気がして二進も三進も
Rubyならでは冴えたやり方ってない? >>596
>>593だけど、おいらのレスに乗っかって何やら面白いことになってんね。
自分で関数から何からLLで書けばそうなんだけど、LLのライブラリじゃCで書かれてること多いからね。
それにI/O多いLLお得意の文字列処理とかは>>594の言う通り大差ない。
計測した事あるけど誤差の範囲って言って良い。
小説何十冊分が1ファイルに入ったりした時に差が体感できる程度。
100冊分超えたらCや他のコンパイラ言語検討して良いと思う。
30MHZが遅いって言ってもPICとかのマイコンは4MHzとかで、それでも十分人間より速い。
Prolog勉強した時はプログラミング言語は本来こうあるべきって書いてるページあって、方向性はそうだけど、その解は絶対Prologじゃねーって思ったけども。
確かにここまでCPU速くなったなら、人間がコンピュータのアーキテクチャに合わせる必要はない。
とは言え、CPUのx86と同じ、すでにコード資産が無視出来ないんよな。。。 バージョン上げたgccでrubyのバージョン更新したら遅くなったからgccに要因があるのかrubyに要因があるのかヒントになる情報をくれって>>584 が訊いてるのに
なぜこんなアホな話が出てくるんだ? まあ関係ない話はおいといて…
>>585
gemの入れ直しが面倒なのでプロファイラは後回しの予定.
>>586
家のマシンだとgccの入れ替えに10時間かかるんだ……(フルビルドしてるせいだけど)
というわけで手元にソースがあった3種類のrubyをgcc7.1.0でビルドし直して入れ替えて
問題のスクリプトをtimeで計ってみた。
ruby2.1.2 2.0秒 -> ruby2.3.1 2.4秒 -> ruby2.4.1 2.8秒
もちろんioとか抜いたuser時間ね。
修正履歴をざっと調べたところ
Bignum(だっけ?とにかくでかい整数)周りの修正が影響しているんじゃないかと現在考慮中。 二日前の話をなぜ今に?
もしかして情報がもっと欲しいの?
だったらrubyのソースコードを読むしか無いよ >>646
あーいや、情報についてはあんまり期待してない。
もともと
「実際に体感できるレベルで速度低下してるが適当にググっても情報が無い」+
「gccの入れ替え面倒というか今週暑過ぎ」
というのが質問の理由だったからね.
実際幾つか他の適当なスクリプトでも実行時間を計測して比較してみたところ、
ここまで大きな速度低下は無かったというのもあって今では少し安心してる。
入れ替え後最初に実行したスクリプトで地雷を踏んだのは運が悪かった。 ますますわからない
何を求めての書き込みだったの? >>619
>>635
CとのインターフェースならPythonの方が良いよ >>645
まさか、Fixnum関係ではないよなあ?
ペナルティがないこともIntegerに統合した理由だろうと思ってたんだけど。 railsスレから移動してきました。
def index
UNIXSocket.open('/tmp/myapp.sock') do |sock|
sock.write(params.to_query)
rt = sock.readline
render text: rt
end
end
みたいなことがしたいのですが、どうも
rt = sock.readline
のところで処理が止まってしまうように見えています。
renderの部分まで処理を進めるにはどのような書き方をすればよいのでしょうか。
教えて頂けますと嬉しいです。 sock.write(params.to_query)
rt = sock.readline
書き込んで、読み込む?
矛盾してないか?
読み書き両用なのか?
もし両用なら、相手からの返事を待っているのだろう レスありがとうございます。
やりたいこととしては、socket.writeでソケットにクエリを投げて
通信先で処理を行ってレスポンスが返ってくるので、
それを sock.readline で読み取るという双方向な感じのことです。
通信先のプロセスをkillするとなぜか処理が進んで、rtに正しいデータが格納され、
render まで処理が進むのですが・・アドバイスいただけると幸いです。 レスありがとうございます。
すみません自己解決しました。
def index
s = UNIXSocket.new("/tmp/myapp.sock")
s.send(params.to_query, 20)
render text: s.recv(20)
end
こっちの方の書き方を試してみたところ、うまくいきました。(20は適当な数値)
何がどう違うのかよくわからないですが・・ >>658
656ではないけど確認。
flushはダメだった? >>658
sendで使っている数値の20だけど、第二引数は flags になってる
mingw32(windows)だと (MSG_MAXIOVLEN | MSG_DONTROUTE)
linuxだと (MSG_PROBE | MSG_DONTROUTE)
FreeBSDだと (MSG_TRUNC | MSG_DONTROUTE)
を意味することになり、あなたの意図するところじゃないはず
recvの方は第一引数で最大20バイトの読み込みを意味するけど、
readlineは改行まで読み込むメソッドだから、振る舞い方に違いがある
一つの通信単位が任意長で、改行で終わらせたいなら
s.send(params.to_query, 20) を s.puts(params.to_query); s.flush
s.recv(20) を s.readline じゃだめかな?
もっとも params.to_query に改行が含まれているとうまく行かないけれど バッファリングされているから、flush で出力するのか >>661
そのあたりは、通信先のkillで挙動が変わらないのでは?
どうせ真のkillではないんだろうし、flushがありがちじゃない? エラーの時のスタックトレースがコンソールに大量のログが出るのを減らすことってできませんか? エラーなんだから仕方なかろうよ
もしプロダクションレベルであんまり内部パスとか詳らかにしたくないというのなら全体をrescueするしかないね
begin
# main_thread()
rescue RuntimeError => e
warn e.message
exit(1)
end
RuntimeErrorじゃないのだったら適当に増やしとけ ruby -W0 で起動して減らなかったらどうしようもない
そういう便利オプションみたいなのはないのですわ ○○課
○○課○○室
○○課○○係
○○課○○室○○係
○○課○○ライン
みたいな文字列を入れたときに
[○○課]
[○○課, ○○室]
[○○課, ○○係]
[○○課, ○○室, ○○係]
[○○課, ○○ライン]
みたいに分割してくれる関数を作りたいのですが上手くいきません
いい方法はないでしょうか >>668
とても下手くそなやり方だと思いますが一応できました
def my_split(str)
arr = Array.new
str_arr = Array.new
arr.push 0
str.each_char.with_index do |ch, i|
arr.push i+1 if ch == "課".encode("windows-31j")
arr.push i+1 if ch == "室".encode("windows-31j")
arr.push i+1 if ch == "係".encode("windows-31j")
end
arr.each_with_index do |e, i|
str_arr.push str.slice(arr[i-1]..(arr[i]-1)) unless i == 0
end
str_arr
end >>668
def spj(s)
reg = Regexp.new("[課室係]|ライン")
a1=s.split(reg)
a2=s.scan(reg)
return a1.zip(a2).map{|x| x.join("")}
end >>668
"○○課○○室○○係"..scan /.*?(課|室|係|ライン)/ # => ["○○課", "○○室", "○○係"]
なお○○の部分に"課"等の文字が来てはいけない そーか頭も含めりゃ確かにscanだけでいいのか。ボケてるな。 >>670>>671
ありがとうございます
すごくシンプルに書けるんですね >>670
おー、かっけー。
こういうのがすぐ頭に浮かぶようになりたい。 >>676
エンジニアの三大美徳のひとつ、「傲慢」を否定しちゃいけません 七大美徳も忘れるな
暴食、色欲、強欲、憤怒、怠惰、傲慢、嫉妬 壊れてもバックアップ環境あるから
使いにくくなって効率下がるだけで他は変わらない 未だにgemって良く判らない。インタプリタなども含めて一式を配布するような場合は邪魔でしかない印象 外部のライブラリをスッ…とインスコできるやつ、色々作ってる側からすると便利、まああんまり好きじゃないけど バージョン変わって依存関係めちゃくちゃなって
何か月とか何年かあとになって
再度同じ環境構成しようとしても
以下略 >>686
Rubyはそんな使い方しないからね
RailsのDSLなんだから >>686
>インタプリタなども含めて一式を配布するような場合
Rubyでそういうことをしてはいけない
スクリプト言語にとってのインタプリタバイナリはライブラリ選択前に既にインストールされているものなのだ
rubyがインストールされ(てい)ない環境でも実行して欲しいようなものをRubyで作っては「絶対に」いけない vagrant, chef, SASS とかに、Ruby の実行環境も入れて、配布しているだろ? >>691
VagrantやChefはユーザーによるスクリプティングを可能にするためにRubyを入れてるんであって、
プロダクトをRubyで作っちゃったから仕方なくRubyを入れてるわけではないよ
一方SASSはRubyで作っちゃった例だけど、Rubyが嫌われてnodeへ移行した > Rubyが嫌われてnodeへ移行した
nodeには移行してない
Cに移行している 残念ながらmrubyが獲るはずだったポジションはNodeに獲られちゃった gemを使わないで何とかしようとすると情報が一気に減るんだよな。下手するとビルド方法の資料すらなかったり
>>688
あるあるすぎる。今まさにそれで頭を抱えている。昔出来たはずのことを再現しようとしているけどどうしたものか・・・
>>689-690
exerbやocraを全否定ですか
>>694
mrubyは検討したけど使えそうなライブラリが無くてcrubyにせざるを得なかった。ライセンス不明はやめてほしい わかってると思うけど、Rubyのネガキャンやってるのがこのスレに粘着してる
こういうのは見付け次第叩いてやらないといけない >>691みたいにヘタに突っついて論破されるのも準アンチ行為だから注意な いまだにRuby万能説に縋りRuby万能を否定されると発狂する人が住んでるのか
それは10年も前に終わった言説だ
いつまで寝ているんだ目を覚ませ Ruby が最上流。
他の言語よりも、常に、2, 3年早い
Rails, vagrant, chef, SASS など
DSL では、Ruby, Groovy が優れているから、
最初にこれらの言語で作られてから、Python, JS へ移植される
Kotlin も注目されているけど、型を指定するのが面倒。
まあ、型を省略して、型推論もできるけど rubyが最上流?
ワロス
そんな優れてるならphpもpythonも喰ってるよ。
しかも、落ち目だし。 しかも、型省略して型推論とか微妙な言い回ししてるあたり、分かってない臭がすごくてやばい >>702
C#のvarみたいなもののことなんじゃないの? Kotlinの型推論はただの典型的な型推論ですよ
それこそ「型指定が必要だけど型推論に任せることもできます→まあ便利」で済むレベル
わかってないのは間違いないのだろうけれど たとえばArrayにメソッドfuncAを追加する時は
class Array
def funcA
return ["AAA"]
end
end
みたいに書けば出来ますがこれをCの拡張ライブラリにしたい場合ってどうすれば良いんでしょうか?
Cからメソッドの登録を行う場合は
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(), int argc)
を使用するようですが第一引数をどのように得ればいいのか判りません rb_define_method(rb_cArray, "funcA", hoge_func_a, 1);
static VALUE hoge_func_a(VALUE self, VALUE arg1) { } え?"Array"というRubyの名前空間上の文字列?からklassを得る方法って無いの?
実際にメソッドを追加したいのは拡張ライブラリなんだけど、クラスやメソッドの登録は
関数内で行われていてklassが明示的に外部へ公開されているようには見えないのだが・・・ >>707
組み込みクラスやモジュールに関してはグローバル変数として用意されている
ruby/ruby.hを見るべし
https://github.com/ruby/ruby/blob/trunk/include/ruby/ruby.h#L1871
ちなみにこういう事もできる
#include <ruby/intern.h>
VALUE cDigestBase = rb_path2class("Digest::Base"); 697の見え見えの釣り針にひっかかる粘着なんておらんやろ
って思ってたけど、見事に食い付いてるな
マジスゲー >>708
ありがとう
弄りたいのは野良の拡張ライブラリです
rb_path2classで出来そうなのでこれを使ってみます 拡張ライブラリをコンパイルする時に任意の場所にあるヘッダファイルやライブラリファイルを
探索させるようにするにはどのようにすればいいのでしょうか それRuby全く関係ない
Cのコンパイラだけの問題 >>713
そうですけどextconf.rbで作ったMakefileをいちいち手編集するのは正攻法ではないですよね
>>714
have_header("C:\\foo\\hoge.h")
とか
have_header("C:/foo/hoge.h")
とかやってもnoと言われてしまいます あ、自己解決。dir_configを使えば良かったのか
dir_config("myproject")
とか書いて
ruby extconf.rb --with-myproject-include=C:\foo
とかするとそのディレクトリを探索対象に加えてくれるみたいです mkmf.rbでdir_config("opt")してくれてるので、--with-opt-includeならはじめから使える >>715
まだ見てるかな?
すまない、find_header、find_library を伝えるべきだったな IDE には、ライブラリパスの参照という、ボタンがあるはず ひとまず形にはなった。ALLOC_Nの開放の仕方が判らないのでALLOCA_Nにした
ALLOC〜って初期化してくれないんだな。ゴミが混じってメモリ破壊の
バグがあるのかとしばらく悩んだ。でもCはど素人だしなんかありそう
>>718
コマンドラインの方が容易に変更できるのでdir_configで行こうと思います >>720
ruby/ruby.hを大文字のALLOCで文字列検索してみ
RB_ZALLOCとかRB_ZALLOC_Nとかが0で初期化してくれる
あと確保したこれらはxfree(void*)で解放してね >>721
ありがとう。ZALLOC_N&xfreeにしてみました
ALLOCA_Nってruby/ruby.hをみたらallocaを呼んでいるだけじゃないかw
拡張ライブラリ内部における動的なメモリの確保ってどうするのが好ましいんだろうな
スタックに積む方法はメモリのリークはないけどスタックを圧迫する(.今の環境だったら気にするほどでもない?)
allocして後にfreeする方法だと意図せず途中で抜けた時にメモリがリークする
Rubyの文字列を作ってそれを利用すると言う方法を紹介しているblogもあったけど・・・う〜む・・・ >>722
俺も外部の人間だから本当に適切な方法なんて知らないけど……
VALUE bufvalue;
size_t bufsize = 1024;
void *ptr = RB_ALLOCV(bufvalue, bufsize);
任意の処理を行う
ここで例外が発生しても次のGCで勝手に開放される
bufvalueはrubyの世界へと出さないように気をつける
/* メモリの即時開放(freeされる) */
RB_ALLOCV_END(bufvalue);
VALUE bufstr = rb_str_buf_new(bufsize);
void *ptr = RSTRING_PTR(bufstr);
任意の処理を行う
rubyの世界に出しても問題なし
ただし出したあとで再び使う場合は必ず
rb_str_modify(bufstr); /* freezeされたらaboneするけどな */
ptr = RSTRING_PTR(bufstr);
をやり直す
/* メモリの開放(即時開放されるかは実装任せ) */
rb_str_resize(bufstr, 0);
こんな感じかな 今気がついたのだが・・・
自作メソッドの入力値が不適切→rb_raiseを叩く→Segmentation fault
rb_raiseの引数に動的な物は含まれていないし、未解放のメモリがあるわけでもないしどうなっているんだ
例外を発生させる時の作法とかあるのだろうか
しかも2個作ったメソッドの片方だけこの現象が起きる。処理内容に問題があるわけではないけど
これを放置するのはマズイよな
>>723
ありがとう。参考になります なるほど・・・ってVC++環境でコアダンプってどうやって取れば良いんだろ
ググるとWindows Error Reportがトラップしている時にタスクマネージャからダンプさせる
とか出てくるけどトラップされている訳じゃないのでこの方法は使えないし・・・
それともどこかにダンプが保存されているんだろうか ソフトウェアデザインがインターフェースの記事を丸々パクって問題になったことがあったな VisualC++でビルドすると--disable-debug-envを付けてもデバッグビルドになってしまうように見えるけど気のせいかな・・・
インストールされるサイズが--enable-debug-envと比べてちっとも変わらない
生成したMakefileにデバッグ関係のオプションを削ったCFLAGSとLDFLAGSを書き込んだらインストールサイズが大分小さくなった ようやく原因がわかった
rb_scan_argsの第3引数が"22"と不適切な値にしていたことが原因だった。適切な"2"にしたら問題なくなった
複数のスレッドが動いているため?か例外を起こす場所が一定になるわけではない模様
rb_pでデバッグしていくと>>724の位置で例外が起きる(rb_raiseの第一引数がぶっ壊れていると
思われる)んだけど、デバッガで追いかけるとrb_scan_args内部で例外が起きる 要約すると
Ruby ⇔ C と行き来するのはえらく面倒だ
ってことだな
これなら、Rubyを使うことそのものが目的じゃないのならだが
初めから Java、C#、C++ などを使ったほうが良かったってこったな というか今時はRPCやメッセージキューを使って完全に分離してしまえばいい
WindowsでRubyの時点でどのみち実用性のないオナニーなんだから好きにすればいいけど 引数を間違えると警告もなくメモリをぶっ壊す関数って絶対にこれだけじゃないよね・・・
今回の件で困ったことまとめ
・VC++のコマンドラインからビルドした物をデバッグする例が全然見つからない
VC++のIDEで開発したプロジェクトやgcc&makeで開発した物をgdbでデバッグする例なら沢山出てくるんだけどな
・CLIアプリケーションのためかデバッガから起動させるとgem関係のファイルがないとRubyが例外を吐いて動かない
requireの後に$<.getsを書いてコマンドプロンプトから起動。デバッガからアタッチしてブレークポイントをセット後に
Enterを入れて実行を再開。ただし100%上手くいくわけではない模様。無限ループ?にはまる時もある
エントリーポイントで止めて環境変数やカレントディレクトリを適切に設定した後に再開すれば動くのかな?
やり方が判らないけど
・RubyがSegmentation faultをトラップしてしまうためにメモリダンプを取れない?
signal.cやwin32.cでそれっぽそうなところを書き換えてみたけどトラップを止めさせることは出来なかった
どこを弄ればいいのだろうか・・・
C/C++は不慣れなので変なことを書いていたらスマン ファイル名以外でファイルを識別するにはどうしたらいいんだ?
ファイル名変更したとしてもファイル名変更前とファイル名変更後のファイルを同じものとしてみたい
ファイルクラスのドキュメント見てみたけとそれらしいのはなかった >>736
ファイルシステム次第なんじゃないの。
Linuxならだいたいinodeでいいだろうし。 >>737
こんな便利なメソッドがあったのか
でも変更前のファイルが残ってるやけじゃないからここでは使えないかな…
>>738
https://docs.ruby-lang.org/ja/latest/class/File=3a=3aStat.html
LINUXだからこの辺使ってinodeで判別できそう!ありがとう! >>739
そういう用途なら、ハードリンクに注意。 inodeは再利用されるからいつかギョッとするときが来ると思う
https://ideone.com/zPXgqb いまどきのファイルシステムなら拡張属性つかえんじゃない?
索引つくれないと面倒だけど中身比較するよかまし >>742
拡張属性をRubyから使うのは面倒じゃないか?
オレとしては、要件を考え直すことを勧めたいが。
そういうアプリを見ないのはそれだけの理由があるんだから。 まあ「inode見ればファイル名変更にも追従できる!」なんてやらなきゃいけない時点でなにかがとてつもなくおかしいわな
gitみたいなかんたんファイル変更検知機能付きアプリケーションを見てみると絶望できるかもしれないね rubyでcoincheck apiを使ってみたいんだけど、いまドットインストールを見終わって、たのしいRubyを見終わったんだけど、opensllとかuriとかnet/httpとかの使い方はどうやったら分かるようになるのかな それくらいはマニュアル見ろよ
ということでマニュアルの読み方の勉強が必要
ただ、それらのライブラリはプロトコルをちっとも隠蔽してくれてないのでOpenSSLやURIやHTTPの基礎知識は必須だぞ
普通なら使いたいapi試しながら勉強しろと言うんだが絶妙にトライアルアンドエラーのしにくい分野のapiなのが辛いな Ruby並みに生産性が高く、C並みに高速で何でも作れる言語があったら神 KotlinあたりにRubyっぽいライブラリがあれば案外簡単に実現できそう >Ruby並みに生産性が高く、C並みに高速で何でも作れる言語
じゃーC++だね
生産性はJavaやC#には負けるかもしれないが
静的型言語だから少なくともRubyより生産性あるしな >>750
C++の生産性が高いって、マジ発言っすか?
C++である程度の規模のアプリ書いたことある? 8万行ぐらいのフリーソフトなら作ったことあるけど
逆にRubyでこの規模のソフト開発するのは嫌だなぁ C++は割と何でも作れる懐の深い言語だと思うよ
速度も最速といってよいレベルだし
C++で作って重かったらもう諦めるっつーか
諦めも付く そもそも
>ある程度の規模のアプリ書いたことある?
って聞き方がおかしいんだよなぁ
どちらかと言えばRubyは短いプログラムをサクッと作るのが得意分野なのに
ある程度の規模が前提なら、そりゃ、静的型の方が良いだろうよ 一般的にメモリの保護機構を持たないと言うだけでその言語の生産性はかなり下がる
後に開発された言語の多くがメモリの保護機構を用意していることからもこれは明らか
C++でコンパイルが通れば一発動作のスーパーハッカーなら生産性は高いだろうけど
そりゃ言語の生産性が高いわけではなくそいつが凄いだけw >>753
それと生産性の高さとは何も関係ないけどね だから
>(C++は)生産性はJavaやC#には負けるかもしれないが
って書いただろ
でもRubyより有ればひとまずそれで良いんだろ?
しかも>>751なんかは「ある程度の規模」って条件を指定してるし >>758
C++はRubyより生産性は明らかに低いよ
メモリ管理は面倒だし、ちょっとなにかやればSEGVするし それでも静的型の方が生産性があるってのが業界のFAだろ?
最近出てきた言語はどうなってる?当たり前に静的型の機能を持ってるだろ
あと、C++はRubyよりシェア(という言い方が適切かは分からないが)高いし
コミュニティーも活発だよ
だから
>Ruby並みに生産性が高く、C並みに高速で何でも作れる言語
の回答はC++だ
他に選択肢有るか? あと、C++はライブラリも結構豊富な方だと思うよ
Cのライブラリも使えるし、まぁ、大体は何でも
言語の生産性を考えたとき、利用者が多いことも有利に働くよ >>760
> 最近出てきた言語はどうなってる?当たり前に静的型の機能を持ってるだろ
最近出てきた言語はどうなってる?当たり前にメモリ管理機能を持ってるだろ
静的型のメリットをメモリ管理のデメリットが塗りつぶしてるんだよ、C++は それに周りを見渡してみればC++で書かれた
大規模中規模アプリが山のようにあるのに
本当に生産性が低いといえるのかどうなのか 生産性が高ければそこそこの「シェア」も自然とあるだろうが
そこそこの「シェア」があるからといって生産性が高いとは限らない >>763
それだとC++のメリットないじゃん
Java使えばいいじゃん >>764
スーパーハカーがよってたかって書いてるからね
残念ながら一般人はスーパーハカーではない >>765
>生産性が高ければそこそこの「シェア」も自然とあるだろうが
いいこと言うね、つまりRubyは生産性が無いってことだな
>>766
Java使えばよいよ
ただ、質問者?はC並みの速度って注文を付けてるからね
だったらC++だね、と
それでもRubyよりは生産性有るから問題ないだろう
>>767
君の思ってる一般人の基準がおかしいんじゃないの? >>768
> 君の思ってる一般人の基準がおかしいんじゃないの?
君の方がおかしいよ
C++の方が生産性が高いかどうかアンケとってみた方がいいよ >>759
メモリ管理が面倒と思えるのは下手な証拠
C++ の RAII は手放せないのだが,他の言語でこの手の手法は使えないんだよね 第一、なんでそんな人間がRubyスレ覗いてるの?
君の意見だとRubyには見るべきところなんて一切ないはずなのにさ
別の言語を叩いてスッキリしたいのか、煽ってるだけなのかどっちかだよね
どちらにしても性格最悪だね >>771
そりゃ ruby を愛しているからだよ(ぼそ) >>770
実際問題、スマポもあるしな
問題になるのは循環参照がある場合だけだけど
でもそれは設計段階でわかることだから
片方をweak_ptrにすれば良いだけだしな
言うほど面倒ということもないし
世の中のC++アプリは普通に動いてるし
あと、短い間しか生きてない、常駐しないプログラムなら
メモリをいちいち開放する必要もないしな
OSに任せておけばよいだろうよ
>別の言語を叩いて
俺は別にC++に所属しているわけじゃないし
「別」も糞もない、俺にとってC++もRubyも一言語にすぎないよ だいぶズレてきてしまっているけど、もともとは
>Ruby並みに生産性が高く、C並みに高速で何でも作れる言語
ってお題だぞ
C++しか無いだろ C++の生産性が次世代C、C++を目指して開発されたD、Go、Rustなどを上回ることはないと断言して良いはず
C++の名を挙げるならその前にこれらを挙げるべきだ シェアが少なかったり使える人が少ない言語なんか選んじゃだめだよ
今は生産性の話をしているのに
だからC++なのさ >>768
「生産性が高ければそこそこの「シェア」も自然とあるだろうが
そこそこの「シェア」があるからといって生産性が高いとは限らない」
という言説からどういう論理で
「つまりRubyは生産性が無いってことだな」
という結論が出るんですかね
これらから言えることは飽くまで「シェア」があることからは生産性に関して何も推論できないということ
肝心なところの説明がふわっとしてて独善的なんだよ 特にD言語なんか挙げてる時点で何もわかってないね
あれはもうダメでしょ、誰がどう見ても
D言語の開発がいつ始まったか知らないけど
10〜15年ぐらい経ってこの状況なのに
これから先どう化けるってのよ
あんなので開発するのは生産性以前の問題だよ 結局何が言いたいんだろうね
Rubyなんて使えないってことですかね?
だとしたらそれはRubyスレで語ることですかね? >>778
自分で
>生産性が高ければそこそこの「シェア」も自然とあるだろう
って言ったんだろ
言い換えれば、シェアが無い言語は生産性が無いってことになるだろ?
分かりにくかったら会話風にして例を出してやろうか?
A:Rubyって生産性高いんですか?
B:生産性が高ければそこそこの「シェア」も自然とあるだろう(実際には無い)
A:あ、低いんだ・・・
>これらから言えることは飽くまで「シェア」があることからは生産性に関して何も推論できない
そういうことが言いたかったら
「生産性が高くてもシェアがあるとは限らないし
シェアがあるからと言って生産性が高いとも限らない」
っていうべきじゃん
でも君の言ったのは
「生産性が高ければそこそこの「シェア」も自然とあるだろう」
だからね、お忘れなく >>782
そういう言語があるならRubyスレ覗かないよね?
なんで覗いてるの? 生産性は成果/コスト
C++を含むC系言語の生産性ってどのくらいなんだろうね
非標準ライブラリの信頼性検査コストや、デバッグのコスト、言語仕様に
起因する事故の損失や対応に要したコストを積み重ねたら悲惨なことになりそう >>784
初心者がなぜRubyはC++より生産性が低いって断言してるの?
使ってもいないくせに断言できるわけないよね? ぶっちゃけて言うと、メモリ管理がびみょいC++は生産性低いかも知らん
が
「特定の業種だと」C++がデフォルトって話にはなるわな
なに組み込んでんの? 的な意味で
ゲームもそうらしいが俺はゲーム業界知らんので
あとは単純な「慣れ」の問題もあるだろう
「慣れ」は個人の主観的感想
キチンとポジション明確にしてる人(例:「俺組み込みやってるんだけどさ」と前置きがあったといった人)
が言ったのでなければ無視すべき項目
とりあえず >> 768 の
> それでもRubyよりは生産性有るから問題ないだろう
という一文を見る限り、RubyじゃなくてC++スレに行くべき人ではないかなぁと判断している
RubyよりC++のほうが得意ならC++の話をC++スレでしているべきだ 「生産性が高ければ「シェア」もある」は
「「シェア」がある」が真ならこの命題は満たされてこれ以上『生産性に関して何も推論できない』でしょ
もちろんこのことから「シェア」がなければ生産性が高くないと言えるという指摘は正しい
しかしそれまでにC++はRubyより「シェア」があるとは言っているがRubyには「シェア」が無いとは言っていないのでふわっとしてて独善的と評しただけの話 うわー俺酔っぱい度高ぇな、もう寝るか
あと久々にRubyist Magagineみたら「RubyからPython蹴ったら統計処理の対応できなくね?」という
変態の記事があったので……ああ、うんRuby使いっぽいなって思った(小学生の日記風感想)
Pygmentsもそれで対応してるからな、どんだけ他人の成果を再利用するつもりだあいつら(いい意味で) 「C++のほうがRubyより生産性高い ※個人の感想です」
とか書いておいたら誰もケチ付けなかったと思うがねえ
レスは全部「お前の中ではな」になるだろうが つーか言語の評価に標準ではないライブラリを持ち込んでいる時点で頭のおかしい人だろ
これが許されるならRubyで数値計算ライブラリや画像処理ライブラリを利用した時の速度をもって
Rubyでも高速に演算できると主張できてしまう。そんなことを吠えている奴がいたらアホ丸出しw >>790
言語を比較する際に、生産性のみを論点にするのはナンセンスだ。
生産者は人間および組織であって、その人間、組織の言語習熟度が生産性に大きく影響するからだ。
言語を比較する際に、
1. 学習容易さ
2. 作ったアプリの実行効率(実行に要する、時間、バッテリーの効率性)
3. 多様なアプリを作れるか?
4. 大規模、多人数組織でアプリを構築容易か?
こういった観点で比較しないと! 初心者なら明らかにrubyのが生産性高いな
自分でプログラミング用のツール組むようになってくるとどの言語も大差なくなってくる気がする
簡素に書けるとかはストレスやミスを減らすのには役立つけど
自分がフレームワーク使ったり作ったりして結局ビジネスロジック記述だけが最終的な仕事だと思ってるからかもしんない Ruby初心者が毎日
# sample.rb
foo 14
bar 15
boo { | val | val > 5 }
bar 18
こんなビジネスロジックを記述するDSLばかり仕事で書かされていても、
Rubyについて習熟する事にはならない。
このファイルsample.rbがconfig.instance_eval File.read sample.rb
されている事を知らないと、全く何やってるか?判らんだろうなぁ。
おまけに、configがどのクラスのインスタンスなのか?判らんと初心者は、
生産活動しているとは言え、それはロボットと同じだ。
Railsアプリなんかは、こんな感じじゃ無いのか? SinatraのDSLの例
#sinatra.rb
get '/' do
'how are you?'
end
get '/path/to' do
"this is [/path/to]"
end
get '/erb_template_page' do
erb :erb_template_page
end
こんなん、がWebサイトになるなんて、初心者は納得できるのだろうか? お前だってtcpとかhttpレスポンスヘッダいちいち書かないだろ
大事なのは理解してるか、何かあったとき対応できるか プログラミング好きな奴がWebに籠もりたがるのは、仕事でソフトウェア開発すれば気持ちがわかるよ
手の届かないところに自分のコードをリリースするということがどれほど忌々しいことか 実行環境を制御できないこともね
たとえ仮想でもサーバごと納品できるのは(その点においてだけ)最高
JavaScript書かなくてもよくなればもっといいんだけど、まあ、そこは現実のお金との兼ね合いということで
うまくいっている部分があればあるほど我慢もききますわいな これだけ反応があってモゴモゴしてるってことは図星だったってことだな
>少なくともRubyより生産性あるしな >>800
アレはRuby初心者がRubyのことを知らないのに煽りで書いた文章だよ
本気にしちゃダメ >>794
> どの言語も大差なくなってくる気がする
あーそれ分かる
意外とねぇ、言語ごとのあれこれってのはどうにでもなる
どうにでもならない部分は逆に言うとどの言語でも同じ
苦しむところはどこでも同じと思う だとしたら実行速度が速い言語ほど優秀って事になりますね
1.5倍ぐらいなら全然許容範囲だろうけど
50倍〜100倍遅い言語は存在価値ありませんよね 出来ることに大差ないっていう文言を生産性等に大差がないと臆することなく換言する図々しさよ >初心者なら明らかにrubyのが生産性高いな
>自分でプログラミング用のツール組むようになってくるとどの言語も大差なくなってくる気がする
>あーそれ分かる
>意外とねぇ、言語ごとのあれこれってのはどうにでもなる
↑これは生産性についての話じゃないのかね? 日付変わる前に見たので一応レスしとく
>>806
ごめん
流れも読んでないし
さらに
切り取って部分的にレスしただけ
生産性とかについて特にコメントしたつもりはない
何に大差が無いかについては
実はなーんも考えてない >何に大差が無いかについては
>実はなーんも考えてない
そういうことにしないとRubyに良いところが何も無くなるからな
遅い、だけが残る 速度はだいたいIOがボトルネック
なのでどの言語でも実行時間同じになってくる
一部のアプリでは速度が大事でアセンブラとかで最適化されてたりもするけど >>805
生産性を上げるツールやマクロ作れない初心者にはそうかもね 漏れは、10言語ぐらい知っているけど、DSL を作りやすい、Ruby が圧倒的。
次いで、Groovy
vagrant, chef, SASS, Homebrew とか、ツールを作る際、
真っ先に、Ruby を候補に上げる
型安全性を高めるなら、Kotlin。
Kotlin = Java + Groovy
GC が無い、C/C++ などは、数年やってもバグるから、まともなアプリを作れない。
MISRA-C とか、安全にするには、学習コストが高い
派遣で行けば、分かるけど、数十人来ても、即さよならw
できる人が見つからない
デバイスとか、やる事が低レベルだから、
募集企業は、コンピューターリテラシーが必要って書いてる
コンピューターリテラシーって書いてる所は、要注意。
コンピューターのすべてを知ってる人の意味だから、
何百年勉強しても、分かることは、絶対にあり得ない
「Linux プログラミング・インタフェース」の著者は、
Linuxのman ページを書いてるけど、世界で唯一の、すべてを知る人 バージョンアップのたびに、互換性を心配しなくちゃいかんのが面倒。
Microsoftとかすこしはみならえ。 >>811
別にツールは対象となる言語で作る必要はないけどね rubyも長期サポート対象となるバージョンを出せば多少はよくなるかな
と思ったけどエンタープライズエディションってのがあったっけ MatzをはじめとしたMRIの連中はドカタIT大嫌いだから望みはないよ
実際、意図的にドカタITとは馴染まないようにしてる面もあるみたいだし RubyでElectoronみたいなツールないの?
Rubyだとマルチプラットフォームで動くGUI付きのアプリ作りづらいわ > Rubyだとマルチプラットフォームで動くGUI付きのアプリ作りづらいわ
それはRubyの仕事ではないからもうちょっとツールキットに優しい言語使え、がいちおう答ではあるのだが 簡単な物ならJRuby+JavaFXでサクッと作れるよ クライアントJavaとかもう世間の認識では存在自体がウィルスだから マルチプラットフォームのGUIはだいたいクソ。
よっぽど本気のアプリでなければ。 wxRubyは悪くない感じだが最近のRubyで使えるコンパイル済みバイナリが無かった気がする SDLとRubyで良いじゃん
winでもlinuxでもmacでも可能で、
互換性もばりばりあるだろ 起動速度が気にならないのであれば>>819もあり。起動時間はwxRubyの方が早いと思う >>826
機能的に間に合うならあり。標準で使えるしwxRubyより安定していると思う >>826
最近のバージョンで、とうとう標準ではなくなったんだろ。 まさに「Perlがあるのに何故Rubyを作るのですか?」状態だなww
ジョークのように思えて実は的を得ているのが面白い 自分用のソフトだとGUI必要になること滅多にないな
画像や動画関係のソフトはともかく >>811
>世界で唯一の、すべてを知る人
いやいやそれは言い過ぎ
「Linuxのすべてを知る人」ならともかく
無名だけどメチャクチャ有能な奴が
グーグルとかにいっぱいるから >>813
Win32APIとか長持ちしてるからな
Javaもそうだが大企業が作ってる言語は
後方互換性がしっかりしてるよな
RubyみたいなLLは
行き当たりばったりでバージョンアップしてる >>818
>それはRubyの仕事ではない
オブジェクト指向はGUIで真価を発揮するので
むしろRuby本来の仕事だと思う
良いGUIツールキットがないのはRubyの弱点
まあRailsのWebアプリが主力なんだろうけど…… >>826
Tkは見た目がショボイとかで
すごく不人気で標準から外された
でも個人的には学習量が少なくて
手軽に使えて良いと思う
Pythonとか他言語でも潰しが利くし >>830
ユーザの選択が複数必要なときにCLIだと困る
けっこうGUIが欲しいときはちょくちょくある わざわざ起動引数を指定させたり説明したりミニスクリプト作ってメソッドを呼んでもらったりするよりかは
10行程度の記述でボタンやテキスト欄やスライダーなどを作りそこから指定できるようにしたほうが絶対便利で楽だろうということでRuby/Tkが採用されたのだが
フツーの人が期待するところのGUIアプリケーションというのはそういう機能重視の素朴なものではなくもっとリッチで精緻で高速描画なものであったのだというオチである
まあガチプログラマの考える添付GUIサポートライブラリなんてのはそんなもんだw
Tkもツールキット部分の見た目は頑張ってたのだがね >>832
× RubyみたいなLL
○ Ruby
いわゆるLLでも、Perl5は高い互換性を維持してる。
あっちはさすがの伝統と資産があるからな。 でもPerlよりRubyの方が
読み書きしやすいから
もっぱらRuby使ってる
Rubyの長所は可読性が大きい 短く書けることは正義
見通しの良さを生かしてDRYを徹底し
その場限りの言語を作って構造を要約する
省力に拘るオタク遊びをするだけで
最も読みやすいプログラムが勝手にできるし
読みやすいからコメント入れる作業もほぼ不用 昔wxRubyでGUIアプリを作った時はGUI関係のコードが7〜8割いっていた気がする。GUIって効率悪いよね プログラマ側はCLIの方が作りやすいけど
一般ユーザが使いにくいので
商業アプリではほぼGUI必須だね >>829
ほんと、PerlがあればRubyなんていらないよな
多様性なんて害悪だよな Rubyがもっと素晴らしいものだったらよかったんだよ
例えば今風の最新の静的型の機能を持ったスクリプト言語とか
もし当時あったら珍しかったんじゃないかな
https://ja.wikipedia.org/wiki/Standard_Template_Library
↑はC++のテンプレートの話だが、「歴史」の項目が面白い
Matzが一所懸命Ruby作ってた裏では天才たちがこんなことしてたんだな
動的型のような将来性のない(今となっては負の遺産)もの作ってもしょうがないだろ
まさにPerlがあるのに何故Rubyを作るのですか?だな
今後どうなるのかわからないけど、もう、どうにもならないでしょ
本人も静的型は入れたくない(というか入れれない)ってゲロってるし
今後Rubyの時代は絶対来ない、コボルみたいな存在になるんだよ 当時JavaもC++のテンプレートを馬鹿にしていて
あんなものはオブジェクト指向じゃない
オブジェクト指向言語のJavaにあんなものは必要ない
って言ってたんだけど
結局似たようなのを導入したよね
やっぱコンパイル時に型チェックが入るのはメリット有るんだよ >>844
意味が通じなかったかwww
ごwめwんwねwww 君が多様性があったほうが良いと思っているのは承知だけど
それならそれで、もっと良いものじゃないと意味ないだろ、ということだ Perlを増築してオブジェクト指向を導入する方向で頑張ってもよかったんだよ
そしたら過去のPerlの資産も使えるからね
だけどそれが気に入らないから一から作ったんなら
もっと最善を尽くさなきゃ作る意味ないでしょ
特に最初の一歩は重要で、Rubyは動的型にしてしまったから
今現在にっちもさっちもいかなくなったわけ Perlは覚えようとして挫折してRubyに流れ着いたのは自分だけか
Perlはパッと見て何をやっているのか全然判らない >>848
俺が思ってる事に勝手に限定してんじゃねえよ
Perlが標榜するものの一部だろうが
それに人間性に問題があるのか知性に問題があるのか知らねえけど、
Perl6ならオブジェクト指向プログラミングが可能だし変数を型で縛れるぞ >>850
俺は一度Ruby-1.6シリーズを触ったけどその時は合わなくてPerlに行った
PerlでCGIゲームを書いたけど結局1年半でRubyに流れ着いた
その時はRuby-1.8.1か2になってたかな
それからは個人利用だとRubyが中心になってる
決定的となったのはRuby Hacking Guideの存在だったな
Web版で済ませましたスンマセン Rubyが動的言語なのは必然
何も分かってない
影響を受けたPerl、Lisp、Smalltalkが動的言語
利用形態が近いLAMPのP言語のPerl、Python、PHPが動的言語 >>852
>Ruby Hacking Guide
これって、今でもWeb版が閲覧できね。
知らんかった。 Win7(32bit)上のRubyInstaller2からwin32oleを使ってデータベースに接続しようとしてるんだけど
ODBCデータソースのOpenで例外が出てしまう。
エラーメッセージは↓
システムエラーコード126 指定されたモジュールが見つかりません (〜)
カッコ内はODBCドライバのフルパスが書かれているけどファイルは間違いなくそこにある。
試しにActiveScriptRubyでやってみたらうまく繋がる。
これってどんな原因が考えられるでしょうか? >>853
ダメなものの真似する意味あるの?
Pythonは動的型にしたおかげで苦しんだよね >>855
不確かな答えになるけど
ODBCドライバが依存しているライブラリが読み込めないから?
環境変数のPATHを確認してみると違いがあるのかな
ruby -e 'p ENV["PATH"]'
あとはActionScriptRubyのruby.exeがあるディレクトリに移動してRubyInstaller2のruby.exeを起動してみるとか >>857の追記
ググったらかなりの数がヒットしたから解決できるかもよ
https://www.google.com/search?q=ODBC+システムエラーコード126+指定されたモジュールが見つかりません 今現在も苦しんでる途中といってよいんじゃないかな
初めから静的型を導入してれば何でもなかったのにな
Pythonのこの様子をみてmarzは
Rubyに静的型を入れるのを止めたわけで
どのみち行くも留まるも地獄
初めから静的型にしておくのが正解だったわけだな
動的型っていったい何のために有るんだろうな
開発速度も実行速度も遅いんじゃ意味わからないよな
処理系を用意するのが楽ってこと以外はメリットが見当たらない JSも非常に苦労が絶えないよね
まず使いにくいから静的型のTypeScriptとか作られたり
ブラウザのJSエンジンも速度上げるためにキチガイじみたことやってるよね
なしてこんなことにって感じ
動的型って世の中を混乱させて無駄なエネルギーを使わすために有るんかね スレが伸びてると思ったらまた例の粘着荒しか
こんなのを生み出したこいつの親に製造責任とって欲しいよ、ホント
win32oleの話題が出てるけど、
ファイルダイアログ扱うCOMってOSのメインバージョン、xpとかvistaとか7とか違っていても共通でいけるの?
それともメインバージョン毎に異なるCOM使わないといけないの? >>865
TypeScriptって凄い名前でしょ
なんたって「Type」Scriptだもんな
言いたいことが名前に表れてる
何に対するアンチテーゼなのか明確
これが今後の常識 >>855
"mfc71.dll"、"msvcp71.dll"、"msvcr71.dll"の3つのファイルを入手してOSのシステムディレクトリ"c:¥windows¥system32"に保存すればよい。 VC++ 2010(32bit版)、VC++ 2012(32bit版、64bit版)、VC++2013(32bit版、64bit版)の計5つのランタイムの内、1つをinstallすれば解決できるかも。
まあ、この手のエラーは、ランタイム地獄とか、DLL Hellとかで検索! プログラム初心者がrubyを1から学ぶ上でおすすめの本とおすすめのサイト・ブログを教えてほしいです。
ちなみにルビィの冒険はすでに持ってます。
というかルビィの冒険を読んで興味持ちました。 ルビィの冒険
↓
はじめてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン >>870
沢山ありがとうございます!
ちなみに発売日が古い本でも問題はないでしょうか?
昔と今との変更点とかで >>872
残念ながら大有り
そこに気づけただけでも君はバカではないようだ >>872
基礎的なことを学んでいくなら問題はない、
しかしJavaScript等は最近大幅なテコ入れがあった。
だから不安なら、ここ最近1年以内の本を買ったほうがいい。
またそもそも基礎的な事、基本的な事なら10年以内の本でも
名著であり続ける。だがその数は少ない。 Rubyの言語仕様をある程度覚えたら、
次にリファクタリングRubyエディションを読むと良い
コードの最も筋の良い書き進め方を会得できるし、一般的なプログラミング作法の本質を学べる
コードをバリバリ書けるようになるし、Rubyを便利に使いこなす理解も深まる ary = ["a", "b"]
ary[0] = ary[0] + "x"
puts ary[0] #=> ax
ary[1] =+ "y"
puts ary[1] #=> y
上なら、文字列が連結されて、
下なら、b が消えて、上書きになるのは、なぜ?
文字列の、=+ 演算子は意味が異なるの? ary = ["a", "b"]
ary[0] = ary[0] + "x"
# ary[1] =+ "y"
ary[1] += "y"
puts ary
表示
ax
by
自己レス
+= だったか。
=+ と逆に書いていたw
でも、コンパイルエラーが出ない よっぽど仮想学習的な環境でない限りNoMethodErrorが出るよ
irb> a = %w(a b)
irb> a[1] =+ "y"
NoMethodError: undefined method `+@' for "y":String paiza.IO で実行したけど、コンパイルエラーにならなかった >>881
paizaは2.4系だから。あと細かいけど、インタプリタだからコンパイルエラーと呼ぶのは違う気がする 文字列のimmutable化による変更のひとつとして、Stringクラスに単項演算子+、-が追加されてる。
ttp://qiita.com/iwamot/items/2ddf8de09d5dbcad2df9
こういう事情らしい。
http://d.hatena.ne.jp/ku-ma-me/touch/20151004
Rubyはやっぱりクソ。互換性に対する配慮が甘い。 >>882
言いたいことはわかるが、コンパイルエラーでも問題ないと思う。
実行前の文法エラーなのであれば、あきらかに事前のコンパイル段階のエラーなんだから。 あ、>>884に追記。
インタプリタどうこうの点についてのつもりなので、念のため。
881がコンパイルエラーといってるのはおかしいと思うよ。 >>883
誰かと思えば遠藤さんか
それなら説得力あるな >>883
+@, -@の追加は別にいいけど3.0以降のデフォルトimmutable化はさすがに勘弁して欲しいなあ、Railsの声が強すぎる……
>>884
RubyのNoMethodError(というかException全般)は実行を試みて初めて出されるから実行時のエラーだよ。(ランタイムエラーと呼びたいがRuntimeErrorクラスと混同しかねないので悩ましい)
endが足りないとかのSyntax Errorとは別物だと思うけど。こっちは実行前の構文解析。 >3.0以降のデフォルトimmutable化
定数は自動的にfreezeするくらいの対応で良かったな Rails(無理)が通ればRuby(道理)が引っ込む Railsさんを追い出したら島根のお役所へのPRに使えるようなRuby採用事例がほとんど無くなって金貰えなくなるからね
Chefみたいなインフラ系の事例を出されても役所の人「ハァ?」だろうし RoR上でのみデフォルトでimmutable、ってのも立派な"Rail"じゃないのかなあ。
どうせマジックコメントで切り替えられるようにするんだったらわざわざRuby全体のデフォルトを変えんでもいいでしょうに…… >>892
よくねーよ
Rubyで作れるのは
Webアプリだけじゃねーから
Railsみたいなフレームワークを
言語仕様にしちゃうと窮屈になる >>895
他に何に使われていようが、金を産んでるのもMRIにコミットしてる開発者が作ってるのも事実上Webアプリだけだから
他は無視しても全く問題ないのよ、残念なことに >>896
そんな発想だから
機械学習とかWeb以外の
ライブラリが充実してるPythonに
国際的に負けてしまう >>895
知らんよ
RailsがRailsで何を作ろうが関知するものではない Rubyが、ドンドン、Elixir に近づいていく
>>887
そう言えば、「メタプログラミング Ruby」にも、
NoMethodError を上書きするな、って言う格言があった これも結局速度のために手動で変な最適化をプログラマに課してるだけのことだよな
こーゆーノリはC言語時代にはよくあったと思うけど
なんせ当時のCPUは今から考えるとものすごく遅かったからなぁ
だけど今時だとCPUも速いしコンパイラの最適化も凄いから
特に何も考えなくても十分に速いので、変な最適化に技巧を凝らすより
読みやすいコード書けってのが主流だよな
だけどRubyはメジャー言語より平気で50倍とか遅いし
コンパイラの最適化も糞なので手動で最適化するんだなwww
3.0GHzの最新CPUを使ってても50〜100MHzのCPU相当の速度になるし
加えてコンパイラの最適化も糞で手動で最適化とか
まるで20年ぐらい前の感じだな
動的型でプログラミングが楽になるはずが
静的な型チェックもなければ速度が遅くて手動で最適化とか
本当に動的型は素晴らしいですね スクリプトで手間暇かけて凝ったアルゴリズムで計算量減らすより
C++でブルートフォースしちゃった方がてっとり早くて速かったりするのはよくある話
スクリプト向きのタスクか否かを感覚的に見抜けることは大切 今もう2017年だよな
Rubyはこんな最適化のために
今更言語仕様を変えるだとか変えないとかで盛り上がってて
何なんだろうな
これから先もずっとこんな調子なのかね
元の実行速度が遅いから速くするための最適化のために言語仕様をどうのこうの
今はforループを自動で並列展開してマルチスレッドとかSIMDとかで
コンパイラに頑張ってもらって速度を稼ごうとか
そういうこと言ってる時代なのに
やってることがあまりにも原始的というかなんというか
技術的に何も面白くないし、触ってて本当に楽しいんだろうか?
よく考えられた静的型のシステムがあるわけでもないし
化石言語だな
ありとあらゆることをプログラマに丸投げ ありとあらゆることが悪い方に作用している様は本当にすごいよ
動的型のおかげでそもそも遅そうなのにろくに最適化もかからないから鈍足
遅すぎるのでプログラマが手動で最適化してください
加えて静的な型チェックもしないのでテストするなりなんなり
プログラマが頑張ってください
動的型って何なんだろうね 専ブラを使っている人は次の正規表現をNGIDとして突っ込んでおきましょう
\b(ppLsekVC|qMkdrUOQ|IBgoqo2I|AOJFjP\+S|bC2KM4MS|Wy5AX0em|m8GLf68F|hEgnFYnk|HGihyxQL|PA7iDDOj)\b ワッチョイじゃないからあんまり意味ないんだよなぁ
1行読んで心のNGフィルターに突っ込んでるから問題ないけど ま〜た涌いてるのか
はよー親に製造責任とってもらえよ 趣味で作られた「オレ様の考える最強言語」にちょっと高望みしすぎじゃないの とか言っちゃダメかな 初心者スレで暴れまわって機能不全に陥れるとは
Rubyは完全に澱んでるな
Pythonコミュニティとすっかり差が開いてしまった
人気ランキング1位
Pythonは今のうちに習得すべき?『スラスラわかるPython』著者・岩崎さんとPyCon JP理事の寺田さんが語る:CodeZine(コードジン)
http://codezine.jp/article/detail/10329 >>908
いわゆるスクリプト言語の多くがそうなんだよなあ。 コマンドライン引数が表示できません。
OSはwin10、rubyのバージョンは2.4.1-2-x64です。
コードはprint_arg_1.rbという名前で、
#!c:/ruby/bin/ruby
print ARGV[0]
コマンドプロンプトには
c:\ruby\samples>print_arg_1.rb A
と入れてみるのですが、何も(エラーも)表示されません。
Aと表示させるつもりなのですが・・・。
ちなみに、powershellに入力した場合はAと表示できます。 c:\ruby\samples>print_arg_1.rb A
のAの前のスペースが全角だからじゃね >>912
すいません、そこは半角でした
半角で入れてみても、うまくいきません >>913
ruby -e "p ARGV[0]" A
ってやったら
"A"
って出力される? ruby hoge.rb A
頭にrubyをつけてみては >>915
コードを
#!c:/ruby/bin/ruby
p ARGV[0]
と書き換えるということですか?
やってみたところ、nilとでました >>917
.\print_arg_1.rb A
と入力しました。
"A"と出力されます。 コマンドプロンプトからwhere ruby
多分rubyがバッチファイル 以下、そういうときの正確な状況を確認する方法。
次のコマンドラインを実行して、関連付けを確認。
assoc .rb
その出力結果を引数にしてftypeを実行して、実行されるコマンドラインを確認。 powershellで実行してるものと、コマンドプロンプトで実行してるものが別ファイルである可能性くらいしか無いのでは rubyでOpenglいじってるけどコード書き換えやすくて楽しすぎ
他にも楽しそうなもの無い? Sequel4でSQL server上の日本語てんこ盛りのテーブルに接続できるか試しているんですが
日本語以前にシンボルを使ったアクセスだと全部upcaseされているっぽくて
大文字小文字混在の識別名?が指定できなくて詰んでます。
これどこで設定すればいいんでしょうか? .\print_arg_1.rb A
.\ は、カレントフォルダだから、相対パス付き
c:\ で始まっていたら、絶対パス
print_arg_1.rb A
これは、パスではない。
print_arg_1.rb というコマンドになるから、そんなコマンドは存在しない
基本は、実行したいスクリプトファイルのあるフォルダへ、
cd で移動して、そのフォルダで、.\ を付けて、
.\print_arg_1.rb A
とする
#!c:/ruby/bin/ruby
Windows でも、シバンが使えるのか。
パス区切り文字は、/ でも認識できるのか rbのファイルタイプを常に
ruby.exeで開くように設定したんだろう
そのときにたぶん"%1"ぐらいは設定されてるのだろうけど pythonのインストーラーが尋ねる2通りの選択
pathに設定するかwindowsシステムにアプリケーションを登録(推奨)みたいなやつがあって謎だったが
今意味が分かった 環境変数PATH をいじくったら,
すべてのコマンドの起動に影響するから、大変 WindowsでのRubyプログラムで
一番大変なのは環境構築だからな
環境変数がどうこうはよく調べておくように pyenv, rbenv など、仮想環境を使うと、
環境変数PATH の先頭に追加するから、極めて危険
〜python2
〜python3;〜python2
例えば、python コマンドの実行ファイルが、
〜python2 ではなく、先に、〜python3 のパスで見つかるから
そのコマンドが、どの実行ファイルを起動しているのか、くれぐれも注意せよ ruby って -K で文字コード指定して実行出来るみたいだけど
バージョン指定して実行するようなオプションってあったっけ version指定というか、ruby処理系を指定しての実行なら可能なはず
上ででてきた#!c:/ruby/bin/rubyを応用して、
version毎にディレクトリ作ってパス指定 突き止めました
エクステンションを導入して変換を無効化すればよかったです。
DB.extension :identifier_mangling
DB.identifier_input_method = nil
DB.identifier_output_method = nil 間抜けなことしてました。
ODBC使うのにsequelが自前でやってると思ったらruby-odbc使ってた。
だからodbc-utf8を先にrequireしないとutf8が通らなくて日本語以前だった。
ほかにもfreeTDSでutf-8だと指定効かないとか気がつかなかった。
bundlerが依存関係全部処理してたから気がつかなかった… ありがと。
さらに問題発覚。というかsequelの手抜きなんだけど
likeを発行するときにsql server向けの互換レイヤはLatin1_General_*を強制的に付け足す。
ハードコードされてて切り替えできない。とりあえずlib/sequel/adapters/shared/mssql.rbにパッチ当てたけど
gitみてもこの辺対処されて無いっぽい。5になれば期待できそうな感じはあるけど。
あーやっとやっつけ集計バッチをこれで置換できるかもしれん
あとはsinatraとhamlとsassか… いろいろいじった結果
FreeBSD 11.1R
ruby 2.4.0
sequel 4.48.0
ruby-odbc 0.99998
unixODBC 2.3.4
freeTDS 1.00.131,1
Microsoft SQL Server 2008 R2
の組み合わせで日本語てんこ盛りのデータベースを読むは問題なさそう。作ったり書いたりはこれからだけど基本集計だけだし。
結局utf8周りの設定は一切合切消してもrequire 'odbc-utf8'があれば普通に日本語通ってしまった。
数年前に試したときにうまくいかなかったのも多分これのせいだったんだろう。 そういば、1.8かどうか忘れたけど、
Arrayの派生クラス同士に+をつかって、新しい派生クラスのインスタンス出力しようとしたら、
派生元のArrayのインスタンスが出力されることがあったな
長い間気づかずどつぼにハマッてたのを思いだした Arrayの派生クラス同士に
↓
Arrayの派生クラスのインスタンス同士に たいがいの言語でそうなっちゃうでしょ。
まあしかたないね。 >たいがいの言語でそうなっちゃうでしょ。
そんなことないよ
静的型だったならどこかでコンパイルエラーになって気づけた可能性もあるよ まーた涌きやがったかコイツ
まぁRubyだからこそ直接Arrayクラスのメソッドをself.classをつかったコードに書きえて、
派生先のクラスでも問題なく動かすようにできるわけだけど
当時もそうやって楽に対応できたし、今のverなら書き換える必要も無く対応してるんじゃないか?
確認してないけど このような実例があると
動的型にすると無駄な時間が増えることが
初心者にも分かりやすくてよいですね 普通、配列のような基本的なクラスからは、クラスを派生させない
継承を使うのは、自分で作ったクラスか、
継承されることが前提のクラスだけ
一般的には、継承より包含を使う
包含の方が、継承よりも柔軟だから、
配列のような基本的なクラスには、合っている DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ >>948
静的型とか動的型とか全く関係ない
>>945
マニュアルくらい読もうぜ
Array#+ は self + other -> Array
https://docs.ruby-lang.org/ja/2.4.0/method/Array/i/=2b.html
pryでshow-doc, show-sourceすればすぐ分かる内容
show-source Array#+
>>951
言いたいことはわかるがArrayを派生したい場合だってある
Rubyはそういうことを制限しない言語
そのかわりに相応の力量が求められる Arrayから直接派生させるよりも、
EnumerableやForwardable使うほうが普通だとは思うけどね 結果収束的には「可能ではあるが極力行わないようになる」こと自体は間違いはない
なんでもかんでもメソッドチェーンにしないのと似たような感覚
ただし(古い表現だが)足元を弾痕穴だらけにしないとわからない感覚なので、未経験者に最初から指示するようなものでもないな
それはそれで「本当は何もできないやらないわかっていない」机上の人だろう DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ >>956
Arrayを継承したいと考えた理由次第だろ
モンキーパッチ、リファインメント、継承、コンポジション
それぞれメリットデメリットあるんだから初心者であっても
そのトレードオフが理解して自分で判断できるようにならないとダメだよね?
基本クラスであってもどういう方式を選ぶのがいいのかは状況次第だから
背景理由を無視して、一つの選択肢を採用したほうがいいっていうのはちょっとっ極端に感じるよ >>954
仮にArrayを継承させたとして
何かのメソッドで思っていた型と違う型が返ってきたとして
静的型ならコンパイルエラーになって即気づける可能性が高いよね
せっかく>>945がRubyが動的型のせいで
> 長い間気づかずどつぼにハマッてたのを思いだした
って告白してくれてるのに
あるメソッドが、どのような仕様になってるかなんて
そんなものはどのような仕様にでも実装できてしまうわけで
(そう書けばそう動く、というだけ)
大事なのは、勘違いしたとき、間違ったときに、直ぐに気づけるかどうか
だからArrayを継承すべきじゃないとかってのは話の本質じゃなくて
長い間気づかずドツボにハマってたのは何故かって部分なんだよ 俺みたいなののほうがマトモなこと言ってるのがもう不思議なぐらいだろ? それぐらいダメってことなんだよ、言語もコミュニティーも >>960
言語を使う側の能力の問題を
全部言語のせいにしちゃだめだよ
var result = myArray1 + myArray2
↑みたいに型推論使ってたら似たような事起きるだろ
それは型推論自体がダメだからなのか? 型推論使用禁止にする?
使う道具のメリットデメリットをちゃんと理解して使いこなせてないからだろ
静的型にメリットがあるのはわかるが結局それはトレードオフなんだよ
何を選択するかの問題 その場合でもresultをどこかに渡したり
継承で拡張したメソッドを使ったり
実用的なことをしようとした瞬間にコンパイルエラーになる
お前はそのresultを何も使わずにそのまま捨てるのか?
結局、現実的な部分が全くないんだよね
机上の空論、それがRuby しかも俺は
>気づける可能性が高いよね
とも書いてるわけで
現実的にはどこかの段階でコンパイルエラーになる可能性が高い、と スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています コンパイルが通ってもその後テストを走らせることになるけどな >>965
オーバーライドしたメソッド呼び出してもコンパイルエラーにならないだろ
静的型でも同じこと十分起こりえるよ
運良くコンパイルエラーで拾えるケースだけ上げて
静的型使うべきなんていう主張はナンセンス
力量が低いやつは静的型選んだほうがいいよっていうアドバイスなら
まだ理解できるけどね 再三にわたり伝えましたが、もう一度
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています 起こりえるが、可能性は低いわけだ
運良くコンパイルエラーで拾える、というより
運悪くコンパイルエラーで拾えないケースもありうる、ということ
運が良くないとコンパイルエラーで拾えないんなら
静的型言語はこんなに普及してないし、もてはやされてもない
現実が全く見えていないんだね >>967
LLスレで相手にされなくなったからな
隔離スレの自覚持って欲しいもんだ >>970
「だから動的型はダメなんだ」とか思っちゃう初心者が出ないように
きちんと反論しとくことは重要じゃねーの?
>再三にわたり伝えましたが、
って>>967の1回だけじゃんww >>973
私たちにとってはなんら重要ではありません
お帰りください >>971
型推論禁止すれば運悪くコンパイルエラーで拾えないケースも潰せるね >>976
あなたにはもうそれを判断できるだけの客観的知性が残っていないからです >>969
力量が低いだけに留まらず、現実逃避する頭の悪い知ったかぶりのお馬鹿さんなら
あなたが話しかけてるそこにいますよ 俺が言うのもなんだけど
ID:Z79NM4TLやID:lIOBscykのが正解だと思うよ
「そんなことは初めから分かってて承知の上で使っているのだから
放っておいてくれ」
って所でしょ
欠点を認められずに使ってる方が異常 スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります 自分が何をしてるか全く理解できないんだろうな
レスがつくことそのものに興奮してここがどこかも判断できていない
貴方達そのものを我々は必要としていない
貴方達が書き込んだそのものを私たちは歓迎しない
我々私たちの望みはひとつだけ、二度とここに来るな 何か映画とかで、スラム街とか田舎町の住人に言われそうなセリフ スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります 「Effective Ruby」項目21にも書いてある
コアクラスを継承するな。委譲・包含(Forwardable)を使え。
is-a よりも、has-a を使え
たいていの言語では、String型なども継承できない。
final 指定されてる
初心者は、コレクションを継承したがるが、アンチパターン。
継承すれば、バグるだけ
たいていの「Effective 何々」とか、デザインパターンの本にも、書いてある >>981
例の人は自分が来るせいで誰も居なくなったんだってわかってないからな
コミュニティは衰退したのではなく特定の人物の書き込みにより破壊されたのだ Arrayのような多くの人が慣れ親しんだインタフェースを提供したいと考えてるんだが、
それ自体が慣れで運用してしまうから問題、ということなのか?
極端な話myaddとかにした方がいいのか JavaScript の、prototype.js なども、コアクラスを上書きして、挙動が変わるから、
皆から、うっとうしがられてる
とにかく、バグるから、個人で、コアクラスを修正してはいけない
やってもいいのは、Date クラスに、便利な関数を追加したり、
Rails とか、使用説明書・メンテナンスもしっかりしている、
有名なフレームワークだけ >>985
項目21の根拠はなんでしょう?
1. 継承を使うとなるとSuper Classの詳細を知る必要がある。
2. 移譲なら使いたい機能をつまみ食いすれば良いので楽。
こう言う事でしょうかねぇ? 例えば、親のArray から、子のDerivedArray を派生させて、
reverse を呼んでも、子クラスを返さず、親クラスを返してしまう
全メソッドを、派生クラスに対応させるのが、無理だから
委譲で、Forwardable モジュールの、def_delegators で、
使うメソッドだけ、宣言する方が簡単
漏れも、10言語以上、数十冊の本を読んでるけど、
配列など、コアクラスを継承した、ソースコードは見た事がないし、
たいていの言語で、継承よりも委譲を使うように書いてある
そういう論文も多い >>992
ところで、論文はどのJournalから? 「c++ 継承 委譲」で検索!
ほとんどの論文が、継承よりも委譲 a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b=[[1,3,4,5,6,8,9,11,13],[2,3,4,5,7,8,10,12,14]]
aの配列からbの配列を作り出すにはどの様にしたらいいでしょう? >>996
>a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
まずは、
a=[[1,2],[3, 3],[4,4],[5,5],[6,7],8,[9,10],[11,12],[13,14]]
を作る。 ar = []
a.each do |e|
if !e.instance_of?(Array) then
ar << [e, e]
else
ar << e
end
まずはこんな感じ! >>996
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) } このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 118日 13時間 58分 11秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。