キノコの自省録

日々適当クリエイト

Krita(5.0)で縦書きテキスト入力はどうやるのか

いきなり結論ですみませんが、公式サポートはありません。読んだ方が探し回らなくて済むよう書いておきます。「ない」です。少なくともKrita v5.0.5の時点では。

SVGにはwriting-modeというスタイル属性がありますが、これを使うと「右読み縦書き」といった指定ができます。しかし、Kritaのテキストダイアログで直接書いても全く効果がありません。公式ドキュメントにもわざわざはっきり書いてくれています。

docs.krita.org

Kritaのフォーラムを覗くと、2021/8に縦書きテキスト入力できないんだけど?という主旨の投稿があります。なぜ今まで誰も問題にしなかったのか。。。この投稿の冒頭で出てくるLazy Text Tool Pluginですが、これを使っても縦書きは出来ませんので悪しからず。フォーラムは下記。

Lazy Text Tool Plugin and japanese vertical text - Plugins Development - Krita Artists

一応対処的な

このフォーラム投稿の後半に、KnowZero氏が縦書き用フォントと縦書き変換スクリプトを公開していますので、こちらを利用すると「このフォント限定で」縦書きを追加することができます。

縦書きテキスト(Krita)

一応使い方としては、まず下記からフォントをダウンロードしてインストールします。

github.com

次に下記リンクのポストの上側ブロックをコピーしてjpn.jsonとして"C:\path\to"に保存、下側ブロックをKritaのスクリプターに貼って実行します。

https://krita-artists.org/t/lazy-text-tool-plugin-and-japanese-vertical-text/28001/91

そうすると、テキストダイアログが立ち上がるので、フォントを源ノ明朝 Verticalにして、書きたい文字を入れます。

縦書きテキストスクリプト

その結果が先ほどの「いかは、イカン」です。

正直、Ink Scapeなどで文字を作った方が早いような気がしないでもないです。現在はfeature requestsに追加されているようなので、公式対応を待ちましょう。

感染したことがピンポイントでわかる体質の持ち主が感染経験を語ってみる

以前の推定コロナに感染した話のエントリで、感染したことがピンポイントでわかる体質の持ち主だと書きましたが……。

kinokorori.hatenablog.com

立証できないし、何の得にもならないどうでもいい体質だと思っていました。しかし、昨今の新型コロナの流行で、一体どこで感染するもののかわからないというのは結構不安だろうなと思ったので、ちょっと体験談を書いてみることにします。

特に感染しやすい場所など

まずは凄く感染しやすいもの。

自分の手

最近手洗いみんな頑張ってますが、あれ自分からすると滅茶苦茶当たり前というか、超大事です。手洗いさえしておけば、かなり風邪やインフル貰う可能性が減ります。これはもう断言します。お医者さんの言うことは真実です。私は手洗いの重要さを体質のおかげで良く認識しているので、以前からこまめに手洗いしてました。このおかげか、周りの部隊がインフルで全滅しても、インフルにまずかからないです。

手洗いをサボると、手から強烈な風邪の臭いがします(風邪の臭いは結構わかる人多いみたいですね)。間違ってもその状態で手の臭いを嗅いではいけません。それでやられたことがあります。

「食事前には手を洗いましょう」と言いますが、手掴みでご飯食べるわけでもないので、大人には関係ないんじゃないのと思う人もいるっぽいです。こういう知恵袋も見つけました。同様の質問も結構見かけます。

箸を使うのに、どうして、食事の前に手を洗うべきなのか? - 前から思... - Yahoo!知恵袋

いや、違うんですよ。口の近くに手を運ぶと鼻から吸い込むんです……。食事の時、どれくらい鼻の近くに手を移動するか、ちょっと気にしてみてください。マナーでも清めの儀式でもなんでもないです。

後、キーボードを叩いたり、書類仕事などをしていると、手が大体鼻の下にありますよね。しかも結構近くに。たぶん30cmも離れてません。近いだけでなく、手から微妙に熱気が上がってくるため、熱気が鼻に到達します。手にウイルスが大量に付着している場合、これでもれなく感染します。試しに手の甲に香水やアロマオイルを軽くつけて、キーボード叩いてみてください。具合が悪くなるほど香ってくると思います。

