アプリのアップデート(Ver.1.6)をリリースすることになりました。前回のアップデートで内容の検証に抜けがあり、修正の必要があったためです。
Ver1.4まで当アプリの操作系には、再生中(デスクトップに表示中)のリストは、Finderとの同期や項目の削除はできないという制限を設けていました。再生中に項目に変更を加えようとすると、大変ややこしいことになろので、それまでは避けていたのです。しかしアンドゥ・リドゥの実装と同期機能の強化にあたり、そうも言ってられなくなったので、操作の制限を取っ払ったわけですが、操作系のコードの修正量もさることながら、動作のパターンが一気に増えて、検証しきれていない項目がありました。
ただ修正だけのアップデートではつまらないのでリリースをどうしようか考えていたところ、前々から自分で欲しかった四分割フリップのトランジションが二日で実装できたので、その流れでキューブ回転に挑戦したところ、何とか形にできたので、操作系の修正とトランジションの追加でアップデートとすることにしました。これでほんとにVer.1.xは完了となりそうです。
キューブはいずれは実装したかったトランジションだったので、今回で前倒しで実装することができました。もっとも代表的なトランジションの一つでもあるので、WWDCの中でもCoreAnimationのセッションでキューブ回転のデモがあったことを紹介する記事もあったりと、参考にできる記事は見つかるものの、例によって当アプリならではの事情もあって手こずりました。トランスフォーム(画像の変換)はパラメータの値や、ビューやレイヤーのセッティングに一つでも誤りがあると、結果として表示される画像が、まるで11次元の世界に迷い込んだかのような歪なものを見せられるので、その場では何をどうしたらいいのか途方に暮れてしまいます。
今回、実用性のあるトランジションを3種類追加したので、アプリのページに掲載するデモムービーも更新しました。デモムービーは前回初めて作ったのですが、動画編集ソフトのFinal Cut Proはその時初めて使い、今回で二度目。30秒のムービーなので半日程度でできるとはいえ、普段動画編集なんてしないので、使い方を探りながらの作業のせいでプログラミングより疲れました。
2021年6月の投稿

