あれとアレは混ぜるな危険

日々精進をしているふり

2015年12月31日、私は会社を辞めました。

こんにちは、はるたまです。
2015年12月25日は現職での最終出勤日でした。
最終出勤日だからといって所属が外れるかというとそんなことはないというところが社会の難しさではありますが、2015年12月31日をもちまして、現職である株式会社富士通システムズ・イーストから退職いたします。

社内の皆様、こんな問題児を雇ってくれてありがとうございます。
特に入社1年目当時の部長*1には大変な狼藉を働きました。
「俺は一生技術だけで生きていくんや!」系の皆様が「今思うとあの時は若かったわ~」とか言いそうなものとは全く別方面での狼藉を働いていましたが本当にすいません。
謝ったところで完全に手遅れですが、おかげでまともな社会人に矯正してもらったことは大変に感謝しています。それなりの大企業*2に入りましたので、社会人的な最低限のマナーと知識を植え付けていただいた事には感謝しています。

12年と9ヶ月の間に働き続けた会社を辞める理由を一言では言えませんが、でも、なんとなく、辞めないといけないと思ったから辞めました。
他の人から言わせると「それは"飽きた"という状態だ」とも言われましたが、まあ、そんなものなのでしょう。
違う言い方をすると、人生で一回くらいは会社を辞めないといけないんじゃないかと思ってました。小学校から思えば6年 → 3年(中学校) → 3年(高校) → 4年(大学) → 2年(修士課程) ときた先にいきなり12年9ヶ月も同じ所にいるのって健全じゃないんだろうなって思っていましたので。
その一方で、会社を辞めるというのもなかなか大変なことで、スナック感覚で会社を辞めるという訳にはいかないということがよく分かりました。
特に会社が拠出していた401Kを個人拠出に移管するときはものすごい勢いで書類書きまくってハンコを押しまくってましたし、極めつけは雇用保険の名義が間違って登録されていたという事実が12年と9ヶ月の時を経て発覚。人生で1回は会社をやめないと発覚しない事実というのもあるんだなって思いました。

次の会社は決まってますので、1月5日からまたがんばって働きます。
面白いもので、会社を辞める段になっていろんな人に挨拶をしにいくと、結構な確率で「会社を辞める人=死ぬ人」的な扱いを受けました。会社を辞めた程度で死ぬわけじゃないので余裕で大丈夫です。

とりあえず死ぬまで生きていようと思いますので、今後とも宜しくお願い致します。

*1:その当時に昇格したての1年目部長で現職は子会社社長

*2:入社当時は社員数2000人だったのに今や5000人以上の会社になっていた

Dell の NEW XPS 13 に Windows10 をクリーンインストールしたいけどディスクが見えない時は

こんにちは、はるたまです。急に寒くなりましたね。

先日 Dell の NEW XPS 13 を買ったわけですが、最近の Dell といえばあんなことこんなことがありまして、ハード自体に文句はありませんがメーカー出荷されている Windows ではなく、自分で OS をクリーンインストールしてから使いたい気持ちになります。

そこで NEW XPS 13 で Windows 10 の USB メモリーを刺してクリーンインストールを開始するのですが、インストール対象の場所を選択する画面でディスクが見えなくて

ドライブが見つかりませんでした。記憶域ドライバーを読み込むには、[ドライバーの読み込み]をクリックしてください。

と言われてしまいます。

おそらくストレージが NVMe (256GB のストレージ)で構成されている NEW XPS 13 だとドライブが見えなくなってしまう状態になってしまう気がします。結局のところ NVMe のストレージを認識するためのドライバーが足りないので、インストーラーからドライブが見えなくなっている状態です。

ということで、以下の URL からドライバーをダウンロードしてきます。
downloadcenter.intel.com
ここからダウンロードするファイルは、インストールする OS が32ビットであれば「f6flpy-x86.zip」、64ビットであれば「f6flpy-x64.zip」を選択します。

ダウンロードが完了したらドライバーの ZIP を解凍したものを USB メモリーなり SD カードに入れ、Windowsクリーンインストールするマシンに挿しておきましょう。Windows のインストールを開始させてインストール対象の場所を選択する画面になったら「ドライバーの読み込み」をクリックして、ドライバーを指定すればドライブとして見えてくるはずです。はずです。

Dell の NEW XPS 13 もお買い上げしたけど、注意点もありますよね。

はるたまです。今年の仕事は収まりました?

先日は液晶ディスプレイを買っていましたが、今日は今日とて新しいPCを調達しました。 Dell の NEW XPS 13 です。
デル株式会社

