新しもの好きプログラマの耳より情報ブログスマートフォン用の表示で見る新しもの好きプログラマの耳より情報ブログ仕事でもあるプログラミングについて役に立ちそうな情報を発信していこうというブログです。役に立たなそうな情報はfacebookで。以前の記事で書いたとおり、Yaml.NETのデシリアライズは対応するメンバが無い場合に例外を出す処理になっている。(YAMLファイルにある値が、デシリアライズ先のクラスのメンバに無い場合)この処理は、データを増減させると前方・後方互換が無くなるので、データの増減がありうるバージョンアップをする場合には相性が悪いという問題があった。この処理を「対応するメンバが無い場合は、無視して処理続行する」という処理に変更する方法を見つけた。試したところ期待通りに動くので、データ増減があっても互換が切れないようにするという目的は達成できそうだ。方法は簡単で、次のようにデシリアライザの作成時にIgnoreUnmatchedProperties()を指定するだけ。DeserializerBuilder().IgnoreUnmatchedProperties().Build();この動作を試したコミットこのIgnoreUnmatchedPropertiesは、ドキュメントには記載されていない。typeそれと次のプルリクもあったことから、https://github.com/aaubry/YamlDotNet/pull/88上記の使い方で合っているようだ。これで、バージョンアップによるデータ増減がありうる場合でも、安心してYaml.NETを使えるようになった。21:29Yaml.NETのデシリアライズで、対応するメンバが無い場合に例外を出さず処理する方法Tweet広告を非表示にするもっと読むコメントを書く2019-11-19急にVisualStudioのインテリセンスが異常な動きをした場合、Resharperのキャッシュが原因かもしれない結論から言うと、Resharperで対象ソリューションのキャッシュを削除する事で解決した。https://pleiades.io/help/resharper/Configuring_Caches_Location.htmlVisualStudioを使っていたら、急にインテリセンスの候補が表示されなくなった。Symbol」といったエラーがあちこちで出ている。VSを立ち上げ直しても、.vsフォルダを削除してみても解決しない。Resharperを導入していたので、それが原因かもしれないという点に気づいた。試しにResharperをSuspendしてみたところ解決し、Resumeすると再発した。https://resharper-support.jetbrains.com/hc/en-us/articles/206546999-How-can-I-temporary-disable-turn-off-ReSharper-ならおそらくResharperのキャッシュのようなものが原因だろうと思って調べてみたら、やはり独自に持っているようだ。この「キャッシュのクリーンアップ」の手順を実行する事で、問題が解決した。https://pleiades.io/help/resharper/Configuring_Caches_Location.htmlインテリセンスの問題という事でVisualStudioを最初に疑ってしまったが、Resharperを使っている人はそちらのキャッシュも疑った方が良い。社内で併用してみて考えたことビジネスチャットツールの中で比較的メジャーな2つ、SlackとTeamsを社内で使っている。この2つは似ているようでいて、使ってみるとかなり違いがある。社内でも使い分けに悩むという声が上がっているので、違いをまとめてみようと思う。まとめTeamsはタスクフォースを作るツール。事前に決めたメンバーの中で、会話もファイルもすべてを共有する。Slackは個人単位の即席コラボレーションを作るツール。話題ごとにメンバーが変わり、別部署の人が会話に参加したりもする。同じ「ビジネスチャットツール」だが、導入することで促進されるコミュニケーションの形が違う。どちらも無料プランがあるし、棲み分けができるので、プロジェクトの性質によって使い分けるのがよさそう。営業と開発それぞれの中で議論し、後で結論だけ部署間の議論へエスカレーションするのがTeams。営業の会話に、急に開発が「それならこういう提案ができる」などと割り込んでくるのがSlack。自分が関わっている開発では、次の要求からSlackを主体に使っている。開発ラインごとに縦割りではなく、ラインを超えた情報共有やアドバイスが出るようなチームにしたいそれほど大きくないチームなので、リーダーなど全体を見る立場の人は、全部の会話を流し読みしておきたい(メンションされたときだけ読むのではなく)逆に、チームごとにきちんと情報統制をしたかったり、上下関係がしっかりしていてエスカレーションという形で相談を受け取りたいなら、Teamsの方が向いている。それぞれの特徴それぞれの特徴を、思いつくままいくつかの比較ポイントでまとめてみる。Teamsは、「他のチーム」に話しかけるハードルが高い。自分が所属するチームの中での会話になる。Slackは、「話題を作って、話しかけたいメンバーを呼ぶ」という使い方になるので、チームに話しかけるという考え方が薄い。Teamsは、全員と会話できるチャンネルが無い。Slackは、全員所属するチャンネルがまず最初に作られる。Teamsは、自分の関わる会話だけを読むという使い方になりやすい。チャンネル内にさらに「会話」があり、会話単位で通知有無が決まっているので。Slackは、すべての会話に目を通す使い方になりやすい。チャンネル単位で通知が来るし、「次の未読の会話へジャンプ」というショートカットキーがある。Teamsは検索機能が大雑把で、チャンネル内検索もない。どちらかというと、検索ではなく会話全体を保存して読み直す使い方になる。Slackは検索機能が強く、チャンネル内や発言者などでの絞り込みもできるので、雑多な会話からキーワードを拾って読み直す使い方になる。Teamsは会話上でできる操作が少なく、Office365の他のアプリを追加してそれを共有する形になる。TODOを管理するなら、Plannerなどをタブで追加してチーム内で共有する。Slackは会話上でできる操作が多く、会話に対して操作したりコマンドを打つ形になる。TODOを管理するなら、会話自体をそのままピン止めしたりリマインドしたりできる。bot系が目立ち、チームで共有するより個人で操作するシーンが多い。このような特徴から、Teamsは事前に決めたチーム内での強い情報共有(情報統制でもある)を狙った作りで、Slackは全てを共有した上で話題ごとに即席のチームがあちこちで生じる使い方を狙ったツールだと考えられる。※どの指摘もそうだが、TeamsをSlackっぽく運用することもできるし、その逆もできる。これは、どの運用をやりやすいようにデザインされたツールなのか、という話。社内で併用してみて考えたことTweet広告を非表示にするもっと読むコメントを書く2019-09-23XML,JSON,YAMLの主要シリアライザで、クラスメンバが増減してもデシリアライズできるか調べてみた結論OSSを導入できる環境ならJSON.NETで問題なく実現できる。Frameworkだけで使用可能なXmlSerializerも、扱いが少し面倒だが同等に実現できる。YamlDotNetは、増加は問題ないが減少で問題が出る。調べた内容クラスの中身を文字列化してファイル保存する処理(いわゆるシリアライズ)について、主要ないくつかのライブラリで「クラスのメンバが増減しても、デシリアライズできるかどうか」を調べてみた。確認したのは実際の動作であり、ドキュメントの記載ではない。そのため、残念ながら今後のバージョンアップなどで動作が変わる可能性はある。調べたのかシリアライズは、設定ファイルなどを作成する上でかなり便利に使える。設定項目ごとに処理を書く必要が無いため、項目が多数になることの多い設定ファイルに向いていると思う。設定ファイルはバージョンアップ時に設定項目が増減することが多い。そのため、クラスのメンバが増減した場合でもそのファイルを読み込み(デシリアライズ)できるかどうかが、採用する上では重要なポイントになる。その点は、ドキュメントにはなかなか明記されていない。想定された使い方と違っているので、仕様として保証されていないのは仕方ない。仕方ないので、バージョンを決めてその実際の動作を調べてみた。変数の追加:デシリアライズ成功。追加された変数は、new時のデフォルト値となった変数の削除:デシリアライズ成功。削除された変数は、無視された。変数の追加:デシリアライズ成功。追加された変数は、new時のデフォルト値となった変数の削除:デシリアライズ失敗。同名の変数が必ず存在している必要があるため、不要になった変数であっても、過去バージョンとの互換のために残しておく必要がある。プレフィックスobsolete_を付けた変数名を用意し、YamlMemberのAliasで過去バージョンの名前を指定することで、不要な変数を分かりやすく分類することはできた。リストの読み込み:読み込み対象のリストにデフォルト値がある場合、上書きされる(デフォルト値は消える)。