資さんうどんのカツとじ丼

「資さんうどんのカツとじ丼がチェーン店の割りに旨い」という話を思い出したので、 橋本にある木の葉モールに行くついでに立ち寄ってみた。

着いたのがちょうどお昼時だったので、席に案内されるまで20分近く待つことに。 席に着いたら即、かつとじ丼とミニうどんのセットを注文。 注文してから運ばれてくるまでは早かった。

f:id:griefworker:20150301124534j:plain

f:id:griefworker:20150301124539j:plain

つゆは甘めで濃い口。 出てきた速度から考えると、カツは事前に揚げたものかもしれないけど、 衣のサクッとした食感はしっかり残っていて良い。 個人的にカツ丼のカツは衣の食感が残っていないと嫌なので。

ミニうどんの麺は柔らかめ。 まぁ、博多のうどんほどではない。 あっさりしたうどんのつゆが、 カツ丼の濃い後味をいい感じに中和してくれて箸が進んだ。

空腹だったので、あっという間に完食。 ご飯の量がちと物足りなかったから、大盛りにすればよかった。 カツ丼なかなか良かったけど、資さんうどんは橋本含めほとんどの店舗が郊外だから、 車持っていないと行くまでの心理的ハードルが高いな。

関連ランキング:うどん | 橋本駅

ASP.NET MVC 5 で JavaScript を使ったページを PDF に変換する

先日 TuesPechkin を使って、ASP.NET MVC 5 のビューを PDF に変換できることを確認した。

ASP.NET MVC 5 でビューを PDF に変換 - present

TuesPechkin は wkhtmltopdf のラッパーで、wkhtmltopdf は JavaScript を使ったページもある程度は PDF に変換できたはず。少なくとも Rails で wicked_pdf を使ったときは変換できた。

試しに、Chart.js でレーダーチャートを Canvas に描画するページを、TuesPechkin で PDF に変換してみる。 ベースは上の記事で作ったサンプル。

まず Chart.js を入手して、Scripts フォルダに配置。

Chart.js | Open source HTML5 Charts for your website

Chart.js はトップページでしか使わないけど、とりあえずバンドルに追加しておく。

using System.Web;
using System.Web.Optimization;

namespace PdfSample
{
    public class BundleConfig
    {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.validate*"));

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/respond.js"));

            // Chart.js を追加
            bundles.Add(new ScriptBundle("~/bundles/chart").Include(
                "~/Scripts/Chart.js"));

            bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/bootstrap.css",
                      "~/Content/site.css"));
        }
    }
}

コントローラーに修正は不要。 レーダーチャートを描画する JavaScript コードをビューに追加する。

@{
    ViewBag.Title = "Home Page";
}

<h1>Chart.js テスト</h1>

<canvas id="chart" width="400" height="400"></canvas>

@section Scripts {
    @Scripts.Render("~/bundles/chart")

    <script type="text/javascript">
        var radarChartData = {
            labels: ["ミート", "パワー", "走力", "肩力", "守備力"],
            datasets: [
                {
                    label: "サンプル",
                    fillColor: "rgba(151, 187, 205, 0.2)",
                    strokeColor: "rgba(151, 187, 205, 1)",
                    pointColor: "rgba(151, 187, 205, 1)",
                    pointStrokeColor: "#fff",
                    pointHighlightFill: "#fff",
                    pointHighlightStroke: "rgba(151, 187, 205, 1)",
                    data: [100, 80, 70, 80, 90]
                }
            ]
        };
        var options = {
            // アニメーションを無効にしておかないと
            // PDF にしたときチャートが途中の状態で変換されてしまう
            animation: false
        };
        var chart = new Chart(document.getElementById("chart").getContext("2d"));
        chart.Radar(radarChartData, options);
    </script>
}

Web ブラウザで表示するとこんな感じ。

f:id:griefworker:20150228192341p:plain

