デバッグの方法が何も分からん
ボンクラプログラマー
頭とお腹が弱い。
最近は個人鯖の @shibafu528 がメインです。
⚠️ CW設定のない下品な発言が非常に多いです。これは仕様ですのでご了承下さい。
ℹ️ spam対策でフォロー承認制にしています。上の一文が構わないという方ならお気軽にどうぞ。
FINAL FANTASY XIV 関連の著作物は
(C) SQUARE ENIX CO., LTD. All Rights Reserved.
バックトレースが出ないのを不審に思う
↓
少しでも手がかりを増やそうと、mrb_load_string()にファイル名のコンテキストを付けて回った
↓
なぜかクラッシュしなくなる
ずっと NoMethodError で first が無いという怒られ方をしていたのを思い出す
↓
バックトレース情報が増えたことで出なくなったということは、もしかしてcaller.first……?
↓
mruby-delayer-deferredが使ってた!!
さて、ここで不思議な話があります。これ、PC上のセルフコンパイル・セルフ実行では起きてないです。さーてなんでかな……
デバッグビルドとリリースビルドでなんか違う説(コード読んでない)
PC上でenable_debugを落としてmrubyをリビルド、実行してみたら再現できました。ハァ〜
yukari-exvoice、今更compatibilityをJava 8にした
当時過渡期でライブラリ側をJava 8にしてビルドを複雑にしたくなかったから耐えてたんだけど、今はすっかりdesugarがいい仕事してくれるので助かるね
yukari-exvoiceをいじるタイミングがなかったので何年も放置しちゃったけど。
y4aでVirtualWorldを定義して、world_currentでそれを返すようにして、あとはKotlinからdefspellできれば勝ちです
yukari-exvoiceのおかしい所、別にコンストラクタ内でaddEventListener()とか呼んでmrubyと繋ぎこめれば十分だったはずなのに、アノテーション対応しているところ
exvoiceにおいてannotationは速記でしかないので、protected void defspell(String spellName, Object... constraints)をまず作ることになる。そういえばconstraintsはクラスではなくてslugだから、Java Interfaceからmruby classを導出するみたいなこと考えなくていいな……!
ってことは、defspell(String spellName, String... constraints) で済む……あっこれ速攻で作れるやつでは
@toshi_a あれもなかなか、名付けで一気にしっくり来るセレクタになったり深いなって思う。
CocotodonのPostbox optionからの文構築はNSMutableStringに甘えたな
yukari-exvoiceのアノテーションの難点がひとつあるの思い出した。
あれ、速記として簡単に実装するのを取ったからランタイムでメソッド走査してバインディング処理をしてる。
Androidではランタイムアノテーションは(少なくとも昔)嫌われる傾向にあると思うので、コンパイルタイムでやりたい気持ちはちょっとあるよね。
まあy4a本体では既にコンパイルタイムのAPT処理を自前で書いてやってるので、それを基に書けなくもないが。
command(:report_toshia, name: "としぁを通報する")
筑波大学あたりにもっと精液臭いやついてほしい、北関東がクソみたいな論調にできるので
Discord NitroやNintendo Switch Onlineが思いがけず継続されていることに気づく
何を思ってかPCに入ってるAndroid Studioがクッソ古いんだけど、y4aはIDEA 2019.2ステイさせてるものの他では困ってないから最新に上げるか
y4aも古いバージョンで開発するのやめたいが、腰据えてなんで上げられなかったかから検証するのがだっるい…
先日はディスクフルでbtrfs snapshotからの切り戻しという苦行をやるはめに遭いましたが、どうもめっちゃディスク容量を食ってるのはpacmanのパッケージキャッシュとyayのテンポラリということが分かった。
This account is not set to public on notestock.
昨日歯医者行ったわけですが、歯石取る器具がBig Brotherのイントロっぽいの奏でておったまげました(あさのあいさつ
茜ちゃんVS虚空 - ニコニコ動画
https://www.nicovideo.jp/watch/sm37509915
【初音ミク・結月ゆかり】サイコパスラヴ / cosMo@暴走P - ニコニコ動画
https://www.nicovideo.jp/watch/sm37502212
神経衰弱の仕様も、0匹エンカウントも知らんかったが…
FF2(GBA) RTA_3時間10分2秒_Part2/6 - ニコニコ動画
https://www.nicovideo.jp/watch/sm37491110
yukari-exvoice-runnableのAndroidX移行をやった。y4a本体は永遠に移行してないのに…
https://github.com/shibafu528/yukari-exvoice-runnable/commit/123bde1f16387faa210582fc4d1ac6961cb896e2
android.enableJetifierとかいうプロパティがあるの知っておったまげたね。クラス参照をsupport libからandroidxに書き換えるのかな。お前本当にバイトコード変換なんでもやるな。
This account is not set to public on notestock.
NDK開発するにはIntelliJ Ultimateは使えなくてAndroid Studio使うしかねんだよなあ
しかし本当にいつからかNDKにちゃんと手入れるようになったよなあ。一時期はGradleベースのビルドシステムにずっと対応してなかったのに。
久々に読むとJNI、メソッドシグネチャのあたりとか全然読める気がしなくなってるな。
そういえばJavaはJNIでネイティブやるときすら、ひしだまさんのJavaメモが役に立つのであのサイトは恐ろしい。
JNIのLocalRef管理めんどいので、これをC++で改善できるならやりたいような
ファイルヘッダーにタイムスタンプかいてあったけど、これ2016年に書いたプログラムなのかー
IntelliJならだいたいに入ってそうな気がするけど、Java用の初期設定で慣れてるから微妙にキーワード違うと覚えられねんだよな
PHPだとPostfix completionよりも通常のスニペット展開のほうがよく使ってる
ついったーで最後にRTしたのがこれなので頻繁に目に入るんだけど結月ゆかりかわいいな https://twitter.com/GOD_Razor/status/1304078911513350146
String[]のソートってArrays.sort(Object[])で十分だっけ
Collection系は一般のJavaクラスなのであらゆる操作でメソッドIDを得て呼び出しをしないといけないが、配列はご存知の通り特別な存在なのでJNIにおいても操作用の専用関数がある
Java -> C -> mruby -> C -> Javaを書いてウワアアアアつってる
mruby -> C -> Javaでコールバック上げていく時に、Javaでmrubyに例外飛ばして巻き戻したい時にどうするか考えてなかった
Handler(Java) -> /JNI/ -> Delayer(mruby) -> Event(mruby) -> Spell call -> /JNI/ -> SpellListener(Java) みたいにスタックしていくわけですよ
これ、一旦Java例外からmruby例外に変換して、そっからさらにDelayer.run呼び出しでmruby例外が発生したとしてHandlerまでJava例外で巻き戻すことになるのか
さすがに一気にJava例外でジャンプは、たぶんできないしやったらmruby VMの状態がぶっこわれる
Plugin.call, Plugin.filteringはちゃんと処理入ってるな
Javaとして自然になるようにdefspellのアノテーションと引数バインド仕様考えるのむずいなw
モデルは一般の引数で受ければいいものの、キーワード引数をどう受けるか。単純に残余引数としてMapで渡すにしても、何番目の引数に?それを明示的に期待するのか暗黙的に期待するのか?とか
名前情報のついたアノテーションをつけたら必須キーワード引数として、残余受け取り用のアノテーションをつけたら残りをすべてその引数に、みたいなのが自然かなと思っている
うわ、コミットコメントに@使ったらGitHubでメンションリンクになった…これ通知飛ぶやつ?
実装が大変なことになっていて、これをランタイムでやるのは端末に優しくないなという気持ちが少しある
https://github.com/shibafu528/yukari-exvoice/commit/5fec8e63149b180d6ee6c5e8b44574efad3e289e
というか引数名とか取るには新しめのAndroidが必要で、もうコンパイルタイムのAPTでやれよ状態がすごい
まあそりゃそうだよなあ、難読化とかもあるし、その手の情報が取れることを期待しちゃいかんよなあ。
...InvocationTargetExceptionを握り潰していたのでここで消えていた
ランタイムでinvoke使ってるからこーなってるだけだが、そもそもこの辺を雑に潰してるの想定してなかった
InvocationTargetException.cause をちゃんと見るようにした…
見るというか、検査例外ならRuntimeExceptionでwrapしつつ再スローかけるだけだけど…
JNI DETECTED ERROR IN APPLICATIONの文字列の圧すごいよな。これ今はわざと起こしたから理由分かるしいいんだけど、想定してない時に引くとマジでだるい
んー、mruby上でjthrowableをグローバル参照で握る例外クラス作るか?
つまりこれが理想だな?
Java ↓ throw new RuntimeException()
JNI ↓ JNIEnv::ExceptionOccured() / mrb_exc_raise()
mruby ↓
JNI ↓ mrb_protect() / JNIEnv::Throw()
Java ↓ catch (Exception e) {}
>虚無<
別にpokemon catchしろってわけではなく、こう流れるようになってればどうにでもハンドルできる
mrubyのレイヤーでJavaの例外?いや知らんわグシャーつってrescueしてもいいし、Javaまで戻ってきてからゆっくりcatchしてもいい
mrubyでC関数でメソッド定義した時、superに相当する呼び出しってどうやるんだ…?
えっまじでmrubyのC関数からsuperコールどうやるんだ、mrb_method_searchでirep or 関数ポインタを得て自分でVMスタックいじって呼び出せっていってる?
レシーバは同じだけど、実行される関数をすげ替えないといけないわけだから、mrb_funcallではどうやっても到達できないんだよな
mruby-methodの Method#call の実装を見た感じだと、最低限mrb->c->ci->midを差し替えて実行することはできそうだけど、あの辺触りたくないしrubyで書こ…
midすげかえた上でmrb_yield_with_classとかいう見たこともない関数が呼ばれている
vm.cのOP_SUPERをみてもまあまあ似た処理をしてるけど、vm.cにベタ書きでAPIがない…
Java Spellから例外が上がったときに適切にmruby例外として巻き戻せるよう改良したところ、はて何も起きないぞ?と思ったらサンプルmrubyコードにtrapかいてなかったです
信じられないスタックが積まれた状態でmrubyからJNI関数を呼ぼうとしてJavaのStackOverflowが発生して自殺するとかいう、よくわからん現象に見舞われている
Delayer.run中にJavaにコールバックしたリスナー内例外が発生した場合、ユーザープログラムではなくYukariの問題であることが明らかなので例外をJavaに戻してクラッシュさせよう
JNI、Android Studioのサポートが強化されてるから前より書き易いのだけ幸いだな。
あーでも結局twitter-text-simpleidnが要る。URLの文字数が固定。
目標までが遠すぎるんじゃ。まだTwitter互換Diva Model葬る作業もしてないんだぞ。
This account is not set to public on notestock.
ALFEEのライブはコント以外はソーシャルディスタンス保たれてるな…ということを思い出した
晩飯を買いにいくというタスクがDelayerに積まれたまま、一生runされてない
奇遇ですね今私もJenkinsfileに./gradlew cleanを追記したんですよ
ン〜〜〜これたぶんあれじゃな?CMakeListsでglob使ってるのが悪いのでは
yukari-exvoiceはお手元のMavenやGradleでBintrayから引っぱれるぞ(使い道がy4a以外にあるか…?)
https://bintray.com/shibafu528/maven/yukari-exvoice/20200913.220638
JNIでmrb_stateのポインタを持ち回るときは、Javaのフィールド変数に持たせるならネイティブに下りる時は引数に持たせておくと便利
RevertのRevertが繰り返されてディスガイアの反撃システムみたいになってるPull Requestなら見たことある
mrb_rescue使って全てのJNIエントリでmrubyの例外のキャッチを保証したほうが良いきがしてきた
mrb_load_string()があれば何でもできる!ってのを改めて、ちゃんとJavaメソッドを作った
依存関係めっちゃ削ってあるyukari-exvoiceになんでguava入ってんやろって思ったら、どうもmrubyオブジェクトプロキシで呼出メソッド名をスネークケースに変換するために使っているだけだった
module SocialMikutterHachuneNet
refine Object do
def 出社
end
end
end
前職だと単純にタイミングがかぶって辛かったんだけど、現職だと人の数に対してトイレのスケールが足りてないから常時つらい
あーもうexvoiceのx86ビルド、もうy4aからも参照してないしビルドから完全に外すか。ABIのかけ算でクリーンビルドの所要時間が伸びるの大変すぎる