Ruby 初心者スレッド Part 67at TECH
Ruby 初心者スレッド Part 67 - 暇つぶし2ch2:デフォルトの名無しさん
20/12/25 04:26:07.55 aa9Khe9z0.net
Rubyの絵本、2008
たのしいRuby 第6版、2019
3ステップでしっかり学ぶ Ruby入門、2018
かんたん Ruby (プログラミングの教科書)、2018
プロを目指す人のためのRuby入門、2017
改訂2版 パーフェクトRuby、2017
改訂2版 Ruby逆引きハンドブック、2018 (中級者向け)
Effective Ruby、2015 (中級者向け)
メタプログラミング Ruby 第2版、2015 (中級者向け)
リファクタリング:Rubyエディション(復刻版)、2020(中級者向け)
RubyでつくるRuby ゼロから学びなおすプログラミング言語入門、2017 (中級者向け)
Rubyのしくみ、2014 (中級者向け)
改訂4版 基礎 Ruby on Rails、2018
パーフェクト Ruby on Rails 【増補改訂版】、2020
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、2014
オブジェクト指向設計実践ガイド Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方、2016
Seleniumデザインパターン&ベストプラクティス、2015
Webで使えるmrubyシステムプログラミング入門、2020

3:デフォルトの名無しさん
20/12/25 04:27:50.07 aa9Khe9z0.net
開発環境
RDE
Windows用IDE
URLリンク(ja.osdn.net)
以下、RDEの使用説明
URLリンク(rubyde.sourceforge.net)
RDEのデバッグ機能を使う場合、設定においてデバッグオプションを「-r debug2」から「-r debug」と書き換えて、
ruby付属のdebug.rbを使うようにすること。
RDE付属のdebug2.rbは、ruby1.8用のスクリプトのため、現在のrubyのversionには使えません
サクラエディタ
Windows用高機能エディタ
URLリンク(ja.osdn.net)
以下、ruby用設定の説明
URLリンク(supportdoc.net)
Emacs
GNUの高機能エディタ
Vim
Emacsと同じぐらい有名なCUIベースのエディタ
VSCode
マルチOSに対応したマイクロソフト社製のソースコードエディタ
URLリンク(code.visualstudio.com)

4:デフォルトの名無しさん
20/12/25 19:37:36.98 HoUTdWdQp.net
祝 ruby3.0.0

5:デフォルトの名無しさん
20/12/25 19:42:54.83 cyV6b5qO0.net
めでたくもなんともない
ムダに歳くったロートル

6:デフォルトの名無しさん
20/12/25 22:20:13.76 DVzhLIY40.net
形態素ゲイムRuby松本まじコスロ
by猪瀬色彩空間

7:デフォルトの名無しさん
20/12/25 22:53:56.79 gC1vp0cV0.net
速度3倍ってマジ?

8:デフォルトの名無しさん
20/12/26 05:22:31.21 MLavBbcpr.net
>>1
3.0おめでとう

9:デフォルトの名無しさん
20/12/27 22:23:18.64 3h7fei6ma.net
$ gem install clipboard
$ irb
irb> require 'clipboard'
=> true
irb> puts Clipboard.paste
朝鮮・韓国兵の扱い方(取り扱いマニュアル) 旧日本陸軍・米軍・旧ソ連共産党 | memo
=> nil

10:デフォルトの名無しさん
20/12/28 21:08:07.24 JL6YsW3y0.net
Rubyってトップレベル関数はprivateにできないの?
やっぱり、Pythonみたいに__ってしてあげるしかないのかな

11:デフォルトの名無しさん
20/12/29 11:46:48.14 NZwVboWN0.net
2.7で作ったアプリを3.0で動かしてみたらエラーでした

12:デフォルトの名無しさん
21/01/02 17:25:59.70 z1ZKe1zV0.net
rubyで自分用のCUIアプリを作成しています。質問させて下さい。
rubyではクラスごとにファイルを分けるべきでしょうか?
名前空間ごとにディレクトリを作成すべきでしょうか?
また、とりあえず他のソースコードを何個か見て、以下のディレクトリを作成しています。
bin/
lib/
binの中はコマンドライン解析用のソースコードのみで、他はlibの中に全部入っています。
この配置は一般的でしょうか?
また、テスト用のソースコードやデータはどのように配置すべきでしょうか?
私の作っているソフトウェアの規模は個人用なので小規模で2万行程度です。ただし、最終的にはこの倍はいきそうです。
しかしながら、勉強も兼ねて、なるべくrubyのお作法に従うようにしたいです。
よろしくお願いいたします。

13:(u_・y)
21/01/04 11:01:26.70 oZidFLopa.net
俺様なら作法とか無視して最低3フォルダは作るけど
0、bin
1、そのアプリのみで使う事が想定されてるファイル群
2、他のアプリでもそのまま使える完全に分離してるmodule/class群
どうしても一般論でやるってところに拘るならrubyコミッターのソースコード探して見てくれば良い
標準があるとすればそれ

14:(u_・y)
21/01/04 11:24:34.37 oZidFLopa.net
(u_・y) 質問です。世の中を自分の好きなように動かしたいのですが。
(u_・y) "rubyを使う"という条件に限定した場合、何をするのが最適解でしょうか?

15:デフォルトの名無しさん
21/01/04 13:08:51.30 VbZo6FxW0.net
>>12
gemの構成に従うのが一般的
$ bundle gem <project_name> でscaffoldしてくれる
もう少し詳しく知りたければオライリーから出てる
「Build Awesome Command-Line Application in Ruby 2」の9章

16:デフォルトの名無しさん
21/01/04 13:22:27.53 yec7Hk1C0.net
Rails のプロジェクト構成に従えば?
プロジェクトルート直下のフォルダは、
ruby -e 'puts Dir.glob( "*" ).select{ |file| File.directory? file }.sort.join( ", " )'
app, bin, config, db, lib, log, node_modules, public, storage, test, tmp, vendor

17:(u_・y)
21/01/04 20:10:47.67 0ES7puYLa.net
問 1
以下のソースコードを実行したときに最終的に表示される文字列をこたえよ
※ まずは答えを見ずに考えてね!
def b x
x + " rails"
end
def f(x=<<-TEXT) return p b x ; python最高(*'▽')
on #{print "ruby "}
TEXT
end
f
答え: URLリンク(ideone.com)

18:デフォルトの名無しさん
21/01/04 21:25:31.68 yms/N9cK0.net
ありがとうございます。
いただいた回答を確認させていただきましたが、bundle2.7 gem NAMEで出てくる内容が、私の知りたい回答に近いようです。
参考にさせていただきます。

19:デフォルトの名無しさん
21/01/05 19:10:35.24 khtEPZ8Z0.net
CSVファイルの読み込みで下みたいに変換することってできる?
"0123",1
=> ["0123", 1]

20:デフォルトの名無しさん
21/01/05 19:30:04.21 MfDAyFl4r.net
>>19
CSV.parse '"0123",1', quote_char: ?' #=> [["\"0123\"", "1"]]

21:デフォルトの名無しさん
21/01/06 00:17:02.38 2hpPqzu40.net
CSV では文字列・数値とか、各列の型を指定できなかったっけ?
各列の変換器

22:デフォルトの名無しさん
21/01/06 02:45:29.91 X+T/DkCZ0.net
プログラミング自体初心者です
ファイバーを全く理解していなかったので勉強してみているのですが
class Test
def initialize
@fiber = Fiber.new {test}
end
def test
p "これがファイバーのブロックで与えた処理だ"
Fiber.yield
p "理解したかな???"
end
def fiber_test(count = 60)
@fiber.resume
p "帰ってきたぞ"
@fiber.resume
p "再び帰ってきたぞ"
count.times do {Fiber.yield}
end
end
このコードを組んで別の場所でTest.new.fiber_testとインスタンスを作成して呼び出してみたのですが
@fiber.resumeでtestメソッドへ移動し
Fiber_yieldでfiber_testメソッドへ戻ることはわかったのですが
testメソッドで@fiber.resumeを実行すると親子関係がおかしくなるからかFiberErrorを起こすのに対し
fiber_testメソッド側でFiber_yieldを実行すると一瞬画面が止まるだけでコンソールにも何も表示されません
これは何が起きているのでしょうか?
引数のcountを増やすほど長く画面が固まります

23:デフォルトの名無しさん
21/01/06 05:27:15.07 jWwxeiIUr.net
>>20
>>19を読み間違えていたので訂正
CSV.parse '"0123",1', converters: ->(f, i){i.index.zero? ? f : f.to_i}
# => [["0123, 1]]

24:デフォルトの名無しさん
21/01/06 06:10:07.47 2hpPqzu40.net
Fiber は、coroutine みたいなものか
初心者がやるものじゃない。
10年以上やってから、やるもの

25:デフォルトの名無しさん
21/01/06 06:33:24.80 2hpPqzu40.net
f = Fiber.new do
n = 0
loop do
puts "子の前 : #{ n }"
Fiber.yield( n ) # 親へ
puts "子の後 : #{ n }"
n += 1
end
end
2.times do |idx|
puts "親の前 : #{ idx }"
puts "親の値 : #{ f.resume }" # 子へ
puts "親の後 : #{ idx }"
end
出力
親の前 : 0
子の前 : 0
親の値 : 0
親の後 : 0
親の前 : 1
子の後 : 0 # 要注意!
子の前 : 1
親の値 : 1
親の後 : 1

26:デフォルトの名無しさん
21/01/06 11:25:26.71 HlI/jGZrM.net
>>22
そのコードはfiber_testメソッドのFiber_yieldしてるところで
can't yield from root fiberのエラーになるよ
エラーにならないならrubyのバージョンと再現可能なコードを書いて

27:(u_・y)
21/01/06 12:45:06.84 I0SDZM+6a.net
Fiber.yield と @var.resume で処理の投げあいをしてるだけ
で、resumeは変数のメソッドだから変数が参照できればどこからでも呼べるが、
Fiber.yieldっていうのは、Fiber.new{ ここ }の中でしか呼び出せない
なお初心者がFiberを使ったコードを書いても普通にloopで書いたほうがいいもんを煩雑にさせるだけだから今覚えてもすぐ明日から使うぞーってなる機能ではない

28:デフォルトの名無しさん
21/01/06 14:48:29.93 eEkuR0nA0.net
Ruby使った事ない勢です
知人から恐らくruby(のgem ocra)でコンパイルされたexeファイルを修正してほしいと頼まれたのですが
これ逆アセンブルする方法無いですか?

29:デフォルトの名無しさん
21/01/06 15:07:09.07 twxSQNJZ0.net
>>28
解凍すればいいだけでは?

30:デフォルトの名無しさん
21/01/06 18:53:39.35 tXuutWqgd.net
>>29
無知で申し訳ないです
サクラエディタでexeとか怪しいtmp開いてみたけど見られないんですよね
解凍というのはどう言うことでしょうか?ocraにそういったコマンドがあるのでしょうか?
それとも実はzipでコンパイルされてるとか?