/Home/Pdf にアクセスすると先ほどのページを PDF でダウンロードできる。 ダウンロードした PDF を開いてみると

f:id:griefworker:20150228192443p:plain

期待通り、Chart.js で描画したレーダーチャートを PDF に出力できた。

『お金持ちになれる黄金の羽根の拾い方2015』読んだ

本書を一言で表すなら、日本版『金持ち父さん貧乏父さん』がふさわしい。

お金をためる方法は大きくわけて

  1. 収入を増やす
  2. 支出を減らす
  3. 運用利回りを上げる

の 3 つがあり、この中で確実なのは、支出を減らすこと。

本書で一番興味深かったのは、 社員が自分一人または家族だけの『マイクロ法人』を使った節税法。

例えば、サラリーマンは給与から所得税や住民税が天引きされるのに対し、 法人は売上から経費を引いた残りに税金がかかる。 この違いを利用し、家賃の一部などを経費にして税金を減らすテクニック。

ただ、最初のマイクロ法人を作るのが一番のハードルだ。 独立して業務委託するにしろ、起業するにしろ、 いきなり結構なリスクをとらないといけない。 本書の手法を実践して成功した人はどれくらい存在するんだろう。 家業を継いだりして、もとから自営業なら本書の方法は使えるだろうけど。 勉強にはなったが、自分の背中を押すまではいかなかったな。

WCF って TPL をサポートしていたのか

ものすごく今さらだけど、知らなかった。 というか、試そうともしていなかった。

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

namespace WcfAsyncSample
{
    [ServiceContract]
    public interface IGreetingService
    {
        [OperationContract]
        Task<string> GreetAsync(string name);
    }

