nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

de:code大喜利でInfragisticsさんとCData Software Japanさんから頂いた肉セットを開封してみた

de:code 2018のエキスポ会場をフラフラしていたら、Infragisticsさんのブースで捕まって、なんだか無理やり強制的に大喜利に参加させられました。

なんでも、上位入賞者には5000円~1万円分のお肉セットがもらえるとか?

まぁどうせ当たらないしと思ってたら。。。

当たっちゃいました!w

配送手続きしてたら

f:id:nuitsjp:20180526234835p:plain

と言われましたので、肉レポを上げたいと思います。

お肉は↓こんな箱に入ってやってきました。

f:id:nuitsjp:20180526235114j:plain

ナルトベースさんてとこの商品だそうです。

箱を開けてみると…

f:id:nuitsjp:20180526235222j:plain

こんな感じで肉が入ってました。

入っていたのは三つ。

f:id:nuitsjp:20180526235305j:plain

至高の吊るし焼き豚(バラ)

f:id:nuitsjp:20180526235352j:plain

至高の吊るし焼き豚(モモ)

f:id:nuitsjp:20180526235433j:plain

至高のローストポーク(ロース)

阿波の金時豚だそうな(よく知りませんが)。こんな感じに調理するそうです(まだ食べてません)。

f:id:nuitsjp:20180526235926j:plain

うまそうだ。

InfragisticsさんCData Software Japanさんありがとうございました!

de:code 2018のシアターセッションで登壇してきました

登壇といってもシアターセッションという15分枠でしたが。

https://www.microsoft.com/ja-jp/events/decode/2018/

JXUGのイベントで以前お話しした内容を、de:codeでも話してほしいとMVP伝手でお話をいただいたのがきっかけでした。

jxug.connpass.com

セッション内容はこちらのエントリーにまとめてありますので、良かったらご覧ください。

www.nuits.jp

15分枠とはいえ、デベロッパー向けのカンファレンスとしては、自分自身で最大規模のイベントでお話しさせていただく機会となり、率直に言って、機会をいただけたことは非常にうれしかったです。

ただ緊張してたこともあり、一番大切なことを言い忘れました。

「Event TrackingはAOPを利用すれば、非常に簡単・綺麗・高効率・高品質に実装できますが、Xamarinでは現時点では難しいです。
しかし、誰かが仕組みを作ればみんなが幸せになれるので、近いうちに作成にトライしたいと思います。その際は、Twitterで告知もさせていただきますので、ご協力いただけると幸いです。」

まぁ、私はXamarinは完全に趣味にしかできていないし、アプリ完成させたことないし、私はあまり幸せにならないんですけどね!

もとい、私生活が立て込んでいて(天使のような娘が生まれたので!)なかなか時間が取れず、寝不足を推して資料修正や発表練習をしましたが、非常にいい経験ができたと思います。

お声がけいただきましたMicrosoftさん、そしてそもそもこの機会のきっかけとなったJXUGの皆様には感謝の念が絶えません。

ありがとうございました!

Xamarin.Forms.BehaviorsPack 2.0.0 リリース:究極に簡単に全てのイベントへコマンドをバインドできるようになりました

個人的にはタイトルは煽りでもなんでもなく、本気のつもりです。

例えば、PageのAppearingイベント発生時にCommandを実行したい場合、次のように記述すればOKです。

<ContentPage ...
             bp:Pages.Appearing="{Binding AppearingCommand}"

Xamarin.Formsのすべての要素の、すべてのイベントに対応しています。

これまでであれば、EventToCommandBehaviorを利用して以下のように記述する必要がありました。

<ContentPage ...>
    <ContentPage.Behaviors>
        <bp:EventToCommandBehavior 
            EventName="Appearing" 
            Command="{Binding AppearingCommand}"/>
    </ContentPage.Behaviors>

コンパクトに記述できるようになったかと思います。

詳細は以下に記述します。

続きを読む

CodeZineさんで「実践WPF業務アプリケーションのアーキテクチャ」という記事を書かせていただきました。