本体の大きさは11インチPCだけど液晶は13インチ、その割に重さは1.18kgでとっても軽い。薄くて軽いと見せかけて、ボディが削り出しアルミと炭素繊維でできているので撓んだり捻れたりで変形する感じは全く無いです。ボディ剛性が高いおかげで、キーボードを叩いている時でも安定感があります。
公称では「標準バッテリの持続時間は最大18時間」とか言って、省電力バッチリな第6世代 Core プロセッサを乗せてはいるもののさすがに嘘くさい感じがします。
実際のところ電源プランをバランスモードに設定しつつ液晶の明るさを40%に設定し、普通にバッテリーでテキストを書いている状態で Windows さんはこう答えます。

バッテリーに関しては様々な要素が関わってくるので一律に何時間使えますとはいえませんが、100%充電している状態だったら液晶の明るさを我慢しなくても一日中充電無しで運用できそうです。
そんな Dell XPS 13 ですが、調達の際には注意が必要です。

外部ディスプレイに接続するところがない

XPS 13 ですが薄くてか軽いのと引き換えに、HDMI や DisplayPort などの外部ディスプレイと接続する端子が用意されていません。その代わりと言ってはなんですが USB-C の端子はついていますので、HDMI や DisplayPort、もちろん VGA にも変換できるアダプタを別途調達すれば外部ディスプレイと接続できます。

プレゼンなどで外部ディスプレイへ繋がらないと話にならないという方は調達必須です。

絶対に 256GB PCIe モデルを選択する

今のところストレージとして 128GB SSD と 256GB SSD の2種類が選択できます。容量だけが違えばいいのですが、 Dell の NEW XPS 13 のサイトをよーく見ると、「128GB ソリッド ステート ドライブ」と「256GB PCIe ソリッド ステート ドライブ」という表記になっています。つまり、128GB の場合はおそらく SATA で、256GB の場合は NVMe のストレージになります。今回調達したモデルは 256GB モデルなので、デバイスマネージャーからもちゃんと NVMe ストレージとして見えています。

なぜ NVMe の SSD ストレージであることがそんなに重要かというと、パフォーマンスが全然違うからです。ちなみに 256GB NVMe SSD のパフォーマンスはこんな感じでした。

すっごく速いのでお金を出す価値はあります。ここにお金を出せないのであれば他の機種を買えばいいと思います。

13インチの 3200 × 1800 タッチディスプレイを選択するか?

XPS 13 のディスプレイとして「13.3 インチ FHD AG (1920 x 1080) InfinityEdge ディスプレイ」と「13.3 インチ QHD+ (3200 x 1800) InfinityEdge タッチ ディスプレイ」から選択することになります。
個人的な意見ですが、去年の自分だったら「高解像度のタッチディスプレイかっこいい!」と思えたのですが、1920 × 1080 のタッチ無しディスプレイの方がいいと思っています。
タッチ付きディスプレイを選択しない理由としては

  • タッチ対応ノートPCを使ってたけど、そういえば思ったよりタッチしなかった。*1
  • タッチディスプレイは重くなるし(90グラムくらい)、バッテリーにも優しくない。
  • 3200 × 1800 の解像度を13インチディスプレイで100%表示したら、おじさんの俺には見えない。

ということで、軽さとバッテリーを重視したい向きにはタッチ無しの方がふさわしいと思います。
決しておじさんになってしまった自分を呪っているわけではない。

*1:Universal Windows Application の開発などをしている人はタッチ環境が必要だと思います

LGのウルトラワイドディスプレイ 29UM57-P がいらっしゃった

こんにちは、はるたまです。そろそろ今年の仕事もおしまいですね。

そんな時期にこんなものを調達しました。

LG Electronics Japan 29型Ultra Wide AH-IPS非光沢 2560×1080 ブラック 29UM57-P

LG Electronics Japan 29型Ultra Wide AH-IPS非光沢 2560×1080 ブラック 29UM57-P

LGのウルトラワイドなディスプレイ 29UM57-P です。
机に置いてみるとこんな感じです。

何せ有効表示領域の横幅が63cmあるので、手前にあるA4サイズの11インチノートPCと比べてもデカいですね。解像度は 2560x1080 なので、HD の解像度(1920x1080)に対して横の解像度が 25% 増しになります。
そんなディスプレイの何が良いかというと、横幅があったら嬉しいアプリケーションを動かす場合です。例えば、VisualStudio をこのディスプレイで動かしてみるとこんな感じ。

