コンウェイとピーターの狭間で

ずっと放置しつつQiitaに移ったりしていましたが、スマートホームについて書いていこうかと

C丼

C#の名前はC++にさらに++を付けて、C#になったのは有名な話です。 じゃあ、次はそれに何かつけるとなると・・・丼じゃね? ってどこでも話しているネタだと思います。

それをMicrosoft公式が始めました。

C# による Project C-DON 「C丼はじめました」 - Microsoft Visual Studio

しかも丼ストラップまで作っちゃってます。

ストラップの応募にはSNSで紹介しないといけないそうで、 この丼は微妙に流行らない雰囲気を感じますが、ミーハー気分を出して紹介します。

Unity と C# でゲーム開発 - Powered by C# - Microsoft Visual Studio

C丼はC#の販促キーワードのようでC#を、ゲーム開発、スマートフォンアプリ開発、組み込み開発、で開発しましょうというアピールのようです。 どれも微妙なのですが、しいて言うなら過去に取り組んでいたゲーム開発ですね。

もうやっていないので、過去の記憶になりますが、 Unityが流行る前で、Irrlicht(C++ゲームエンジン)をC#から使っていました。

Irrlicht Engine - A free open source 3D engine

C#は開発速度を早くできて良いのですが、C++と比べるとどうしてもパフォーマンスが気になるんですよね。 それと直にDirectXをいじろうとすると途端にハードルが上がります。 (Managed DirectXはどこへ?)

その辺、Unityはどうなっているんでしょうか。

また、Irrlicht自体は単なるC++クラスライブラリーなんでC#から呼べません。 SWIGを使ってC#C++ラッパーを作ったりしていましたが、 Unityも内部はC++C#ラッパーが公式サポートされているってとこですかね? (気になったらあとで調べます)

構造化ログ

先日、Thought Works Radar 2015年1月版が発表されました。

Technology Radar Digital Preview | ThoughtWorks

(Thought Works Radarについて知らない方はこちらを参照: ThoughtWorks Technology Radar 2014年7月版 )

久しぶりに読んだ気がしますが、やはりほとんど知らない言葉ばかり。 まあ、世界的な企業が「気になっている」レベルを勉強してもいつ使えるかわからないので、 ADOPT(導入を推奨) を中心に見るのですが、Techniquesに見られない言葉が

Structured logging

構造化ログ?

そのものずばりを説明した記事はなかったのですが、 ログを出力するときはプレーンテキストで出すんじゃなくて 構造化して後で解析しやすいようにしようってことのようですね。

確かに、少し前に会社で作ったアプリもログはプレーンテキストで、 解析するためにテキストをパースしてDBに突っ込んだりしていますから、それなら初めからやっておけと。

理に適ってますね。

業務システムなんかの巨大システムではfluentというのが流行っているようですが、 Linuxが中心っぽいのとそこまで巨大なシステムを扱っているわけではないので、 Windowsで.NETな私は、Serilog( Serilog — simple .NET logging with fully-structured events )あたりから調べてみようかなと思いました。

ちなみに.NETのログライブラリの変遷はこの記事が参考になりました。

No Kill Switch • Structured logging for .NET? There are some...

セマンティックバージョニングをファイル名につける場合の問題

セマンティックバージョニングのビルドメタデータ

前回の記事でセマンティックバージョニングに注目していると書きました。

セマンティックバージョニングとは・・・

メジャー.マイナー.パッチ[-プレリリース][+ビルドメタデータ]

という形で表すバージョン番号で、バージョン比較に影響しないビルドメタデータというのが 良いなと思っていました。

たとえば、

  • リビジョンNo
  • JenkinsのビルドNo
  • ビルドしたPC
  • ビルドしたユーザ

といった情報をメタデータに埋め込めれば、同じバージョン番号でも実は違うものということが表現できそうです。 (後半2つに関しては違っていては本来困りますが)

セマンティックバージョニングをファイル名につける場合の問題

Jenkins等のCIサーバを使って自動ビルドをしていると日々インストーラが出来上がるので それらを区別するためにファイル名にバージョン番号を付けたいですよね?

そのバージョン番号は前3つの数字の意味が決まっているので、ビルドNoやリビジョンNoはビルドメタデータになります。 ビルドメタデータは先頭に"+"を付けるわけですが、この"+"が曲者になります。

"+"のついたファイルを、IIS上にアップロードしてアクセスしてみると・・・

f:id:banban525:20150105224351j:plain

HTTP エラー 404.11が返ってきてアクセスできません。 どうも、"+"を含むURIIISのデフォルト設定ではセキュリティ上禁止されているようです。 "+"のパーセントエンコードである%2Bにしても同様でした。

もちろん、設定をOFFにすることはできるのですが、理由があってこの設定になっているはずで、安易にOFFにするのは良くないでしょう。

ということで、セマンティックバージョニングとURIというのはいまいち相性がよくないようです。

ダブルエスケープシーケンスって?