オフィス

オフィスは最悪です。風邪を引いた場所のほとんどがここ。みんな喋りまくるし、換気は悪いし、日はそう差さないし、かなり乾燥します。おまけに熱あるくせに出社する人がいたりします。マスクしていようが何しようが、廊下を歩いたり、ただ黙って座って作業してたりするだけで突如感染します。ガチの最低環境です。自分の場合、4月~5月にかけて、アレルギーで鼻の調子がかなり悪くなるため、毎年のように風邪を引いてました。マスクは当然のごとく着用してます。

最近では職場も換気に気を使ったり、テレワークで出社率下げたり、熱が出たらすぐ休む(当たり前)という状況になり、だいぶ改善してきたと思います。おかげで去年も今年も風邪ひいてません。

飛び交う飛沫の量が減れば感染リスクも減るので、みんなマスクつけて会話してくれれば多少は安全な環境になるはずです。ところが、声の大きい人ほどマスクを外して喋る傾向があります。後、電話する時にわざわざマスクを外してはいけません!なぜ「みんなマスクをしよう」と言っているのかよく考えて欲しいです。

感染したことのある場所

ここで感染したことありますよ、という場所について。ちなみにアレルギー体質なので、大抵外歩く時は不織布のマスクを着用してます。

家電量販店

札幌の家電量販店で、まさしくただ歩いているだけで突如感染しました……。

家電量販店って空気悪いんですよね。かなり会話が多いですし、換気も不十分、温度は一定で乾燥する上に日も差さないという。しかも見た目ほど綺麗ではないです。店内は明るいですが、自然光は一切入りません。

最近デパートでクラスターが発生している話がありましたが、家電量販店と構造的には似ているので、自分的にはまあそりゃ発生するでしょうね、という感じ。

歯医者

これは治療中、というか型を取っている時にインフルエンザに感染しました。口も鼻もノーガード、おまけに飛沫飛びまくりですからどうしようもないです。行くなら個室診療の歯医者をお勧めします。

映画館

前回のエントリの通りです。普段そんなに映画館行かないし、風邪(?)を引いたのも前回の1回だけなので、実際のところどれくらい感染しやすいかはわからないです。映画館サイドとしては換気性能は良いから安全とうたっていますが、どうなんでしょう。感染者がくしゃみや咳をした座席の周辺がどの程度感染力を維持するのか、換気する時にウイルスを含んだ飛沫がどう流れていくのか、その辺が不明です。

自宅(ぼっち)

一人暮らしでも、大酒飲んで倒れるように寝たり、冷房ガンガン効かせてパンツ一丁で徹夜ゲームなんかしたりして風邪引いたことがあります。免疫0状態ですね。

ちょっとまとめ

ということで、大体は「ただそこにいるだけ」で感染してます。一言で言うと屋内全域がデンジャラスゾーンです。よく新型コロナで「マスクもしていたのにどこで感染したのか予想もつかない」と仰る人がいますが、ピンポイントで感染したことがわからないとそんなもんだと思います(発症まで日が開くコロナの場合は特に)。家電量販店内を歩いてたせいで感染した、なんて思いもしないでしょう。

自分の経験から言うと、いわゆる密ではない状態でしょっちゅう感染しているので、結局「バラまかれた飛沫の量」が一番問題になるのではないかと思います。そのため、「マスクせずにしゃべっている人が多い空間」「換気が甘い空間」が危ないということです。これも言われてる通りですね。

なので、感染症を避けたい場合は「極力出歩かない」が結局解になります。不織布マスク程度では感染予防として不完全ということを良く認識してお出かけしましょう。

電車はどうなのか

隣に座ってたカップルの男が激しく咳やくしゃみを繰り返していたおかげで感染したことはあります。それ以外は記憶にないです。

満員電車については、自分の普段乗っている電車はそこまでギュウギュウではないので、よくわからないです。

二重マスク

