[過去ログ] Ruby 初心者スレッド Part 66 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
663: (ワッチョイ 7133-UdbQ) 2020/08/14(金)17:05 ID:B0hSR/wp0(1) AAS
文字コードが違うんやろ。
変換すれば。
664: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:27 ID:MuRP3aMr0(2/16) AAS
変換のしかたがわからないのです
665: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:28 ID:MuRP3aMr0(3/16) AAS
dllはshiftjisです
666: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:30 ID:MuRP3aMr0(4/16) AAS
`require': cannot load such file -- ffi
667: (ワッチョイ 1e7d-yoZq) 2020/08/14(金)17:44 ID:cCFmHkiX0(1/4) AAS
>>662
ss = M.gethoge.force_encoding( Encoding::CP932 )
668: (エムゾネ FF62-jwrZ) 2020/08/14(金)18:18 ID:zY2s9ydfF(1) AAS
ruby -Ks
669: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:24 ID:MuRP3aMr0(5/16) AAS
一通りやったのに問題解決しませんでした、諦めました
どうもありがとうございました
670: (オッペケ Srf1-wvIG) 2020/08/14(金)18:35 ID:5nafUaAcr(1/3) AAS
dllがShift-JISでrubyがUTF-8でターミナルがWindows-32Jとかなんじゃねえの
情報を小出しにされたんじゃわかるわけない
671: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:40 ID:MuRP3aMr0(6/16) AAS
それです
ターミナルがよくわかりません
672: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:42 ID:MuRP3aMr0(7/16) AAS
ターミナルはshiftjisでした
673: (オッペケ Srf1-wvIG) 2020/08/14(金)18:58 ID:5nafUaAcr(2/3) AAS
そもそも本当に文字化けなのか?
想定する文字列と
p ss
した結果は?
674: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:03 ID:MuRP3aMr0(8/16) AAS
#<Fiddle::Pointer:0x000000000313e7d0 ptr=0x00007ffea5c03038 size=0 free=0x0000000000000000>
675: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:04 ID:MuRP3aMr0(9/16) AAS
require 'fiddle/import'

module M
extend Fiddle::Importer
dlload "D:./myruby.dll"
extern "char* gethoge()"
end

p M.gethoge
省1
676: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:06 ID:MuRP3aMr0(10/16) AAS
想定する文字列は「こんにちは!」です
677
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:07 ID:cCFmHkiX0(2/4) AAS
p M.gethoge.encoding
678: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:08 ID:MuRP3aMr0(11/16) AAS
puts M.gethoge
だと
S0�0k0a0o0�
679: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:10 ID:MuRP3aMr0(12/16) AAS
>>677
undefined method `encoding' for #<Fiddle::Pointer:0x0000000002c42230> (NoMethodError)
680
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:16 ID:cCFmHkiX0(3/4) AAS
p M.gethoge.to_s.encoding
681: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:19 ID:MuRP3aMr0(13/16) AAS
>>680
#<Encoding:ASCII-8BIT>
682: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:21 ID:MuRP3aMr0(14/16) AAS
#include <stdio.h>

char name[] = "こんにちは!";

extern "C" __declspec(dllexport) char* __stdcall gethoge() {
return name;
}

dll側です
683
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:28 ID:cCFmHkiX0(4/4) AAS
puts M.gethoge.to_s.force_encoding( Encoding::CP932 )
684: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:29 ID:MuRP3aMr0(15/16) AAS
>>683
お!出ました!
ありがとうございました
助かりました
685
(1): (オッペケ Srf1-wvIG) 2020/08/14(金)19:38 ID:5nafUaAcr(3/3) AAS
hoge.dllコンパイルしてたら解決してた
良かったね
686: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:58 ID:MuRP3aMr0(16/16) AAS
>>685
ありがとうございました
687
(3): (ワッチョイ e52c-178q) 2020/08/14(金)22:28 ID:SCMnTycc0(2/2) AAS
Windows で、Ruby を使うのは、CP932 で苦しむ。
ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
省3
688
(1): (ワッチョイ 8201-FRDO) 2020/08/14(金)23:58 ID:sxmwfi0L0(1) AAS
>>687
スクリプト/内部/外部のエンコーディングをCP932にすれば
CP932 -> UTF8とUTF8 -> CP932の変換や指定は不要
689
(3): (ワッチョイ 9d6a-2ych) 2020/08/18(火)19:07 ID:7fbjefcm0(1/2) AAS
mechanizeのform送信を使って5chに書きこむことはできますか?

