最近のWineはエロゲ動くの?
wineでエロゲ動かす
私のノートPCは以前Windowsだったのだが、開発に使うには嫌気がさしてLinuxにしてしまった。 開発効率が上昇してとても良い感じだが、一点問題が。エロゲができない。
そもそも開発用のノートPCでやるなよという話なのだが、ノートPCしか手元にない状態で過ごしていると、なんとなくやりたくなったときにできなくてつらい。
家のメインPCにRDPしてやってもいいのだが、メインのデスクトップを常時付けていると電気代もアレなので大抵切ってしまっている。
この前実家に帰省したときにノートPCしかなくて辛くなって、なんとかしてLinuxノートでエロゲ動かそうと頑張ってみた。
Linuxでwindowsアプリを動かすならwine。 昔に使ったときは、使い物にならなかったような記憶があるが、いまはどうなんだろうって。
環境
- VAIO Z(VJZ13A1)
- ArchLinux
wineインストール
偉大なるArchWikiに沿ってやっていく。 適当に推奨されたものを突っ込んでいった。 実際に動かす上で足りない物もでてきたので、それらは随時いれた。
足りない奴は実行時にsoがないよーってログが吐かれるので、そこから推察してインストールすれば上手くいく。
私はサウンド関係を入れ忘れてて、音がでなかった。 必要パッケージをpacmanから放り込んだらすんなりいった。 (wikiにリスト載ってるんだからちゃんといれとけと言う話だが。。。)
動かしてみた
とりあえず試してみたのは『feng: 妹のセイイキ』 OPが好き。 三部作のなかでは一番好きですね。 イカもいいんだけど。
ISOをノートPCにマウントして、wineコマンドでexeを起動。 インストーラはさらっと立ち上がって、普通にインストールできた。
起動したら、普通に画面出た。 普通に動くし問題なさそう!
一つ動いたくらいだと偶然っぽいので、もうひとつやってみた。
『ユニゾンシフト: 』 癒やしゲー。
こちらはインストールして起動したら、画面が出てこなかった。 おそらくDirectXとかあのあたりではないだろうかだろうと予想。 winetricsを入れて、DirectX周りのコンポーネント入れたらちゃんと立ち上がってくれた。
いいかんじ。
結論
二作品しか試していないけど、Linuxでもエロゲはなんだかんだ動くんじゃないでしょうか。
どうしてもノートPCでエロゲがしたいときはなんとかできる。
どうでもいいはなし
きょうはみみのひで、みみけっとでした。 ぼーっと歩いてたらなんか色々買っていて、財布が空になってた。 こわい。
涼屋のうすい本、キャラが可愛くてなんとなーく欲しかったのですが、25分で全部完売しててゲットならずでした。 みみけの涼屋ってあんなんだったけ。。。
昼は品川のラーメンを食べてきて家に戻ったのですが、書類がどっかいったことに気づき、家中探し回り、大学にまで探しに行った、大学で無事見つけられたのだが、その後また小川流でラーメン食べて返ってきた。 1日に二回もラーメンを食べてしまった。。。
エロゲと美少女ゲームの定義って結構差があるよね。
Nginxのauth_requestがPOST時にTimeoutする
Nginxのauth_request
Module ngx_http_auth_request_module
これをつかってSSO認証を制御していた。
上手いこと動いていた感じだったのだが、この認証下にある WordpressのログインがTimeoutするという問題が発生。
調査していくと、wordpressへのPOST時のauth_requestでタイムアウトが発生していることがわかった。 認証サーバ側のNginxのログは見ると408を返していた。
解決策
auth_requestをProxyに流すときには、
- Content-Length を空にして
- proxy_request_body を off にすること。
proxy_pass_request_body off; proxy_set_header Content-Length "";
公式にちゃんと書いてある()
行きつくまで
認証サーバ自体はRailsでできたちょっとしたものなので処理の中でタイムアウトが起きるはずはなかった。 またRailsには一切ログが吐き出されていなかった。
Railsのログに記載されないというのはどういうこと???ってなった。 低レイヤでどうなってるのか調べようと、unicornにstraceを掛けたり、tcpdumpしたり色々していた。 その過程でそこそこしょうもない知識を得た。
結局、nginxがGETを受けたまま、そのまま固まっているのでは?感がnginx-workerプロセスのstraceから見えてきた。 ヘッダを全部見返していったら、大本の設定でContent-Lengthが抜けてたことに気づいた。
他のauth_requestの設定をしてある場所はちゃんと公式の見本通りにヘッダがセットしてあったのに、ここだけ抜けていたのはなんでなんだろう。。。 Gitのログ曰く、最近テンプレートを書き直したときに、このヘッダだけ削っていたっぽい。 ふぇぇって感じ。
どうでもいいはなし
Nginxのことも含めて、
vagrantで立ち上げたcentosにssh公開鍵で入れなくてログも見れなくてなんでだ??ってやってたら、同じIP持ったVMが二つ立ち上がってた。。。
— namazu (@namazu510) 2018年2月25日
とか絶賛しょうもない日だった。
タスクが山積みなのでなんとかしないと。。。 明日大学に行って進捗を出すかなぁ。。。
Linuxのパーミッションで4桁のときの最初の0
今日したこと
- windows10のVagrant(VirtualBox)が上手く動かなくなっててBIOSが開けなかったり、設定項目にたどり着けなくておこになった。
- なんかつかれたのでお風呂に行ってた。
- vagrantで沢山VM上げてプロビジョニングして楽しんだ
Linuxのパーミッションの数字表記
chmod 0644 ...
とか よく書くじゃないですか。 この最初の0について。 気になったので調べてたら、これのことだったのねってなったのでメモ。
この最初の桁は0,1,2,4が使えて、それぞれ以下の意味になる
- 0 とくになにもなし
- 1 スティッキービット: 所有者以外消せないけど誰でも書き込めるって奴。 /tmpとかのディレクトリに初期設定されてる。ファイルに付与したら何も起きない。
- 2 SGID: 付けた場合、そのファイルの所属グループの権限で動くようになる。
- 4 SUID: 付けた場合、そのファイルの所有者の権限で動くようになる。
詳細は
このへん。
RackとかRailsでリダイレクトとかがhttpsにならないとき
今日したこと
- いろいろ
短文技術エントリは手抜き。
nginx => railsとかでhttpsをraislに飛ばすときに解く
よくある構成だとおもう。 フロントのWebサーバまではHTTPSで飛ばして、最後のRailsにはHTTPでReverseProxyするってやつ。
そのときにHTTPヘッダをちゃんとNginxで設定しないとRails側がHTTPSで来た通信だということを認識しなくてうまく動かないのはよく知られた話。 X_Forwared_Proto htttps;
とかはちゃんと書こうなって記事に引っかかる。
で。 これで引っかかった。 ちゃんと書いていたのにHTTPSと認識されなかったのは謎。
今回の問題は、 GoogleOmniauthのリダイレクトURLが何故かHTTPになってしまうということ。
コードを漁っていったら、Rackのschemeからhttpsかhttpかを取得していた。
このschemeの部分を見ていたらRails(Rack)がHTTPSできた通信かHTTP出来た通信か調べてるのがわかった。
def scheme if get_header(HTTPS) == 'on' 'https' elsif get_header(HTTP_X_FORWARDED_SSL) == 'on' 'https' elsif get_header(HTTP_X_FORWARDED_SCHEME) get_header(HTTP_X_FORWARDED_SCHEME) elsif get_header(HTTP_X_FORWARDED_PROTO) get_header(HTTP_X_FORWARDED_PROTO).split(',')[0] else get_header(RACK_URL_SCHEME) end end
Rack schmeのここの部分だった。 これでhttpsか判断してるっぽい。 X_FORWARDED_PROTOなどなんかうまくいかなかったので、このコードにしたがって、Nginxで。。。
proxy_add_header X_FORWARDED_SSL on;
みたいにやったら、HTTPSと認識してくれて良しなに動いた。
どうでもいいはなし
Ruby YAMLファイルを読み込んでメソッドで値を取れるクラス
今日したこと
にゃーん って感じ。 カルシウム足りないんじゃないのってくらい情緒不安定だった。
愚痴ってもしょうがないので、さっきちょっと作ったコードを載せて今日はおわり。
やりたかったこと
env1: obj1: hello obj2: obj2_1: hello obj2_2: hello env2: obj1: hello
こんなconfi.ymlみたいなのがある。 一番大本が環境毎。 そのしたにyaml。
これを
config = Config.new('env1') config.obj1 #=> 'hello' config.obj2.obj2_1 #=> 'hello'
みたいに使いたかった。
これをやるGemは当然既にあるだろうし、いつもはEasySettingsっていうGemを使っている。 ただせっかくだし自前でちょろっとつくった。たいした用途ではなかったしね。
とりあえず思いついたのがこれ。 メソッド名で出すからハイフンが使えなかったり色々あるけど。
require 'yaml' class Config CONFIG_FILE_NAME = './config.yml' def initialize(env) config = YAML.load_file(CONFIG_FILE_NAME) hash_method_define = Proc.new do |res, obj| obj.each do |k, v| if(v.kind_of?(Hash)) res_child = Object.new hash_method_define.call(res_child, v) res.define_singleton_method(k) { res_child } else res.define_singleton_method(k) { v } end end end hash_method_define.call(self, config[env]) end end
Rubyってすごいんですね。
どうでもいいはなし
にゃー。 あした大学行きたくない。
RSpecでFileIOをスタブにする
今日したこと
- テスト書いたり諸々
単体テスト、疲れたときに書くと意外と良いかもしれない。 今日は其の途中で得た知見を書いてお茶を濁す。
FileIOをする処理をRSpecで
テスト対象
def file_write File.open('hoge.txt', 'w') do |f| f.print 'fuga' end end
こんなコードをテストしなきゃいけないとき、ファイルに色々と書き出されてしまうので面倒くさい。 また書き出されたファイルの中身が正しいかチェックするのにもファイルを読まないと行けないので大変。
こんな処理の時はStringIO
が便利。
またRSpecでは既存の処理を簡単に置き換えられる。
file = StringIO.new('', 'w') allow(File).to receive(:open).and_yield(file) file_write except(file.string).to eq 'fuga'
FileのOpen時にブロックに渡される引数をStringIOに置き換える。 これでファイルに書き込むはずだった物が簡単に取り出せる。
便利。
ブロックでは無く戻り値を利用してるとき
f = File.open('hoge.txt' , 'w') f.print 'fuga' f.close
なときは。。
allow(File).to receive(:open).and_return(file)
こうする。 戻り値を置き換えることもできる。
どうでもいいはなし
Rubyの勉強していたおかげでこのallowとかその辺の処理がどう実現されているのか大体想像が付くようになってきて嬉しい。 進捗と相談しつつテストを書いて完成度を上げていきたい。
Wordpressの管理ユーザをDB叩いて追加する方法
今日したこと
WordpressのUserをDBから追加する方法
備忘録的に残しておく, 基本的には wp_users
にレコードを追加し wp_usermeta
に必要情報を追加する
https://www.web-plains.com/?p=419 こちらを参考にクエリ組み立てさせてもらった。
insert into wp_users ( user_login, user_pass, user_registered, user_email ) values ( "namazu", md5("nyannyan"), "2018-01-25 00:26:19", "xxxxxx@mofumofu.com" );
これでユーザが登録できる user_idはauto_incrementなのでこれで作成したあとに確認.
wp_usermetadata
テーブルには
wp_dashboard_quick_press_last_post_id
dismissed_wp_pointers
wp_capabilities
wp_user_level
nickname
これを設定すればいいらしい
insert into wp_usermeta ( user_id, meta_key, meta_value ) values ( 3, 'wp_dashboard_quick_press_last_post_id', 5 ) , ( 3, 'dismissed_wp_pointers', '' ) , ( 3, 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}' ) , ( 3, 'wp_user_level', '10' ) , ( 3, 'nickname', 'namazu' )
3のところは先程作ったユーザIDに変更。 これで管理者が作れる。
どうでもいいはなし
ちょっと立て込んでて時間がないので今日はこれで。
Nginxの設定がミスっていたらしく,POSTするとなぜかGatewayTimeoutが発生する謎現象に悩まされている。 つらい。