経験上、(不織布)マスクが感染予防にはあまり役に立ってないです。使ってると鼻の周囲がガバガバ浮いて、ほぼノーガードになります。たぶん、良質の不織布マスクを2,3時間ごとに取り換えればいいのでしょうけど、なかなかそんなことしないですよね。

上気道感染症は鼻から侵入するのに、鼻がガバガバだと話になりません。ということで、鼻用マスクみたいなのないのかとちょっと探したんですが、ちゃんとありました。


【ノーズマスクピット】日本製 マスク 不織布 ノーズマスクピットNEO 洗える 柔らか鼻マスク 高機能マスク

このノーズマスクの良いところは、不織布マスクのようなズレがほぼないことと、食事中も鼻がガードできる点です。最初異物感はかなりあるかと思いますが、慣れます。私は慣れました。推定コロナに罹って以来、外出時はずっとこれを装着してダブルマスクにしています。不織布マスク外しても全然気づかれません。1年以上一緒に仕事している人がいますが、全く気付かれませんでした。息苦しさについては個人的にはあまり感じません。

ちなみにノーズマスクは、無印、SUPER、NEOの3タイプあります。無印とSUPERはスポンジタイプで、鼻栓感が凄いです。NEOは薄いフィルタータイプなので、異物感は少なめ。でもSUPERの方がなんか守られている感はあります。

結論として

「出歩いたら確率で感染します」

しやすい、しにくいはあっても、しないはないと考えて良いかと思います。

PC使いはOculus Quest2とOculus Rift Sのどちらが良いか

PC使いならOculus Quest2のスタンドアロン機能はそこまで必要ではないし、若干安いし装着性の良いOculus Rift Sも選択肢に入ると思います。Oculus Rift Sはそろそろ販売終了しますが、買った方がいいのかどうか、というお話。

Oculus Quest2を買いましょう。

理由

Oculus Rift Sのケーブルが滅茶苦茶壊れやすいためです。1年経たずに3本壊れました。ケーブルくらい……と思うかもしれませんが、Oculus Rift Sのケーブルは1本1万円です。3本壊れたということは30000円です。もう1個Oculus買えます。

1本目は最初から付属していたケーブルです。8か月くらい持ちました。オフィシャルサポートに交換依頼すると同時に、もう1本ケーブル買いました。その買ったケーブルの方は2か月で壊れました。交換で到着したケーブルは最初から壊れてました。あまりにもどうしようもないため、Oculus Quest2を買ってしまいました。光ファイバだから壊れやすいというのはわからなくもないですが、最初から壊れているのでは話になりません……。

f:id:kinokorori:20210606142924j:plain
問題のOculus Linkケーブル

壊れ方は画面のチラつき、USB認識不良の2パターンですね。USB認識不良だと、全く何にもできなくなります。

Oculus Quest2はどうか

Oculus Quest2を買ってから4か月くらいになりますが、順調です。そもそもLinkケーブルがただのUSB3.1のType A-Cなので、1500円くらいで購入できます。7本壊してRiftの1本分ですね。

その他のメリットとしては、コントローラの電池持ちが断然違います。未だに買ってから1度も交換していません。Rift Sならたぶん5回は交換しています。後はケーブルがUSB1本で済むのが楽ですね。外部バッテリーも必要ないですし、Display Portにも繋ぐ必要がありません。

装着性はRiftの方が好みですね。Quest2はゴムバンドなんですが、調整も難しく、動かすとズレてきやすい感じがします。

Riftと同じようにPCアプリ使えるの?

使えます。Unityのデバッグ接続もいけます。ですので、VTuberみたいに3Dモデルを動かすことも可能です。ただし、上で書いたUSB3.1のType A-C (Linkケーブル)を別途購入する必要があります。

下記の通り、公式の光ファイバケーブルだと10,000円します。

自分が買ったのはこっちです。4mのUSB AtoCケーブルです。現在1,680円です。(なんでUSB A-Cケーブルに10,000円も出さないとならんのでしょうか)

USB3.1 AtoCケーブル