textareaにvalue値を入れ、submitし、承諾しますか?の画面まで行けたのですが、そこから同じようにsubmitしてもページ遷移が起こらずそのままみたいです
690
(1): (オッペケ Srf1-wvIG) 2020/08/18(火)19:31 ID:AGh/qXAtr(1) AAS
>>689
cookie
691: (ワッチョイ 9d6a-2ych) 2020/08/18(火)19:53 ID:7fbjefcm0(2/2) AAS
>>690
具体的にcoockieをどうすれば良いでしょうか?
692: (エムゾネ FF62-jwrZ) 2020/08/18(火)20:08 ID:h5vNCvfYF(1) AAS
hanamogera
tepodon
693: (ワッチョイ 6285-UC6e) 2020/08/18(火)21:43 ID:HR/M/dGq0(1) AAS
>>687
>Windows で、Ruby を使うのは、CP932 で苦しむ。
>ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

Rubyを生半可に知ったつもりの人にありがちな勘違いだな
まず、多言語化に対応した多くのプログラミング言語は、
内部エンコーディングとしてUTF-8を採用している、ここまでは間違いではない
しかしながらRubyは内部エンコーディングとして特定のエンコーディングを採用せず、
省15
694: (ワッチョイ 8201-FRDO) 2020/08/18(火)22:19 ID:KlQrPk6/0(1) AAS
CSI方式を採用した背景はこれ読むといいよ
外部リンク:jp.quora.com

↓こう書いとけばリテラルもI/OのデフォルトもCP932
#! /usr/bin/env ruby -E CP932:CP932
# encoding: CP932
695
(1): (テテンテンテン MM4f-f6AD) 2020/08/19(水)00:17 ID:45CsPPnjM(1) AAS
エンコーディングのコストなんてIOに比べりゃ無視できる
ぶっちゃけRubyのやり方は百害あって一利無し
696
(1): (ワッチョイ 7fa5-u2+K) 2020/08/19(水)00:28 ID:dM5o8vR90(1) AAS
windowsのファイルシステムのエンコーディングを中途半端なままにしたことで、
windowsユーザーへの嫌がらせになった以外に何の意味もなかった
697: (ワッチョイ 7f47-fHWV) 2020/08/19(水)01:42 ID:Ch6IfZIA0(1) AAS
>>695
+1
ほんそれ
698: (ワッチョイ 9f33-KILr) 2020/08/19(水)01:52 ID:zoQbwZV20(1) AAS
>>696
Windowsのファイルシステムでは、あらゆるエンコーディングがうまくいってない気がするな。w
まあ、しょせんUTF-16だしな。
安全そうなところだけをつかったほうが安心。
699: 687 (ワッチョイ 1f2c-7CyN) 2020/08/19(水)02:07 ID:w/3evjlx0(1/9) AAS
UTF-8 以外は実績が無いから、文字列処理とか、怖くて使えないだろ。
誰も使っていないから

文字列を、正しく数値に変換できるのかとか

IO の境界で、変換する方が安全だと思う
700
(1): (ワッチョイ 1f2c-7CyN) 2020/08/19(水)02:33 ID:w/3evjlx0(2/9) AAS
>>689
RubyでCookieの読み込みや保存を幸せにする(Mechanize&Selenium)
外部リンク:rooter.jp

「ruby mechanize cookie」で検索すれば?

漏れは、selenium webdriver で、実際のブラウザを操作しているだけだから、
クッキーの事も、考えたことはない。
ブラウザが勝手にやる
省9
701
(1): 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)07:23 ID:w/3evjlx0(3/9) AAS
selenium webdriver なら、これで、
この板のtest スレの、書き込み確認画面が出る。
ひょっとしたら、確認画面が出ないかも知れない

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new

options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大
省7
702: 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)09:15 ID:w/3evjlx0(4/9) AAS
>>701
の続きに、以下を書くと、確認画面に切り替わった後の処理も、できる

単に、input[type=submit] のボタンを待つと、
遷移前後の両方のページで、ヒットするので、
確認画面に切り替わったかどうか、判別できない