31:デフォルトの名無しさん
21/01/06 22:30:29.65 twxSQNJZ0.net
>>30
自己解凍形式
実行すれば一時ディレクトリにソースも解凍されてる

32:デフォルトの名無しさん
21/01/06 22:35:40.93 jWwxeiIUr.net
Ractorが今後どうなるか楽しみ

33:デフォルトの名無しさん
21/01/06 23:02:25.85 eEkuR0nA0.net
>>31
出来ました、ありがとうございます

34:デフォルトの名無しさん
21/01/06 23:28:49.12 D4I0bPT10.net
>>20 これにcoverters : :numeric付けてみたけどカンマを含むデータがうまく処理できず
>>21 いや、それが知りたいんだが
>>23 こうすりゃいいのか。ありがとう

35:デフォルトの名無しさん
21/01/07 00:57:12.57 ikfTGx5+0.net
0 で始まる数値は8進数だから、:numeric ではバグル
012 は、10 になる。
一方、09 は8進数では存在しないから、9 となる
require "csv"
text = <<'TEXT'
"09",1
"012",2
TEXT
csv = CSV.new( text )
csv.convert( :numeric )
p csv.read
#=> [ [9.0, 1], [10, 2] ]

36:(u_・y)
21/01/07 02:12:02.37 oTn3YI8va.net
csv=<<-TXT
"01.23",1
"09",1
"012",2
TXT
a=csv.each_line.map{|n| eval"[#{n}]" }
p a

37:デフォルトの名無しさん
21/01/07 03:01:27.13 BvHUxMcb0.net
>>35 そうそう、これもどうにかしたかった
>>36 nullがあるとダメじゃね?
>>19の例が単純すぎたのでもうちょっとマシな例
"0123456789","5CH CO.,LTD","2021/01/01",12345.67
"0123456790","2CH.COM",,0.00

38:デフォルトの名無しさん
21/01/07 06:30:45.65 yCgL5kYR0.net
後出しで条件付け加えてくるのやめろ

39:デフォルトの名無しさん
21/01/07 09:59:32.37 d5tQYhLy0.net
つーか、あとは自分でできるやろ。
やりたいようにやれ。

40:デフォルトの名無しさん
21/01/07 18:15:56.20 BvHUxMcb0.net
うむ。>>23で解決した
あとはお題として書いてみた

41:(u_・y)
21/01/07 20:00:34.95 pRSWPdMla.net
友達いなそう

42:デフォルトの名無しさん
21/01/11 00:35:09.75 RMa4jLhx0.net
ruby初心者です。
調べたけどわからないので教えて下さい
neriでexeファイルを作ろうとすると、簡単なもので試したのですが、
internal:C:/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in
`require': cannot load such file -- Win32API (LoadError)
のエラーが出ます。
Windows 10
ruby 3.0 x64
Bat_To_Exe_Converter v3.2

43:デフォルトの名無しさん
21/01/11 00:42:06.93 XvdCBu9Er.net
>>42
gem list にWin32APIはあるのか?

44:デフォルトの名無しさん
21/01/11 09:03:37.19 LZqNfRTHp.net
>>43
gem listでwin32-api(1.9.2 universal-mingw32)
はありました。

45:デフォルトの名無しさん
21/01/11 11:30:06.64 RwOnRvzI0.net
「ruby `require': cannot load such file -- Win32API」で検索!

46:デフォルトの名無しさん
21/01/11 15:49:37.24 NK5j5E+la.net
Win32APIはruby3.0から廃止
当然Win32APIを使ってたgemsはRuby3.0では作者がメンテナンスするまで動かないからneri作者の尻ひっぱたくか前のバージョン使え

47:デフォルトの名無しさん
21/01/11 15:52:47.62 Yn+GwDZFM.net
さすがの互換性w

48:デフォルトの名無しさん
21/01/11 16:04:22.15 KSKcxhht0.net
Windowsに嫌われてるとか言ってたな。

49:デフォルトの名無しさん
21/01/11 21:15:58.19 iHOPiDVy0.net
>>47
いや、さすがにWin32APIはしゃあない。
むしろ、とっくに避けていなければならんかったレベル。

50:デフォルトの名無しさん
21/01/11 22:59:29.10 jE21Oyzwp.net
>>46
なるほど。ありがとうございます。
わからず、ずっと悩んでました。

51:デフォルトの名無しさん
21/01/21 04:05:57.95 wRHR1dSL0.net
環境変数の設定を一切せず
rubyの起動オプションですべて明示するというやり方って
現実的になにかトラブルが発生したりしますか?

52:デフォルトの名無しさん
21/01/21 04:54:29.71 GWoeC7/l0.net
コマンドラインの長さとか?
最近ならもうだいじょうぶかな?

53:デフォルトの名無しさん
21/01/22 08:44:48.38 MPceXAls0.net
そんなに長い指定はないので今の所問題く動いているっぽいです
ありがとうございます

54:デフォルトの名無しさん
21/01/23 12:19:40.78 joIGd+XG0.net
教えていただきたいのですが、rubyのclassでそのclassに存在するプロパティ一覧を取得する方法ありますか?
以下の様なクラスを作ってます。
class Data
def self.csv_header
return 'name,id,data1,data2'
end
attr_reader :name, :id, :data1, :data2
def initialize(name:, id:, data1:, data2)
@name = name
@id = id
@data1 = data1
@data2 = data2
end
def to_csv
return "#{@name},#{@id},#{@data1},#{@data2}"
end
end
要するに、何か複数のデータを持つクラスがあり、それをcsvとして出力したいです。
そのヘッダーを出力する機能をクラスメソッドとして持たせたいのですが、このクラスメソッド(csv_header)の中身を手で書くのではなく、javaで言う所のreflectionか何かを使って出力する方法はありますか?

よろしくお願いいたします

55:デフォルトの名無しさん
21/01/24 22:13:50.30 kU4Polklr.net
>>54
hoge = Data.new('name', id: 0, data1: 1, data2: 2)
ivs = hoge.instance_variables
ivs.each{|iv| puts "%s => %p" % [iv, hoge.instance_variable_get(iv)]}
# =>
name => "name"
id => 0
data1 => 1
data2 => 2

56:デフォルトの名無しさん
21/01/25 17:06:01.79 +q31tGtg0.net
黒魔術・メタプログラミングで、よく見る
インスタンス変数用のinstance_variables、
クラス/モジュールには、クラス変数(@@these_things)用のclass_variables

57:デフォルトの名無しさん
21/01/25 18:43:13.07 co/Rkwpa0.net
>>54
そういう用途はStruct使うといいんでない?
Foo = Struct.new("Foo", :name, :id, :data1, :data2)
foo = Foo.new("foo", 1, "123", "456")
foo.to_h.keys
#=> [:name, :id, :data1, :data2]
foo.to_h.keys.to_csv
#=> "name,id,data1,data2¥n"

58:デフォルトの名無しさん
21/01/25 18:47:31.66 co/Rkwpa0.net
Structは初期化時の引数の数が一致してなくてもエラーにならずにnilがデフォルト値になる
それがいやな場合は継承してコンストラクタを上書き
class Bar < Struct.new("Bar", :name, :id, :data1, :data2)
def initialize(name, id, data1=nil, data2=nil)
super
end
end

59:デフォルトの名無しさん
21/01/29 04:39:32.60 sK+sAxFfM.net
質問させてください。
以下のようなデータがあるとして。
data = {
"id": "price_xxxxxxx",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1234567,
"currency": "usd",
"metadata": {
"commission": "2"
}
}
このデータを p data.metadata.commission とすると4が表示されるようにしたいです。
どうやって変換すればいいでしょうか?

60:デフォルトの名無しさん
21/01/29 04:40:41.40 sK+sAxFfM.net
>>59
すいません、4じゃなくて2でした。。

61:デフォルトの名無しさん
21/01/29 13:59:12.19 IOP7xwlv0.net
普通にブラケットでアクセスするかdigしたほうがいい気がするが
どうしてもドットでアクセスしたいなら再帰的にOpenStructに変換する
data = JSON.parse(data.to_json, object_class: OpenStruct)
data.metadata.commission
#=> "2"

62:デフォルトの名無しさん
21/01/29 14:31:44.23 MVM9RsSY0.net
ハッシュだから、hash.x.xyz は無理だろ
Effective Ruby の項目10 に書いてある、
構造物はハッシュじゃなくて、クラス・Struct を使おうというやつだろ
ただ、その都度、構造が変わるものは、ハッシュの方が良いし、
構造がネストしている場合も難しい
require "json"
json = <<'JSON'
{ "a": "abc",
"x": {
"xyz": "2" }}
JSON
p hash = JSON.parse( json ) #=> {"a"=>"abc", "x"=>{"xyz"=>"2"}}
p hash[ "x" ][ "xyz" ] #=> 2

63:デフォルトの名無しさん
21/01/29 14:57:50.28 sK+sAxFfM.net
>>61, >>62
ありがとうございます。
背景を書いてませんでしたが、rspec で必要なデータなのです。。
後出しですいません。
なので data.metadata.commission で確認できることが必要なので、Struct(もしくはOpenStruct)で、変換させてみます。

64:デフォルトの名無しさん
21/01/29 21:09:33.54 /bfQuQp2r.net
>>59
def hoge!(obj)
  return unless Hash === obj
  def obj.method_missing(name, *_) = self[name]
  obj.each_value{Hash === _1 && hoge!(_1)}
end
hoge!(data)
p data.metadata.commission # => "2"
# 冗談だけど

65:デフォルトの名無しさん
21/02/03 22:28:17.16 S1/u+juE0.net
>>54です。
アドバイスありがとうございます。
私も色々と調べたのですが、オブジェクトを1回作らないと難しいかもしれませんね。
仮にデータが全くなかった場合、csvのヘッダーのみ記述されたcsvファイルを出力したいと考えています。
しかし、データが全くないと、オブジェクトが無いため、オブジェクトからプロパティを取得する方法が使えません。
もちろん、ダミーのオブジェクトを作ればOKですが、少々不自然かと思いました。
Structは知らなかったので、勉強させていただきます。
ありがとうございました。

66:デフォルトの名無しさん
21/02/03 23:01:53.55 q3Uucr840.net
Struct.membersでいいんじゃないの?

67:デフォルトの名無しさん
21/02/07 21:57:18.80 RWoPy8BIa.net
URLリンク(twitter.com)
> 世界一周クルーズの広告が表示され、妻と「コロナ収まったら行きたいね」
世界一周は最低500万、上は数千万にもなる。
うっかり金持ち自慢をしてしまう…
(deleted an unsolicited ad)

68:デフォルトの名無しさん
21/02/12 15:35:22.83 Ru8WMsS80.net
インストールしなくていい機能縮小版rubyを作って、awkを代替えできるようにする
というのはどうでしょう

69:デフォルトの名無しさん
21/02/12 19:50:07.01 74skEOdG0.net
>>68
そんな用途なら、互換性が期待できないRubyよりも、信頼できるPerlのほうがええやろ。

