フリスコ

東京の下北沢から福岡の舞鶴に移転したという『フリスコ』に行ってみた。 舞鶴の路地からさらに奥まったところにあるため場所が分かりづらい。 隠れ家というには隠れすぎな気がする。 ふらっと立ち寄るなんてのは無理だな。 事前に場所を調べておいてよかった。

注文したのは、ハンバーガーとポテトとドリンクのセット(1350円)。 ドリンクはジンジャエールとコーラがあったけど、 ハンバーガーにはコーラでしょ。

f:id:griefworker:20150612180555j:plain

ハンバーガーはソースらしいソースが無い。 しいていうなら肉汁がソースかもしれない。 肉が主役で、 マスタードのピリッとした刺激と、トマトやピクルスの酸味が、 肉の味を引き立てていた。 素材の味を生かし無骨で男らしい印象。

f:id:griefworker:20150612180639j:plain

1350 円とハンバーガーにしては結構な値段だけど、 それだけのこだわりを感じる味だった。

関連ランキング:ハンバーガー | 赤坂駅天神駅西鉄福岡駅(天神)

『Web エンジニアが知っておきたいインフラの基本』読んだ

DevOpsやフルスタックエンジニアという言葉が生まれ、 エンジニアがアプリケーションの開発だけでなくOSやミドルウェアの面倒まで見ることも多くなってきた。

自分もChefを使ってインフラをコードで管理しているけど、 アプリケーションだけでなく、サーバーやストレージ、ネットワークといった 下のレイヤーも分かっておきたい、と常々思っていたんだよね。

問題に遭遇してから調べる遅延評価的な勉強もいいけど、 学ぶ意欲があるときは本書のように体系立ててまとまった本で勉強する方が効率が良い。 特に本書の後半は、繰り返し読まないと消化できない情報量だった。

何より素晴らしいのはチューニングのレシピ。 書いてあることが一通り実践できるようになればチューニング大会でも確実に上位が狙える、 というノウハウがこれでもかというほど詰まっていて、 中級者でもリファレンスとしても使えるに違いない。 今後も引き続きお世話になりそうな一冊だった。

Webエンジニアが知っておきたいインフラの基本

Webエンジニアが知っておきたいインフラの基本

麺屋 一矢

仕事で夜遅くなってしまったので、 この際夜しかやってない店で食べようと思い、 中州大通りにある『麺屋 一矢』に行ってみた。

注文したのは黒ラーメンと唐揚げのセット(1000 円)。 黒ラーメンはマー油が独特の風味を出していて、 濃厚なとんこつだけど初めて食べる味で新鮮。 熊本ラーメンもいいもんだ。

f:id:griefworker:20150603202703j:plain

唐揚げもこれまた初めて食べる味だった。 醤油やにんにくだけの味じゃない。 香辛料が効いていて、酸味もあって、 とにかくいろんな味が合わさっているみたいだ。

f:id:griefworker:20150603202715j:plain

ラーメンと唐揚げどちらも結構うまかった。 ただ、中州大通りという立地で20時からの営業なので、 かなり行きづらいのがなんとも。

関連ランキング:ラーメン | 中洲川端駅呉服町駅祇園駅

うどん平

タモリがオススメするうどん屋としてネット上で話題になった 『うどん平』に行ってみた。 場所はキャナルシティの近くだけど、路地に入るのでちょっと分かりにくい。 平日の14時くらいに行ったらほとんどの席が埋まっていたけど、 入店したときタイミングよく1席空いたのはラッキーだった。

f:id:griefworker:20150602134110j:plain

お目当ては『ごぼう天うどん』。 つゆはアッサリした味なんだけど出汁がしっかりしていた。 麺は博多のうどんらしく柔らかめでモチモチ。 そしてなにより、ごぼう天が衣サクサクで歯ごたえが良い。 このごぼう天は旨い。

f:id:griefworker:20150602134642j:plain

ご飯も欲しかったので『かしわ』も注文。 素朴でおばあちゃんの味って感じで落ち着く。

f:id:griefworker:20150602134228j:plain

結構期待値が高かったんだけど期待以上だった。 ここのごぼう天うどんは今まで食べた中では一番だな。

関連ランキング:うどん | 祇園駅博多駅中洲川端駅

