長崎ペンギン水族館

ハウステンボスに行ったついでというわけではないが、娘が一時期行きたいと言ってた、 長崎市にある長崎ペンギン水族館にも行ってきた。

入り口でマスコットキャラクターのアバちゃんがお出迎え。

ペンギンを間近で見ることができて、子供はもちろんのこと、大人でも楽しめる。 透明な板を挟んだ向こう側、手を少し伸ばせば触れるくらいの距離。 もちろん触っちゃだめだけど。

ペンギン水族館だけど、魚もちゃんと展示されている。 ちょうど餌やりの時間で、いつもは物陰にいるウツボが餌を求めて泳ぐ姿を初めて見た。

キングペンギンは全く動かなくて、置物かと思ったら、ちゃんと動いて本物であることを確認。

ペンギンの散歩や餌やりを見れたり、ペンギンに触ったりできて、娘はかなり満足したみたいだ。 餌やりの体験もできたんだが、こちらは整理券が速攻で無くなってできなかった。残念。

30分くらいで順路をひと回りできちゃうくらいコンパクトな水族館だったけど満足度は高かった。 大きな水族館だと周るの大変だったるするので、子供が小さい間はこれくらいがちょうどいいのかも。

penguin-aqua.jp

ハウステンボス

娘が4月から幼稚園に入ったら、夏休みや冬休みといった長期休み以外での遠出は難しくなるので、 ずっと前から連れて行きたいと思っていたハウステンボスのチューリップ祭に行ってきた。

1DAYパスポートを購入して入国。天気が心配だったけど晴れてきてよかった。

テディベアミュージアムで娘のつかみはオッケー。 巨大なジャイアントベアを怖がらないか心配だったけど、無用だった。 幼稚園にも結構大きなクマの人形があるし、耐性がついているんだろう。

チューリップロードには風車と、一面のチューリップ。 ただ、心なしか以前来たときよりチューリップ感が少ないような・・・。 写真の風車の左側なんて、本物のチューリップじゃないし。 まぁ、こいつらは夜に活躍するんだけど。

これまでドムトールンには昇ったことがなかったので、 今回は昇ることに決めていた。 ただ、その前にしまじろうのイベントがちょうど開催されていたので、 そっちから攻略。

しまじろうのイベントでかなり歩かされたので、ひとまず腹ごしらえ。 行きたかった八天堂のカフェは残念ながら閉店していたので、 ドムトールン下のフードコートで佐世保バーガーを食べた。 思いのほか美味しかったのは収穫。

ドムトールンに初めて昇った感想としては、思っていた以上に狭くてびっくり。 福岡タワーの展望台くらいはあると思っていたんだけどなぁ。 この日は平日だったからよかったものの、もし休日だったらぎゅうぎゅう詰めになるんじゃないか? さすがに見晴らしはよかった。

アトラクションタウンには、映像や VR を駆使したアトラクションが多かったが、 どれも子供にはまだ早くて入れなかった。 せっかくの 1DAY パスポートがぁ。 実物大のイングラムが展示されていたのは驚いたね。 娘は怖がって近づかなかったけど。

当初は時間遅いし見るの難しいかもなぁと思っていた噴水ショーも、 なんとか19時まで粘って見ることができた。 お土産にクリームチーズとターフルソースのセットを購入して帰宅。

前回来たチューリップ祭よりもスケールが落ちてる気がした。 無料ゾーンも無くなってたし。 娘はアドベンチャーパークのふわふわランドが一番楽しめたみたいで、 ここだけで2時間ぐらい遊んでいたんじゃないだろうか。 そんなアドベンチャーパークも、大半のアトラクションは娘にはまだ早いものばかり。 全体を通して、ハウステンボス自体がまだ来るの早かったかなぁ、という感想。

www.huistenbosch.co.jp

ぼくたちは勉強ができない(11)

文乃と父親の問題がついに解決。父親に思いの丈をぶつけた文乃の姿は立派で、メインヒロインの格が見えた。別に嫌い合っていた訳ではなく、どちらが素直になれればもっと早くに解決したかもしれないけど、そのために必要な勇気が今まで足りなかったんだろうな。成幸が背中を押されたことで、勇気をもらえて、父親と向かい合うことができた、と。いい話や。

成幸争奪レースはやはり本命・文乃、対抗・うるか、大穴・先生なのか。その成幸は、前に進んでいく文乃やうるか、理珠の影響を受けて、重大な決断をした模様。ヒロインたちの夢には向き合ってきたけど、成幸の夢に関しては触れてこなかったからなぁ。ここから先は成幸の夢が話の中心になっていくんだろう。

アオアシ(16)

16 巻で葦人は左サイドバックとして覚醒したかもしれない。視野の広さを攻撃時のゲームメイク以外にどう生かすのかと思っていたら、守備時でも戦術によってはゲームメイクできるのか。

サッカーは点を取らないと勝てないスポーツなので、どうしてもフォワードやミッドフィルダーといったオフェンスの選手に光が当たりがち。そんなサッカーのマンガで守備をこうも面白く魅力的に描けるなんて素晴らし過ぎる。

このマンガを読んで、ディフェンダーを目指す子供が増えるかもしれないのに。 ビッグコミックスピリッツ連載で、少年誌じゃないのが惜しい。