70:デフォルトの名無しさん
21/02/15 00:33:16.20 KKKRaaGF0.net
すまん唐突だけど質問させて eql口頭でってなんで読んだら良いの?

71:デフォルトの名無しさん
21/02/15 00:34:14.29 KKKRaaGF0.net
ミスった
eqlって口頭では何て発音したら良いの? です

72:デフォルトの名無しさん
21/02/15 11:38:51.60 adP2s3N/r.net
イコールって読んでる
equal?とeql?が入り乱れて使われてるところはしらんが。
まぁrubyしてるならequalとeql両方知ってるはずだし短いイコールの方、とかでも伝わるんじゃ

73:デフォルトの名無しさん
21/02/15 13:06:36.01 2czEo7/ia.net
イーキュー
イーキューエル
イコール

74:デフォルトの名無しさん
21/02/15 21:15:47.96 oDLt9usUr.net
イークワル

75:デフォルトの名無しさん
21/02/16 21:32:31.57 fxt1OOtg0.net
>>72
rubyやり始めたところで、eqlがイコールって気づかなかった。短い方のイコールって良いですね!ありがとうございます。
>>73
自分もイーキューエルだて頭の中で読んでた
>>74
なんでやーーー!!

76:デフォルトの名無しさん
21/02/16 22:13:45.11 fxt1OOtg0.net
すみません、質問です
hash生成時に、
str={"key1" = "val1"}
ではエラーになる理由を教えてください。

77:デフォルトの名無しさん
21/02/16 22:25:37.65 F9q4wvox0.net
p hash = { "a" => "b" } #=> {"a"=>"b"}
全角の{}を使うな。
文字列以外は半角英数字のみ

78:デフォルトの名無しさん
21/02/16 22:28:16.05 fxt1OOtg0.net
>>77
すみません、携帯からで全角と半角を間違えてしまいました。半角として見てくださいm(_ _)m

79:77
21/02/16 23:01:49.84 F9q4wvox0.net
p h_1 = { "a" => "b" } #=> {"a"=>"b"}
p h_2 = { "あ": "い" } #=> {:あ=>"い"}
p h_3 = { one: 1, "two": "2" } #=> {:one=>1, :two=>"2"}
新しめの書き方では、2, 3 みたいに書ける
: を使うと、文字列のキーがシンボルになる
"two": が、:two になる
one: はシンボルのまま

80:デフォルトの名無しさん
21/02/16 23:13:47.99 fxt1OOtg0.net
書いていただいた方法でないと生成できないのですね
丁寧な回答ありがとうございました

81:デフォルトの名無しさん
21/02/17 00:25:13.96 p6fAds/B0.net
つーか、なんで「=」でいいと思ったんだか。w

82:デフォルトの名無しさん
21/02/20 02:27:26.66 SWSWE4Ss0.net
AtCoderの解答見てると、rubyで巨大配列を扱うような時に激遅になりがちな気がする
配列アクセスの遅さなのかループの遅さなのかわからんが

83:デフォルトの名無しさん
21/02/20 05:46:26.76 CT8193ch0.net
JIT があるから、1秒間で100万回ループすると、ネイティブコードにコンパイルされて、
1秒間で1,000万回ループできるようになる

84:デフォルトの名無しさん
21/02/23 21:47:53.55 QIohwxjcM.net
irbにおいて、
def test; p test; end
とだけ打ち込みました。
すると、Enumerable.methods.grep(/test/) => [:test]
が得られます。
何故、testメソッドが勝手にEnumerableのメソッドになるのか教えていただけないでしょうか。
環境は
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18]
です。

85:デフォルトの名無しさん
21/02/23 22:02:57.19 IEGWDKD5r.net
URLリンク(docs.ruby-lang.org)
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。
って思ったけどこっちの環境でもprivateにならないな
はて、何故でしょう

86:デフォルトの名無しさん
21/02/24 02:17:06.53 hlmSDKs+0.net
バグじゃね?

87:デフォルトの名無しさん
21/02/24 02:20:59.00 YN61hHjA0.net
ruby 2.6.6 [x86_64-linux] なら、
def test; p test; end
p Enumerable.methods.grep(/test/) #=> [ ]

88:87
21/02/24 02:26:45.21 YN61hHjA0.net
p test が文法エラーになるのでは?
test という識別子が存在しないから

89:デフォルトの名無しさん
21/02/24 07:33:53.13 UUqFv7Fhp.net
0084です。
def test; p test; end
ではなく、
def test; p “test”; end
でした。
大変申し訳ありませんでした。
ほかのメソッドでも同じような動きを確認しています。今日は立て込んでしまっているので、追って別のメソッドの例も提示します。

90:デフォルトの名無しさん
21/02/24 07:38:08.91 UUqFv7Fhp.net
>>0085さん、確認ありがとうございます。
私は初心者なので、以下の認識で正しいか、何か例外があるのか不安でお尋ねしました。認識は正しかったようですので、もう少し調べてみます。
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。

91:デフォルトの名無しさん
21/02/24 10:21:05.87 a7gl+o1qM.net
privateかどうかをどうやって確認したの?
要再現コード

92:デフォルトの名無しさん
21/02/24 11:26:34.15 9gaCPeun0.net
環境を作り直したほうがよさそう

93:デフォルトの名無しさん
21/02/24 12:25:28.67 hlmSDKs+0.net
ruby 2.6 => [ ]
ruby 2.7 => [:test]
ruby 3.0 => [ ]

94:デフォルトの名無しさん
21/02/24 12:35:04.10 hlmSDKs+0.net
irb(main):001:0> def foo; p "Foo!" end
=> :foo
irb(main):002:0> "abc".foo
"Foo!"
=> "Foo!"
irb(main):003:0> 3.14.foo
"Foo!"
=> "Foo!"
irb(main):004:0> [].foo
"Foo!"
=> "Foo!"

95:デフォルトの名無しさん
21/02/24 20:33:38.12 p2P+ZlS6M.net
90です。
パソコンを再起動して、.irb_historyをtouchで初期化したのち、
以下を実行しても同じ結果でした。
irb(main):001:0> def test; p "test"; end
=> :test
irb(main):002:0> Enumerable.methods.grep(/test/)
=> [:test]
irb(main):010:0> exit
$ rbenv -v
rbenv 1.1.2
$ rbenv versions
system
* 2.7.1 (set by /Users/someone/.rbenv/version)
別のメソッドも作ってみましたが、結果は同じでした。
irb(main):001:1* def mul(a,b)
irb(main):002:1* a*b
irb(main):003:0> end
=> :mul
irb(main):004:0> Enumerable.methods.grep(/mul/)
=> [:mul]
irb(main):006:0> exit
$ irb
irb(main):001:0> Enumerable.methods.grep(/mul/)
=> []

96:デフォルトの名無しさん
21/02/24 20:38:46.87 p2P+ZlS6M.net
90です。
92さんがおっしゃる通り、環境を作り直すこととします。
私の疑問を受けて、再現性について試していただいた皆様、
ご協力ありがとうございました。

97:デフォルトの名無しさん
21/02/24 20:41:24.99 MS8741jMr.net
irb(とpry)でトップレベルで定義するとなんかおかしい
$ cat test.rb
def hoge; end
puts 'public: %p' % [methods.grep(/hoge/)]
puts 'private: %p' % [private_methods.grep(/hoge/)]
$ ruby -v test.rb
ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32]
public: []
private: [:hoge]
$ irb
irb(main):001:0> load("test.rb")
public: []
private: [:hoge]
=> true
irb(main):002:0> def fuga;end
=> :fuga
irb(main):003:0> puts 'public: %p' % [methods.grep(/fuga/)]
public: [:fuga]
=> nil
irb(main):004:0> puts 'private: %p' % [private_methods.grep(/fuga/)]
private: []
=> nil

98:デフォルトの名無しさん
21/02/24 21:30:57.42 YN61hHjA0.net
irb, pry は特殊なのかな?
漏れは、VSCode のCode Runner で、
選択したコード片、またはファイル全体を、右クリックメニューから実行してる
これが楽

99:デフォルトの名無しさん
21/02/27 23:10:50.88 xGn+rZN00.net
WEB+DB vol.121
Ruby 3 特集、30 ページ分

100:デフォルトの名無しさん
21/03/13 14:19:53.90 33EHGK5P0.net
Ruby on Rails 6 の本を書いている、2人の新刊
Go言語 ハンズオン、掌田津耶乃、2021/3/6
Elixir実践ガイド、黒田努、2021/2/5
Ruby からGoか、Elixirか、どっちへ進むべきか?
mruby, Rust もあるけど

101:デフォルトの名無しさん
21/03/24 00:55:11.21 rggl2LA70.net
Ruby勉強始めたんですが
↓この部分が毎回書きづらいです
コード補完とかってないんですか?

a.map{|x|x+1}←の|x|の部分

102:デフォルトの名無しさん
21/03/24 04:11:25.02 itekFGrv0.net
vscodeとかでスニペットを利用するとか?

103:デフォルトの名無しさん
21/03/24 08:25:35.13 rggl2LA70.net
ruby開発はvscodeが多いの?

104:デフォルトの名無しさん
21/03/24 08:57:21.23 6ziJ9FkW0.net
>>101
Ruby 2.7 以降は、番号指定パラメータが導入されたので
a.map{_1+1}

105:デフォルトの名無しさん
21/03/24 21:09:04.11 rggl2LA70.net
>>104
ありがとうございます!

106:デフォルトの名無しさん
21/03/24 21:14:35.26 9CHTdUsFr.net
え、それでいいんか……

107:デフォルトの名無しさん
21/03/25 16:55:46.31 LuSagST9r.net
プログラミング言語Crystal、初のメジャーリリースとなるバージョン1.0を公開

108:デフォルトの名無しさん
21/03/25 18:17:35.84 18nzHvsr0.net
最近は全言語で、VSCode の拡張機能・Remote Container で、Docker を使う
Windows 10 Home でも、WSL2 が出来るようになった

109:デフォルトの名無しさん
21/03/25 18:25:49.27 18nzHvsr0.net
Elixir でも、無名関数をキャプチャー演算子・& を使って、短く書ける
fn a, b -> a * b end
&(&1 * &2)
& &1 * &2

110:デフォルトの名無しさん
21/04/02 01:45:05.99 6d4XTvSa0.net
rubyでExcelへデータを出力しようとしているんですが、
どうしてもできないことがあり質問します。
ruby -v 3.0.0p0
rubyでExcelのデータを検索するときはFindを使うと思うのですが、
日付項目(シリアル値)を検索するときはどうすればいいのでしょうか。
以下をやってみましたが、検索できませんでした。
find('3/30') ・・・Excelの表示を指定
find('4321') ・・・シリアル値を指定

111:デフォルトの名無しさん
21/04/02 16:34:32.49 NYPc8neoM.net
>>110
使ってるライブラリが分からないと答えようがない