もう4か月以上使用していますが、全く問題ありません。ちなみに、USBハブを使用する場合はバスパワーだと動かなかったので、下記の外部給電式のパワーハブ(2,500円)を使用しています。ハブに繋ぐ場合は注意してください。

パワーハブ

ちなみにこのハブ、ポートによって接続安定性が違います。まあ安いからいいんですが……。もう少しいいものを用意した方がいいかもしれません。

Kritaで既存のイラストをドット絵変換する

既存のイラストをパパッと手早くドット絵っぽくしたいときのtipsです。

とりあえず今回の素材。

f:id:kinokorori:20210526193159j:plain

まずはモザイク処理を入れます。この画像は1200x900pxなので、ファミコン全画面解像度256×224pxくらいを考えて、縦横5x5でモザイク入れます。

f:id:kinokorori:20210526194604p:plain
モザイク処理

f:id:kinokorori:20210526194620j:plain
モザイク画像

これだとただ解像度が落ちた画像ですね。続いて、先ほどのモザイクを選んだメニューの上に減色階調(インデックスカラー)があるので、こちらを選択します。このインデックスカラーの設定は、画像によって設定する色のチョイスが変わってくるので、プレビュー見ながら調整しましょう。色数の上限はファミコンぽくするならば16色が良いですが、多少増えてもパッと見わからないです。

f:id:kinokorori:20210526194926p:plain
インデックスカラー処理

最終的にこんな感じになりました。

f:id:kinokorori:20210526195539p:plain
8bit響子ちゃん

まあまあドット絵感が出てるんじゃないかと思います。

もう一つサンプル。元絵はこちら。Witch Criedのメイです。おお懐かしい。

f:id:kinokorori:20210526201238p:plain
元絵

変換後。これは結構それっぽいのではないかと思います。

f:id:kinokorori:20210526201352p:plain
メイのドット絵

2月中旬(2020年)におそらく新型コロナに感染した話

日本国内では、結構感染者が各地で出始めた2月に、おそらく新型コロナに感染したであろう件に関するエントリーです。 こんな症状が出ましたよ、というお話です。

先んじて謝罪しておきますが、検査は拒否されたため、確定ではありません。 なので話半分にご覧ください。

感染した日

2020年の2月10日、映画館で感染しました。自分の住んでいる周りに感染者が結構出ていた状況で、危ないなーと思いつつ、休みの中日で多少映画館は空いているだろうし、マスクと飲み物をちゃんと用意しておけば大丈夫じゃないかと思ったのですが、甘かったです。

なんでピンポイントで感染したことがわかるのか、というのはちょっとした特殊体質のせいです。これは最後の方に書いておきます。

発症日

3日後の2月13日の夜に発症しました。近所で感染者が多発しているニュースを見て、一応熱を測ってみたところ、37.4℃でした。実を言うと、なんか食欲がないな~程度にしか感じてなかったんで、熱を測らなかったら気づかなかったかもしれません。正直3日前に感染したことも、全く症状が出てなかったのですっかり忘れてました。

症状

大体こんな感じです。

  • 37.5℃前後の熱
  • 胸部圧迫感
  • 食欲不振
  • 味覚低下

2月13日~2月17日くらいまでは大体37.5℃の熱が続いていました。最高は38℃くらいです。自分は熱に強い体質なので、正直全くキツイとは思いませんでしたが……。その後は37.5℃と平熱を行ったり来たりで、2月22日以降は熱が上がることはありませんでした。Twitter見ると、気を良くしたのか2月22日にイラストを描いてますね。合計9日間熱が出ていたということになります。普通の風邪やインフルではこんなに長く発熱しないので、正直驚きました。

「37℃台の熱は下げてはいけない」ということもあり、解熱剤も飲まずにそのまま放っておきました。

食欲不振

食欲不振が一番強烈でした。正直言って熱も大したことなく、胸部圧迫感も起きている分には然程でもない程度で、身体に関して言えば「調子良くはない」くらいなのですが、とにかく気持ちが”食”に向かいませんでした。今まで39℃まで熱が上がっても食欲が落ちたことがなく、胃が悪くても食欲はそれなりに保てる方なのですが、空腹になっても食べたいという気が起きませんでした。ただ、食べないと危険なので、ヨーグルトや豆乳+シリアル、ふりかけごはんと味噌汁といったそれほど食べるのが苦ではないものを食べていました。