コメントする
※ 匿名希望の場合は空欄で構いません。
先日Macをスリープから解除したら、問題が発生したからと再起動を始めました。滅多にあることではないので普段は気にしないのですが、問題は再起動後、XCodeを立ち上げてDesktopShowアプリをbuild and runさせたらデータ読み込みができず初期状態に戻ってしまったことです。開発のさなか、動作テストの時にアプリのクラッシュに出くわすわけですが、アプリを再起動した際保存データが飛んでいて初期状態に戻ってしまうのが、開発中ずっと懸念事項でした。当アプリはイベントループの最後に大抵データ保存の処理をするのですが、アプリがクラッシュするのはビュー操作の過程であって、データアクセスの工程ではないのになぜデータが破損するのか、実はこのメカニズムが今でも掌握できていません。この一連の流れは全てメインスレッドで処理しているので、ビューがクラッシュした時点でデータ保存のルーチンまでは処理は進まないと思うのですが、実際はイベントループは最後まで処理され、ビューがクラッシュした時点でデータに不整合が生じているので、その状態でデータ書き込みが行われると、次回起動時にデータのデコードに失敗するのではないかと推察しています。
一つわかっているのは、このままでは困るということです。ビュー周りは大変複雑で、完璧にバグがないように作り込むことは不可能に近く、クラッシュは起こりうるものなので、何らかの対処法が必要と以前から考えていました。そこでビューの更新が行われないタイミングでデータのバックアップを取っておいて、クラッシュ後の起動時で正規のデータのデコードに失敗した場合、バックアップデータを読み込むという仕様をVer.1.5で加えました。実際開発作業中この方法でアプリのクラッシュに対処できることを確認しています。
そしてVer1.5をリリースした翌日に前述の事態に遭遇しました。もう呪われているのか、よりいいステップに進むきっかけに遭遇できたとポジティブに捉えるべきか、精神が試されます。システムが落ちたのは、おそらくXCodeが原因だと想像しているのですが、問題はアプリが正常に復帰できなかったことです。システムを巻き込むトラブルが発生した場合、今のやり方でもまだデータを失う可能性があることがわかりました。次回のアップデートの時には手動でデータを読み込む機能を追加しようと考えています。それ自体は以前から考えていた機能ですが、Ver1.5で実装した方法でその必要性はなくなったと思ったのですが、この問題は根が深く更なる探求が必要のようです。
今回アプリが正常にデータの復帰ができなかった際、コンソールに気になるメーっセージが出力されていました。こんなメーセージに遭遇するのは今回が初めてで、内容は/ver/以下のディレクトリにあるファイルへのアクセスに失敗したというものです。調べてみると/verはUNIXにおいて、雑多な物置的に使われているディレクトリのようで、アップルは/verに/ver/folders/という独自のディレクトリを追加して様々なアプリがこのディレクトリをキャッシュ領域として使っているようです。このディレクトリの中の方を覗くと~ユーザー名/Library/Containers/の中のように、様々なアプリのディレクトリがあり、その中に私のアプリのディレクトリcom.kissdgw.DesktopShowもありました。コンソールに出力されていたのはこの中の何ちゃら.plistが読めなかったというものです。ここまでの記述でお分かりかと思いますが、アプリ制作者はこんなコード書いてません。/ver/folders/なんてディレクトリの存在は今回初めて知りました。これらはシステム側がやっていることです。今回の原因がアプリではなく、システムもしくはXCodeと考える根拠です。でもまぁそんなことはどうでもいいのです。アプリ制作側は自分のするべきことをするだけです。とは言え、現在のOSはアプリ側が手の出せない領域が多くて複雑です。仮に手が出せたとして手を出す技量もないですし。
/ver/folders/ディレクトリで気になったのは、私のMacはその時このディレクトリが6GBもの容量を食っていたことです。そのうち実に5.9GB、ほとんどをcom.apple.desktoppictureすなわちシステムがデスクトップピクチャを表示しているプロセスが、表示した画像のコピーを書き込むことで消費していました。何という無駄なことをやっているんでしょう。ストレージ容量が256BG以下のMacだったら馬鹿にならない容量です。こんなところでストレージ容量を圧迫されているなんて一般のユーザーは誰も知らないでしょう。私も知りませんでいた。またこの仕様自体釈然としないものがあります。なぜ今更UNIXの領域なんかキャッシュに使っているのでしょうか。各アプリに標準で割り当てられている~ユーザー名/Library/Containers/でいいじゃないかと思うのですが。というか壁紙の画像なんかコピーしたってキャッシュとして何の意味もないでしょう。(正確にはjpegの実ファイルをpngに変換して書き込んでいるので、実ファイルの3倍以上容量増しになってます。壁紙として表示する画像なんかキャッシュする意味がそもそもないし。)
以上、今回遭遇した事件簿でした。
コメントする
※ 匿名希望の場合は空欄で構いません。
世の中ワクチン接種と五輪のダブル緊急事態で、関係者が今一番欲しいのは時間だと思うのですが、私はといえばブログ記事を書く時間がありません。この一年、プライベートの時間は睡眠と食事以外は、全てプログラミング(と猫の世話)に注ぎ込んでいるので、アップデートをリリースしたタイミングでしかブログを書く時間が取れません。プログラミングのネタがかなり溜まってきているのですが、それこそ書く時間がなくて記事にする前に忘れてしまいそうです。
さて、最近のジジとチャチャですが、一歳を過ぎて仔猫の時に比べ少し知能も向上したのか、行動に変化が見られます。
・私の体に足をのせる、あるいは足が触れる時、爪を立てないように配慮をしてくれる
ようになりました。
・「こら!」と言われると怒とられていることを理解したようです。(チャチャのみ)
・机に上に載る時に、キーボードとマジックパッドを踏まなくなりました。
机の上を歩くときもきちんとキーボードとマジックパッドを踏まないように歩きます。
これらは学習効果が実を結んでいます。
・外から帰ってくると体にいっぱい棘をくっつけてきますが、私が棘を取っている間
逃げないでじっとしているようになりました。
濡れた身体を拭いてやる時も同様です。
おかげさまで一歳を迎えるまで、ジジが2週間ほど足を引きずっていたことがあった以外は、2匹ともケガも病気もなく元気です。
最近はは少なくなりましが、シンクロナイズド睡眠ng


コメントする
※ 匿名希望の場合は空欄で構いません。
5回目のアップデート(Ver1.5)リリースです。今回をもってVer.1.xは終了です。開発の着手が2020年の5月末でしたから、およそ半年でVer.1.0のリリース、その後ひと月ペースで小刻みなアップデートを行い、一年後にVer.1.xの完了まで漕ぎ着けました。一年前昔買ったハウツー本を読み返すところから始めたことを振り返ると進捗のペースは上々だと思います。十数年前のプログラミングの勉強を一から始めた頃だったら、今の状態に作り上げるまで四、五年はかかっていたでしょう。
今回のアップデートの内容は、シャッフル再生とランダムなトランジション機能、Finderとの同期機能の強化、アンドゥ・リドゥの実装、前回までのリリースで気づけなかったバグ修正等です。もっと詳しく内容を語りたいのですが、ブログの文章を書いている時間がありません。細かいところでは、コレクションビューなどに改善したい要素もあるんですが、ビューの作り込みをするのがこのアプリの目的ではないので、気持ちを切り替えて次のステップに進もうと思います。
今回のバージョンでアプリの土台はほぼ出来上がりました。ここからは機能の拡張になります。これまで扱ってきたAPIは、AppKit、Fundation、CoreAnimation、CoreImage、CoreGraphics、他ちょこっとでしたが、いよいよここから現在のMacOSの特徴とも言える多彩な XX Kit系のAPIに進みます。読まなきゃいけないドキュメントもぐんと増えるでしょう。
バージョン2.0のリリースがどれくらいで出来るのか、今の時点では正直わかりませんが、今後も地道に頑張っていこうと思います。
コメントする
※ 匿名希望の場合は空欄で構いません。
▼ 記事の選択 ▼
最近の投稿
コメントする
※ 匿名希望の場合は空欄で構いません。
コメントを追加する キャンセル