    public class GreetingService : IGreetingService
    {
        public async Task<string> GreetAsync(string name)
        {
            await Task.Delay(2000);
            return await Task.FromResult(string.Format("Hello, {0}", name));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var address = "net.pipe://localhost/Greeting";
            var binding = new NetNamedPipeBinding();

            var host = new ServiceHost(typeof(GreetingService));
            host.AddServiceEndpoint(typeof(IGreetingService), binding, address);
            host.Open();

            var client = ChannelFactory<IGreetingService>.CreateChannel(binding, new EndpointAddress(address));
            client.GreetAsync("Honda").ContinueWith(task =>
            {
                Console.WriteLine(task.Result);
            });

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

f:id:griefworker:20150223095902p:plain

ASP.NET MVC 5 でビューを PDF に変換

以前、iTextSharp を使って ASP.NET MVC で PDF を作成する方法を試した。

ASP.NET MVC で PDF を作成 - present

ただ、実現したいのは「表示している HTML を PDF でダウンロードする機能」なので、 iTextSharp だと HTML と同じような見た目になるように、自力でゴリゴリ頑張る必要があってツライ。

例えば、Rails で wicked_pdf を使ったときのように、HTML から PDF に変換するのが一番いい。 wicked_pdf は wkhtmltopdf を Rails で使うラッパー gem なので、 .NET にも同じようなものがあるかもしれない。

ネットで探して見つけたのは次の 3 つ。

この中で今も開発が活発なのは TuesPechkin だったので、今回はこのライブラリを採用してみた。

ASP.NET MVC プロジェクトに、NuGet でパッケージを追加。

Install-Package TuesPechkin
Install-Package TuesPechkin.Wkhtmltox.Win32

試しに、トップページを PDF に変換するサンプルを書いてみた。

using System.Drawing.Printing;
using System.Web.Mvc;
using TuesPechkin;

namespace PdfSample.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Pdf()
        {
            var helper = new UrlHelper(ControllerContext.RequestContext);
            var indexUrl = helper.Action("Index", "Home", null, Request.Url.Scheme);

            var document = new HtmlToPdfDocument()
            {
                GlobalSettings =
                {
                    ProduceOutline = true,
                    DocumentTitle = "PDF Sample",
                    PaperSize = PaperKind.A4,
                    Margins =
                    {
                        All = 1.375,
                        Unit = Unit.Centimeters
                    }
                },
                Objects =
                {
                    new ObjectSettings() {
                        PageUrl = indexUrl,
                    },
                }
            };

            var converter = new StandardConverter(
                new PdfToolset(
                    new Win32EmbeddedDeployment(
                        new TempFolderDeployment()
                    )
                )
            );

            var pdfData = converter.Convert(document);

            return File(pdfData, "application/pdf", "PdfSample.pdf");
        }
    }
}

デバッグ実行し、Web ブラウザで /Home/Pdf にアクセスすると、PDF ファイルをダウンロードできる。

f:id:griefworker:20150216211610p:plain

ASP.NET MVC 5 のコントローラーでアクションの URL を作成する

コントローラーでも UrlHelper を使ってアクションの URL を作成できたのでメモしておく。

var helper = new UrlHelper(ControllerContext.RequestContext);

var indexPath = helper.Action("Index", "Home"); // => /

var indexUrl = helper.Action("Index", "Home", null, Request.Url.Schema); // => http://localhost:1065/

太宰府観光

そろそろ梅も見頃だろうと思ったので、太宰府天満宮まで出かけてみた。 車は持っていないので移動は電車。 西鉄電車太宰府駅に到着。

f:id:griefworker:20150214104655j:plain

11 時くらいに着いたので参道に観光客はまだ多くない。

f:id:griefworker:20150214104851j:plain

まずは腹ごしらえ。 もやさまを見て気になっていた豚まん屋に行ってみた。

f:id:griefworker:20150214105155j:plain

豚まんは中の肉汁が凄い。小籠包のスープかよ!ってくら大量の肉汁。 溢れた肉汁で手がギトギトになったけど、ジューシーで旨かった。

f:id:griefworker:20150214105320j:plain

参道の店を物色していたら、外観が話題になったスタバを発見。 中はいたって普通そうだったので入らずスルー。

f:id:griefworker:20150214110636j:plain

デザートに梅ヶ枝餅と思ったので、定番の『かさの家』へ。

f:id:griefworker:20150214111125j:plain

既に行列ができていたので並ぶ。 ガラス越しに作っているところが見れたので退屈しなかった。

f:id:griefworker:20150214110920j:plain

焼きたての梅ヶ枝餅は外側がカリカリでこれまた旨い。

f:id:griefworker:20150214111101j:plain

参道を進んでいったら、入り口と見られる鳥居が見えてきた。

f:id:griefworker:20150214111813j:plain

聞いた話だけど、赤い橋はカップルで渡るとよくないらしい。

f:id:griefworker:20150214111944j:plain

橋を渡ると遠くに本殿が見えてきた。

f:id:griefworker:20150214112203j:plain

本殿への門。朱が青空に映えて綺麗。

f:id:griefworker:20150214112531j:plain

本殿に到着。 大学受験の合格祈願以来なので14年振り2度目になるか。

f:id:griefworker:20150214112651j:plain

飛梅は満開といっていい状況。 梅の開花状況は思っていたほどではなかったけど、飛梅が咲いていたからまぁいいか、って思えた。

f:id:griefworker:20150214113114j:plain

太宰府天満宮には九州国立博物館への直通エスカレーターがあるので、 ついでに行ってみることにした。

f:id:griefworker:20150214113902j:plain

九州国立博物館は初めて来たけど、近代的な外観でカッコイイ。

f:id:griefworker:20150214114259j:plain

天井高けー。エスカレーターは足すくみそう。

f:id:griefworker:20150214114729j:plain

なぜか山笠が。

f:id:griefworker:20150214114906j:plain

常設展を見て回ることにした。

f:id:griefworker:20150214114658j:plain

常設展を見終わったところで、日帰り太宰府観光は終了。 太宰府天満宮は記憶よりも綺麗だったし、ようやく九州国立博物館に行くこともできたので満足、満足。