112:デフォルトの名無しさん
21/04/03 07:31:20.35 zsAyk+ZV0.net
>>111
失礼しました。
ライブラリはWin32OLEです

113:デフォルトの名無しさん
21/04/07 17:40:29.80 DBwHd1C70.net
>>110
上はできた。下はダメだった
ちなみに表示が3月30日の場合、find('3/30') はいけたが find('3月30日') はダメ

114:デフォルトの名無しさん
21/04/07 19:54:57.14 J1UfrlOYa.net
>>113
え、いけました??
家に帰ったらもう一回やってみます。
教えて頂いてありがとうございます。

115:デフォルトの名無しさん
21/04/09 09:17:30.32 +qPfXmCt0.net
>>17
on ruby rails
と出力されると思いきや、ruby “on ¥n rails”だって。
なんでだ?
Here Documentの仕様ってどうなってんの?

116:デフォルトの名無しさん
21/04/09 11:00:25.81 9/L6JEXU0.net
>>115
終端行までなんだから、その前にある改行文字は含まれてあたりまえやろ。

117:デフォルトの名無しさん
21/04/09 21:32:27.88 GCSyW51k0.net
ヒアドキュメントの評価値とは別に
#{print "ruby "} で"ruby "とprintされるクソみたいなコードだから

118:デフォルトの名無しさん
21/04/09 21:45:43.65 PjsXsZBpr.net
まあなぞなぞみたいなもんでしょ
クソコードとかいったら身も蓋もない

119:デフォルトの名無しさん
21/04/09 22:01:43.18 pm4fGgmv0.net
Loggerで出力する内容を奪い取って、他のメソッド呼び出しにするってどう言う実装したらいいですか?
例えば全てをTest::any::log(msg)を内部的に呼び出して終わるみたいなLoggerを作るにはどうしたらいいですか?
Logger.new(STDERR)だと全て標準エラーに出力ですが、これを全てTest::any::log(msg)の呼び出しで標準エラーには何も出さないloggerを作りたいのです

120:デフォルトの名無しさん
21/04/10 02:35:21.72 OA/XTa6K0.net
C:/Ruby25-x64/lib/ruby/2.5.0/fileutils.rb では、
インスタンス変数に、標準エラーを代入してる
@fileutils_output ||= $stderr
@fileutils_output = $stderr
漏れは、それを真似て、
DryRun の時だけ、noop: true, verbose: true を付けて、
標準出力から標準エラーに切り替えるような、モジュールを作っている
module MyFileUtils
@fileutils_output = $stdout
extend self
def f( *args, **options ) # 配列・ハッシュ
p @fileutils_output
@fileutils_output.puts( args, options )
end
module DryRun
include MyFileUtils
@fileutils_output = $stderr
extend self
def f( *args, **options )
super( *args, **options, noop: true, verbose: true )
end
end
end
MyFileUtils.f( 1, 2, a: 8, b: 9 )
MyFileUtils::DryRun.f( 1, 2, a: 8, b: 9 )

121:120
21/04/10 06:15:13.31 OA/XTa6K0.net
Ruby 逆引きハンドブックには、こう書いてある
Logger.new の引数には、ログファイルパスか、
write, close が定義された、IO などのオブジェクトを指定する

122:120
21/04/10 06:29:33.47 OA/XTa6K0.net
Ruby 逆引きハンドブックには、メソッドオブジェクトも載ってる
def f_a( ) :a end
def f_b( ) :b end
def doit( command )
m = method( command )
m.call
end
def doit_2( command )
__send__ command
end
p doit( :f_a ) #=> :a
p doit_2( :f_b ) #=> :b

123:デフォルトの名無しさん
21/04/14 15:02:16.96 /0Vt4vuj0.net
gem installって個別のユーザー環境のみに反映することってできますか?
インストールしたらそのPCを使ってる全ユーザーに反映されないようにしたいです
どうしたらいいですか?

124:デフォルトの名無しさん
21/04/14 15:47:13.93 0xQQ9slV0.net
1. 環境変数のGEM_HOMEを指定する
2. --install-dirを指定してインストール
3. --user-installを指定してインストール
4. rbenvを使う
どれでもいける
とりあえずgem help installでヘルプを見るといい

125:デフォルトの名無しさん
21/04/14 18:21:50.16 /0Vt4vuj0.net
>>124
ありがとうございます

126:デフォルトの名無しさん
21/04/23 12:36:53.84 j9CkA04K0.net
{"status"=>0, "data"=>[{"ask"=>"5370001", "bid"=>"5370000", "high"=>"5634576", "last"=>"5371160", "low"=>"5243350", "symbol"=>"BTC", "timestamp"=>"2021-04-23T03:22:36.028Z", "volume"=>"854.3707"}], "responsetime"=>"2021-04-23T03:22:37.031Z"}
このハッシュ?から5370000の値を取り出したいのですが上手くいきません。助けてください

127:デフォルトの名無しさん
21/04/23 19:53:44.06 gO4UxsH40.net
>>126
どうやろうとしてうまくいかんの?

128:デフォルトの名無しさん
21/04/23 20:21:10.93 v3P9E6mR0.net
>>127
jsonをパースして変数に入れてbidが持つ値を出力したいのですがnilが返ってきます

129:デフォルトの名無しさん
21/04/23 20:36:39.90 7NT1P8pu0.net
>>128
やなくて、コードをはれ。
まあ、たぶんdataが配列なのを見逃して0がぬけてるだけやろ。
dig('data',0,'bid')とか?

130:デフォルトの名無しさん
21/04/23 21:26:36.95 v3P9E6mR0.net
>>129
ヒントを元にそれぞれブラケットで囲ったら行けました。ありがとうございました

131:デフォルトの名無しさん
21/04/23 21:33:33.39 dol38sZTr.net
本質的に理解してないやろこれ

132:デフォルトの名無しさん
21/04/24 06:25:40.53 +DYpagDZ0.net
>>131
大変申し訳ありません。digについて理解しました。重ねてありがとうございました。

133:デフォルトの名無しさん
21/04/24 15:27:17.38 vVXlCGEI0.net
度々申し訳ないのですが
{"status"=>0, "data"=>[{"amount"=>"0", "available"=>"0", "conversionRate"=>"1", "symbol"=>"JPY"}, {"amount"=>"0", "available"=>"0", "conversionRate"=>"5377836", "symbol"=>"BTC"}], "responsetime"=>"2021-04-24T06:14:41.169Z"}
ここから5377836を出力する場合も理解さえできればdigでいけるのですか?
今のコード
r_hash = JSON.parse(response.body)
puts r_hash["data"][1]["conversionRate"]
# =>"5377836"
できれば覚えたてのこれ使いたい↓
puts response_hash = dig("data",ここわからない,"conversionRate")

134:デフォルトの名無しさん
21/04/24 16:46:14.63 j3qP/sr70.net
ブラケットで書くのと同じだよ
r_hash["data"][1]["conversionRate"]
r_hash.dig("data", 1, "conversionRate")

135:デフォルトの名無しさん
21/04/24 22:29:45.06 +DYpagDZ0.net
>>134
ありがとうございます。無事取れたのですが引数が頭の中でぐるぐるしてるのでもう一度リファレンス見てきます

136:デフォルトの名無しさん
21/04/24 22:33:17.78 rJwQsTRc0.net
つーか、リストとハッシュについての理解が足りないんちゃうか?
インデックスとかキーとかの感覚がわからんのやろ。

137:デフォルトの名無しさん
21/04/24 22:56:02.00 +DYpagDZ0.net
>>136
おっしゃる通りです。{[{}{}]}
この形で返ってくるともう何がなんだか

138:デフォルトの名無しさん
21/04/25 10:27:13.97 IoXyqRUD0.net
配列の添え字(数字)が文字列になっただけだよ
添え字が数字じゃないので一づつ増やすことはできないけど

139:デフォルトの名無しさん
21/04/25 13:07:39.95 EAdTvuiP0.net
>>138
アドバイスありがとうございます。悲しいくらい今日も予定がないので学習のため一個ずつ値を呼び出して確認してみます。

140:デフォルトの名無しさん
21/04/25 13:30:05.13 M6swdTrH0.net
>>139
知ってるかもしれないけど
この手のは p よりも pp で表示するとわかりやすいよ
Ruby 2.5以降は requireしなくても最初から pp が使える

141:デフォルトの名無しさん
21/04/25 13:55:29.69 oFpMkyEJ0.net
初心者は、dot install, progate などをやれば?

142:デフォルトの名無しさん
21/04/25 15:44:12.74 EAdTvuiP0.net
>>140
pp知りませんでした。ありがとうございます。かなり頭の中の世界が変わりました。
プロゲートはいまいちだったのでユーデミーの教材漁ってたのですがもう一度プロゲートやり直してみます

143:デフォルトの名無しさん
21/04/25 15:53:02.64 I4PgyU7Gr.net
マニュアル読めと言うのは初心者には酷か?
URLリンク(docs.ruby-lang.org)

144:デフォルトの名無しさん
21/04/25 16:58:50.92 oFpMkyEJ0.net
本が好きなら、定番の入門書「たのしいRuby 第6版」2019 とか
YouTube で有名な、雑食系エンジニア・KENTA のサロンは皆、Ruby on Rails じゃないの?

145:デフォルトの名無しさん
21/04/25 17:29:21.56 .net
Excelのsheet1に
A列 B列
1行目 URLリンク(www.navitime.co.jp)  URLリンク(rilakkumasabo.jp)URLリンク(www.arashiyamaryo.or.jp)
2行目 URLリンク(www.navitime.co.jp)  URLリンク(co-trip.jp)
3行目 URLリンク(www.navitime.co.jp)  URLリンク(www.fruitmoti-shoutikudou.jp)
 
と記載されているのを
sheet2に
A列 B列
1行目 URLリンク(www.navitime.co.jp) URLリンク(rilakkumasabo.jp)
2行目 URLリンク(www.navitime.co.jp)   URLリンク(www.telacoya.co.jp)
3行目 URLリンク(www.navitime.co.jp)   URLリンク(www.arashiyamaryo.or.jp)
4行目 URLリンク(www.navitime.co.jp)  URLリンク(co-trip.jp)
5行目 URLリンク(www.navitime.co.jp)  URLリンク(hitosara.com)
6行目 URLリンク(www.navitime.co.jp) URLリンク(kyo-soku.com)
7行目 URLリンク(www.navitime.co.jp)  URLリンク(www.fruitmoti-shoutikudou.jp)
8行目 URLリンク(www.navitime.co.jp)   URLリンク(sweetsguide.jp)
9行目 URLリンク(www.navitime.co.jp)  URLリンク(osakalucci.jp)
このように変換したいです。オンライン上でRubyを使用して作成したいのですが、どのようにすればよいでしょうか?

146:デフォルトの名無しさん
21/04/25 18:11:40.31 oFpMkyEJ0.net
まず、http://~、https://~ を、3つ連結した、
https://~http://~https://~ みたいな文字列を、3つに分離する