遷移後のページだけに存在する、要素を待てば、
それが出現するまで、wait できるかも
省5
703
(1): (ワッチョイ 1f6a-RTUg) 2020/08/19(水)10:10 ID:jdryYSd80(1/4) AAS
>>700さんのリンク先参考に見よう見まねでとりあえずやってみたんですけど、いまいちcookie_jarとかよくわからない・・・

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent_alias = "Windows Mozilla"
agent.get('2chスレ:tech
cookie_str = agent.cookies.map{|e| e.set_cookie_value}.join(", ")
省13
704: (ワッチョイ 1f6a-RTUg) 2020/08/19(水)10:13 ID:jdryYSd80(2/4) AAS
agent2.submit(form2)
705
(1): 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)10:21 ID:w/3evjlx0(5/9) AAS
そりゃ、個別のページのクッキーを解析したり、大変だよ。
お金をもらえる訳でもないのに、他人が作ったシステムを分析するのは

それが嫌だから、漏れらは、selenium webdriver で、ブラウザにやらせる。
入力したり、ボタンを押したり、ブラウザを操作するだけだから、まだマシ
706: 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)10:32 ID:w/3evjlx0(6/9) AAS
>>703
>form = page.form_with(:action=>'//mevius.5ch.net/test/bbs.cgi')

>form2 = next_page.form_with(:action=>'../test/bbs.cgi?guid=ON')

これらには、https: とか、付いていないけど、動くの?
707: 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)10:38 ID:w/3evjlx0(7/9) AAS
簡単に言えば、serialize と同じなんだろう。
異なるアプリに、Ruby のオブジェクトを渡せない

1 などの数値も、"1" みたいな文字列になってしまうのだろう。
すべての型情報が無くなって、文字列になる。
だから、YAML.load とかを、使っているのだろう

今なら、JSON を使う事が多い
708
(1): (ワッチョイ 1f6a-Mhwj) 2020/08/19(水)14:06 ID:jdryYSd80(3/4) AAS
agent.getの時点でcookieの情報って得られてるんですね
709: (ワッチョイ 1f6a-Mhwj) 2020/08/19(水)14:20 ID:jdryYSd80(4/4) AAS
>>705
seleniumはブラウザ操作でmechanizeはhttp解析?みたいな感じですか?
710: (ワッチョイ 1f35-6L5+) 2020/08/19(水)20:08 ID:JONuvCWb0(1) AAS
>>689
よく調べたわけじゃ無いけど、
CSRF, クロスサイトリクエストフォージェリ、サイバー攻撃の一種対策されてるんじゃないかなぁ。

つまり、何某かのTokenが5chから送られていて、そいつをPOSTしないといけないとか。

5chのサイトからPOSTする時には、<input type=“hidden” value=“Token” name=“CSRF対策”>とかのタグがあって、Submitと共に自動送信される。
711: 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)22:43 ID:w/3evjlx0(8/9) AAS
プログラム板のtest スレと、その確認画面は、どちらも、mevius.5ch.net だから、
クロスドメインアクセスにはならない

ただ、HTML は本来、1回限りのアクセスで、前後のページには関係がない。
それを関係があるようにするために、ブラウザのクッキーを使って、セッションを結ぶ

こういうセッションがあるものは難しい。
5ch 側は仕様を知っているけど、分析する方は、仕様を知らないから、
ずっと他人のアプリを解析しなければならない
省9
712
(1): 700 (ワッチョイ 1f2c-1yu9) 2020/08/19(水)22:57 ID:w/3evjlx0(9/9) AAS
たぶん、Mechanizeは、Nokogiri みたいなものなんだろう

その時点のHTML を取得するだけ。
ちょっとした、GET, POST などは、出来るけど

JavaScript, Ajax で動的にページを作ったものには、対応できないとか
713: (ワッチョイ 1f35-6L5+) 2020/08/20(木)06:07 ID:5ApdpCMn0(1/6) AAS
>>712
MechanizeはServerから受け取ったCookieを返すよ。

だから、POSTしたパラメータに問題があって上手くいかないのだ。

書き込み画面のHTMLからinputタグをscrapingしてhidden属性の付いてるのを探す事が先決。

見つかったらそのname, valueを取り出してPOSTパラメータへセットしてやれば良い。
714: (ワッチョイ 1f35-6L5+) 2020/08/20(木)06:08 ID:5ApdpCMn0(2/6) AAS
seleniumが簡単だが、動作が重い。
Mechanizeでがんばれ!
715
(2): (ワッチョイ 1f35-6L5+) 2020/08/20(木)06:38 ID:5ApdpCMn0(3/6) AAS
>>687
これは違う!

外部・CP932 → Ruby内部・CP932 → 外部・CP932

