- castellaman
- 66093
- 277
- 95
- 475
@nakayoshix @castellaman iphone方はバグが見つかってよかったですねー こういうまとめ読んでるととにかくネガティブなことに腹が立つのでポジでいきたい
2021-02-15 08:38:29Xamarinを採用したOSS開発者は悪くない。それを採用しておきながら度々くるissueを対応しなかった委託者以下略 COCOA iPhone版のリセット不具合 Xamarinの基礎的欠陥が発見される - Togetter togetter.com/li/1667874 @togetter_jpより
2021-02-15 09:19:33COCOAがリリース前にテストされていたのか問題については、昨年6月のリリース直後から色々と言われてましたけど、アプリを起動した状態での簡単なテストはともかく、アプリが停止した状態で数日放置してもきちんとバックグラウンドで動作するかどうかのテストは一回でもやったのか?という疑問が…🤔
2021-02-14 22:44:39このアプリの作り方、つまりXamarinを使っている限り、元々厚労省の要求仕様を満たすことなど最初から出来なかったのでは?という疑問が出てきたことです。 ただ、これはあくまでも私の思い付きであって確証がある訳ではありませんので、Xamarinの専門家から即座に否定されるだろうとは思うのですが…
2021-02-14 23:20:49@nakayoshix 厚生労働省の仕様書の中で「バックグランドでダウンロードし~」とあるのは、当時から危ないなーとは思っていたので、そこは同意です。 あの部分はどんな形でアプリを作っても危ないですね。常時起動の組み込みシステムと違うので、スマホは電波やユーザーの扱い方でDLできないことが多々あるので。
2021-02-14 23:45:29@moonmile 稀さん、ありがとうございます。 もしかして各OS環境におけるXamarinの実行モデルには問題(というか制限?)があって、バックグラウンドタスクで呼び出されるEventHandlerの実行時のメモリ上への展開であるとか実行時間制限等で厳しいのかなとも思ったのですが、そういう心配はないということですね?
2021-02-14 23:47:22@nakayoshix そこは大丈夫だと思います。そうじゃないと本家 Xamarin 自体がこけてしまうので。単純に Java と Objective-C をコールしているだけなので、あるとすれば OS の挙動不審ですかね。なので、実装上の不具合は Kotlin でも Swift でも発生するでしょう。
2021-02-15 00:00:04@nakayoshix なので、きちんとバックグラウンドで動かしたい場合は(WiFi 未接続とかも含めて)、24時間単位で動かすのではなく、1時間単位で動かして取れるときに取っておくという方法がベターですよね。 cocoa は 24時間に1回しか取りに行かないので、不具合が顕在化してしまう。
2021-02-15 00:02:06@nakayoshix ちなみに OneTimeWorkRequestBuilder あたりで検索すると、同じように検索に引っ掛かります。結構苦労している。 android - Work Manager not scheduling Work with setInitialDelay - Stack Overflow stackoverflow.com/questions/5309…
2021-02-15 00:04:33この話、xamarinで放置系アプリのバックグラウンド動作は実装できるのかと、xamarin自体の出来を問われるのと、最初のコードはxamarinのENのサンプルコードで、ms所属の方が個人のボランティアで開発の由来がありますが、技術的に正しい実装、解説が出てくるのかしらん twitter.com/nakayoshix/sta…
2021-02-15 07:00:04「なんでXamarin使ってるんだ」とか「AWSじゃないんだよ」とかの意見については元々作ってた人がMSの技術者なんだから仕方ないでしょと思う。 しかしその後の保守でその辺りのプロフェッショナルであるはずのMSKKが入っていてこの有様は……
2021-02-15 08:55:42マジかよ? やはり再委託から先が闇過ぎるな。ここがはっきりしない限りは何の解決にもならないし、デジタル庁にもつながらない #COCOA amazon.co.jp/dp/B08TZP4KYQ pic.twitter.com/Q0EPECvXCc
2021-02-15 02:11:18少し進んでいる。 COCOA 突如として初期化される問題(UserDataが壊れている) · Issue #16 · cocoa-mhlw/cocoa github.com/cocoa-mhlw/coc…
2021-02-14 18:47:24本来ならば正攻法で直す(Xamarin.Forms 自体の内部を直すか、データ保持を切り替える)のだけど、根本的な原因が分からないので、それを直したからといって正常になる保証がない。 なので回避策を作る。
2021-02-14 19:06:56issue にもあるけど、 await Application.Current.SavePropertiesAsync(); が危ういので、これを使わないのがベター。 けれども、これを直したからといって、直るとは限らない(現象が確率的には発生しているので)、というのが悩ましい。
2021-02-14 19:13:07@moonmile 別の疑問として、UserModelService 自体がスレッドセーフでなくて、Get と SetAsync が同時に動くだけでめちゃくちゃになりそうなんですが、Xamarinのスレッドモデルではこういうものですか??
2021-02-15 00:29:55@zipperpull これは、あめいさんも呟いていたけど、Properties を使っているのが敗因ですね。この部分、そんなに微妙なスレッドで使う作りになっていないので。 この部分は普通にファイルアクセスにするか、大袈裟だけど SQLite に変えたほうが無難です。
2021-02-15 00:48:25@zipperpull そもそも UserModel に対して非同期アクセスするのが疑問で、普通にシングルトンパターンでいい気がするするんでよね。読み書きにそんなに時間が掛かるわけでもないし、同期処理直した方が安全です。
2021-02-15 00:52:29@moonmile いまのおしゃれ非同期がムダなのは同意です。とはいえ UserModelService が非同期や排他処理を吸収して正しくキャッシュして、書き込みも実行順序をシリアライズするようにさえなっていればおしゃれコードも維持はできそうとは思います(どうしてもやりたければというレベルの話ですが)
2021-02-15 00:57:43@moonmile Properties 以前に、ContainsKey でチェックしてから Get したらそれだけであかんような。。
2021-02-15 00:52:26@zipperpull 御意。そこはコードが不味いです。 以前からチラチラと言っていますが、そらはコードレビュー対象です。
2021-02-15 00:55:54@zipperpull 直し方はいくつかあるんでしょうが、zip を DL するスレッドから一旦メインスレッドに戻した方が私は安全かなと思ってます。 現状 Android の方は main に戻るのですが、iOS の場合はバックグラウンドになっているのが悩ましいところですよね...
2021-02-15 01:05:26@moonmile Xamarin にも DispatchQueue のサポートはありそうなのでそれで直す方法は一応あるのかなとは思いますが await との相性の問題とかありますか? 呼び出し側(DLするスレッド側)で気をつけましょう!なのであんまりきれいにはなりませんが。。
2021-02-15 01:09:42@zipperpull DispatchQueue は大袈裟かな、というのと UserDataModel の扱いはそんなにクリティカルなデータではないので過剰かなと思います。 他の人の意見も聞きたいところですが、私から見ると - Get/Set が非対称になっている - UserDataService::SetAsync 内で Get を使う意味がわからない です。
2021-02-15 08:38:09