CodeZineさんで「実践WPF業務アプリケーションのアーキテクチャ」という記事を書かせていただきました。

  • 実践WPF業務アプリケーションのアーキテクチャ ~ マイクロソフト公式サンプルデータベースAdventureWorksを題材に

マイクロソフトさんの公式サンプルデータベースであるAdventureWorksを題材にして、仮定の業務の元、エンタープライズな業務システム全体のアーキテクチャを検討し、記述したものになります。決定結果だけではなく、なぜその決断をしたのか?という点まで記載しています。

アプリケーションの実現方法は、たった一つの正解はありませんし、仮定の業務自体曖昧な点が多く、私はベストプラクティスだと思って書きましたが、読む方にとってはそう感じないこともあるかもしれません。正直、マサカリが本当に恐ろしい記事でもあります。

しかし、個別技術であったり、汎用的なアプリケーション アーキテクチャ パターンではなく、「じゃぁ実際にそれらを組み合わせて、どうシステムを作るの?分からないよ!」という思いが昔から私自身にもありましたし、そういう情報はなかなか公開されていないため、勇気を持って記述してみました。

アーキテクチャ構築に悩む人への一助になれば幸いです。

さて今回の件ですが、実はGrapeCity社の方からコンポーネント紹介記事を書いてもらえませんか?というリクエストを頂いたのが発端でした。その際に

「コンポーネントの紹介は最小限で構いませんので、実践的なアプリケーションを構築するアーキテクチャを中心に、WPFの普及も視野に入れた記事を書いてもらえないか?」

とご要望をいただきました。お声がけいただいて即、面白そうだと思いました。これまで自分が仕事の中で貯めて来たノウハウを形としてアウトプットするいい機会でもあると思いました。

その結果暴走して、当初は3〜4ページでというリクエストだったのですが、11ページに膨張しまくり、なのにGrapeCityさんのコンポーネントに触れているのは3ページほどしか無いという…

この記事を承認いただき、公開できたのはひとえにGrapeCityさんの懐深い対応のおかげと考えています。本当にいい機会をいただき、ありがとうございました。

また非常に素晴らしい紹介記事も書いていただき、恐悦至極とはこのことかと実感中です。

devlog.grapecity.co.jp

内容に関しては、各人色々なご意見があるかとは思います。しかし、誰かが何かを書かないと何も始まらないという思いもあり、勇気を振り絞って書きました。異論・質問色々あるでしょうけど、気軽にコンタクト取っていただけたら、真摯に対応させていただこうと思います。

というわけで、ご一読いただけたら幸いです。

Microsoft Edgeで右クリからGoogle検索する方法

方法は簡単で、Edgeのデフォルトの検索プロバイダをGoogleに変更するだけでいつの間にかできるようになっていました。

と思ったのもつかの間、この機能は2018年7月29日現在、無くなっているようです。

現在は、こちらの記事にあるような、野良拡張を入れるしか無いようです。
腹立ったので、公式のStoreに拡張をリリースするように現在申請しています。通ったらまた改定します。

forest.watch.impress.co.jp

続きを読む

SimpleInjectorでCastle.Core DynamicProxyを適用する拡張ライブラリを公開しました

表題の通りですが、SimpleInjectorでCastle.Core DynamicProxyを適用する拡張ライブラリをNuGetに公開しました。

www.nuget.org

こんな感じでつかいます。

var container = new Container();

container.InterceptWith<IncrementInterceptor>(x => x == typeof(Target));

container.Register<Target>();
container.Register<IncrementInterceptor>();
container.Verify();

var target = container.GetInstance<Target>();
Console.WriteLine(target .Increment(1));

InterceptWithのところで、IInterceptorを適用する条件と、適用するIInterceptorの実装を指定しています。上の例ではTargetクラスのみにIncrementInterceptorを適用しています。

実際にはトランザクション管理や認証などの処理を、ASP.NET Web APIのControllerなどに一括して適用などの利用方法が便利です。

つづきにもう少し詳しい情報を記載しておきます。

続きを読む