Ruby 初心者スレッド Part 67
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 66
https://mevius.5ch.net/test/read.cgi/tech/1578068134/
るりまサーチ (リファレンス検索)
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 >>312
もっかい言うけど、バッファ無効はほどほどにな。
ストレージがすり減るぞ。 rubyのglobってなんでこの名前なんですか?語源というか理由は? 人に迷惑をかけるのはしょうがない
でも
自分のことを棚にあげたら
地獄だよ >>310
基本的に、読み込み用ファイルに書き込まないようにすべき。
io.seek で使う、ファイルポインターがずれる
例えば、配列でも同じ。
読み込み用配列を読み込みながら、
読み込み要素の前後に、要素を追加・削除すると、要素がずれるのでバグる
基本、同一ファイルじゃなく、入力用・出力用の2つが必要。
それか、データベースでやるとか
シェルスクリプトとか、関数型のElixir のパイプラインみたいに、
元のファイルを更新せずに、次々と出力ファイルを新規作成していくべき
処理A | B | C
他には、処理を分けられるなら、分けた方がよい
普通、バッファリング無しのモードは、
ユーザーの入力を待つような場合に、端末で使うもの。
こういうバックグラウンド処理では使わない
例えば、1回のシステムコールで、1000バイトの読み書きできるのに、
バッファリング無しなら、1000回もシステムコールを呼ぶから、処理時間が千倍になる
バッファリングとは、システムコールする回数を減らすために、
ある程度データが溜まるのを待ってから、処理を行うものだから ファイルパスから簡単に、ディレクトリ名だけを取り出す方法がありますか?
今は、下のようにやっています
file_path = "C:/Users/Owner/Documents/test/a.txt"
p dir_path = File.dirname( file_path ) # ディレクトリパスを取り出す
#=> "C:/Users/Owner/Documents/test"
p dir_name = File.basename( dir_path )
#=> "test" file_path = "C:/Users/Owner/Documents/baka.test/a.txt" >>321
必要充分だと思うがなあ。
自分でメソッドにくくりだすくらいやないの?
どうしても圧縮したいなら、text.sub(%r{.*/(.*)/.*}){$1}とか?
未確認。ワイならやらん。w >>321
標準添付ライブラリの pathname Google社内ではRubyの使用が許可されていない
当然だよね >>326
googleって言っても一枚岩じゃないからそれは完全に間違い バージョン互換の低さ、信頼性の低さを考えたら、プロジェクトとして使いにくいっつーのはあるやろな。 > お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
クソチョンw >バージョン互換の低さ、信頼性の低さを考えたら、プロジェクトとして使いにくい
googleのAPIのことですか? プログラミング言語のシェア的にはdistroless対応の優先順位は極めて妥当
残念だけどもう昔のような人気言語じゃないんだよ、、、
ttps://insights.stackoverflow.com/survey/2021#technology-most-popular-technologies >>330
自分に甘くて、他人に厳しいのはあたりまえやろ。w
おまえは違うのか? AWS Lambda には、Ruby もある
Chef, Cookpad 製のItamae, AWS CloudFormation のKumogata2 もある。
まあ、Terraform のシェアが高くなったけど
Vagrant の作者・ワシントン大学の学生で、今世紀最大の起業家・
HashiCorp の創業者・Ruby/Go の神・Mitchell Hashimoto も、
今は、Goへ行ってしまった
Goプログラマーを募集中
YouTube で有名な、雑食系エンジニア・KENTA のサロンでも、
Ruby on Rails → Go のキャリアパスを推奨している
PHP は、一生やらなくても良い。
新規の仕事が無いから、給料が上がらない。
保守要員は、給料が低いから
KENTAは常に、給料が高い新規プロジェクトを推奨している pp dmy={"VERSION"=>RUBY_VERSION, "ARGV"=>ARGV, "Dir.pwd"=>Dir.pwd}
でdmy=を消すと
Dir.pwdの . でエラーになっちゃうんですけど
syntax error, unexpected '.', expecting `end'
pp(puts)+hashのリテラルでうまい書き方ないんですか >>334
ブロックとして解釈されてエラーになるので
puts({a: “a”})みたいに括弧でくくる >>335
エラーの意味が理解できました
ありがとうございます classが全く理解できない。1日掛けても理解できない。俺は向いてないのか。。。 Rubyのclassはそれ自身がオブジェクトだからねえ。 クラスの型紙を元に実体化させたものが、インスタンス。
クラス自体を変化させたものが、特異クラス
ここで、インスタンスと特異クラスの継承チェーンを考えてみる
最終的にメソッド探索チェーンは、直線になる必要がある。
それで継承チェーンに、インスタンスと特異クラスが順序よく割り込んでくる
インスタンスに無ければ、特異クラスで探す。
特異クラスにも無ければ、継承チェーンを遡って、親クラスのインスタンスで探す。
そこでも見つからなければ、親クラスの特異クラスで探す
みたいに、継承チェーンをドンドン遡っていく ムリに「理解」しようとしてるからちゃうか。
あちこちのソースを適当に読んでたら、いずれスッと腑に落ちるときがくるやろ。 >>339
こういうふうに、知らない言葉と知らない概念をおっかけて「理解」しようとするのは、素養がなければツラかろう。
最初はとくに適当でええんや。 338と339は新人が来てもこの調子なんだろうなぁ > お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
クソチョンw スクレイピングに興味があるのですが1時間に1回の頻度のGETだけで訴えられる危険があるって本当ですか? 「Ruby」という商標についてなんですが
Rubyは同名の商標が多数登録されていますが、問題になった話を聞いたことがありません
他の言語も同様です
なぜ問題にならないんですか? スクレイピングに興味があるのですがrobots.txtを守っていても訴えられる危険があるって本当ですか? 訴えられる危険はいつでもどこでもある。
道を歩いていても、家の中にいても。 >>350
上級者になってからやらないと危険だよ
初心者がよくわからないままやるとサービス妨害になる可能性はまあまあある >>352
サービス提供側に原因があるというのにサービス妨害とはこれいかに? >>297
リブラハック事件を念頭に置いて居るのだと思います。
法的リスクを回避する方法はありません。
事業を行うのであれば、あるいは人生を送る以上法的リスクは常にあります。
入門書に記載出来る話ではないです。
リブラハック事件は、不起訴処分となってますが、20日間の勾留となりました。
余談ですが、旧7帝大卒、上場企業所属の場合、余程のことがない限り法的リスクは回避できます。 >>350
中小企業で知財を担当してますが、常に訴訟してます。
業務妨害罪で争ったことはありませんが、模造品による損害賠償事件はチョッ中です。 >>355
ちなみに、事件ばかり担当すると会社の仕事は超楽です。
裁判期日は多くても2ヶ月に1回だからです。
社内では、暇なおじさんと思われてます。
だから、プログラミング好きには知財は天国です。
まあ、会社によるのかもしれません。 Ruby on Rails 製のGitLab の時価総額が、1.9 兆円だって! ガチでヌーブなんですけどrequestsとbeautifulsoupでスクレイピングやってます
waitかけないとバンされるよと言われましたがどうすればいいですか?
requests.get()でtimeoutは今書きましたがforで同じサイトの似たようなページに何度もアクセスするのでサーバーへの負荷はすごいと思います
これに対してどうすればいいですか? botからのアクセスはどこのサイトも来まくってるから、スクレイピングを気にするかは分からないけど、
waitを5秒とかいれとけば。
クレカ明細をスクレイピングしようとしてたら403になって数時間アクセス出来なくなったよ David Heinemeier Hansson(DHH), 2021/12/16
Rails 7: The Demo
https://www.youtube.com/watch?v=mpWFrUwAN88
もう、Rails 7.0.0.rc1 か。
Ruby 3.0.3 そいつは、>1 のテンプレをしょっちゅう改変している、テンプレ改変荒らし。
基本的に、ソースコードを書かない香具師は荒らし
「Ruby, Rails, クソチョン」などを、NGワード登録推奨とか、
自分が有利なように、いつもテンプレを改変する
荒らしがスレ主として、居座っているので、
まともな人がスレ立てして、テンプレも元に戻した方がよい
荒らしは必ず、短文で2回以上書き込む。
必ず、複数人がいるように見せかける スレ立てるまでもない質問はここで 158匹目
https://mevius.5ch.net/test/read.cgi/tech/1635193843/538
ここに、YouTube で有名な、雑食系エンジニア・KENTA のサロンの、
Ruby on Rails 初心者用コースの内容を書いておいた
基本的に、Rails以外のフレームワークは、シェアが少ないのでおすすめしない。
学習環境も揃わないので、無理
Railsでは、Railsチュートリアル・Railsガイド・
黒田努の3冊の本・パーフェクト Ruby on Rails・Ruby on Rails 6 エンジニア養成読本とか、
Rubyでは、改訂2版 パーフェクトRuby・改訂2版 Ruby逆引きハンドブックなどの教科書が揃っている
これほど、良い教科書が揃っているフレームワークはない!
Laravel のシェアは少しあるけど、KENTAがPHP は一生やる必要がないと言ったので、
PHP自体がオワコンになってしまったw
日本のウェブ開発の将来は、ほぼKENTAが決めている。
Scala を滅ぼしたのも、KENTA wxrubyのインストールができません。
gem install wxrubyコマンドで
ERROR: Could not find a valid gem 'wxruby' (>= 0) in any repository
と出てインストールできないです。
バージョンはruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x64-mingw-ucrt] % gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
となる?
あとほんとにbundler経由でなくていいのか再考してみて じゃあわからん
$ gem update --system
して更新がもしあれば治るかも >>366
wxrubyがいつのRubyのときに開発されていたか調べましたか?
wxrubyがいまのRuby 3.1.0p0で動くと思いますか? 知らんがな、っつー話やけどな。w
互換性のなさはなんとかならんのか。 主に使おうとする道具の状態を確認しないのですか?
切れないハサミで紙を切ろうとするのですか?
どうしてもwxrubyを使うなら、せめてrbenvでも良いのでwxrubyが確実に動きそうなruby環境(Ruby 1.9.xぐらい)を用意したほうが賢明です。
あるいは、自分でwxWidgetsをRuby 3.xで動くように頑張ってbindingするか。
ちなみに、わたしはメンドクサクなって、wxWidgetsのcoreなところをRuby 2.7ぐらいでportingしている途中で放置したままです。 nokogiriでスクレイピングしようとしていたら
逮捕されるかもしれないと言われましたが
本当でしょうか? 「かもしれない」という事であれば回答はYesでしょう
まあ質問自体馬鹿げてるが >>374
かつて 岡崎市立中央図書館事件 という悲劇があったのだよ
いまならこんなあほな事態は発声しないんじゃないかな、だったらいいな…… Webrick 1.7.0 でドキュメントと異なった動作と、RFCで推奨されない通信が行われた場合にIOタイムアウトまで動作停止する問題を
発見しました(対処方法も特定済み)
報告方法どなたかご存じでしょうか? >>374
スクレイピングに限らず、プログラムを動かす事による
アクセス回数と通信容量は気を付けたほうが良いよ
2chみたいにそれが多すぎたらしっかりとアク禁したり弾いたりしてくれるところはまだいいけど
無対策なサイトで管理人が対応できない人だったりすれば
プログラムによるアクセス制限の対応じゃなく法的な対応はありえる >>379
どこかの某県図書館だな
結局、アレは業者がアレだったな [1,2,3].each{ |i|
next i>2
}
がエラーにならずなかなか原因がわからなかった
正解は
[1,2,3].each{ |i|
next if i>2
} >>383
next(exit_value)
break(exit_value)
という構文があって、実行された時のブロックの戻り値が指定した引数の値になる
loop{ break }
=> nil
loop{ break 10 }
=> 10
[1,2,3,4].map do |num|
next 'even' if num.even?
num
end
=> [1, "even", 3, "even"] >>384
ありがとうございました、なるほどでした
nextに戻り値は想定外で、別の原因を探していました nokogiriでhtmlパースをしようと触っているのですが、
DOMの子要素から絞り込みはできないのでしょうか
document.xpath('//div[@class="main"]').each |node|
node.css('div')
↑これだとclass=mainの子要素全体が取れるのですが
node.xpath('//div[@class="target"]')
↑これだとDOM全体から取ってきてしまいます
node.search('//div[@class="target"]')
↑これも同様でした >>387
node.xpath('.//div[@class="target"]')
node.search('.//div[@class="target"]') >>388
取れました!ありがとうございます!
>>389
XMLパスという仕様書があるのですね
初めて知りました
リンク先まで教えていただきありがとうございます! 一旦、ある要素を取得してから、その子孫要素に限定して、
さらに要素を取得していく事もできる
一旦、div.x を取得してから、その子孫内のdiv を取得する
doc = Nokogiri::HTML( <<EOT )
<html><body>
<div class="x"><div class="y"><div class="z"></div></div></div>
<div class="x"><div class="a"></div></div>
</body></html>
EOT
doc.xpath( '//div[@class="x"]' ).each do |x|
x.css( 'div' ).each do |div|
puts div.get_attribute( 'class' )
end
end
出力
y
z
a あーあ、やっちゃったね
スクレイピングに手を出したら逮捕されるよ
nokogiriもアンインストールしたほうがいい XPath よりも、CSS Selector の方が可読性も高く、簡単。
XPathを使う事は、ほぼ無い
ある属性を持った要素の親要素を取得するとか、かなり複雑なケースに限定される 配列内の要素の出現回数を求める
ary = [ 1, "a", 2, "b", "a", 1, "a" ]
p results = ary.each_with_object( Hash.new( 0 ) ){ |elem, hash| hash[ elem ] += 1 }
#=> { 1=>2, "a"=>3, 2=>1, "b"=>1 }
Ruby には、下のPython のcollections.Counter みたいな関数がありますか?
import collections
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(c)
#=> Counter({'a': 4, 'c': 2, 'b': 1})
Rubyで、誰かが作ったものはあるけど
https://gist.github.com/cielavenir/501c0cf491e10d905d4307bdeb2596ea >>394
ない。
できてこんなもん。
ary.uniq.group_by{|i|ary.count i}
=> {2=>[1], 3=>["a"], 1=>[2, "b"]} 愚直に書くと
ary.group_by(&:itself).transform_values(&:size)
=> {1=>2, "a"=>3, 2=>1, "b"=>1} each_with_objectのほうが少しシンプルだけど
他の言語だと使えないからreduce使ってる
uniqとかgroupbyはやや効率悪い気がする [1, "a", 2, "b", "a", 1, "a"].tally
=> {1=>2, "a"=>3, 2=>1, "b"=>1}
ほ〜 rails6、ruby2.7を利用しています。
アクセスしてきたリクエストURLのパラメータに「#」が付いた際、paramsにパラメータが含まれてこないのですが、
この内容を取得するにはどうすれば良いでしょうか? HTTPリクエストには乗らないけど
ブラウザ上のJSではハンドリングできるからそれで連携可 ありがとうございます!
ハッシュは取れないのですね…
JSでハンドリングしてみます。 JavaScriptのようにPythonコードをHTML内に記述して実行できる「PyScript」 Anacondaがオープンソースで公開
https://www.itmedia.co.jp/news/articles/2205/09/news161.html
rbScriptも技術的に可能でしょう、だそうです JavaScriptだろうな
Rubyは人気急落中で既存のRailsアプリのメンテくらいにしか使われなくなっているから今から入るのはお勧めできない webアプリ初心者にはrailsがオススメな反面ruby自体は全く初心者にオススメできないクソ言語 >>409
PythonとくにPython3よりも、Rubyのほうがええと思うけど?
といいつつも、仕事でTypeScriptばっかり、Railsもわずかにやっとるけど JavaScriptって初心者にほんとに勧めて良いものだろうか。 フリーランス向けエージェント「クラウドテック」会員数8万人突破
〜働きやすい環境構築のため、単価向上・全年齢の活躍の場創出・
地方企業のDX推進の取り組みを強化します〜
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
累計掲載案件数25万件突破!リモートワークの累計掲載案件数35,000件突破!
新規人材の80%がフルリモート希望! IT人材市況動向レポート2021年12月版を公開
人口移動報告 家賃高い、首都圏脱出 「コロナ禍、仕事フルリモート」
クラウドテック、地方企業向け『クラウドテックDX』を開始、
7万人を超えるDX人材が、地方の非IT企業のDX推進を支援
新潟県、移住してきたテレワーカー/フリーランスに最大50万円を支給
テレワークの一般化により、11月にはテレワーク可能案件83.7%へと増加。
2021年、フリーランスのトレンドは「移住&テレワーク」と予測