ダブルエスケープシーケンス、調べてみてもOFFにする方法はすぐヒットしますが、 何が問題で禁止されているか、いまいち要領を得ません。

少し調べてみて、ここのサイトによるとASP.NET MVCではURIの一部が変数としてコントローラに渡されるので、 SQLインジェクションにつながるから危険よと書いてそうです。そういうことなんでしょうかね。 ただ、なぜ"+"がダメなのかまではわかりませんでしたが。

asp.net - double escape sequence inside a url : The request filtering module is configured to deny a request that contains a double escape sequence - Stack Overflow

セマンティックバージョニングと.NETクラス

セマンティックバージョニングって知っていますか?

私も、Chocolateyのパッケージのつくり方を調べていて出てきて知ったのですが、 バージョン番号の付け方をある程度標準化しようという取り決めのようです。

詳しくはこちら

Semantic Versioning 2.0.0

Semantic Versioning 2.0.0 (日本語訳)

バージョン番号ってどのタイミングでどう上げるか、ベータ版の表現方法など いろいろなやり方がありますが、これからはこれに従っていこうと思います。

ただ、Windowsのファイルバージョンや.NETアセンブリのバージョンは1.0.0.0といった4桁表記なんですよね。

セマンティックバージョニングが3桁という違いがあってもこれである程度表現できますが、 ベータ版表記やメタデータ表記ができません。 また、.NETのVersion型のようにセマンティックバージョニングのルールで比較することもできません。

ということで、作っちゃおうと思ったのですが、少しググってみたら見つかりました。

Semantic Versioning in .NET - The Imaginary Road

こちらはテストコードを見る限り、少し古いようです。 ビルドメタデータを比較に使っているようで、セマンティックバージョニングv2.0.0-rc.2で 消えた仕様ですね。

もう1つ

ImaginaryRealities/CommonLibrary · GitHub

こちらはNugetで公開されているもので、同じ作者のようです。 こちらのほうが対応している仕様のバージョン新しく、ビルドメタデータの比較はなくなっています。

ライセンスはどちらもMITのようですね。 緩いライセンスですがライセンス表記が嫌なら、 仕様も明確で大した量もないので作っちゃっても良いような気がしますが。

ITアドベントカレンダー

知らなかったのですが、12月はIT技術向けのアドベントカレンダーというのをやっているのですね。

今から参加!というほどネタもないので読みあさり中です。

でも、ジャンル毎にまとまってるので毎日楽しみに開けるアドベントカレンダーというより
冬休みのまとめ読み向けコンテンツですね(クリスマスプレゼント?)。

ということで後で読むために気になったアドベントカレンダーを備忘録的に貼っておきます。


一覧
http://gihyo.jp/news/info/2014/12/0101

C#
http://qiita.com/advent-calendar/2014/csharp

F#
http://connpass.com/event/9758/

TeX&LaTeX
http://www.adventar.org/calendars/553

オブジェクト指向
http://qiita.com/advent-calendar/2014/oop

Friendly
http://qiita.com/advent-calendar/2014/friendl

Powershell
https://atnd.org/events/59220

Visual Studio
http://qiita.com/advent-calendar/2014/vs

おうちハック
http://qiita.com/advent-calendar/2014/ouch-hack

家庭を支える技術
http://www.adventar.org/calendars/595

例外
http://qiita.com/advent-calendar/2014/exception

いろふ
http://www.adventar.org/calendars/331

メディアマーカーで蔵書管理

蔵書管理、めんどうですよね?

うちも漫画やら技術書が本棚にあふれています。 漫画に関しては嫁も買っているのでえらいことに。

そんな状況ですと、シリーズ物はどこまで買ったのか?この技術書は持っているのか?というのがわからなくなります。

それでついつい2重買いしちゃったり。

ということで、本気で蔵書管理をしようと、 メディアマーカー にアカウントを作ってみました。 蔵書管理Webサービスといえば、ブクログが有名のようですが、 このメディアマーカーさんは、ISBNで一括登録ができるようです。 (ブクログでもできるのかもしれませんが、見つけられなかった)

登録作業ってどうしてもめんどうですよね?

そんなあなたに強い味方!バーコードリーダーです。

最近は、バーコードリーダーも安くなったもので、3,000円で買えちゃいます。 しかもレーザー式ですよ!レーザー式!

これを使って、あまり活用できていないWinタブレットにつないで、ボチボチ取り込んでいく予定です。

Visual Studio Community 2013とMSDNサブスクリプション

先日!Visual Studio Community 2013が発表されましたが、 今私はVisual Studio Professional with MSDNを買っているんです。 Communityは個人使用のみとはいえProfessional相当が無料と言うことで Visual Studio目的でMSDNを買う意味がなくなりました。

では、各種WindowsOSとサーバー製品、インシデントのためにMSDNを継続する必要があるかどうか・・・。 うーん、MSDN OS 更新ライセンスが妥当なとこかも。