147:デフォルトの名無しさん
21/04/25 18:37:11.77 nrx375qK0.net
>>145
「オンライン」とは?サーバーでということか?Windows?
Excelはxlsx?csvなら難しくはないが。。。
など、あぶなっかしいところが多すぎ。
初心者がやるにはたいへんやな。w
やめといたら?

148:デフォルトの名無しさん
21/04/25 23:09:08.20 oFpMkyEJ0.net
3つに分離する部分だけを作った。
入出力の部分は、CSV モジュールを使えば?
re = %r!https?://! # 正規表現。http/https
input = String.new( "URLリンク(rilakkumasabo.jp)URLリンク(www.arashiyamaryo.or.jp) )
positions = [ ]
pos = 0
while md = re.match( input, pos )
positions.push md.begin( 0 ) # 一致した先頭文字h の位置
pos = md.end( 0 ) # 一致した末尾文字/ の次の文字の位置
end
# 文字列の末尾から削除しながら、配列に入れていく
urls = positions.reverse.map { |pos| input.slice!( pos..-1 ) }
pp urls.reverse # 反転
出力
["URLリンク(rilakkumasabo.jp)
"URLリンク(www.telacoya.co.jp)
"URLリンク(www.arashiyamaryo.or.jp)

149:148
21/04/26 13:51:09.40 0DE0v1OZ0.net
出来た!
文字列を3分割する部分を関数化して、呼び出す
入出力は、CSV 形式で。
入力ファイルは、input.csv
paiza.IO などで実行してみれば?
ただし、この前、paizaのソースコードが消えてしまったけど。
定期的に消えるのかな?
# 引数の文字列を3分割して、配列に入れて返す
def split_string( input_str )
re = %r!https?://! # 正規表現。http/https
# 下で、slice! で変更するために、破壊的変更可能文字列へ変換する
input = String.new( input_str )
positions = [ ]
pos = 0
while md = re.match( input, pos )
positions.push md.begin( 0 ) # 一致した先頭文字・h の位置
pos = md.end( 0 ) # 一致した末尾文字・/ の次の文字の位置
end
# 文字列の末尾から削除しながら、配列に入れていく
urls = positions.reverse.map { |pos| input.slice!( pos..-1 ) }
urls.reverse # 反転
end
次へ続く

150:148
21/04/26 13:52:06.70 0DE0v1OZ0.net
require 'csv'
result_ary = [ ]
CSV.foreach( "input.csv" ) do |row| # 1行ずつ処理する
split_ary = split_string( row[ 1 ] )
split_ary.each do |url|
result_ary.push [ row[ 0 ], url ]
end
end
# 2次元配列を、CSV 文字列に変換する
csv_str = result_ary.map( &:to_csv ).join
print csv_str

151:デフォルトの名無しさん
21/04/26 22:46:21.55 RYaLTPlL0.net
paramsという名前のハッシュを関数の中で使う際、
:codeの組をhogeだけでなくmoge、kuge、sageなど
関数の引数で選べるようにする場合、
'+ 引数名 +'だとエラーになるようですが、
バリューに引数を使おうとしている事自体が根本的に間違っていますか?
params = {
:code=> 'hoge', ←'+ 引数名 +'だとダメ。ここを入れ替えたい
:page => 1,
:count => 5
}

152:デフォルトの名無しさん
21/04/26 22:54:52.82 rfpJ92nWr.net
意味が分からん。
エラーになるコードと希望する出力は何?

153:デフォルトの名無しさん
21/04/26 23:08:46.56 RYaLTPlL0.net
>>152
APIを使用して住んでる地域の時間ごとの過去の天気を見る学習をするはずだったのですが
自分でも何がしたいのかわからなくなってきたのでちょっと出直します。
すみませんでした。

154:デフォルトの名無しさん
21/04/26 23:31:12.51 rfpJ92nWr.net
>>153
おう、がんばれ

155:デフォルトの名無しさん
21/04/27 00:08:05.54 6stPm5Ss0.net
>>151
変数名と値(リテラル)の区別があやふやなんでは?
変数名をクォートしようとしている時点でヤバイ。

156:デフォルトの名無しさん
21/04/27 16:05:13.93 .net
>>148-150
ありがとうございます。
rubyのインストールが上手く出来なかったので明日またやってみます。

157:デフォルトの名無しさん
21/04/28 22:23:58.72 .net
145です。
出来ました。ありがとうございます。

158:デフォルトの名無しさん
21/04/30 21:24:36.83 DJ/L1TU20.net
>>150
Array#to_csvってかなり非効率的なんで避けたほうが無難
csv_str = CSV.generate{|csv| result_ary.each{|it| csv << it } }

159:デフォルトの名無しさん
21/05/03 11:06:41.86 B6Xr9eKd0.net
Pythonみたいに行けてるエクセルライブラリが欲しい。。

160:デフォルトの名無しさん
21/05/12 09:35:54.83 NUn3zAQRa.net
>>158
非効率というのは遅いって事ですか?

161:デフォルトの名無しさん
21/05/12 10:19:17.28 iLdhy1ll0.net
>>160
require "bundler/inline"
gemfile do
source "URLリンク(rubygems.org")<)
URLリンク(github.com)
見ると分かるがCSV.new等を毎回行う手抜き実装(バグりにくいというメリットは確かにある)
1行だけならともかく複数行をcsv化したいなら微妙

162:デフォルトの名無しさん
21/05/12 11:11:15.22 heOXda5CM.net
実際にはどうせファイルに書き込むんだからファイルIOがボトルネックになるんで誤差だよ
無意味なベンチマークだね

163:デフォルトの名無しさん
21/05/12 11:18:11.79 VEm96Egx0.net
>>162
キャッシュなしフロッピーディスク💾を使ってるのかな?w

164:デフォルトの名無しさん
21/05/12 11:41:45.65 iLdhy1ll0.net
>>162
Benchmark.driver do |x|
x.prelude %{require "csv"}
x.prelude %{require "tempfile"}
x.prelude %{ITEMS = Array.new(1000){ ["fooo", 12345,6789] }}
x.report "to_csv", %{ Tempfile.create{ _1.write ITEMS.map(&:to_csv).join } }
x.report "generate", %{ Tempfile.create{ _1.write CSV.generate{|csv| ITEMS.each{|it| csv << it } } }}
end
確かに縮まりはしたが
うちのオンボロPCでも5倍弱の差が出ました。

165:デフォルトの名無しさん
21/05/12 22:35:04.85 gVUbVQ8ua.net
何秒が何秒になったんですか?

166:デフォルトの名無しさん
21/06/01 17:26:14.50 iV+6o72S0.net
c="C:\Program Files\7-Zip\7z.exe"
p c
で出力は
> "C:Program Files\a-Zip\az.exe"
となってしまうんですが、なんで7がaに変わってしまってるんでしょうか?
2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]です

167:デフォルトの名無しさん
21/06/01 17:31:29.95 DkdlQ1eQ0.net
URLリンク(ja.wikipedia.org)ベル文字
> ベル文字は、ASCIIとUnicodeでは十進数で7
> 1972年に作られたC言語では、ベル文字は文字定数 \aで表される。'a'は"alert"や"audible"の頭文字である。'b'は既にバックスペースに使われていた。

168:デフォルトの名無しさん
21/06/01 18:04:34.76 uwqmKkHK0.net
>>166
バックスラッシュ記法で8進数表記のパターンとして解釈されるから
式展開が必要なければシングルクウォートにするといい
URLリンク(docs.ruby-lang.org)
¥007も¥07も¥7も同じ
C言語由来のエスケープシーケンス

169:デフォルトの名無しさん
21/06/01 18:56:08.30 acqsmkid0.net
>>166
>>168のシングルクォートよりも、パスの区切り文字を「/」にすることをすすめたい。
パスの区切り文字が「¥」でなければいけないのはコマンドプロンプトなど一部のみ。
だいたいが「/」でも可。

170:デフォルトの名無しさん
21/06/01 21:37:59.00 iV+6o72S0.net
>>167-169
まとレスにて失礼します
aに置き換わる謎はわかりました
シングルクォートなのですが、面倒くさいことにWindowsの決め打ちで空白が入っているので
それを考えるとダブルクォートで囲まざるを得ず、けっきょくこんな形になってしまいました
c="\"C:\\Program Files\\7-Zip\\7z.exe\""
このあと
system("#{c} a -mx9 ...")
みたいな形で呼び出します

171:デフォルトの名無しさん
21/06/01 22:03:40.90 eWE6r8CI0.net
>>170
c = '"C:\Program Files\7-Zip\7z.exe"'

172:デフォルトの名無しさん
21/06/02 19:46:00.37 onKqKKZNr.net
>>170
すごく短くまとまってるから、一度公式のリファレンス読んだ方がいいよ
URLリンク(docs.ruby-lang.org)

173:デフォルトの名無しさん
21/06/02 20:29:52.62 92rWXivp0.net
>>171
ああなるほど
それで行けますね
昔は自分でもそんな書き方してたかもしれなかったです
>>172
ご案内ありがとうございます
シングルクォートとダブルクォートの意味とか違いは理解していたのですが
中に\入れたときとか、とくに168さんに指摘されたように8進数での扱いが特別だということは
よく理解していなかったので、これを機会に知識を正確にしておきます

174:デフォルトの名無しさん
21/06/03 18:27:26.17 peqY6uPj0.net
完全にプログラミング0からで「スラスラ読めるrubyふりがなプログラミング」を買って始めたのですが
macbookairでrbenvでruby3.0.1をダウンロードしてrbenv versionでは3.0.1と表示されるのですがruby -vでは2.6.3と元々入ってるrubyが表示されます
まだ何も分かってないのにhomebrewとrbenvのダウンロードが上手くいかず色々見ながらやってきたので余計な事をしてしまったのではないかと心配です

175:デフォルトの名無しさん
21/06/03 18:56:51.38 peqY6uPj0.net
>>174ですが
自己解決しました
bash profileに何か誤ったものを書き込んでしまったようで消したら3.0.1に切り替わりました

176:デフォルトの名無しさん
21/06/05 14:54:45.98 uC9Joojh0.net
Rubyで、syntax error 的なものが生じていても、そのまま実行が続けられている
ように見える現象が時々起きる。
これは何が起きている?
errorが起きた場所で停止させる方法はある?

177:デフォルトの名無しさん
21/06/05 15:26:37.54 SGijWivar.net
rescue SyntaxError

178:デフォルトの名無しさん
21/06/05 20:10:36.75 K+vX0E1p0.net
>>176
そのエラーが起こった時に何が表示されているの?

179:デフォルトの名無しさん
21/06/06 16:19:02.76 1amPE6il0.net
>>178
例えば、xxx という変数を定義してない状態で、
[aaa.rb]
def some_func()
  ・・・
  print( "xxx=#{xxx}\n" );
  ・・・
end
という関数を呼び出すと、
aaa.rb:3882:in `some_func': undefined local variable or method `xxx' for main:Object (NameError)
  from aaa.rb:5638:in `main'
  from aaa.rb:5667:in `<main>'
