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

あしゅみー先輩には怖いものなんて存在しないのかと思ってたが、まさかげっ歯類が苦手とはね。自分が優位に立てていることを感じ取って、ちょっぴりお茶目な行動を取ってしまう成幸だが、彼がそんな一面を見せる相手は先輩くらいな気がする。

最近はヒロインのコラボ回が多くなってきたけど、まさか文乃と美春の組み合わせで来るとは思いもしなかった。いや、美春の登場は無理があるのではと思わないでもない。美春は持ち前の勘違いを遺憾無く発揮し、文乃を姉と勘違いして暴走。

一方で文乃、相変わらず面白い表情させたら作中のヒロインでナンバーワンだな。

美春の本当の姉こと真冬先生は、ほんと家庭的なことはダメダメだったな。料理下手で、さらにレシピを見ないところなんか料理下手な典型でお約束ですらある。普段基礎が大事と教える立場の教師だというのに、プライベートでのギャップが相変わらず凄まじいな。

あと、うるかには海外留学の話が。このまま受験に成功して海外留学するとなると、うるかエンドは難しくなったか?少年マンガで受験失敗はまずないだろうし。ただ、仮にうるかエンドだったとしても上手くまとめてくれそうな期待感はある。成幸争奪レースは本命文乃、対抗うるかという図式に変わりはなさそう。

アオアシ(15)

前巻で葦人・花の関係にどでかい一石が投じられて、 案の定、葦人は花を意識しまくり。 それにしても今回葦人が花にとった態度はいただけない。 今はサッカー最優先だとしてもないわぁ。 一方で、杏里は花に対して宣戦布告、というわけではないけど、 二人の関係について聞いちゃったらもうね。 間違いなく花は気付いたね。 葦人・花・杏里の三角関係はどうなるのか。

その葦人、代表招集によってチームの主力が一時的にごそっと抜けた影響で、プレミアのスタメン復帰。 冨樫たちと行なっていた夜練の成果もあって、前回と違ってプレミアの舞台でも通用してそう。 そして今回の試合の中心人物は、代表選考に漏れた桐木。 技術はチームでも一二を争うんだろうけど、メンタルに難がありそうな人物だ。 試合が進むにつれて、一見上手くいっているように見えるが、雲行きが怪しくなってきた。 その原因は葦人か桐木なんだろう。 ここからどうやって立て直すのか見ものだ。

.NET Core で形態素解析を行うメモ

.NET Core で日本語の文章の形態素解析がしたくなった。 日本語の形態素解析エンジンでまず思いつくのは MeCab。 その MeCab .NET に移植した NMeCab を最初使うつもりだったんだけど、 残念ながら NMeCab は .NET Core にまだ対応していなかった。 それならフォークして .NET Standard 化しようと思ったら、既に .NET Standard 化したパッケージが NuGet に存在していたので、それを使わせてもらうことに。

www.nuget.org

簡単なサンプルは下記の通り。辞書ファイルは GitHub にある NMeCabNetStandard のリポジトリに含まれていたので、ダウンロードして抜き出したやつを指定した。

using NMeCab;
using System;
using System.IO;

namespace MeCabSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var mecab = MeCabTagger.Create(new MeCabParam
            {
                DicDir = Path.Combine(AppContext.BaseDirectory, "dic"),
            });

            var result = mecab.Parse("五等分の花嫁");

            Console.WriteLine(result);

            Console.ReadLine();
        }
    }
}

f:id:griefworker:20181128155200p:plain

.NET Core でログを Google Stackdriver に保存するメモ

.NET Core ではロギングに Microsoft.Extensions.Logging を使っていて、 コンソールや EventSource なんかによく出力していたんだけど、 今は Google Cloud Platform で遊んでいるので Stackdriver に保存したくなった。 NuGet 用に公式のパッケージがあるので導入は簡単。

www.nuget.org

名前に AspNetCore とあるが、.NET Core のコンソールアプリケーションでも普通に使えた。

using Google.Cloud.Diagnostics.AspNetCore;
using Microsoft.Extensions.Logging;
using System;
using System.IO;

namespace StackDriverSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Environment.SetEnvironmentVariable(
                "GOOGLE_APPLICATION_CREDENTIALS",
                Path.Combine(AppContext.BaseDirectory, "your-access-key.json"));

            var loggerFactory = new LoggerFactory()
                .AddConsole()
                .AddGoogle("your-project-name");

            var logger = loggerFactory.CreateLogger<Program>();

            logger.LogInformation("Hello, StackDriver!");

            Console.ReadLine();
        }
    }
}

