同期処理に semaphore を使う
CloudKit のプログラムを書いていると、サーバに対する Query 処理などでは非同期処理となる。通常はこれで特に問題がないのですが、フィールドの値に Reference 型を指定してある場合、マスターのレコードを query してサーバ側のレコード番号を取得しておく必要が出てくる。
その後、自分のレコードを保存することになりますが、マスターのレコードを query してくるところが間に合わなくて、値を保存し損ねてしまうことがあります、ってか、通信が高速になったとは言え、普通間に合わないです。
こんな時どうすればいのかわからなかったのですが、semaphore を使って同期処理にしてしまえば良いようです。具体的には以下のような形で・・・
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
... some programs ...
dispatch_semaphore_signal(semaphore);
});
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
とりあえずやり方わかってよかったです。
CloudKit Dashboard で軽くハマる
CloudKit Dashboard で軽くハマりました。
Query しようとしたら、recordName is not queryable みたいなエラーメッセージ。初め、あ、query 可にしちゃいけないのね、と思って、query の属性を消していったら一向にエラーがなくならない。なんじゃこりゃと思ったら、逆で、recordName に query 属性をつけろってことを言ってた。
さっき、いたずらで色々いじってたら、いつのまにか query の属性を消してしまっていたようだ。
610 アメリカ屋のセール
アメ横のアメリカ屋、正式名称は 610アメリカ屋なのだが、頭に付く 610 とは何か?諸説あるようですが、創業者が武藤さんだったので、と言うのが有力視されているものの、真偽のほどはさっぱりわかりません。そんなことはどうでもよくて、610 についてよく覚えていた方が良い。毎年 6 月 10 日はセールを行うのだ。ここ数年やっているので、毎年やると思っていますが、知っているのと知らないのでは大違い。この店、基本的に値引きはないので、実質、年に一度きりのセールということ。
今年は土曜日ということもあり、行ってきました、堪能しました、でも残念なこともありました。全品 20% off ということで、いやー、毎日やってほしいぐらいです。前から目をつけていたジャケット、シャツ、買いました。
一言苦言を。2F は Lee の品揃えが良いのですが、アメリカンスタンダード 102 ワンウオッシュがないというのはどういうことだ?随分色が落ちたのはあったけれども、ワンウオッシュがない。アメリカンライダースはあるけれども、前から言っているように、LM5102 はダメだと。オムツっぽいし、アメスタ 102 の方がかっこいいよ。ってか、アメスタの方が生地薄くて夏場には重宝するっての。それで価格差 5,000 円とか有り得ないだろ。
マルセルで買ってきたからいいけど、店員に聞いてもこの色しかない=製造していないというような言い方で、嘘つけよって感じ。分かっている人からすると、こういう言い方はすごく不信感につながるから、気をつけろよな、チャーリー。
macOS Sierra で、コピペできなくなった時は・・・・
Sierra は安定していていいね、と思っていたら、とんでもない症状が。
コピペしようとしたらできない。単純な文字列をコピペしようとしてダメ。テキストエディタを開いて、一文字だけコピーしてペースとしてみてもダメ。こうなっている状態で、コピーした直後に Finder でクリップボードを表示を選択してみたら、何も表示されない。無視されている感じ。関係しているのかわかりませんが、Finder でファイルを drag しようとしたらダメ。ファイルをつかめない状況。ひどいねこれ。
そう言えば、長いこと reboot していなかったなと、reboot してみたら、無事直りました。
最近の macOS って、安定しているので、使う→スリープ→また使う、の繰り返しで、あんまり再起動しないんだけど、たまには再起動してやるものですね。
リーバイスと 501 と・・・
昔はジーンズと言えば Levis で 501 と、マーケティングの餌食になっていたのか、わざわざアメ横まで買いに行くという感じだったんですが、いつの頃からだろう、501 のシルエットが変わっていることに気づいた辺りから、どうもいまひとつ好きになれず、最近は全く買いません。
一番最後に買った 501 は、多分 10 年以上前だろう。その時点で、すでにシルエットが変わっていた。具体的には、昔の 501 は股上が浅かった。浅いとどういう効果があるのかよくわかっていなかったけれども、結果的にかっこいいシルエットになっていたのだ。チノパンからジーンズに履き替えると、股上の浅さから履きにくいとよく感じたものだけれども、このシルエットが最近のはすっかり変わっている。オムツと形容されることもあるようで、股上はすっかり深くなってしまった。当時読んでいたメンズノンノにも、501 は股上が浅い、腰で履くもの、女子の印象として 501 が一番かっこいいと書いてあったし、実際履いてみて浅いと思っていたので、この変更はどうにも受け入れがたい。
さらに言うと、元祖的な宣伝、最近少ないかもしれませんが、かつてはジーンズのオリジンを誇らしげに宣伝していたものです。オリジンである=スタイルが変わらない と勝手に思っていましたが、501 のスタイルは頻繁に変わるのです。勝手に変わらないと解釈していたので、これに気づいた時、ちょっとショックでしたね。
そんなこんなで、最近は、専ら Lee 102 なんですが、LM04102 から LM05102 のシルエット変更がどうにも慣れないし、今の所改悪としか思えなくて、次どのジーンズにしようか思案中。LM0102 なら、5102 より股上浅くていいかもなと思っていて、今度試してみようかなと。
CloudKIt Database を使って・・・
CloudKit Database を使っての印象。
良い点
- CoreData いらないかもね。全部サーバに保存しちゃえば良い。
- 無料で使える容量が多いので、ほとんど無料で行けちゃうね。これはありがたい。
悪い点
- 蓄積したデータのメンテナンスはどうやるのがうまいやり方なのか。ブラウザからのインターフェースは設定に関するもので、プログラムを介在させる余地はない。アプリからメンテナンス用のプログラムを発行できるが、利用者全員が使えてしまうとまずい訳で、隠しコマンドを打つと(あるいはジェスチャー?)インターフェースが出てくるみたいなトリックが必要か?
- リレーションについて、合理的なプログラムは書けない。SQL で慣れているなら特に違和感はないだろう。CoreData で N : N の記述に慣れてしまうと、途方もなく面倒なプログラムを書いている気になってしまう。
- 大量のデータ(例えばマスターデータ)を保存しようとすると処理が追いつかないことがあるので、少し wait しながらコマンドを発行する必要がある。デメリットというより、使用する上でのコツのようなものでしょうか。
また気づいたら書きます。