VisualStudio は横幅を意外と取るので、左右にいろんなツールを表示している状態でも快適にコードを眺めることができます。
コードを書くときにディスプレイが高さ方向に大きいと、視線があっちこっちに行ってしまって個人的にはあんまり好ましくないのですが、このディスプレイだと 284mm なので A4 の紙の長辺と大体おなじ大きさに収まってます。
かつ、視野いっぱいのコードなので迫力満点。まあゲームなら分かる話ですが、コード書いていても没頭感が半端ないです。
元々はゲーマー向けに押しているディスプレイですが、IDE使ってコード書いたり、ウインドウをいっぱい開いて作業をするような人には結構おすすめな感じです。最近の液晶ディスプレイからすると安くはないですが、普通のディスプレイを2枚買うとするとそんなにお高いものでもないので。

Swashbuckle で Swagger を使うときの逆引き的なもの

どうもどうも、はるたまです。シルバーウィークですね。

最近、巷では Web API のドキュメントを Swagger で書くのが流行ってますね。Azure 界隈でも Web Apps は Swagger 活用している感じで、Logic Apps では必須になっていたりもします。
.NET のアプリケーションで Swagger といえば Swashbuckle なわけですが、ドキュメントを書こうとしたときにちょっと困っちゃうときがあると思いますので、率先して地雷を踏んできた結果をここに書き残しておきます。

前提条件

今回は、Azure Logic Apps のテンプレートでプロジェクトを作成しています。

作成されたプロジェクトには Swashbuckle があらかじめ NuGet でインストールされているので、最新の状態にアップデートしておきます。

今回は 5.2.1 がインストールされた状態になりますので、ここからスタートです。

FromUrl が指定された引数を必須にしたくない

URL パラメーターで受ける引数を作るために FromUri 属性をつけた引数をを持つ API を作成してみます。

        public IEnumerable<string> Get([FromUri] string someValue)
        {
            return new string[] { "value1", "value2" };
        }

これを Swagger で見ると

作成した値は「必須」になってしまいます。こうなると Swagger UI からこの API をテストするときに値を必ず設定しないと、エラーになってリクエストを投げてくれません。
URL パラメーターで受ける値は多くの場合に必須ではない値になると思いますが、こんな時は

        public IEnumerable<string> Get([FromUri] string someValue = "")
        {
            return new string[] { "value1", "value2" };
        }

このようにして、引数に対してデフォルト値を設定しておきます。こうすると Swagger UI で見た結果が

「required」がとれていますね。

レスポンスのステータスコードに対してドキュメントを書きたい

クライアントに レスポンスを返す際に 200 OK 以外のステータスでレスポンスを返す場合、Swashbuckle.Swagger.Annotations 名前空間にある SwaggerResponseAttribute クラスを使ってステータスコードに対してドキュメントを書くことができます。

        [SwaggerResponse(HttpStatusCode.NotFound, Description = "何もなければ404ですよ")]
        // GET api/values
        public IEnumerable<string> Get([FromUri] string someValue = "")
        {
            return new string[] { "value1", "value2" };
        }

こんな感じで Swagger UI から見ると

という感じで、ステータスコードが追加できましたね。

クラスを引数で受ける場合にドキュメントが表示されるようにしたい

Post や Put の際には引数にクラスを指定して、リクエストの Body で送られてきたものを、こんな感じで受け取りますね。

    /// <summary>
    /// これがAPIの実体なのです
    /// </summary>
    public class ValuesController : ApiController
    {
        /// <summary>
        /// Postされると動くらしいよ
        /// </summary>
        /// <param name="value">値は何か知らない</param>
        public void Post([FromBody]Punipuni value)
        {
        }
    }

    /// <summary>
    /// 値を受けるためのクラス
    /// </summary>
    public class Punipuni
    {
        /// <summary>
        /// よく分かんないけど何か
        /// </summary>
        public string MyProperty { get; set; }
    }

この時に XML ドキュメントが出力されていればここにコメントの内容を表示したいのが人情というものですが、デフォルトでは表示されません。

これを表示させるためには、App_Start\SwaggerConfig.cs の同じような場所にこんなことを書いておきましょう。

// If you annonate Controllers and API Types with
// Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate
// those comments into the generated docs and UI. You can enable this by providing the path to one or
// more Xml comment files.
//
//c.IncludeXmlComments(GetXmlCommentsPath());
c.IncludeXmlComments(string.Format(@"{0}\bin\WebApplication1.XML", System.AppDomain.CurrentDomain.BaseDirectory));

もうちょっと気の利いたやり方はあるかもしれませんが、こんな感じで XML ドキュメントを指定しておくと

こんな感じで表示させることができます。
Web API の引数で受けるクラスが別のアセンブリで定義されている場合は XML ドキュメントも別ファイルで出力されるわけですが、IncludeXmlComments() は複数回呼んでも大丈夫です。
必要な分だけ呼んで XML ドキュメントを追加しましょう。