レストラン達

天神北にある老舗洋食店『レストラン達』。 勝手に敷居が高そうな印象をもっていたんだけど、 ずっと行きたいと思っていたので、 思い切って行ってみた。

f:id:griefworker:20150529131217j:plain

注文したのはデミグラスソースのハンバーグ。 サラダとライスとコーヒーがセットで 1300 円 + 税。

ハンバーグは肉自体が旨い。 ソースがかかっていないところでさえ旨い。 デミグラスソースは甘さだけでなく、 ほのかに酸味や苦味もあって、 これまたレベル高い。

f:id:griefworker:20150529130323j:plain

f:id:griefworker:20150529130340j:plain

f:id:griefworker:20150529131003j:plain

ランチに 1300 円超というのは天神でも高い方かな。 値段に納得はできる味ではあった。 まぁ予算オーバーだったけどね。

あと、この店はなんといってもビーフシチューと、 ビーフシチューのソースを使ったハヤシライス。 この 2 つはいつでも食べられるメニューではないので、 機会があったらぜひ食べたいもんだ。

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

ASP.NET MVC で WebForms の Chart を使って作成したチャートを PDF に埋め込む

ASP.NET MVC で System.Web.UI.DataVisualization.Charting.Chart を使って、 レーダーチャートをカスタマイズできるところまでは確認できた。

tnakamura.hatenablog.com

