aurora arc

BUMP OF CHICKEN 約 3 年 5 ヶ月ぶりのニューアルバム『aurora arc』が発売日当日に iTunes Store でも配信されたので即購入した。即日配信ホント素晴らしい。

収録曲のほとんどがデジタルシングルの形でリリースされたか、タイアップしたもので、まるでベストアルバムを購入したかのような様相だった。

その中で一番のお気に入りは『月虹』。めっちゃカッコいい。アニメ『からくりサーカス』の主題歌だったみたいだけど、原作を全部読んでいたから、サビのところでエレオノールが操るあるるかんや鳴海が機械人形と戦うシーンが脳内に浮かんできた。イントロもキャラバンっぽくて、まさにからくりサーカスの全てが詰まったような曲だった。

次点で好きなのは『新世界』。BUMP OF CHICKEN がアイラブユーを歌うとは感慨深い。今までにない、くすぐったい感じの曲で、それが新鮮だった。この2曲をずっとリピートしている。

からかい上手の(元)高木さん(6)

本家(?)の方ではからかわれるのは西片君だけだけど、こっちは西片君だけでなく娘のちぃもがっつりからかわれていて、こっちはこっちで違った良さがあるな。 特に今回は、(元)高木さんのからかいを真に受けて、お父さん(=西片君)にバレンタインチョコを受け取ってもらえないんじゃないかとドキドキするちぃは可愛らしかった。西片君が羨ましい。 今年から幼稚園に通いだした自分の娘は、なぜか物心ついたときから父親の扱いがヒドイんだよな。ツンデレとかリアルに求めてないから。デレデレであって欲しい。難しいね。

パティスリー オー フィル ドゥ ジュール

平日に有休とって運転免許を更新しに行った帰りに、桜坂にある『パティスリー オー フィル ドゥ ジュール』に寄ってみた。

超人気店で、平日の会社帰りだとまず残ってなさそうだったので、平日の 15 時ごろに来たわけだけど、それでも目ぼしいケーキが残り少なくて間一髪だった。お目当ての半生チーズケーキはラスト 1 だったがゲット。

半生チーズケーキは濃厚でいて爽やかという、相反するような要素を見事に融合させていて絶品だった。これを食べられただけでも満足。ティラミスは結構ビターな大人の味。シューアラクレームはあっさりとしたカスタードが実に自分好みで完成度高かった。今まで食べたシュークリームの中でトップ 3 に入るかも。

関連ランキング:ケーキ | 桜坂駅薬院大通駅六本松駅

からかい上手の高木さん(11)

高木さんのからかいは最近、西片に恋愛を意識させる直接的?なものになってきた印象。というか、当たり前のように一緒に下校しているし、はたから見たら付き合ってないのが不思議なレベル。ここまでくると、からかいもイチャついているのと大差ない。もうさっさとくっついちゃえよ、と思ってしまうね。少々胸やけ気味だ。

和田門

結婚記念日に西中洲にある『和田門』にランチを食べに行った。佐世保に『門』ていうレモンステーキで有名な店があるんだけど、この和田門と門は本店と支店の関係にあるみたい。和田門が本店。

注文したのは『元祖レモンステーキコース』。コレ一択。ずっとレモンステーキを食べてみたいと思っていたんだよね。

前菜はスモークサーモンを使ったサラダ。スモークサーモンは当然美味で、それ以上にトマトの甘さが強く印象に残った。

本日のスープはビシソワーズ。冷たいスープが苦手な自分でもまったく苦にすることなく全て飲み干した。滑らかで上品なスープだった。

そしてお目当のレモンステーキ登場。肉は両面しっかり焼いても良いし、赤みが残った状態で食べてもいい。自分は若干赤みを残したほうが、柔らかくて好みだった。レモンの風味が結構生きている。

レモンステーキのソースにご飯を入れて食べるのがオススメとのことだった。確かに酸味が効いててアリ。自分は肉でご飯を食すのが好み。

デザートはココナッツアイス。スッキリとした上品な甘さで、ホント、デザートまでクオリティが高い。底の丸い粒はタピオカで、人生初タピオカだ。プニっとした食感が楽しい。

食後はコーヒーでひと休み。

ずっと食べに行きたかった和田門のレモンステーキをようやく食べることができて満足。前菜からデザートまで期待通り、いや、期待以上だった。今回は予約時に個室をお願いしたが、この個室なら子ども連れでも大丈夫そう。今度は家族3人で訪れたい。

博多和田門

食べログ 博多和田門

WCF サービスを Windows コンテナのプロセス分離モードで動かす実験

はじめに

先日、ASP.NET Core アプリを Windows コンテナのプロセス分離モードで動かす実験を行った。

tnakamura.hatenablog.com

本業で抱える .NET Framework の資産は、ASP.NET Core よりも WCF の方が大多数なので、 次は WCF サービスをコンテナ化する実験を行ってみる。

WCF サービス

今回の実験で使用した WCF サービスは下記の通り。

using System;
using System.Threading;
using System.ServiceModel;