が正解。
Ruby内部は、外部・CP932であればCP932だし、UTF-8なら、それに合わせて、Ruby内部・UTF-8なのだ。
716: (ワッチョイ 1f35-6L5+) 2020/08/20(木)06:39 ID:5ApdpCMn0(4/6) AAS
>>708
agent.cookies
717: (ワッチョイ 1f35-6L5+) 2020/08/20(木)07:05 ID:5ApdpCMn0(5/6) AAS
大抵のWebサイトのFormは、Formを表示したBrowserからしか、POSTできない様になっている。

その仕組みは、ServerがFormを表示するするHTMLを生成する時に、Tokenを埋め込み、そのTokenが帰って来なかったPOSTを弾くと言うものだ。

TokenはFormが表示されるごとに変更さる。(one time Token)

外部リンク:html-coding.co.jp
718
(2): 700 (ワッチョイ 1f2c-1yu9) 2020/08/20(木)07:13 ID:nWR09WFB0(1/2) AAS
Rails にもある、CSRF のセキュリティー・トークンとかか?

2つのページが、同じセッションと判別できるような、仕組みを探さないといけない。
他人が作った、アプリを解析するのは大変
719
(1): (ワッチョイ 1f35-6L5+) 2020/08/20(木)07:53 ID:5ApdpCMn0(6/6) AAS
>>718
違うんだなぁ。
RubyプログラムがいきなりPOSTしても成功しない。
一旦Form画面をScrapingすれば良いのだ。
720
(2): (ワッチョイ 9f14-YpYZ) 2020/08/20(木)09:46 ID:Myo84Br30(1) AAS
>>715
それも違う。RubyはUnicode対応で作られてる
だから内部もUnicode
Windows側からUTF16で渡された場合はUnicodeで受け取るし
ANSIで渡された場合はUnicodeに変換して処理する
出力する場合はその反対
721: (ワッチョイ 1f2c-1yu9) 2020/08/20(木)10:42 ID:nWR09WFB0(2/2) AAS
Ruby の文字列は、混在できる

ある文字列は、CP932 で、
別の文字列は、UTF-8 とか

何もしなければ、変換されない
722: (ワッチョイ ff7d-hMmK) 2020/08/20(木)11:13 ID:FC2EZr4O0(1) AAS
>>719
kan = [
"\xE6\xBC\xA2\xE5\xAD\x97".force_encoding( Encoding::UTF_8 ),
"\x8A\xBF\x8E\x9A".force_encoding( Encoding::CP932 ),
"\xB4\xC1\xBB\xFA".force_encoding( Encoding::EUC_JP ),
"\x1B\x24B4A;z\x1B(B".force_encoding( Encoding::ISO2022_JP )
]
省4
723: (ワッチョイ 7f01-08ML) 2020/08/20(木)12:03 ID:tyNv301J0(1) AAS
>>715,720
君たちまずマニュアルを読もうか
外部リンク[html]:docs.ruby-lang.org
724: (ワッチョイ 9f33-KILr) 2020/08/20(木)13:07 ID:UjCnOWKd0(1) AAS
>>718
解析が大変かどうかはものによる。
セッションIDベースのWebアプリならともかく、ログインなしの掲示板なら大したことはないやろ。
725: (ワッチョイ ff8c-rgzE) 2020/08/20(木)22:50 ID:Uplnh7Gz0(1) AAS
>>720 変換はせんだろ
726: (ワッチョイ 1f61-VqLe) 2020/08/21(金)01:31 ID:SPVvFNrm0(1/3) AAS
Rubyをしばらく使ってきたが、やっぱり、ブロックの最後がendであることや、
0,1が共に真であること、複数行コメントが書きにくいこと、
構造体の書き方が new Person ではなく、Person.newであること、
Directory関連でワイルドカードを使うと、関連フォルダを全て変数に読み込んでから
動作し始めること、などが使いにくいので、node.jsに乗り換えようかなと思ってる。
Rubyが良い点は、それらの機能は使ったことは無いけど、
・最初から用意されているメソッド群でmethodチェーンが書けること。
省3
727
(1): (ワッチョイ 9f33-KILr) 2020/08/21(金)10:50 ID:w5e9p4kz0(1/3) AAS
え。
そんな調子だと何を使ってもダメそう。w
728
(1): (ワッチョイ 1f61-VqLe) [sge] 2020/08/21(金)13:05 ID:SPVvFNrm0(2/3) AAS
>>727
個人的には、実世界では、能力はかなり高いと評価されているけれど。
729
(1): (ワッチョイ 1f2c-1yu9) 2020/08/21(金)14:15 ID:tDzk/wNZ0(1) AAS
0, 0.0, 空文字列、空配列、空辞書など、
各型に、偽がある言語は、バグる