新天町倶楽部

天神の新天町にある「新天町倶楽部」は新天町で働く人用の食堂だけど、一般の人でも利用できるらしい。しかもお値段はどれもリーズナブルだとか。お財布の中身が心もとなくなってきたので、ランチで行ってみた。

お目当はオムライス。運良くそれほど混んでいなかったので注文することができた。オムライスはサラダとスープが付いて 600 円と、確かに安い。

オムライスの卵は絶妙なふわとろ加減。中のチキンライスはしっかりとしたケチャップの味がどこか懐かしい。そして結構なボリューム。上にかかっているのがデミグラスソースというのが、これまたニクい。社食のクオリティを超えてるな。

これを 600 円で提供しているというのは驚きのコスパだ。ふわとろ卵を盛り付ける際のシェフの神業も見事だった。子供とか見たら喜びそう。

関連ランキング:定食・食堂 | 天神駅西鉄福岡駅(天神)天神南駅

新福菜館

ラーメンスタジアムに長らく出店していた「札幌らーめん大地」が卒業してしまい、「新福菜館」も長いから卒業近いかもなと思って、急遽行ってみることにした。

ラーメンとチャーハンと餃子のセットを注文。1200円。ちょっと奮発した。

黒いチャーハンは、見た目通り濃いめの味付けで、お酒に合いそう。飲めないけど。想像通りの味だった。

ラーメンも濃厚な醤油スープ。スープはまぁいいんだけど、麺がイマイチかなぁ。チャンポン麺みたいな味。それも、スーパーで売ってるような。これは好みの問題なのか?

餃子は1つ1つが大きめで、ジューシーで食べ応えがあった。もう少しカリッと焼いて欲しかったけど。

卒業を危惧して急遽食べにきたけど、ちょっと後悔。キャナルシティ店がイマイチなだけで、本店は絶品なのかな。そうであって欲しい。でも麺が問題だしなぁ。福岡にも美味い醤油ラーメンを出す店が増えたから、正直、味が物足りなかった。

ASP.NET Core のホステッドサービスとして WCF サービスを動かす

ASP.NET Core には HostedService という機能があって、 バックグラウンドタスクなんかを実装するのに使えたりする。

docs.microsoft.com

上のドキュメントでは、そのものずばりバックグラウンドタスクを実装しているわけだけど、 WCF サービスも実行できるんじゃないかと思ったので試してみた。 なお、サーバーサイド WCF だから .NET Framework 限定。

using System.ServiceModel;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUrls("http://localhost:8000")
                .UseStartup<Startup>();
    }

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHostedService<WcfHostedService>();
        }

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

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

    [ServiceContract(Namespace = "AspNetCoreWcf")]
    public interface IGreetingService
    {
        [OperationContract]
        string Greet(string name);
    }

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

    public class WcfHostedService : Microsoft.Extensions.Hosting.IHostedService
    {
        readonly ServiceHost serviceHost;
        readonly ILogger<WcfHostedService> logger;

        public WcfHostedService(ILoggerFactory loggerFactory)
        {
            logger = loggerFactory.CreateLogger<WcfHostedService>();

            serviceHost = new ServiceHost(typeof(GreetingService));
            serviceHost.AddServiceEndpoint(
                typeof(IGreetingService),
                new NetTcpBinding(),
                "net.tcp://localhost:8080/GreetingService");
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            serviceHost.Open();
            logger.LogInformation($"WCF Service Started.");
            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            serviceHost.Close();
            logger.LogInformation($"WCF Service Stopped.");
            return Task.CompletedTask;
        }
    }
}

WCF サービスがホステッドサービスとして動いているか確認するために、 WCF クライアントを使ってアクセスしてみる。 WCF サービスだけでなく ASP.NET Core も動いているか、 こちらは HttpClient を使って確認。

using System;
using System.Net.Http;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading.Tasks;

namespace AspNetCoreWcfClient
{
    class Program
    {
        static void Main(string[] args)
        {
            MainAsync().GetAwaiter().GetResult();
            Console.ReadLine();
        }

        static async Task MainAsync()
        {
            var httpClient = new HttpClient();
            var aspNetCoreResult = await httpClient.GetStringAsync(
                "http://localhost:8000");
            Console.WriteLine($"ASP.NET Core: {aspNetCoreResult}");

            var channel = ChannelFactory<IGreetingService>.CreateChannel(
                new NetTcpBinding(),
                new EndpointAddress("net.tcp://localhost:8080/GreetingService"));
            var wcfResult = channel.Greet("Douan");
            Console.WriteLine($"WCF: {wcfResult}");
            ((IChannel)channel).Close();
        }
    }

    [ServiceContract(Namespace = "AspNetCoreWcf")]
    public interface IGreetingService
    {
        [OperationContract]
        string Greet(string name);
    }
}

ASP.NET Core と WCF サービス、どちらもちゃんとレスポンスを返してくれたので、 動いていることを確認できた。

f:id:griefworker:20190329105725p:plain

これが何の役に立つかといえば、ほとんどの人には役に立たないかもしれない。 ただ、世の中には WCF を捨てれない環境があったりするので…。 あぁ、WCF 捨てて gRPC とかに移りたい。