と出るが、そのまま実行が続けられてしまう。

180:デフォルトの名無しさん
21/06/06 17:06:19.62 B1fTG1Q6r.net
>>179
begin
rescue
end
の構造してるだけじゃないの

181:デフォルトの名無しさん
21/06/06 17:09:33.22 1amPE6il0.net
>>180
そういうものは使ってない。

182:デフォルトの名無しさん
21/06/06 17:12:50.30 B1fTG1Q6r.net
>>181
再現するコードを共有することはできますか?

183:デフォルトの名無しさん
21/06/06 17:37:47.34 1amPE6il0.net
>>182
できない。
大事なコードだから非公開。

184:デフォルトの名無しさん
21/06/06 17:44:51.53 B1fTG1Q6r.net
そうであれば我々にはわかりえない。
まあどっかでrequireをオーバーライドしてるとかじゃないの。

185:デフォルトの名無しさん
21/06/06 18:17:08.76 1amPE6il0.net
>>184
全部自分で書いたコードで、Rubyの基本的な機能しか使ってない。
また、検索してみたが、begin や rescue というキーワードは全く使ってなかった。

186:デフォルトの名無しさん
21/06/06 21:13:38.74 kq17Ee/S0.net
別スレッドも停止させたいのであれば、Thread.abort_on_exception=trueが必要とか?

187:デフォルトの名無しさん
21/06/06 22:12:59.95 1amPE6il0.net
>>186
シングルスレッドしか使ってない。

188:デフォルトの名無しさん
21/06/06 23:44:17.52 ///+rfU80.net
もうええて。
追加情報がなきゃあもうムリやろ。

189:デフォルトの名無しさん
21/06/07 08:20:47.92 Q1HfUOnq0.net
バグだね。

190:デフォルトの名無しさん
21/06/07 12:05:22.54 Qb3DiLXp0.net
さすがのRubyでも、そんなアホみたいな「バグ」なんかないやろ。w

191:デフォルトの名無しさん
21/06/07 13:11:30.61 tJ2RoPVV0.net
おまえさん一人だけの症状なんだし再現できるコード・環境を出せない以上おま環

192:デフォルトの名無しさん
21/06/07 13:15:54.00 pl6618+T0.net
>>170
コマンドプロンプトでも普通に、/ を使える。
これで実行できる
ruby C:/Users/Owner/Documents/a.rb
パスに空白が入っている場合は、シングル・ダブルクォーテーションで囲む
PowerShell(PS)でも良いし。
Windows Terminal なら、Bash, PS、コマンドプロンプトの3つを使える

193:デフォルトの名無しさん
21/06/08 10:27:31.04 ljhkY4kR0.net
Powershellで標準出力をリダイレクトしてると
Ctrl-C押した時at_exitに飛ばずに死ぬの何なの?

194:デフォルトの名無しさん
21/06/08 11:47:19.54 dOMi6vvz0.net
そのアプリが、SIG-INT・中断をキャッチしない場合は、
SIG-KILL・強制終了されるのだろう
強制終了は、受け身が取れない。
たぶん、デフォルトの挙動は、そうなのだろう

195:デフォルトの名無しさん
21/06/08 12:46:57.32 ljhkY4kR0.net
リダイレクトしていなければ普通にat_exitに飛ぶんだよ

196:デフォルトの名無しさん
21/06/08 14:00:54.76 8dk2g5lI0.net
試しにpythonでもatexit使ってみたが同様に強制終了される
Traceback出力されるのにatexitは実行されない

197:デフォルトの名無しさん
21/06/08 14:04:16.61 xXGg8olZ0.net
Rubyスレなんだが!

198:デフォルトの名無しさん
21/06/08 14:34:31.00 8dk2g5lI0.net
powershellがバグってる
cmd /c 経由なら正常にリダイレクトおよびctrl+cできたわ

199:デフォルトの名無しさん
21/06/08 14:44:58.07 ljhkY4kR0.net
え~~マジっすか
検証してくれてありがとうございました。

200:デフォルトの名無しさん
21/06/08 17:51:22.97 ljhkY4kR0.net
まずパイプが終了して、それに巻き込まれてpythonのプロセスが落ちるとかなんとか
rubyの挙動を調べるためにpythonでググるってなんだかな

201:デフォルトの名無しさん
21/06/08 20:59:45.11 7WqSN2WLr.net
そういやパイプ周りの不具合がなんかあったな

202:デフォルトの名無しさん
21/06/08 21:13:49.57 7WqSN2WLr.net
と思ったら今回の件と何も関係が無かったわ。
URLリンク(bugs.ruby-lang.org)

203:デフォルトの名無しさん
21/06/08 21:15:32.86 S62X2+fs0.net
>>159
ほんと、これは甚だ同意。

204:デフォルトの名無しさん
21/06/10 21:34:01.60 Hn4s45bFd.net
現在ラズパイにrubyとpythonを入れて処理を並列に自動実行しようと思ってます
ただ台数が多いため一台ごとにソースを変えるのは回避したいです
なので理想は起動時に最新のソースに自動で更新です
このようなことをしたいときはどのようにするのが一番簡単でしょうか?
rubyでサーバーから最新のソースをコピーしたあとにrubyとpythonを実行?
家で使用するのでセキュリティーとかは気にしません

205:デフォルトの名無しさん
21/06/10 22:40:14.97 t0oieqtV0.net
>>204
rsyncすれば?

206:デフォルトの名無しさん
21/06/18 09:43:06.27 Jo75oGSbM.net
>>204
厳密に一斉に切り替わらなくてもいいならcronとかで定期的にGitHubからpullする
手段が目的だと堂々と言えるならKubernetesのクラスタ組むとかも面白い

207:デフォルトの名無しさん
21/06/23 23:47:46.99 vtN99wcma.net
ライブラリのopenのように、
open() do |f|
・・・
end
と書いてもよく、
f= open()
・・・
f.close
と書いてもいいというクラスor メソッドは
どうやって作ればいいのでしょうか。
yieldを使うとイテレータのみになってしまうし、
returnすると下の例だけになってしまいます。

208:デフォルトの名無しさん
21/06/24 00:15:52.97 PG/lAwcj0.net
if block_given? で分岐

209:デフォルトの名無しさん
21/06/24 07:40:00.21 R0/fGgxp0.net
>>208
ありがとうございます。
うまく作れました。

210:デフォルトの名無しさん
21/06/24 07:56:14.83 R0/fGgxp0.net
すみません、もう一つ教えて下さい。
rubyというかプログラムを書くとき全般の注意として、
ファイルopenとcloseはなるべく近くに書くようにと
ありました。
恐らくclose漏れを警戒しているのだと思います。
yieldを使えば、以下コードでそれを実現できます。
def fileInterface
f= open()
begin
yield f
ensure
f.close
end
end
yieldを使わないパターンでは、
closeを近くにかけないのですが解決策あるでしょうか。
def open
@f= open()
return @f
end
def close
@f.close
end
openメソッド実行
・・・
・・・(大量の処理)
closeメソッド実行

211:デフォルトの名無しさん
21/06/24 09:32:39.75 +4IsK47J0.net
>>210
大量の処理を関数にして分離。
あるいは、しょせん理想でしかないので、離れていても気にしない。

212:デフォルトの名無しさん
21/06/24 10:36:21.12 5MDZvZ/d0.net
>>210
close漏れを警戒するのであれば、openにそのままブロックを渡した方がいい
openはブロックの実行結果を返し、ブロック脱出時に勝手にcloseします
まぁ、どうせclose漏れしてもそのうちGCに回収されるかプロセス終了時にcloseされる

213:デフォルトの名無しさん
21/06/24 11:01:09.55 PG/lAwcj0.net
>>210
yield使った実装とやることは同じ
f= open file
begin
大量の処理を含むメソッド f # <― yieldがメソッドに変わるだけ
ensure
f.close
end
同じだからこそ毎回同じことを書かなくてもいいようblock付きで呼び出す
open(file){|f| 大量の処理を含むメソッド f}

214:デフォルトの名無しさん
21/06/24 12:31:52.31 9bIzV4XCa.net
大量の処理を手続きオブジェクトに分離するのは、やりました。
やっぱりそれしかないかな。
ブロック付きで渡すのはオブジェクト指向ではない
コードになりやすく、今回は考えてないです。
また、全体をensureで囲うのは、
さすがにensure対象が暗黙的すぎてちょっとな・・・です。

215:デフォルトの名無しさん
21/06/24 13:25:07.89 +4IsK47J0.net
>>214
> ブロック付きで渡すのはオブジェクト指向ではない
> コードになりやすく
そうか?
まあ、「オブジェクト指向」にもいろいろあるからな。w

216:デフォルトの名無しさん
21/07/17 09:58:54.08 yHV+uNLK0.net
railsにおいて あるフォームから特定の変数に送られるデータの内容を固定したいのですがなにかいい方法ありますか?
具体的には
<%= form_with model: @hoge do |form|%>
<%= form.text_field :name , value: 'hoge'%>
<%= form.submit %>
<% end %>
と書かれている場合 hogeというモデルのnameという変数に必ずhogeが入るようにしたいのですが上の書き方だと初期値にhogeが入るだけで編集可能になってしまいます。

217:デフォルトの名無しさん
21/07/17 10:48:14.79 xmQE+uIu0.net
openに、ブロックを渡す方法は、
コンテキスト・マネージャーという、多くの言語で使われているデザインパターン
これよりも良いものは作れないから、皆が使っている

218:デフォルトの名無しさん
21/07/17 10:54:23.38 xmQE+uIu0.net
そりゃ、フォームはサーバーへ送られて更新されるものだから、
変更可能のフィールドが普通
変更不可のフィールドにするなら、
そのフィールドをサーバーへ送らないようにしないといけない
そういうオプションがあるのかな?

219:218
21/07/17 11:08:32.59 xmQE+uIu0.net
「html disabled readonly」で検索!
HTML の <input> 要素には disabled と readonly 属性が存在します
disabled : コントロールが無効化され、フォームを Submit しても、値の送信が行われない
readonly : 値の変更は行えないが、コントロールは有効なので、
フォームを Submit すれば値の送信が行われる

220:218
21/07/17 11:15:24.94 xmQE+uIu0.net
変更不可のフィールドなら、
<input> 要素などを使わずに、単にテキストを表示すれば?

221:デフォルトの名無しさん
21/07/17 13:56:18.38 EBHVYdQH0.net
>>216
hidden_field使ってもいいけど
そもそもformによる入力=webからの入力は信頼してはいけない

222:デフォルトの名無しさん
21/07/17 14:27:31.06 7kNL/q5q0.net
>>221
ではどうすればいいでしょうか

223:デフォルトの名無しさん
21/07/17 16:20:51.36 CYR4F+Ue0.net
>>222
直にソースで書くしか!
ちなみに、XSRFも調べとくとええんちゃう?