今度は iTextSharp と組み合わせて、 レーダーチャートを PDF に埋め込めるかどうかを試してみる。 多分、System.Web.Helpers.Chart と同じようにできると思うけど、念のため。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Drawing;
using System.IO;
using System.Web.Mvc;
using System.Web.UI.DataVisualization.Charting;

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

        public ActionResult Pdf()
        {
            var pdfData = CreatePdf();
            return File(pdfData, "application/pdf", "PDFSample.pdf");
        }

        // PDF(バイナリ)を作成
        private byte[] CreatePdf()
        {
            using (var document = new Document(PageSize.A4, 20, 20, 20, 20))
            using (var stream = new MemoryStream())
            using (var writer = PdfWriter.GetInstance(document, stream))
            {
                document.Open();

                // テキストを PDF に書き込む
                document.Add(new Paragraph("PDF Sample"));

                // レーダーチャート画像を PDF に埋め込む
                var chart = CreateChartData();
                var image = iTextSharp.text.Image.GetInstance(chart);
                document.Add(image);

                document.Close();

                return stream.ToArray();
            }
        }

        private byte[] CreateChartData()
        {
            var chart = new Chart
            {
                Height = 450,
                Width = 600,
                ImageType = ChartImageType.Png,
                ChartAreas =
                {
                    new ChartArea
                    {
                        Name = "Default",
                        AxisY = new Axis
                        {
                            Maximum = 100,
                            IsStartedFromZero = true,
                            CustomLabels =
                            {
                                new CustomLabel
                                {
                                    Text = "A",
                                    FromPosition = 95,
                                    ToPosition = 105
                                },
                                new CustomLabel
                                {
                                    Text = "B",
                                    FromPosition = 75,
                                    ToPosition = 85
                                },
                                new CustomLabel
                                {
                                    Text = "C",
                                    FromPosition = 55,
                                    ToPosition = 65
                                },
                                new CustomLabel
                                {
                                    Text = "D",
                                    FromPosition = 35,
                                    ToPosition = 45
                                },
                                new CustomLabel
                                {
                                    Text = "E",
                                    FromPosition = 15,
                                    ToPosition = 25
                                },
                                new CustomLabel
                                {
                                    Text = "F",
                                    FromPosition = -5,
                                    ToPosition = 5
                                }
                            }
                        }
                    }
                },
                Legends =
                {
                    new Legend
                    {
                        Title = "凡例"
                    }
                },
                Series =
                {
                    new Series
                    {
                        Name = "サンプル1",
                        ChartType = SeriesChartType.Radar,
                        Color = Color.FromArgb(100, 151, 187, 205),
                        MarkerStyle = MarkerStyle.Circle,
                        MarkerColor = Color.FromArgb(151, 187, 205),
                        BorderWidth = 2,
                        BorderColor = Color.FromArgb(151, 187, 205),
                        Points =
                        {
                            new DataPoint
                            {
                                AxisLabel = "ミート",
                                YValues = new double[] { 90 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "パワー",
                                YValues = new double[] { 80 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "走力",
                                YValues = new double[] { 70 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "肩力",
                                YValues = new double[] { 60 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "守備力",
                                YValues = new double[] { 80 }
                            }
                        }
                    }
                }
            };

            using (var stream = new MemoryStream())
            {
                chart.SaveImage(stream);
                return stream.ToArray();
            }
        }
    }
}

Web ブラウザからこのアクションを呼び出すと、 次のような PDF ファイルをダウンロードできた。

f:id:griefworker:20150527134118p:plain

予想通り。

ASP.NET MVC で WebForms の Chart をカスタマイズする

System.Web.UI.DataVisualization.Charting.Chart を使って ASP.NET MVC で レーダーチャートを表示できた。

tnakamura.hatenablog.com

今度はレーダーチャートをカスタマイズしてみる。 カスタマイズ内容としては次の通り。

  • Y 軸のラベルを数値ではなく A ~ F で表示
  • レーダーチャートの色を半透明にする
  • レーダーチャートの外枠を表示
  • レーダーチャートに点(マーカー)を表示

レーダーチャートの画像ファイルを返すアクションを修正してみた。

using System.Drawing;
using System.Web.Mvc;
using System.Web.UI.DataVisualization.Charting;

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

        public ActionResult Chart()
        {
            // レーダーチャートを作成
            var chart = new Chart
            {
                Height = 450,
                Width = 600,
                ImageType = ChartImageType.Png,
                ChartAreas =
                {
                    new ChartArea
                    {
                        Name = "Default",
                        AxisY = new Axis
                        {
                            Maximum = 100,
                            IsStartedFromZero = true,
                            // Y 軸のラベルをカスタマイズ
                            CustomLabels =
                            {
                                new CustomLabel
                                {
                                    Text = "A",
                                    FromPosition = 95,
                                    ToPosition = 105
                                },
                                new CustomLabel
                                {
                                    Text = "B",
                                    FromPosition = 75,
                                    ToPosition = 85
                                },
                                new CustomLabel
                                {
                                    Text = "C",
                                    FromPosition = 55,
                                    ToPosition = 65
                                },
                                new CustomLabel
                                {
                                    Text = "D",
                                    FromPosition = 35,
                                    ToPosition = 45
                                },
                                new CustomLabel
                                {
                                    Text = "E",
                                    FromPosition = 15,
                                    ToPosition = 25
                                },
                                new CustomLabel
                                {
                                    Text = "F",
                                    FromPosition = -5,
                                    ToPosition = 5
                                }
                            }
                        }
                    }
                },
                Legends =
                {
                    new Legend
                    {
                        Title = "凡例"
                    }
                },
                Series =
                {
                    new Series
                    {
                        Name = "サンプル1",
                        ChartType = SeriesChartType.Radar,
                        Color = Color.FromArgb(100, 151, 187, 205), // 半透明にする
                        MarkerStyle = MarkerStyle.Circle,
                        MarkerColor = Color.FromArgb(151, 187, 205),
                        BorderWidth = 2,
                        BorderColor = Color.FromArgb(151, 187, 205),
                        Points =
                        {
                            new DataPoint
                            {
                                AxisLabel = "ミート",
                                YValues = new double[] { 90 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "パワー",
                                YValues = new double[] { 80 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "走力",
                                YValues = new double[] { 70 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "肩力",
                                YValues = new double[] { 60 }
                            },
                            new DataPoint
                            {
                                AxisLabel = "守備力",
                                YValues = new double[] { 80 }
                            }
                        }
                    }
                }
            };

            using (var stream = new System.IO.MemoryStream())
            {
                chart.SaveImage(stream);

                return File(stream.ToArray(), "image/png");
            }
        }
    }
}

ビューは前回同様、img タグを使ってレーダーチャートを表示する。

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

<div class="row">
    <div class="col-md-12">
        <img src="@Url.Action("Chart")"/>
    </div>
</div>

デバッグ実行し、Web ブラウザでアクセスしてみると

f:id:griefworker:20150527104254p:plain

良い感じのレーダーチャートを表示できた。 ようやく、やりたいことが実現できて一安心。