Ruby の偽は、nil, false だけ

MISRA-C でも、( a ) みたいに、単独の数値型の変数で、真偽値を表すのは禁止されてる。
0 なら偽として使う方法

Ruby で、if ( b ) みたいに書けるのは、nil の時だけ偽だから。
0, 0.0, 空文字列、空配列、空辞書などでも真
省1
730: (エムゾネ FF9f-fHWV) 2020/08/21(金)14:31 ID:2LaXNW9iF(1/2) AAS
nil == false
は false
731
(1): (ワッチョイ 9f33-KILr) 2020/08/21(金)14:33 ID:w5e9p4kz0(2/3) AAS
>>728
相対評価は、まわりのレベルがわからんので、なんとも。
元コメから判断すると、周辺まるごと低いのかな?と思わざるを得ない。w

まあ、たまたま自分が使ってない特定機能をアレコレ言うのはアホに見えるのはたしか。
732: (ワッチョイ 9f33-KILr) 2020/08/21(金)14:35 ID:w5e9p4kz0(3/3) AAS
>>729
型のないRubyでそんなことを言われても。w
そんなの、たいした違いじゃないよ?
733: (ワッチョイ 1f61-VqLe) 2020/08/21(金)14:49 ID:SPVvFNrm0(3/3) AAS
>>731
そんなことない。
非常に上層のごく一部の人しか入れないところだと言われている。
734: (エムゾネ FF9f-fHWV) 2020/08/21(金)15:22 ID:2LaXNW9iF(2/2) AAS
スキンのひとか
735: (JP 0H7f-08ol) 2020/08/21(金)15:35 ID:dYZcDjdTH(1) AAS
学術の巨大掲示板群 - アルファ・ラボ 外部リンク:x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
省6
736
(2): (オッペケ Sr73-YieA) 2020/08/22(土)00:05 ID:cH1OO8njr(1) AAS
「実世界では、能力はかなり高いと評価されている」っていう言い回しが最高に知性を感じないんですけど
いや煽りとかじゃなくマジで
737: (ワッチョイ 9f14-YpYZ) 2020/08/22(土)00:13 ID:rn2pygew0(1) AAS
異世界では無双している
738: (ワッチョイ 9f33-KILr) 2020/08/22(土)02:33 ID:orN/hav20(1) AAS
>>736
非常に上層のごく一部の人しか入れないんだぞ!
739: (ワッチョイ ff8c-IEoI) 2020/08/22(土)08:20 ID:lfF/bqLu0(1) AAS
非情に上層のごく一部の人しか入れないんだぞ!
740: (ワッチョイ 7f52-Qb6H) 2020/08/22(土)08:46 ID:j5SL9Fsb0(1) AAS
>>736
あんまりちゃんと人と会話したりまともな本とかは読んだことがなくて、丁寧にかつちょっとカッコつけて話そうとしたらラノベとかで覚えた変な言い回ししか出てこなかった、と予想してみる
741: (ワッチョイ ffbb-ZIaG) 2020/08/22(土)15:31 ID:rjSk5doP0(1) AAS
まあ、能力の高いっていうそこのお方は、Youtubeで流行ってる学歴ジャンケンでもして能力を示した方がいいんじゃん?
学歴だけが能力を示すものじゃないにしても、能力がどうの言い張るだけよりずっとマシだし、おおよその実力が周りの人も推定できるだろうからいいぜ!
742
(1): (ワッチョイ ad61-CCZD) 2020/09/01(火)22:10 ID:vLz2GEqc0(1) AAS
Rubyは、node.jsに比べて、ファイル出力のメソッド名が短いので楽。
fp=File.open("filename","w");
fp.print( "nanigshi=#{変数名}\n" );
みたいに書ける。node.jsだと、
fd = fs.openSync("filename", "w");
fs.writeSync(fd, `nanigshi=${変数名}\n` );
となり、キーワードが長い。逆引用符`が打ち込みにくいという
省1
743: (オッペケ Sr51-eS8N) 2020/09/01(火)22:45 ID:Bhx0z62Fr(1) AAS
US配列なら楽だぞ
1-
あと 259 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s