胸部圧迫感

横になると胸が重苦しく、仰向けで寝るのが辛いといった状態でした。ネットで調べると「心不全の兆候」とか書いてあって、実は心臓が悪いのかとか思ったりしました。今調べると、「仰向けに寝ると寝苦しい」といった報告している人が結構いますね。

味覚障害

味覚障害ですが、70%カカオのチョコレートを食べた時、あまりにも酷い味がしたのでなんじゃこりゃ!?と。チョコレート以外は食欲不振のせいで味についてほとんど意識してませんでした……。当時コロナの症状として、嗅覚障害や味覚障害があることが知られてなかったのであまり気にしてませんでしたが、もうちょっと色々気にしておけば良かったです。たぶん甘さに鈍感になった感じですかね。

保健所への連絡と病院

ちょうどこの頃に、「4日以上37.5℃を超える熱が続いた場合」を受診の目安とするPCR検査基準が加藤厚生労働大臣から発表がありました。なので、発症5日目くらいに保健所に電話しましたが、「熱の症状は条件クリアですが、濃厚接触者、もしくは呼吸器の症状がないからダメですね」と却下されました。胸部圧迫感がある話をしても「咳してないからダメ」だそうです。5月になってこの基準は誤解だ(?)という話が出ましたが、当時の資料を見ると、確かに保健所の対応のように明記してあります。検査体制も整ってないので、ほいほい検査なんかできなかったのでしょう。「それじゃあ適当にその辺の病院に行っても構わないですね?」と確認したところ「構わない」という返事が返ってきました。

とりあえず自分としてもどうしようもないので、マスクして病院に行きました。先生側も「おっ、来たか!?」的な感じで診察してもらえました。胸部レントゲン上は問題がたぶんなし(新型コロナの肺炎の影は胸部レントゲンだとほぼ発見できない)、血中酸素飽和濃度も問題なしでした。食欲不振の対策として補中益気湯と、胸部圧迫感が気管である可能性を考えて気管拡張剤、後は解熱剤を頂いて経過観察ということで帰りました。

一つ自分として気になったのが来院時に測った血圧数値で、上が150mHgくらいまで上昇していました。健康診断では120mHg弱で、今までも120mHgを超えたことがないので、これは完全レコードです。測り直しても同じで、正直壊れてるんじゃないのか?と疑ってしまいました。しかし、他の人の数値は普通だったので、本当にその時150mHgくらいあったんでしょう。冬場は血圧が上がりやすいといっても、流石にこれは驚きです。

回復

2月18日頃には平熱に戻る時間が徐々に増え、2月21日には夕方のみ37.5℃、2月22日には大体平熱に戻りました。ずっと引きこもっていたせいもあるのか、しばらく身体の調子も戻ったとは言えませんでしたが、翌週には大体回復しました。胸部圧迫感も大分落ち着いて、食欲も戻りました。味覚はいつの間にか直ってました。ハイカカオチョコレート以外はわからないレベルだったので、味覚障害も軽度だったのでしょう。

その後

丁度ひと月くらい経った3月8日に、強烈な風邪の臭いを感じて朝目覚めました。凄い量の、色のついた鼻水がドバっと1回だけ出て、熱が37.5℃までパッと上がりました。鼻水もその1回だけで、熱もすぐに下がり、完全に平常状態に戻りました。その日まで一応回復はしてたものの、若干のモヤモヤ感が残ってましたが、これでスッキリ回復しました。前の日は完全に家にいたため、どこかで貰ったウイルスをさくっと排出したとは考えにくいので、体内に残ってたウイルスを完全に追い出したんじゃないかと思います。たぶん。

書き出してみると、なんでしょうこれ。結構危なかったんではないでしょうか……。ワクチンの接種が進んだ後でもチラホラと感染者は出ると思います。検査できなかったので確定ではありませんが、とりあえずこんな症状の人がいたんですね、程度に。

感染がピンポイントでわかる話

冒頭にちょっと触れたお話。私は感染した瞬間がわかるという、なんとも微妙な体質の持ち主です。普通の人はわからないですよね。

風邪をひくときには、風邪をひく瞬間が分かるものでしょうか -風邪をひ- 風邪・熱 | 教えて!goo

スピリチュアル的なものでもなんでもなく「痛い」です。グサッと突き刺さった感じがします。たまに軽い眩暈が起きるほど衝撃が走ることがあります。大抵の場合、それからほどなくして喉がいがらっぽくなります。大体みなさんその状態でうがいをしだすと思いますが、手遅れです。数時間前に感染しています。無駄です。和らげたい場合はさっさと耳鼻科行って吸入してきた方がいいです。

この突き刺さる感じは、風邪もインフルも大して変わらないです。今回の推定コロナも同じでした。ただ、推定コロナは衝撃がそれほど強くなく、「あれ?やられた?」くらいな感じでした。まあ、どうでもいいですね……。ただ、普通の風邪やインフルの場合、感染してから3日間も無症状ということはまずないです。潜伏期間がこれだけ長いと感染経路不明になりやすいのは仕方ないですね。

ちなみに映画館で感染したと書きましたが、マスクした状態で、座って5分と経たずに感染しました。まだまだ開演まで時間があって、劇場内のライトがついている状態です。人もまばら、というかまだ全然お客さんが入っていない状態で感染したので、ビックリしたと同時に、これがコロナだったら感染力半端ないと恐怖しました。

IoT智絵里アラームを作ろうと思う(8) - ソフトウェア編

下書きから発掘。何かを書き直そうとしたっぽいんですが、全く覚えていないのでそのままポスト。

とりあえず智絵里アラームのソフト編です。どんな構造になっているのか説明します。

設計

ソフトウェアの機能ブロックを図に表すとこんな感じになっています。大まかに4つのブロックに分かれています。

f:id:kinokorori:20180512154444p:plain:w600

今回、この4ブロックは全てプロセスで分割されています。

アラーム設定プロセス

 アラームをユーザに設定させるクライアントと、設定された情報を外部に提供するWebサーバです。サーバ自体は今回Node.jsで実装しています。クライアントサイドはAngularJS+Bootstrap4を利用しています。

 このアラーム設定プロセス自体は、最初智絵里アラームの外部PCにデプロイしていましたが、現在は智絵里アラーム(Raspberry Pi)内部にデプロイしています。データベースはSQLiteを使用していますが、別のRDBMSでも構いませんし、Amazon RDSのように、別サーバにあっても構いません。

アラーム取得プロセス

 Raspberry Pi上で実行されるプロセスです。アラーム設定プロセスから、アラーム情報を定期的に取得します。現時刻と照らし合わせて、アラームを再生すべきと判断した場合、アラーム再生プロセスを起動します。智絵里アラーム起動と同時に、このプロセスも起動します。アラーム取得というか、タスクスケジューラみたいなものですね。

 アラーム設定プロセスへは、HTTP GETでアクセスして、アラーム情報を取得します。アラーム設定プロセスとのインタフェースにHTTPを利用していると言い換えても良いです。

アラーム再生プロセス

 Raspberry Pi上で実行されるプロセスです。アラーム取得プロセスからキックされます。アラームを再生するとともに、GPIOの信号をチェックして、スヌーズやアラームオフを制御します。アラーム再生が完全に終了すると、プロセスを終了します。

 アラーム時刻が被る可能性があるため、再生プロセスは複数存在する場合があります。

シャットダウンプロセス

 Raspberry Pi上で実行されるプロセスです。GPIOの信号をチェックして、必要に応じてシャットダウンを行うプロセスです。今回の実装では、スヌーズボタンを長押しを監視しています。智絵里アラーム起動と同時に、このプロセスも起動します。

この通り、モノリシックなプログラムではなく、機能間をできるだけ疎にして、逆にWebサーバも特別な存在ではなく、システムのプロセスの1つという扱いで設計しています。

※マイクロサービスアーキテクチャをちょっとだけ意識したところがありますが、組み込み機器ということもあって全く不完全です。組み込みソフトって、基本的にプロセスをバラバラにするという考え方はあまり見ない気がします。

機能

アラームとしての実装した機能は以下の通りです。

  • 最大10個のアラーム設定
  • アラームごとの有効無効切り替え
  • スヌーズするかどうか
  • アラーム繰り返し指定
    • 1回、指定した日付のみ
    • 曜日繰り返し
    • 毎日定時刻

キャプチャ貼った方が早いですね。この通り。

f:id:kinokorori:20180512171347p:plain:w600

データベース設計

上記アラーム設定を保存するデータベーステーブルはこんな感じです。

CREATE TABLE alarms (_id INTEGER PRIMARY KEY
        , alarm_id INTEGER NOT NULL
        , epoch INTEGER DEFAULT 0
        , enabled INTEGER DEFAULT 0
        , snooze INTEGER DEFAULT 0
        , repeat_type INTEGER DEFAULT 1
        , repeat_week_bit INTEGER DEFAULT 0)

repeat_typeは1がワンショット、2が曜日指定、3が毎日です。repeat_week_bitは、曜日指定のビットマスクが設定されています。

ワンショットだけ年月日時分秒が必要ですが、他のリピートタイプの場合は時分秒まで必要ありません。かといってdateとtimeを別々に指定するようにするとTimeOffsetの影響を受けてしまって面倒なため、UNIX時間で保存、ワンショットの場合は年月日時分秒、それ以外はUNIX時間の時分秒だけをクライアント側で解釈するようにしました。

アラーム駆動シーケンス

やや細部省略していますが、シーケンス図は次の通り。

f:id:kinokorori:20180520212841p:plain

OSが立ち上がった後、アラーム設定サーバと、アラーム取得プロセスと、シャットダウンプロセスが立ち上がります。アラーム取得プロセスは、定期的にサーバから情報を引っ張ってきて、必要に応じてアラーム再生プロセスを立ち上げます。条件についてはシーケンス図に書いてません。シャットダウンの動作も図から省略してしまいましたが、ここは本質ではないので良いでしょう。

この通り、データの取得はポーリングですが、WebSocketやXMPPなどで、設定変更を通知するようにした方がスマートだと思います。

アラーム取得プロセスは、アラーム時刻の30秒前になると、再生プロセスを立ち上げます。なので、アラーム設定のWebを通じたキャンセルは30秒以上余裕が必要です。それ以降は手で止めてくれということです。再生プロセスの引数には、UNIX時間とスヌーズの有無を渡します。

上記の通り、アラームの種別は、年月日時分秒を直接指定したもの、毎日特定の時刻に再生するもの、特定の曜日の特定の時刻のみ再生するものの3種類があります。年月日時分秒直接の場合、UNIX時間がそのまま使えるので問題ありませんが、他の2つは、UNIX時間を年月日時分秒に直さないとアラームが鳴らせません。なので、RaspberryPiのTimeOffsetを日本時間(UTC+9:00)に設定しておく必要があります。

アラーム再生プロセスは、起動後、引数として渡されたUNIX時刻になるまでウェイトし、時間になったら再生します。スヌーズボタンの入力を確認したら一度再生を停止して3分間のスリープに入ります。アラームOffを検出した場合、プロセスを終了します。

アラームのUNIX時間変換

毎日指定時刻にアラーム、曜日指定アラームについては、UNIX時間がアラーム設定サーバから渡されないため、クライアント側で変換する必要があります。

まとめ

ソフトの話をすると、どうしてもお固くなってしまいます。。。なので、エントリ書く気もあんまり起きないんですよね。書いてて一番楽しかったのがデコレーション編。

今普通に使用していますが、なかなか良い感じです。全く光ったりしないので、動いているのかどうかわかりにくいなど、ちょっとしたカスタマイズは必要かな、というところ。

ともあれ、智絵里アラーム自体のエントリはこれで終了です。

Kritaでレイヤースタイルを別レイヤーにコピーする方法

KritaにはPhotoshopと互換性のあるレイヤースタイルが実装されています。 レイヤースタイルとは、縁取りやドロップシャドウ、ハローなどをレイヤー毎に設定できるエフェクトです。念のため。

Photoshopの場合、「レイヤースタイルのコピー」「レイヤースタイルの貼り付け」やドラッグアンドドロップによる複製が可能ですが、Kritaではどう行うのか?というのが今回のお話です。 Kritaでも多少面倒はありますが、レイヤースタイルのコピーは出来ます。

できないよ

Photoshopのつもりで以下の操作を行っても、Kritaでは残念ながらレイヤースタイルのコピーは出来ません。

× 右クリックでレイヤースタイルコピー
× レイヤーウィンドウの”Fx”をドラッグアンドドロップ
× Altキーを押しながらドラッグアンドドロップ

Kritaでのレイヤースタイルの複製方法

こんな感じでテキストを描いたレイヤーを2枚用意しました。

f:id:kinokorori:20200514235402p:plain
その1 レイヤーを2枚用意

まず、レイヤー1にレイヤースタイルを設定します。白の縁取りをして袋文字化、文字色にグラデーションを掛けます。

f:id:kinokorori:20200514235457p:plain
その2 レイヤー1にレイヤースタイルを設定

ご存知かと思いますが、Kritaの場合、レイヤースタイルの項目を弄るだけでは、レイヤースタイルは反映されません。各項目の左にあるチェックボックスにチェックを入れることで初めて適用されます。パッと見ただの□が並んでいるだけで、チェックボックスだということに大変気づきにくいので注意。

このレイヤー1と同じ設定をレイヤー2にコピーしたいと思います。そのために、もう一度レイヤー1のレイヤースタイル設定を呼び出して、「スタイル」を選択します。

f:id:kinokorori:20200515000339p:plain
その3 「スタイル」を選択

カーソルデフォルトが「合成のオプション」になってるせいで、その真上の「スタイル」が選択可能に見えないんですよね。若干よろしくないUIだと思います。しかも項目名も「スタイル」ですからね。aslファイルの選択とか、スタイルテンプレートの選択とか、もう少し別の表現の方が良いと思うのですが。

それはともかくとして、次に「新規」ボタンを押すと、新しいレイヤースタイルのスタイル名入力ダイアログが出てきます。とりあえず今回は適当に「白縁グラデ」とでも入れておきます。これで今のレイヤースタイルが登録されます。

f:id:kinokorori:20200515000833p:plain
その4 スタイル名の登録

後は、登録したレイヤースタイルを、レイヤー2に適用するだけです。レイヤー2のレイヤースタイル設定を開いて、先ほどの「白縁グラデ」を選択すると、同じレイヤースタイルが設定されます。

レイヤー1のレイヤースタイルをレイヤー2にコピー
その5 レイヤースタイルをレイヤー2に設定

御覧の通り、同じレイヤースタイルが設定できました。このように、少々面倒ですが、レイヤースタイルのコピーはKritaでも可能です。

aslファイル

これはPhotoshopのレイヤースタイルライブラリファイルです。Kritaで設定したaslファイルをエクスポートできますし、逆にPhotoshopで生成したaslファイルをインポートすることもできます。

1つのaslファイルに複数のレイヤースタイルを登録することが可能ですので、予めよく使うレイヤースタイルを登録しておけば、後はマウスを少しクリックするだけで適用していくことができます。

ちなみに、1つもレイヤースタイルを登録したことがない場合、「新規」ボタンを押した段階で、CustomStyle.aslというファイルを生成します。このファイルの配置場所は、Windowsの場合、C:\Users\<ユーザ名>\AppData\Roaming\krita\aslとなります。なお、AppDataは隠しフォルダなので、表示したい場合はフォルダオプションから変更してください。

CustomStyle.aslの表示部分がドロップダウンリストになっていることに気づくかと思いますが、Kritaは、先ほどのaslフォルダに置いてあるaslファイルを、自動的にドロップダウンメニューに表示してくれます。