namespace WcfWCOW
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = new ServiceHost(typeof(GreetingService));
            try
            {
                var binding = new NetTcpBinding();
                binding.Security.Mode = SecurityMode.None;

                host.AddServiceEndpoint(
                    typeof(IGreetingService),
                    binding,
                    "net.tcp://localhost:808/GreetingService");
                host.Open();

                foreach (var endpoint in host.Description.Endpoints)
                {
                    Console.WriteLine(endpoint.ListenUri);
                }

                Thread.Sleep(-1);

            }
            catch
            {
                host.Close();
            }
        }
    }

    [ServiceContract]
    public interface IGreetingService
    {
        [OperationContract]
        string Hello(string name);
    }

    public class GreetingService : IGreetingService
    {
        public string Hello(string name)
        {
            return $"Hello {name}!";
        }
    }
}

NetTcpBinding を使う超単純な WCF サービス。

Dockerfile

WCF サービスはあらかじめリリースビルドしておき、 それをもとにコンテナイメージを作る Dockerfile を記述した。

FROM mcr.microsoft.com/dotnet/framework/wcf:4.8
WORKDIR /app
EXPOSE 808
COPY ./WcfWCOW/bin/Release/ .
ENTRYPOINT ["WcfWCOW.exe"]

ベースとなるコンテナイメージは WCF 用のものを利用。

コンテナイメージ作成

> docker build -t tnakamura/wcfwcow:1.0 .

f:id:griefworker:20190626150939p:plain

コンテナ起動

プロセス分離モードでコンテナを起動。 今回は -d オプションを指定して、コンテナをバックグラウンドで実行している。

> docker run -d --isolation process --name wcfwcow tnakamura/wcfwcow:1.0

f:id:griefworker:20190626150953p:plain

WCF クライアント

コンテナ内で動いている WCF サービスにアクセスするためのクライアントを作成。 WCF サービスのエンドポイントはコンテナを起動するたびに変わるので、 エンドポイントアドレスをコマンドライン引数で渡せるようにしておいた。

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using WcfWCOW;

namespace ConsoleClient
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("ホスト名または IP アドレスを指定してください。");
                return;
            }
            var host = args[0];
            var factory = new ChannelFactory<IGreetingService>(
                new NetTcpBinding(SecurityMode.None),
                $"net.tcp://{host}:808/GreetingService");
            var channel = factory.CreateChannel();

            var result = channel.Hello("Kubo");
            Console.WriteLine(result);

            Console.WriteLine("Enter で終了");
            Console.ReadLine();

            ((IChannel)channel).Close();
        }
    }
}

namespace WcfWCOW
{
    [ServiceContract]
    public interface IGreetingService
    {
        [OperationContract]
        string Hello(string name);
    }
}

接続テスト

WCF サービスが動いているコンテナの IP アドレスを調べる。

> docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" wcfwcow

f:id:griefworker:20190626151019p:plain

調べた IP アドレスを引数に、WCF クライアントを起動。

> ConsoleClient.exe 172.26.156.148

f:id:griefworker:20190626151029p:plain

結果が表示されたので、WCF サービスを呼び出しに成功したようだ。

おわりに

Windows コンテナのプロセス分離モードで、WCF サービスを動かすことに成功した。 実際にコンテナ化を考えている WCF サービスは SQL Server に接続するので、 次はコンテナ内のアプリからコンテナ外の SQL Server にアクセスする実験でもやってみようか。

ASP.NET Core アプリを Windows コンテナのプロセス分離モードで動かす実験

はじめに

ASP.NET Core アプリをコンテナ化したいけど、 .NET Framework の資産を捨てられないので、 ランタイムに .NET Framework を選択し、 Docker + Windows コンテナで行くことに。

手始めに、ASP.NET Core アプリをコンテナ化して、 Windows コンテナのプロセス分離モードで動かす実験を行ってみた。

最小の ASP.NET Core アプリ

今回の実験に使った最小の ASP.NET Core アプリが下記になる。

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace HelloWCOW
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello WCOW!");
            });
        }
    }
}

ASP.NET Core の「空」テンプレートで生成したアプリほぼそのまま。 このアプリをローカルのフォルダに発行しておく。 場所はデフォルトで。

Dockerfile

あらかじめ発行しておいた最小の ASP.NET Core アプリをもとに Docker コンテナを作りたいので、 Dockerfile を書いた。

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8
WORKDIR /app
EXPOSE 80
COPY ./HelloWCOW/bin/Release/net48/publish .
ENTRYPOINT ["HelloWCOW.exe", "--urls", "http://*:80"]

--urlshttp://localhost:80 を指定するとダメで、 http://*:80 だと上手くいった。 Docker + Windows コンテナ + プロセス分離モードの情報が少なすぎて、 嵌ると抜け出すのにかなりの時間を費やしてツライ。

コンテナイメージをビルド

> docker build -t tnakamura/hellowcow:1.0 .

f:id:griefworker:20190625113952p:plain

コンテナイメージが作成されたか確認。

> docker images

f:id:griefworker:20190625114028p:plain

コンテナを起動

作成したコンテナイメージからコンテナを起動。 今回もプロセス分離モードを指定した。

> docker run --rm --it --isolation process -p 8000:80 --name hellowcow tnakamura/hellowcow:1.0

f:id:griefworker:20190625114118p:plain

Web ブラウザからアクセス

Chromehttp://localhost:8000 にアクセス。 Hello WCOW! と表示されたので実験成功。

f:id:griefworker:20190625114133p:plain

おわりに

なんとか最小の ASP.NET Core アプリをコンテナ化して、 Windows コンテナのプロセス分離モードで動かすことに成功した。 実験はまだまだ続く。 たったこれだけでも、嵌って結構な時間が溶けしまったので、正直なところ先が思いやられるな。