224:218
21/07/17 20:48:35.06 xmQE+uIu0.net
マスアサインメント脆弱性を、strong parameters で防ぐ。
更新できる列を、permit で限定する。
これは、コントローラーでの制限
params.require(:person).permit(:name, :age)
Action Controller の概要
URLリンク(railsguides.jp)
モデルでのバリデは、
Active Record バリデーション
URLリンク(railsguides.jp)
Rails ガイド・Rails チュートリアル・黒田努の本などを読むか、
YouTube で有名な、雑食系エンジニア・KENTA のサロンへ入ると良い。
日本6位の、2千人入っている、虎の穴

225:デフォルトの名無しさん
21/07/18 01:26:53.43 M+6J3Mfd0.net
>>217
ブロックで書くとテストコードが書きづらくないですか?
最近はテストコードのことを考えて、普通に、
file = open(file,'r')
とか書いてます。
あと、ブロックはネストするからなあ。

226:デフォルトの名無しさん
21/07/18 15:19:50.46 WDHzAXg40.net
>>222
何がしたいのか次第
'hoge'で固定するのであればformで入力させる必要はないですし
なんらかの方法で生成するのであれば生成するタイミングを考えます
入力フォーム表示前に生成し固定する必要があるのであれば
ActiveSupport::MessageVerifier
ActiveSupport::MessageEncrypter
session
などを使う

227:218
21/07/18 22:44:25.79 H/NN8O820.net
Rails の便乗質問するけど、
ユーザーの入力値により、条件判断して、
条件1 の場合には、列A だけを更新して、
条件2 の場合には、列B だけを更新する
と言うのは、どのように書くの?
モデルのcallback かな?

228:デフォルトの名無しさん
21/07/19 01:48:34.69 0iu7guVA0.net
ruby silver試験は公式問題集をやれば
合格できますでしょうか、学習時間も参考にさせていただきたいです。
silverを考えています。
バージョンがかなり古いとは思いますが、今のrubyとそんなに変わらないと思ってて大丈夫でしょうか

229:218
21/07/19 07:03:41.76 sO73HNBd0.net
Ruby の資格は、漏れも取っていない。
下のマネーフォワードの本で、良いと思う
改訂2版 Ruby逆引きハンドブック、2018

230:デフォルトの名無しさん
21/07/20 08:12:05.37 EkYsR0Mj0.net
【A型の人ごめん】「まじめ人間」は、自分の人生を生きられず、しかもお金持ちになれない。
URLリンク(www.youtube.com)
【人生観変わる話】「サラリーマン脳」のヤバい特徴5選。
URLリンク(www.youtube.com)
【人生終了】情弱がハマる「貧困スパイラル」のリアル。
URLリンク(www.youtube.com)
バカでもわかる!ネットビジネスの始め方。
URLリンク(www.youtube.com)
時給労働から卒業しよう!貧乏人が知らない「お金の稼ぎ方」まとめ。
URLリンク(www.youtube.com)
【人生攻略】経験・実績ゼロのあなたが、最短で何者かになる方法。
URLリンク(www.youtube.com)
【残酷】貧乏人はいつも忙しいのに、お金持ちは暇である理由。
URLリンク(www.youtube.com)

231:218
21/07/20 10:14:09.06 nphTU9tH0.net
>>227
自己回答
ユーザーの入力値により、条件判断してはいないけど、
改訂4版 基礎 Ruby on Rails、黒田努・佐藤和人、2018
の400 ページで、
アクションのcreate/update で、
コントローラーのstrong parameters を変える例が書いてある
例えば、下のような感じ
params.require(:person).permit(:name)
params.require(:person).permit(:age)

232:デフォルトの名無しさん
21/07/21 10:26:17.53 GSJrQWT80.net
>>231
別に構わんが環境次第でUnpermittedParameters例外出そうな気がするので
@person.update(xxx_params.except(:age))
的な感じのほうがよいかも

233:デフォルトの名無しさん
21/07/24 17:53:55.08 niZ/VlC90.net
pythonなみの公式チュートリアルがあればいいのに

234:デフォルトの名無しさん
21/07/27 10:21:46.39 y9fA4YVt0.net
Railsでも何でもいいんですが、ecサイトの様なユーザー登録とログインシステム
をRubyを使って簡単に構築するライブラリの使い方が書かれている良い本は
有りませんか?

235:デフォルトの名無しさん
21/07/27 11:24:07.05 ic7RAKIO0.net
>>234
Ruby on Railsのチュートリアル
でいいのでは?
簡単に済ませたいならば、
Shopifyとか外部決済システムに外注すれば?

236:デフォルトの名無しさん
21/07/30 18:21:13.72 7AkGA5GJ0.net
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?

237:デフォルトの名無しさん
21/08/03 20:29:25.38 1SQdlJBzr.net
NOKOGIRI

238:デフォルトの名無しさん
21/08/03 22:35:38.25 3PGqGTvy0.net
>>236
踏み台を準備してそこ経由でスクレイピングする

239:デフォルトの名無しさん
21/08/04 01:04:19.47 wXXobJu90.net
>>236
スクレイピングの勉強

240:デフォルトの名無しさん
21/08/04 11:12:04.78 Ud4GmCQc0.net
>>236
とりあえず、関心のあるページをローカルに保存してnokogiriでアクセスしてみれば?
crawler部分とscrap部分を分けるのが吉。
つまり、100pagesをスクレーピングするなら、まずhtmlをblob型でDBにinsertしてから欲しいデータをnokogiriで取り出すのだ。

241:デフォルトの名無しさん
21/08/04 11:45:59.21 BE8GLseK0.net
>>234
よく見るのは、devise gem を使う
パーフェクト Ruby on Rails、2020/7 には、載っていない
改訂4版 基礎 Ruby on Rails、黒田努・佐藤和人、2018/9 には少しだけ載っている。
ただし、この本は、Ruby 2.5.1, Rails 5.2
Ruby on Rails 6 実践ガイド、黒田努、2019/12、には載っている
ただし、上の黒田努の2冊の本では、devise を使わず、自作している
Rails チュートリアル・Rails ガイドも参照
YouTube で有名な、雑食系エンジニア・KENTA のサロンでは、
2千人の未経験者が、Rails の転職用ポートフォリオを作っている。
そこへ入って、聞いた方がよい

242:デフォルトの名無しさん
21/08/04 12:01:13.97 BE8GLseK0.net
>>236
サイトのrobots.txt を遵守すること!
これを守らないと、営業妨害で逮捕される
CSS Selector を勉強する。XPath は勉強しなくてよい。
JavaScript も、jQuery 程度は出来た方がよい
gem は、Nokogiri, Selenium Webdriver
Udemy の山浦清透、2021/6
【作業工程フル公開】エンジニアが30万円案件の制作過程を公開
www.youtube.com/watch?v=tYbVl6N8oxI
PHP のLaravel で、マイナビ転職をスクレイピングして、データベースへ保存する
基本、この動画と同じ。
これを、Ruby on Rails へ置き換えるだけ

243:241
21/08/04 15:15:35.32 BE8GLseK0.net
>>234
Ruby on Rails, devise の動画
Farstep、2019/9
【Rails】deviseを使ったログイン機能の実装(名前でログインする方法を解説)
www.youtube.com/watch?v=Lmq_WLkxp9c

244:241
21/08/04 15:35:06.48 BE8GLseK0.net
YouTube で「ruby on rails devise」で検索すれば、日本人の動画も多い
Farstep, うるぞー、もぐらストア、
やんばるCODE 守護神・バグ取り名人 たけ

245:デフォルトの名無しさん
21/08/04 22:15:34.77 y1FxFhCLr.net
jQueryって単語、1万年ぶりに見たわ

246:デフォルトの名無しさん
21/08/05 00:10:48.44 r/zZzNU40.net
>>245
一万十歳かな?

247:デフォルトの名無しさん
21/08/05 12:32:32.94 dqIKXfcM0.net
>>242
>>サイトのrobots.txt を遵守すること!
>>これを守らないと、営業妨害で逮捕される
どういうことですか?
詳しくお願いします

248:218
21/08/05 13:11:38.51 bqGeTZjz0.net
>>231
パーフェクト Ruby on Rails 【増補改訂版】 (Perfect series)、2020/7
の92 ページで、
コントローラー内で、private メソッドを定義して、
条件によって、strong parameters を変える例が書いてある
管理者・一般ユーザーで変える例
params.require(:user).permit(:name, :admin)
params.require(:user).permit(:name)

249:242
21/08/05 13:20:50.00 bqGeTZjz0.net
>>247
>>242
に書いてある、山浦清透の動画を見れば分かる
各サイトには、robots.txt が置いてあって、
スクレイピングする場合は、必ず30秒空けるとか、
このフォルダはスクレイピングしてはならないとか、多くの条件が書いてある
それを守っていないと、営業妨害になる
スクレイピングは初心者向きじゃないので、各サイトと契約して、API を使うべき!
なぜかと言うと、初心者のプログラムにはバグが多いから、
無限ループしたりして、サイトへ無限にアクセスしたりする
それで、営業妨害で逮捕されるかも知れないから、すごく危険!
プロでも、スクレイピングはしない。
必ず、サイトと契約して、APIを使う
5ch もそう。契約して、APIを使えと言ってる。
勝手にスクレイピングすると、訴えてくるかも知れない

250:デフォルトの名無しさん
21/08/05 13:38:00.10 /9S9EoKc0.net
>>249
私のスクレイピングしたいサイトにはAPIは公開されていません
またrobots.txtも設置されていません
robots.txtでリクエスト間隔の指定なんてあるのですか?
常識的に数十秒から数分に一回程度のリクエストなら問題ないと思いますが
営業妨害ってどういう意味ですか
IT企業に勤める知り合いはスクレイピングで求人を出すことがあると言ってましたが嘘でしょうか?
5chでスクレイピングしたら相手にバレて訴えられることがあるのですか?

251:デフォルトの名無しさん
21/08/05 14:04:49.73 RzFkoDJoM.net
>>250
あるよ
数分に一回のリクエストで落ちるゴミサイトだろうと、結果的に相手の業務に支障が生じれば業務妨害罪に問われる可能性がある

252:デフォルトの名無しさん
21/08/05 14:10:13.57 5L8sIm7d0.net
>>250
> 常識的に数十秒から数分に一回程度のリクエストなら問題ないと思いますが
> 営業妨害ってどういう意味ですか
誰にとっての「常識」ですか?
某岡崎市の某図書館の「りぶらはっく」の件を知りませんか?
(情報リテラシのある側からしたら、)
あんな程度のアクセスで逮捕されるわけない「はずだと思う」なのに、
実態は、全部ゾンビ化(作った業者がアレ)していて、
け●さつがわも情報リテラシがなくアレだから、
結果がアレになっちゃったんですよ。
いいですかー、ここは日本です。
訴える側の後ろ側の行政側がアレな場合が多々あり、
情報リテラシがまったくない、矛盾しまくった法治国家なわけですよ。
誰の常識かは、サイトを提供している側が情報リテラシがない場合、その情報リテラシがない前提が常識なわけです。
つまり、その場合、何らかスクレイピングした時点で営業妨害とみなされても仕方ないですよ?

