Ruby 初心者スレッド Part 65
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 64
https://mevius.5ch.net/test/read.cgi/tech/1535797516/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured >>232
ムダにややこしく考えすぎ。
だいたい、コントロール文字が複数バイト文字の一部に含まれるエンコーディングはかつて存在しなかったし、今さら将来に発明されることもない。 >>232
いつも他スレで暴れてるrubyボット君か。
毎度毎度、仕入れた知識の表層をなぞるだけで知ってるつもりになってるから、具体的な問題点が理解できてないし、考えようともしない。だからいつも的はずれなことを言っては他の人に突っ込まれる。 sjisには悪名高い「表」などのダメ文字が存在する。
複数バイト文字の最後のバイトに、\(逆スラッシュ)が存在する。
euc-jp では存在しないけど
ダメ文字で、バグらされた人は多い
特に外人は、1文字1バイトでコーディングするから、バグる! 今はUTF-8を使うので、sjisはもう過去の問題。
WindowsもUnicodeに完全対応している https://rubygems.org/gems/lazy_priority_queue/versions/0.1.1
Windows10 で、MSYS2 コンパイラー無しの状況で、上の順位キューを、
gem 'lazy_priority_queue', '~> 0.1.1'
で入れようとしていますが、
この、SHA 256 checksum は、gem で入れたモジュールに対して、どうやって確かめるの?
e5d4ea8d037e8743afc91019fc23f5f6858372fea73e05e8244f8964f0634337 >>239
チェックはgemが勝手に行っているから貴方のような馬鹿がいちいち気にする必要はない ダウンロードじゃなくて、gem で入れた場合は、
checksum を確かめる必要は無かったかな? >>237
File.open( "foo.txt", "w:CP932" ){|fh| fh.puts("ソ") }
File.open( "bar.txt", "w:CP932" ){|fh| fh.print("ソ") }
File.open( "car.txt", "w:UTF-8" ){|fh| fh.print("\u4E0A") }
File.open( "foo.txt", "r:CP932" ){|fh| fh.seek(fh.size-1); puts fh.read(1).start_with?("\r","\n") }
File.open( "bar.txt", "r:CP932" ){|fh| fh.seek(fh.size-1); puts fh.read(1).start_with?("\r","\n") }
File.open( "car.txt", "r:UTF-8" ){|fh| fh.seek(fh.size-1); puts fh.read(1).start_with?("\r","\n") }
UTF-16やUTF-32等のファイルがあるなら対策すること。 >>243
テキストファイルとして読み込んだファイルに、
seek のようなバイナリ(1バイトずつの)処理を使うと、
複数バイトの文字が存在するから、バグらない?
複数バイトの文字があると、文字数とバイト数が異なるから >>243
fh.seek(-1, IO::SEEK_END)
の方がよさげ macでHomebrewを使用して、最新版2.6.1をインストールしましたが、
ターミナルでバージョンを確認すると古いもの(2.3.7)が表示される。
この場合考えられる要因は何でしょうか? マッキンは知らんけど、どうせPATHやろ?
whichとかruby -Vとかで、インストールされたパスと実際に実行されるパスを確認したら? Mac は知らないけど、元からRuby が入っているから、仮想環境のanyenv を使うとか?
元のバージョンも消せないでしょ?
rbenv(Ruby), pyenv(Python), ndenv(Node.js)
こういう事も知らない素人が、2.6 などの最新版を使ったら、ダメでしょ。
1年過ぎたバージョンを使え!
漏れは、Windows10 だけど、まだ、2.4.4 を使ってる Win以外なら最新版でほとんど問題ないんだよおバカさん >>251
お前のレベルは低すぎるなw
Rubyを使うのが目的で、Rubyで何かを作った経験がないだろ >>243
結果は、true, false, false になったけど、どういう事? >>234
修正
String#lines の所を見たら、chomp: true で改行も削除できる。
こりゃ便利!
p ary = <<"EOT".lines( chomp: true ) # 配列
a
b
EOT
#=> ["a", "b"] なぁなぁ。
CSRF対策って、トークンを input hidden に書けってのが鉄板だけど。
あれってform action のURLに書いてもセキュア度って変わらないことないか?
URLなら href にも書ける(使い道は考えてない) >>255
だめ
CSRFっていうのは、悪意のあるやつからリンクが送られてきて
それを開いてしまうことで成り立つもの
リンクの中にトークンを入れてしまったら意味がない
トークンがリンクの中に入らないからこそ意味がある >>2256
そんなん。
悪意のある奴から送られてくるリンクにあるトークンと
対象者の持ってるセッションに紐付けられるトークンは
全然違うやん。
悪意サイトに埋め込むフォームの場合も結局は
action と hidden を書くわけじゃん?
要するに hidden に書くべきトークンが予想できないからCSRF対策になる訳でしょ。
これが action に書いてあってもなんら変わらないじゃん?
↑以上、予想が非常に困難なトークンを前提。もちろんそれが当たり前だし。 >>257
全世界が認めている方法よりお前が考え出した方法のほうが優れていると思えるところがすげえな
お前と仕事する奴がかわいそう >お前が考え出した方法のほうが優れている
どこをどう読んだらそう解釈できんの?実際使うとか、勝手に妄想するなよ……。
そもそも全世界が認めている方法であれば理由は明確なんだよな?
その割に鉄板扱いの呪文レベルで、理由が書いてある記事がないのは一体どういう理由なんだろうか?
そもそも get ではなく post にするのは感覚的にも、暗黙の了解的にも、
当たり前だがCSRF対策で postにせよと書いてあるもの自体が少ない。
セキュリティ初心者向けならなおさらなんだが。
get にしてしまえば URL に乗るし、input である理由が薄弱なのがイラっとするんだよ。
理由が知りたい。 >>259
Ruby以前に、社会人としておかしいな。 Ruby ではクラス直下では、self(this)は、クラスを指す。
一方、initialize 内では、new で呼ばれた各インスタンスを指す
class Cat
p self #=> Cat クラス
def initialize( name, weight )
@name = name
@weight = weight
p self #=> 各インスタンス
end
end
bob = Cat.new( "bob", 5 )
alice = Cat.new( "alice", 4 )
出力
Cat
#<Cat: @name="bob", @weight=5>
#<Cat: @name="alice", @weight=4>
オブジェクト指向をわかっていない人には、Python は無理
まず、Rubyでオブジェクト指向・関数型を学んでから、
Python, JavaScript, Kotlin などをやらないと無理 one time token は、URL のクエリ文字列など、見えたらダメ!
form のhidden 内じゃないとダメ formのhiddenが見えないとかマジかよ
さすがにその理解はヤバすぎ Rubyを勉強し始めようか迷っていて、適当にWeb見てたんだけどさあ
一部のページで、「Railsから入った人にとっては驚くかもしれないけど、Ruby単体でもプログラムが書ける」みたいなことが書いてあって驚いちゃったな
これ、Rubyの言語より先にRailsの学習をすることも可能なんか? 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 96873
https://you-can-program.hatenablog.jp >>266
できる
「Rubyのコード」を書かなくても(知らなくても)Railsはある程度使える >>268
そうなのか、ありがとう!
面白そうだからRailsからやろうかな Rails は半年掛かるので、普通人は挫折する。
Sinatra から始めるのが良い
社内エンジニアから、Railsエンジニアになった人の動画が、YouTube にもある
Railsの知識が、膨大な理由は、Ruby の文法じゃない
Linux のOS のコマンド・機能、テスト、環境構築運用技術や、
DB、HTML, CSS・SASS, JavaScript, jQuery など、システムのAll Set だから
Railsが、全言語のフレームワークに応用できるのは、大半がRubyの文法とは関係ないから。
ほとんどの内容が、システムの事 でももうRailsははやらんよな。
実際にはわかりやすくもないし。
もちろん用途によるけど、Rubyに興味があるのなら、Rubyからやったほうがええんちゃう? この行列の前後に、番兵(0)を置くには、どう書く?
ary = [[1, 2, 3], [4, 5, 6]]
結果
0, 0, 0, 0, 0
0, 1, 2, 3, 0
0, 4, 5, 6, 0
0, 0, 0, 0, 0 import pandas as pd
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
df = pd.concat([pd.DataFrame([0]*df.shape[0]),df,pd.DataFrame([0]*df.shape[0])], axis=1)
df.columns = list(range(df.shape[1]))
df = pd.concat([pd.DataFrame([[0]*df.shape[1]]),df,pd.DataFrame([[0]*df.shape[1]])])
df.index = list(range(df.shape[0]))
>>> df
0 1 2 3 4
0 0 0 0 0 0
1 0 1 2 3 0
2 0 4 5 6 0
3 0 0 0 0 0 >>272
ary = [[1, 2, 3], [4, 5, 6]]
a=[0]*ary[0].sizeこ
b=([a]+ary+[a]).map{|x|[0]+x+[0]}
p b
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 0], [0, 4, 5, 6, 0], [0, 0, 0, 0, 0]] >>274
すみません。途中に入ったひらがなはゴミです無視してください。 >>272
番兵なんて使わないと言っておく
あんなの必要なに、古い言語だけや(笑) 番兵て。w
マトリクスに余白があれば、処理が簡単になるアルゴリズムは存在するやろ。
パッとは出てこないけど、ホントにいろいろ。 番兵を使わないと、1〜6 (1:start, 6:end)の道順をたどる際、面倒だろ?
例えば、1 から次を探すのに、上下左右を判断して、
上・左にはマスが無いから、番兵で壁を作った方が、プログラミングしやすい たのしいRuby 第6版、2019/3/19
Ruby 2.6 対応の新版が出た! 番兵は、カプセル化には何の関係もない。
効率的な実装に役立つものだから。 nilとfalseが別だったりするし
Rubyの場合は番兵いらんと思うぞ そら、番兵がいらんようなコードしか書いてないだけや。 番兵の話はお題スレからきていてると思うのだけど
番兵が有用と言う人と無用と言う人で
元のお題をやってみたら? 番兵が無ければ、
上下 : 上下に行があるか?
左右 : 左右に列があるか?
を判定しないといけないから、わかりにくい 範囲外アクセスをどう扱うかの方法論でしかないのでは?
lengthすらない昔のC辺りのやり方。
色々整備されてる現代言語でやる奴はアホ。
アホというか、だったらCやってりゃいいじゃん。
楽に書くために高級な機能があるのに番兵のほうが分かりやすい?w
高級機能のために速度犠牲にしてる言語で高級機能使わないとかww eachよりforのほうが分かりやすい
mapよりforのほうが分かりやすい
reduceよりforのほうが分かりやすい
CでいいじゃんCやってなよ 範囲内かどうかをいちいち判定して、わざわざ分岐したいんか。
まったく、物好きやな。w
んなことをせんでも、番兵や余白を利用したら、わかりやすさや効率化を果たせることもあるんやで。 こんなのあったな
10 ON STICK(0) GOTO 40,60,30,60,50,60,20,60
20 X=X+(X>0):GOTO 60
30 X=X-(X<3):GOTO 60
40 Y=Y+(Y>0):GOTO 60
50 Y=Y-(Y<2):GOTO 60
60 RETURN 範囲が1つ多かったな
あと押さない場合0だったような Ruby Motionって契約してる人います?
これって今から使い始めても継続的に保守され続けるような雰囲気してますか? IDEが欲しいならRubyMineかVSCodeにしとけ
さすがにRubyMotionなんかもう完全に終わってる >>289
Rubyの配列(Array)は添字による読み出しの際に範囲外だとnilを返す
逆に言えばnil以外で初期化することでnilを番兵代わりに使える
まぁ、負の添字に対するカバーは必要だが じゃあCでいいな。
遅いくせにCでやってたのと同じ方法でしか解決できないクソ言語。 >>293
広く捉えればIDEなのかも知れませんが、iOS/Android等の開発ができるのが売りなので他ではなかなか代替が効かないと思うんです
http://www.rubymotion.com/jp/
これもう廃れてるんですかね・・・・・ Rubyすら死にかけているというのに
いわんやRubyMotionをや Rubyでスマホアプリとかそれこそ論外
プロのバリバリのRubyエンジニアですら誰も使ってないわそんなもん >>299-300
やはり止めておいたほうが良さそうですか
以前、将棋のロジックをRubyで書いてしまったので、これをiOS/Androidに使い回せたら良いなと思ったのですが・・・・ そんなん移植すればよかろうよ
書いた総時間の10分の1くらいでできるはずだ
プログラミングに慣れているというのはそういうことでもある Rubyで書いたのかもったいない
絵に描いたような技術的負債だな
サンクコストと割り切って早めの移植をお薦めする プロトタイプとして作るならRubyでも全然アリだと思うけどな
技術的負債と言い切る方がむしろおかしい感じがする Haxe が、Ruby・Elixir も、JavaScript(JS) に変換してくれればなあ
パズル本でも、解答はRuby で書いてある。
これが、JS なら、可読性が悪くなるから
まあ、ES2015(ES6)で書いて、Babel で、ES5 に変換するぐらいかな? >>304
ロジックをRubyで書いてしまったからアプリもRubyで…
と言った具合に間違いを積み重ねることになった元凶を
技術的負債と言わずに何と言うの? >>306
間違いは「プロトタイプをそのまま使いまわそうとすること」であって、
「プロトタイプにRubyを使ったこと」ではないはずだよね
「何がなんでもRubyを使うことは間違い」と言いたいだけなんちゃうん? >>307
その解釈こそこの文脈ではうがちすぎだろう
実際のところは>>292に訊いてみないとわからんけど
あとIDEのサポートの薄いRubyがプロトタイピングに優れてるっていうのも
(ことロジックをという局面に限れば)眉唾だなぁ
RailsでWebアプリをって言うならまあ納得だが Sinatra, Rails を使えば?
GUI は、HTML, CSS, JavaScript で、
サーバーサイドはRuby Rubyで書いたものを別言語に移植するのは、そう難しい話でもないだろ
opalとかで楽しようとしたほうが罠に嵌りそう perlで書いたのがもったいない
そう思っていた時期がありましたが
rubyで書いたらそんな小さな心配は吹き飛びました
↓
rubyで書いたのがもったいない
そう思っていた時期がありましたが
pythonで書いたらそんな小さな心配は吹き飛びました 最初に苦労してCで書いておけばその後は言語の流行りに合わせてFFIラッパー書くだけで済んだのにねwwww >>312
モノになるかどうか分からんものに苦労を強いるなんて愚の骨頂 >>313
将棋のAIみたいなCPU時間のかかる処理だと、Cならブルートフォースで全く問題にならない箇所が
ゲロ遅Rubyだとアルゴリズムの最適化が必要になったりして、結局Cの方が早かったんじゃないか、、、となるケースが多いよ
そもそもアルゴリズムの実装はCでもあまり生産性に差が出ないし >>314
トライアンドエラーを繰り返すようなものをCでやるのはつらみがあるよ
ある程度形になってきたらあらためてCなりでやればいいだけ >>315
高負荷なアルゴリズムの実装においては、遅すぎる言語を使うことでその「エラー」の閾値が大きく低下することがあるってことだ
遅くない言語では問題にならないことが問題になる >>315
sassがそれをやったわけだが。
最初Rubyでsassが作られた。
今はlibsassというC言語実装が作られた。
だけどあれ、確か2006年ぐらいにRuby版がでてから
6年ぐらいもかかっただろ?
そしてRuby版に機能が追いつくまでさらに数年 >>316
> 遅すぎる言語を使うことで
遅すぎるという言葉には2つの意味があって、
"実行速度が" 遅すぎる言語で問題になることがあるように、
"開発が" 遅すぎる言語では、その開発の遅さが問題になることがある >>315
馬鹿なの?
トライ&エラーではrubyなりpython で作って、そくどの為にCで書き直すんだろ。
Twitter やFacebook もロジックはrubyで作って、そのままでは限界を感じたからも、っと速い言語に書き換えたろ?
ロジックさえ確立すれば、多少の記述量増加よりは問題にならない。
(むしろ問題があったから変更する必要に迫られた) Vagrant, Chef, Homebrew など、環境構築運用でシェルスクリプトの代わりには、Ruby で書く。
rbenv(anyenv) も、Rubyか?
他にも、SASS とか、他の言語よりも、数年早いから、
実験段階のものや、アクセスが少ない、中小企業向けに良い
大規模になってきたら、他の言語に変える >>319
高負荷な処理の開発においては、検証すらままならないほどに遅くなることが普通にある(Cで書いててもね)
そもそも最初からパフォーマンスが問題になることが分かっているなら、速度自体もアルゴリズムの良し悪しを決める重要なファクターだ
まあRuby使いには想像しにくい世界かもね >>320
>大規模になってきたら、他の言語に変える
って>>292の話と全く変わらないな >>320
> rbenv(anyenv) も、Rubyか?
rbenvもanyenvもその兄弟(*env)たちもシェルスクリプトで作られてるよ。
https://github.com/rbenv/rbenv の緑のバーをクリックすりゃわかるだろ?
Shell 96.5% Ruby 1.5% C 1.4% Other 0.6%
環境構築というか、"端末の"環境構築なので
端末を提供しているシェルスクリプトが一番相性が良い あとrubyの環境を整えるのに、rubyが必要とかありえないわなw
それにruby遅いねん。(ruby以外のスクリプト言語もそうだろうけど)
$ time ruby -e 'print "ruby"'
ruby
real 0m0.054s
user 0m0.042s
sys 0m0.013s
$ time sh -c 'echo "sh"'
sh
real 0m0.001s
user 0m0.000s
sys 0m0.001s Perlは少しはマシだな
$ time perl -e 'print "perl"'
perl
real 0m0.003s
user 0m0.000s
sys 0m0.002s
$ time php -r 'print "php";'
php
real 0m0.016s
user 0m0.016s
sys 0m0.000s
$ time python -c 'print "python";'
python
real 0m0.016s
user 0m0.012s
sys 0m0.004s >>324-325 ちなみにこれ *envを使っていないLinux環境です。
*env を使うと各インタプリタ起動前にオーバーヘッドが入るから遅くなるが
これはそれがない純粋な速度ということ それでもほぼ起動のオーバーヘッドだろう
RubyはRails専用なので長時間動作が前提だから起動時間はあまり重視されてないんだろうね スタートアップで使ってたってだけで
もう使ってないから
遅すぎて見切られた ツイッターがRailsていつの時代の話だよwww原始人かww
今でもScalaなのかどうかが気になるわwwww >>327
> それでもほぼ起動のオーバーヘッドだろう
>>326で言ってるオーバーヘッドっていうのは
各言語用のインタプリタ起動のオーバーヘッドではなくて、
*envの仕組み上、追加で存在するオーバーヘッドのこと。
*envは例えばrubyだったら、rubyのバイナリを直越実行するのではなく、
rubyの指定されたバージョンを起動するためのシェルスクリプトを実行する。
>>324-325は、*envを使ってないから、各言語用のインタプリタ本来の
起動時間ですよって話。 IOのオーバーヘッドもあるんじゃないの?
RubyはUnicodeの確認とかしてそう。
逆に、BashやPerl5はしてなさそう。 なんだよ?Unicodeの確認って
単に「Rubyは起動が遅い。」でいいだろw 出力にかかる時間を計ってる以上、「起動」の時間はわからんだろ。
Unicodeうんぬんは、文字の妥当性を検証してる気がしたから。バイナリを流すとエラーになったような。
きっとRubyは遅いだろうと思うが、それでも、おまえの確認は証明になっていないぞ。 ■ このスレッドは過去ログ倉庫に格納されています