抜きすぎて 倦怠感が ヤバいわよ! #a575
ボンクラプログラマー
頭とお腹が弱い。
最近は個人鯖の @shibafu528 がメインです。
⚠️ CW設定のない下品な発言が非常に多いです。これは仕様ですのでご了承下さい。
ℹ️ spam対策でフォロー承認制にしています。上の一文が構わないという方ならお気軽にどうぞ。
FINAL FANTASY XIV 関連の著作物は
(C) SQUARE ENIX CO., LTD. All Rights Reserved.
Macやとmikutter使いにくいの難だな mikutter再現プログラミングやってるのに
/Users/shibafu/git/mikutter/plugin/gtk/mainloop.rb:18: [BUG] Segmentation fault at 0x0000000000000008
This account is not set to public on notestock.
This account is not set to public on notestock.
ウィンドウ葬ってnil objになったとこにレンダリングしようとしてんじゃねえの(てきとう)
数日前から家帰ってMac開いた瞬間にdelayer-deferredに噛まれてSAN直になってん
Delayerはまだ完全に理解した感じだけど、Delayer::Deferredは完全に理解すらできる気がしない
Delayer試すのにGCDがクッソ都合良いからMacで作業してるってのもあります
mrubyのmaster見たら、splat operator使った時は常にdupとるような修正が入ってた。修正案に紆余曲折あったみたいだが、まあ確かにこれで大丈夫そう。
C関数からmrubyにPromiseを返して、解決したらmruby上のDelayerにqueueして次のループでチェーンが処理される!
これで何ができることが確立されたかというと、mikutter互換環境上で走らせているプラグインからC関数にコールバックした際に、時間がかかる処理ならPromise打ち返して戻れる
Promiseの状態遷移はmruby VMのスレッドセーフティを保証しているスレッド上で実行する必要がある
あと、C関数上でmruby VMから見て非同期で走っている処理では、mruby VMにアクセスすべきではない。
mruby VMから処理を切り離すまでの間で、必要なデータはコピーを取るのとGC保護が必要ですね
def Promiseとかdef newとか、Rubyコードだったら自然に呼び出せるけどmrubyだと定数取得やオブジェクト生成のAPIから呼べなくなってfuncallしないといけなくなるね
mrubyのセーフティを保証するのは面倒そうなので、mruby-delayerを使っているコードならなるべくdelayerにキューしたほうが良さありそうね。
MIDI音楽編集ソフト「Domino」 Ver.1.44 リリース | TAKABO SOFT http://takabosoft.com/1386
mruby-mixの開発がある程度できたのでLinuxに戻ってきたところ、大量のアップデートに襲われて死んだ
このままファイル消そうとしてもなんか普通にyayのabendでシステム壊れてそうなので、snapperスナップショットからの復旧やるか…
さてどうするか、とりあえずread-only snapshotから/の切り戻し自体はできてるから、Arch LiveUSBからchrootして更新かけるか
mruby-mix作ったはいいんだけど、JNIで適切に繋ぎ込みを作るのが一番クソ怠いな
yukari-exvoice-runnable (exvoice開発用ドライバーアプリ) のリポジトリに、柔軟剤ツイートのJSONあってワロタ
Retweeted Statusのテスト用JSONもございます。こっちはあひるが被害者 https://github.com/shibafu528/yukari-exvoice-runnable/blob/master/src/main/res/raw/tweets_870941180665540608
y4aに組込むよりmikutterに組み込んだほうが速いんじゃねえかって気持ちになるくらいJNI書きたくない
としぁへ
午前中にdelayer-deferredの理解度が上がったのでネイティブからmrubyにPromise打ち返してあとで解決するフロー実装できるようになりました
iOS/ObjCならこの場でAFNetworkingのリクエストを開始してsuccess:/failed:でmruby VMへの戻しを書いても普通に動きそう
mrubyに返すまでにCoroutineをDelayer::Deferred::Promiseに変換すればそのようになる
結局Deferredableなクラス一本用意してポインタ管理に使うとかそういうのが発生しそうだが
1. yukari-exvoiceの依存関係にmruby-mixを追加する
2. mixと競合するライブラリコードを消す
3. JNIでmix APIと統合させる
configure: error: in `/home/shibafu/git/yukari-exvoice-runnable/yukari-exvoice/mruby/build/armv7-linux-androideabi/mrbgems/mruby-yaml/yaml-0.2.2':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
はい……
./configure: line 3421: ./conftest: cannot execute binary file: Exec format error
あ?
この問題を解決する一番速い方法はmruby-yamlを参照するのをやめて、YAML.loadをmruby-mixの利用側で実装しろということにする
ああ、CCとかはAndroid用のツールチェーンになってるけど、--host設定されてねえじゃん
あー私が悪うございました build_config.rbにconf.host_target, conf.build_targetってのが書けるらしい。
MRuby::CrossBuildの実装にひっそりコメントされててマジかよという気持ちにさせられた
どうもこれはまあまあ新しいオプションで、俺が今まで使ってたCライブラリをコンパイル・リンクするmrbgemではこれ以外の方法でアーキ特定やってたので引っかからなかったっぽい
hostは昔からあるそっちから取って、buildは……どうしてたんだろうね。そこまで踏み込んでないので分からず。
まあ、新しい方法のほうがより明示的で良いかもしれない。設定サンプルファイルとかに書いといてほしいけど…
うーむ、まだ引っかかるな。mruby-yamlのクロスコンパイル設定あんまこなれてなさそう。
mruby-onig-regexpだとlibmruby.aのar叩く時のrake依存関係に割り込んでるのか、なるほど
-lmrubyに加えて-lyamlする必要があって、それを勝手にビルドしてるならプライベートな作業ディレクトリに抱えたままにするのやめろよ!!とさけんでいる
まあmrubyのビルドは所詮Rakeだから適当なタスクに引っかけて割り込めばcpくらいは仕込める
これでlibmruby.aの出力ディレクトリに露出させることができるので、-lmrubyしてる側でそのままリンクできる
本当はmruby-yamlがrakeタスクを仕込んでいてくれると、引っかけやすいんだが。
ループスレッドによるtick供給から、android.os.Handlerによるメッセージ駆動に切り替えた
exvoiceには:periodイベント供給とかいういつの時代だよ案件があることが明らかに。
Delayer.run回すたびに異次元で例外吐いてmrb_protectで大域脱出してきてる…
NDK「ねえどんな気持ちwwwwねえどんな気持ちwwwwwww(SIGSEGV)」