253:デフォルトの名無しさん
21/08/05 14:53:47.22 /9S9EoKc0.net
>>252
結局その事件は不起訴処分ですよね?
なぜ不起訴になったかわかりますか
検察側が有罪に出来ないと判断したからです
インターネット業界に携わる者たちからすれば余りにも「一般常識」から外れた言いがかりですからね
あなたのような無知蒙昧で従順な子羊は司直にとっては美味しいお客様ですね
これからも「常識」に則った素晴らしいプログラムを書き続けてくださいね

254:デフォルトの名無しさん
21/08/05 15:24:32.14 5L8sIm7d0.net
>>253
もし本当に訴えられたとき、実際の裁判の場で、>>253 と同じ発言を検察側、裁判官の前で弁論できるとよいですね。

255:デフォルトの名無しさん
21/08/05 16:15:30.56 r8rfvWmzM.net
まあ不起訴で納得できるならいいんじゃないの?
俺だったら逮捕の時点で嫌だけど

256:デフォルトの名無しさん
21/08/05 17:07:40.75 bqGeTZjz0.net
逮捕状は名目上、第三者と言われる司法・裁判所が出している。
本当は警察・検察、つまり行政と結託しているけどw
警察はマスコミにリークして、有罪の世論を作る
だから日本では、逮捕 = 100% 有罪。
100%有罪でも、誰もおかしいと思わない。
他国では有罪率が50% ぐらいだけど、日本だけは100%
つまり、三権分立していない。
行政が決めてから、司法が行政のやった事を正当化するような判決文を書く。
行政を勝たせた人だけが出世できるから
でも、判決文を書くのを極端に嫌がる。
N国みたいな政党が、YouTube で裁判官の判決文を批判したりして、おかしいのがばれるから
不起訴になるのは、犯罪者が認めた場合
青汁王子みたいに検察へ喧嘩を売ったら有罪にされたけど、
徳井みたいに脱税を認めたら、不起訴になった

257:256
21/08/05 17:20:52.40 bqGeTZjz0.net
その人がやった事を認めたから、不起訴にした
日本では、逮捕 = 100% 有罪だから、絶対に有罪にできる。
日本では自白をすると、裁判所で何を言っても、くつがえせない。
嘘をついて、自白をするわけがないと言う
だから検事は、拷問・家族を脅迫して、自白をさせる
青汁王子みたいに検察の拷問を発表したら、有罪にされた。
それで青汁王子は、検察改革として選挙に立候補するかも知れない
一方、徳井は脱税を認めたら、不起訴になった
ZOZO・前澤も、脱税をマスコミにリークされた。
でも、N国が国会で誰がリークしたか聞いたら、皆、白を切った
これを国会で追求されたら、まずいから。
警察から、マスコミへリークしているのがばれるから
前澤のは、そもそも脱税でもない。
解釈の違い
それを警察がマスコミを使って、青汁王子みたいに悪人に仕立てようとした。
それをN国が国会で質問したから、ばれそうになって白を切った

258:デフォルトの名無しさん
21/08/05 17:25:15.95 I7FszFTK0.net
>>257
ちなみに
5chで
マルチポストしたら
逮捕されるかもしれないって
知ってた?

259:デフォルトの名無しさん
21/08/05 17:29:15.92 I7FszFTK0.net
逮捕はされないかもしれないけど
自分の悪行を
棚に上げて
正義面したら
地獄へ落ちちゃうよ
閻魔様に
舌を抜かれちゃうんだよ
怖いよ

260:デフォルトの名無しさん
21/08/05 17:32:22.30 I7FszFTK0.net
検察も
警察も
裁判も
怖くないよ
地獄へ落ちると怖いよ
舌を抜かれて
張りの山を登らされて
業火に焼かれるんだよ
熱いよ
痛いよ
怖いよ

261:デフォルトの名無しさん
21/08/05 18:10:22.22 r/zZzNU40.net
きもこわ

262:デフォルトの名無しさん
21/08/05 22:31:27.66 vSsQCnpga.net
別に地獄に落ちるのは怖くないが
昔の人の妄想だし
警察、検察に痛くもない腹を触られるのは怖い

263:デフォルトの名無しさん
21/08/05 23:40:13.64 6menK19J0.net
地獄は怖いよ
怖くないって言ってる人
強がり
一番いけないのは
自分のことを棚に上げて
自分が正義だって言う人
地獄へ行くよ
閻魔様に舌を抜かれるよ
痛いよ
でも逮捕はされないかもしれな
でも地獄の方がもっと怖い

264:デフォルトの名無しさん
21/08/06 09:34:44.10 7P/+UMXla.net
悪魔の証明みたいだが地獄は存在しない
人間は死んだらそこで意識は消滅。無になる。
意識は脳の中の電気信号の集合だから
脳が動かなくなると意識は永遠に消えてなくなる

265:デフォルトの名無しさん
21/08/06 20:13:46.87 qRWxBcUir.net
1. 世界とは事実の総体である。
2. 世界とは<私>の世界である。
2-1. 故に、世界の限界とは<私>の限界である。
2-2. <私>は死なない。視野の端が存在しないように、世界の死は存在しない。
2-2-1. 故に、地獄の存在は事実ではない。
2-2-2. 地獄について語ることはできない。
3. 語りえないことについては沈黙しなければならない。
QED?

266:ハノン
21/08/06 21:35:40.63 .net
>>265
その括弧つきの私(<私>)とは何かを十分に説明していませんね‥‥

267:デフォルトの名無しさん
21/08/06 22:04:45.00 qRWxBcUir.net
<私>とは、この私の世界の開闢者。
お前にとっての私ではなく、私にとっての私。
ヒュームが言うところの自我。

268:デフォルトの名無しさん
21/08/07 00:33:19.88 ctvRT72B0.net
地獄を知ってしまったら
もう地獄はあるよ
自分のことを棚に上げて
他人をバカにしたら
地獄行きだよ
地獄は怖いよ

269:デフォルトの名無しさん
21/08/08 22:12:00.50 Ullx8amr0.net
自分のことを棚に上げる
一番悪い事
地獄に落ちて
閻魔様に舌を抜かれて
針を飲まされるよ

270:デフォルトの名無しさん
21/08/09 12:44:08.03 GX8oEfXz0.net
そういうのを信じてくれると
犯罪が減るからべつにいいけど
私は信じていないけど

271:デフォルトの名無しさん
21/08/09 21:13:44.03 gRn7tUgS0.net
人に迷惑をかけるのは悪い事
地獄に落ちないかもしれない
でも自分のことを棚に上げて
人に迷惑かけたら
地獄に行く
警察もヤクザも
怖くない
地獄は怖いよ

272:デフォルトの名無しさん
21/08/12 00:48:05.26 xG1RPqdX0.net
スクレイピングは逮捕される危険があるって聞いたんだけどマジ?

273:デフォルトの名無しさん
21/08/12 08:20:26.43 oGP6NDDs0.net
危険ならあるけど実際にどうかは個別案件によるんじゃね

274:デフォルトの名無しさん
21/08/12 09:52:15.39 e+dZJ+jE0.net
起訴・有罪までは滅多に行かんとは思うが
逮捕までならありえなくもない

275:デフォルトの名無しさん
21/08/12 13:43:21.85 Uyxv6qpU0.net
突然民事訴訟を起こされて
賠償金を要求されることは十分にあり得る

276:デフォルトの名無しさん
21/08/12 16:10:50.05 oGP6NDDs0.net
ネットだからまずは開示請求からだね
「突然」賠償請求はない

277:デフォルトの名無しさん
21/08/12 16:42:48.35 NvgIkHB7M.net
受ける方からしたら突然賠償請求だろ
開示請求なんて直接は来ないよね

278:デフォルトの名無しさん
21/08/12 16:50:15.85 drSdi1s70.net
逮捕も賠償も怖くない
地獄へ行くのが怖い
でも地獄へは行かないかもしれない
でも自分のことを棚に上げて
人の嫌がる事ばかりしてると
地獄へ行く

279:デフォルトの名無しさん
21/08/13 01:45:34.20 kzYHP2KN0.net
じゃあrobots.txtを遵守していればスクレイピングしてもOKなんですね?

280:デフォルトの名無しさん
21/08/13 02:19:03.50 BSEOqpqJ0.net
他者に被害を主張されたらトラブルになる可能性がある。
それだけ。
いいこともそうでないことも、両方ある。
他人に聞いてもムダ。

281:デフォルトの名無しさん
21/08/13 09:28:36.17 eq2Tc8oG0.net
>>277
開示請求は裁判所を通してプロバイダに請求が行くんだけど
プロバイダは顧客である「受ける方」に無断で開示は通常しないで
まずは開示を許可するかを「受ける方」に訊いてくる
だからその段階でなにか事が進んでいるんだなということはバレる
あくまで「突然」賠償請求が来るなんてことはない

282:デフォルトの名無しさん
21/08/13 09:32:36.58 eq2Tc8oG0.net
ネットに限らず相手の素性もわからないのに突然賠償請求なんてできやしない
まずは相手方の特定から始めないとどうにもできない
たとえば道歩いていていきなり殴られて怪我しても
相手がどこの誰なのかがわからなければどうしようもない
警察沙汰にして警察が相手の素性を教えてくれればなんとかなるが
教えてくれなければ泣き寝入りよ
ネットはいわゆる「足がつく」状態だから開示請求かければなんとかなる可能性が高いだけ
いきなり賠償請求できない点はオンもオフも何も変わらない

283:デフォルトの名無しさん
21/08/13 09:34:43.40 eq2Tc8oG0.net
あらかじめ一定の社会的関係に入っている間柄なら別よ?
たとえば会社でセクハラされた・モラハラされた
そんな話だったら「突然」賠償請求は来るさ
そうなじゃなくてネット上でまったく関係ない素性も知れない第三者に損賠請求とか
「突然」できるわけがないだろうが

284:デフォルトの名無しさん
21/08/13 23:24:19.38 1DHqOLSr0.net
Rubyの開発ではglibは使われてますか?

285:デフォルトの名無しさん
21/08/18 05:53:03.10 yThqaD4x0.net
glib2と連携するGemがあるぐらいだから、
使われてると思うよ。

286:デフォルトの名無しさん
21/08/30 19:49:51.62 CW7ccSgo0.net
警察も検察も被告になることも怖くない
でも地獄は怖い
迷惑かけるだけなら
地獄へ行かないかもしれない
でも自分のことを棚に上げたら
地獄行き

287:デフォルトの名無しさん
21/08/30 21:27:50.25 Cj0Y+5WJ0.net
>>286
どんな理屈や!w

288:デフォルトの名無しさん
21/09/09 01:33:06.63 DPdnZbQ70.net
だめだ
また自分のことを棚に上げて
他人に説教
してしまってる
そんなに地獄に落ちたいのか


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch