すみません、しばらく休みます

あすかです

しばらくの間、会社でいろいろなことがあって
はっきり言って、プログラミングするのが精神的に苦痛です。
当分、こっち側の活動を休みます。

といっても、漫画ばかりだと飽きてしまうので
技術本をちょくちょく進める可能性はまだ残ってますが、
StoryCanvas開発は、申し訳ないですが無理です。
来春にUWP版出す予定でしたが、夏や秋にのびてしまうかもしれないです。
たくさんの人に使っていただいていることは理解していますし、本当に嬉しいことですし、貴重な経験だと思います。
私も苦しいです。
あちら側の掲示板には、後日説明しに行きます。

しばらくお休みしますが、何かあったら
ツイッター(@askyq)やPawoo(@kmy)へお願いします。

シングルトンインスタンスのゲッタを工夫してみる

あすかです。

シングルトンインスタンスについて、
巷ではこういう書き方をよく見かけます。

public static Class Instance => _instance = _instance ?? new Class();
private static Class _instance;

でも、これって、Instanceを取得する時、毎回必ず_instanceに代入するわけですよね。
コンパイルの時にこういう展開をされるわけです。

var newInstance = _instance;
if (newInstance == null)
{
  newInstance = new Class();
}
_instance = newInstance;    // このあたりがオーバーヘッド?
return _instance;

_instanceがnullでないときにも、必ずこの代入文が実行されるわけです。無論不要です。
このオーバーヘッド、実際は数ナノ秒にも満たないものだと思うし、こんなのを気にする暇があったらもっと他に気にするところがいくらでもあるんですが、一度気になったらやっぱり引っかかりますね。

それで一つ思いついたんですが

public static Class Instance => _instance ?? (_instance = new Class());
private static Class _instance;

これは、_instanceがnullでないときに代入を行いません。
こういうイメージです。

if (_instance != null)
{
  return _instance;
}
else
{
  _instance = new Class();
  return _instance;
}

要するに、やってることが必要最低限になるのでなんとなくすっきりする‥‥のかな(´・ω・`)
ああでも、演算子の優先順位がなんだで代入文をかっこで囲む手間が発生しますね。このあたりはやっぱ好みなのかな。

冬コミ/コミティア123での技術本頒布中止のお知らせ

あすかです。

タイトルのとおりです。

現在、仕事が今までで一番忙しくなっていまして、
次回イベントで出す予定だった本は2冊あるのですが、
共倒れにならず確実に新刊を出すためにも、
技術本を切って、漫画(18禁)のほうだけを頒布することにしました。

仕事の都合で趣味の活動がここまで制限されることは初めての経験です。
今回は、前回の夏コミのように誰かに誘われたからついでにではなく
自分でしっかり本を企画して印刷所も探してスケジュールも立てて、と
締め切りを意識していろいろ準備を進めていた初めてのイベントでもあります。
それだけに、仕事があれほど忙しくなるのは完全に計算外でした。

仕事にも波があるし、他にもっと忙しいプロジェクトがたくさんあるし、自分が今までしていた仕事はぬるいほうだというのはわかっているのですが、
個人的に、初めてだからと上記のようなモチベーションで頑張っていたこともあって、はっきり言ってタイミングが悪いです。
こうなったことはかなりショックです。
技術本のページ数が多すぎたから、少しでもスケジュールが狂ったらこうなることは分かってたんですが。

まずは、新刊ゼロという状況はなんとしても避けたいので、漫画(18禁)のほうを確実に完成させます。
漫画については当ブログの趣旨と関係ないので詳細は案内しません。ピクシブを参照してください。詳細な進捗については、マストドンに逐次書き込んでいます。

技術本については、分量的には7~8割方まで進んでいるのですが、一部高度な内容や、私の個人的な意見の陳述も含まれますので、内容の正確性についての検証に時間がかかります。
来年夏には技術本を出せるようがんばります。

5000兆年ぶりにReactive Extensions再入門

あすかです。

2週間前にこういう記事を書いていたブログがあったらしいのですが、

kmycode.hatenablog.jp

ちょっと調べてみたら、
これと同じというか、もっと便利なことまでできる方法があったんです。

www.nuget.org

ReactivePropertyというライブラリに入っている
ReactiveCommandというものを使えばいけるみたいです。

・・・ところで、Reactive Extensionsってなんでしたっけ?
あすか、1年前にちょこちょこ触ったきりで使ってないんですよねRx。

というわけでいろいろ調べて、Rx再入門してみました。
話的には遠回りになっちゃいますが、まずそこからいきます。

続きを読む

RelayCommandで使えそうなアレを作ってみた

あすかです。

冬に出す同人本、180ページまで進みました。
技術本の他にも漫画(18禁)を一緒に出す予定もあって、いろいろ忙しいけど頑張ってます。
とりあえず、本の中から使えそうな部分をちょいちょいしてきます。

まずは冒頭のオブジェクト指向の話!・・・はいきなりだとちょっと重いので、
RelayCommandでなんか作ってみた話をします。

RelayCommandのCanExecute、使ったほうがいいとはわかってるけど設定するのがめんどくて結局使ってないんですよね。
なので、モデルのイベントをCanExecuteChangedに繋げる処理を抽象化するメソッド書いてみました。

続きを読む

8月30日JUXG初心者LTの資料

あすかです。

8月30日のJUXGで発表さしていただきました。
ご清聴くださり、ありがとうございました。
発表にご協力くださった田淵さん、会社の先輩にお礼申し上げます。

発表に使用したpptxはこちらからダウンロードできます。(直リンク)
github.com

SlideShareにも載せてます。お手軽に見たいならこちらからどうぞ。
www.slideshare.net

続きを読む

CLIP STUDIO PAINTのプラグインをC#で書きたい!(2)

あすかです。

前回投稿から1ヶ月がたってしまいました。。
この1ヶ月、夏コミにサークル参加するので、その準備(コピー本とかコピー本とかコピー本とか)をしてたりしました。
やっと一段落つきましたが、今度は冬コミ‥もとい来年2月のコミティアに向けて、技術本を書くことにしました。
技術本については、冬コミコミティアのどちらかに当選次第、またこのブログで案内しますね。
というわけで、このブログの更新がしばらく雑になります。

さて、前回どういう話でしたっけ‥ああ、CLIP STUDIO PAINTプラグインで使う関数をC#から呼び出す話でしたね。

kmycode.hatenablog.jp

マネージドコードからアンマネージドコードの関数を呼び出す時はDLLImportの利用が一般的ですが、
今回、SDK内の関数の定義を見るに、今回生成するC++のDLL内で関数が定義されているわけではないので、DllImportは使えません。

じゃあどうすればいいのでしょうか。C++で、SDKの関数を呼び出すラッパ関数を作っておいて、その関数のポインタを.NETに渡すことにします!
ただ、C++の関数のポインタをそのままマネージドコードに取り込むことはできないので、.NETのデリゲートというものを使います。

続きを読む