例えば将来 .NET Core + Docker + GKE という構成でアプリケーションを開発することになったら、 ログの保存先は Stackdriver が選択肢の筆頭なので、ブログにメモを残しておく。

.NET Core で Google Cloud Storage にファイルをアップロードするメモ

Microsoft Azure を使っていた頃は重要なファイルのバックアップ先に Azure Storage を利用していたが、 最近は Google Cloud Platform で遊んでいるので、Google Cloud Storage を使ってみることにした。 NuGet に公式のクライアントライブラリが存在するので、それを使うと簡単。

www.nuget.org

手間なのはアクセスファイルキーの入手だけ。 Firestore のときと同様に、 GCP の 「API とサービス」の「認証情報」でサービスアカウントを作成して、 アクセスキーファイルをダウンロードする必要がある。 入手さえしてしまえば、あとはサクッとファイルをアップロードできた。

using Google.Cloud.Storage.V1;
using System;
using System.IO;
using System.Threading.Tasks;

namespace CloudStorageSample
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("コマンドライン引数でファイルを指定してください。");
            }
            else
            {
                MainAsync(args).GetAwaiter().GetResult();
            }

            Console.WriteLine("Enter で終了します。");
            Console.ReadLine();
        }

        static async Task MainAsync(string[] args)
        {
            var path = Path.GetFullPath(args[0]);

            var fileName = Path.GetFileName(path);

            // API とサービスの認証情報でサービスアカウントを作成し、
            // ダウンロードしたアクセスキーファイルのパスを環境変数で指定
            Environment.SetEnvironmentVariable(
                "GOOGLE_APPLICATION_CREDENTIALS",
                Path.Combine(AppContext.BaseDirectory, "your-access-key.json"));

            var client = StorageClient.Create();

            using (var stream = File.OpenRead(path))
            {
                // 既存のバケットにアップロード
                var obj = await client.UploadObjectAsync(
                    bucket: "your-bucket-name",
                    objectName: fileName,
                    contentType: "application/octet-stream",
                    source: stream,
                    options: new UploadObjectOptions
                    {
                        // バケットのオーナーだけが管理できるようにする
                        PredefinedAcl = PredefinedObjectAcl.BucketOwnerFullControl,
                    });

                Console.WriteLine($"{obj.SelfLink} をアップロードしました。");
            }
        }
    }
}

王丸食堂

外食で炭水化物が続いて、不健康極まりない状態だったので、身体がタンパク質や野菜を求めだした。タンパク質や野菜を同時に摂取するなら定食だろう、というわけで薬院北にある『王丸食堂』に行ってみた。

看板メニューの『王丸定食』を注文した。焼肉と煮野菜がメイン。写真撮り忘れたけど、選べる小鉢も付いている。自分は冷奴を選んだ。 焼肉はもも肉だろうか?赤身で柔らかくて美味い。そして、ジャポネソースがスパイシーで絶品だった。ご飯が進む。煮野菜も味がしっかり染みていて、ホッとする味わいだった。

野菜をたくさん食べることができたので、腹一杯でも罪悪感ない。野菜が肉のカロリーを打ち消して、むしろゼロカロリー。

関連ランキング:和食(その他) | 薬院大通駅赤坂駅薬院駅

麺篤屋

福岡市中央区高砂にある麺篤屋まで足を延ばしてみた。最寄駅は平尾駅みたいだったが、渡辺通駅から歩いて20分弱。長い距離歩いても汗かかなくなって、秋冬もってこいの季節だな。店内は、昭和の香り漂う昔ながらのラーメン屋といった内装だった。

散々歩いて空腹だったので、『黒正油とんこつらーめん(630円)』に 150 円プラスして、『チャーハンセット』を注文した。醤油とんこつにマー油が加わって、かなり黒々としたビジュアル。味もかなり濃厚でスープ完飲は困難なレベルだった。

チャーハンはパラパラに仕上がっていて、濃厚なラーメンのいい舌休めになった。ボリュームも申し分なくて、これがプラス 150 円で味わえるのはお得感がある。

近年どんどん上昇する福岡のラーメン単価からすると、チャーハンのセットで 780 円というのはコスパ高い。平日昼は近隣のサラリーマンで混雑するのもわかる。