ASP.NET MVC で WebForms の Chart を使う

System.Web.Helpers.Chart クラスを使うと、 ASP.NET MVC で手っ取り早くチャートを作成できた。

tnakamura.hatenablog.com

System.Web.Helpers.Chart はなかなか高機能だけど、 カスタマイズしづらい。 XML 形式の文字列でテーマを作成するとか苦行。

そこで思い出した。 WebForms の System.Web.UI.DataVisualization.Charting.Chart も高機能だったな。 カスタマイズ性も高かった気がする。 ASP.NET MVC で WebForms の Chart が使えれば要件を満たせるかも。

というわけで早速チャレンジ。 お試しということで、今回もレーダーチャートを出力してみよう。

まず、プロジェクトの参照に System.Web.DataVisualization を追加。

f:id:griefworker:20150526162039p:plain

次に、レーダーチャートの画像を返すアクションをコントローラーに作成する。

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 = 400,
                Width = 400,
                ImageType = ChartImageType.Png,
                ChartAreas =
                {
                    new ChartArea
                    {
                        Name = "Default"
                    }
                },
                Series =
                {
                    new Series
                    {
                        Name = "サンプル1",
                        ChartType = SeriesChartType.Radar,
                        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>

ブラウザでアクセスすると、レーダーチャートを表示できた。

f:id:griefworker:20150526162111p:plain

ASP.NET MVC で WebForms の Chart が使えることを確認。 次はチャートをカスタマイズしてみよう。

かろのうろん

櫛田神社のすぐ側にある『かろのうろん』は、 博多のうどんといえば真っ先に名前が挙がるような有名店。 それなのにまだ行ったことがなかったので、会社帰りに足を延ばしてみた。

f:id:griefworker:20150522180208j:plain

店内は写真撮影禁止だったので、店頭の写真を一枚。

f:id:griefworker:20150522180156j:plain

ごぼう天うどんとかしわおにぎりがお目当てだったんだけど、 両方とも売り切れ。仕方ないので、きつねうどん(520円)を注文してみた。

麺は博多のうどんらしく、コシは無いけど、やわらかくてモチモチとしていた。 ダシのきいたつゆはやや濃い口かな。 油揚げは短冊切りにしてあって、食べやすいけど、切ってないほうが好み。

予想していた通り、いかにも博多のうどんって感じの味だった。 ごぼう天うどんとかしわおにぎりが食べられなかったのは残念だけど、 お昼の早い時間に行かないと食べることはできなさそうだな。

関連ランキング:うどん | 祇園駅中洲川端駅呉服町駅

『プロトタイピング実践ガイド』読んだ

趣味でWebサービスiOSアプリを開発していると、 ついすぐコーディングに入りがち。

自分が欲しい(または作りたい)アプリを作るから、 頭の中に完成イメージがあるとはいえ、その輪郭はたいていぼやけている。 そのため、勢いで実装し始めたものの、途中で使いづらいと感じて、 UI を変更することも少なくない。

実装中に UI を変更するのは大変だし、 UI の修正中は動いているところを見れないことも多い。 結果、モチベーションが下がる、というよくあるパターンに陥ってしまう。 それを回避するためにもプロトタイピングが必要。

ただ、闇雲にプロトタイプを作ればいいってものではない。 需要をリサーチし、ターゲットユーザーや利用状況を決め、 機能とコンテンツを選定する。 必要な機能だけに絞って実装し、その他の機能は潔くあきらめる。

そして、ペーパープロトタイピングまたは POP みたいなアプリを使ったツールプロトタイピングで、 レイアウトや画面遷移を検討。 デザインだけでなく使用感までチェックして改善を繰り返す。 なるほど、ここまで固めることが出きれば、開発の出戻りは少なそうだ。

WebサービスiOSアプリの新規作成または改善で、 本書の手順で開発してみようと思う。

『達人に学ぶ DB 設計徹底指南書』読んだ

データベースについて今までちゃんと勉強してこなかったことは、過去のエントリで書いた。 まったく勉強しなかったわけじゃないけど、 せいぜいソフトウェア開発技術者(現・応用情報技術者)の資格を取るときに少し勉強した程度。

データベース設計は、既存のデータベースを参考にしたり、過去の経験をもとに設計してきた。 理論的というよりも感覚的に作成していたと言っていい。 本書を読むことで、感覚的に行っていたやり方が、理論的なものに再構築された気がする。

気になった箇所に付箋を貼りながら読んだので、それをメモしておく。

概念スキーマ

ハードウェアのサイジング

  • 性能問題のほとんどはストレージの I/O ネックによって引き起こされる

ストレージの冗長構成

  • データベースの RAID は少なくとも RAID 5 で構成する
  • お金に余裕があれば RAID 10
  • RAID 0 は論外

バックアップ設計

正規化

  • 第 3 正規形までは原則として行う
    • 関連エンティティが存在する場合は、関連とエンティティが 1 対 1 になるように注意する
  • 原則として非正規化は許さない
    • 非正規化はあくまでも最後の手段
    • パフォーマンスを向上させるためのその他すべての戦略が要件を満たさない場合だけ

インデックス

  • 大規模なテーブルに対して作成する
  • カーディナリティの高い列に作成する
  • SQL 文で WHERE 句の選択条件、または結合条件に使用されている列に作成する
  • レコード数が 1 万件以下の場合はほぼ効果が無いと考えていい
  • 特定のキー値を指定したときに、全体のレコード数の 5% 程度に絞り込めるだけのカーディナリティがあること

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書

金田家

福岡県の行橋市にある人気ラーメン店『金田家』。 行橋市は場所的に大分に近く、車を持っていないから行くことは無いだろうなと思っていたら、 なんとキャナルシティのラーメンスタジアムに出店していた。 この期を逃すわけにはいかないので、 さっそく会社帰りに行ってみることに。

注文したのはラーメンと餃子とご飯のセット。 ラーメンはポタージュスープかと思うくらいクリーミーな豚骨。 今まで食べたラーメンの中でも1位2位を争うクリーミーさ。

f:id:griefworker:20150428181753j:plain

餃子は非常にジューシーで旨かった。 ラーメン屋の餃子っていうレベルじゃない。 餃子とご飯だけでモリモリ食べれそう。

f:id:griefworker:20150428182124j:plain

あとご飯。

f:id:griefworker:20150428181804j:plain

ようやく念願の金田家のラーメンを食べることができた。 ラーメンは期待通り、そして餃子は期待以上の旨さだった。

関連ランキング:ラーメン | 祇園駅中洲川端駅渡辺通駅

Vim を更新したら undofile が作成されるようになっていた

久しぶりに Windows 版の Vim を更新したら、 編集したファイルと同じディレクトリに .{ファイル名}.un~ というファイルが作成されるようになっていた。

これは undo の情報をセッションを越えて保持できるようにするためのファイルのようだ。 どうも、Vim は 7.4.227 からデフォルトでこのファイルが作成される設定になったらしい。

ファイルを開きなおした後もアンドゥできるのは便利機能だけど、 今のところ必要としていないので、.vimrc に

set noundofile

を追加して無効にしておく。

『達人に学ぶSQL徹底指南書』読んだ

最近は RDBSQL について集中的に学習したい衝動に駆られているので、 今度は SQL のテクニックを身に着けるために本書を購入してみた。

本書では数々の SQL のテクニックが紹介されているが、 その中心はなんといっても CASE 式。 CASE 式徹底指南書と呼んでもいいじゃないだろうか。

特にインパクトがあったのは次の一文。

WHERE 句で条件分岐させるのは素人のやること。 プロは SELECT 句で分岐させる。

似たようなのにこんなのもあった。

HAVING 句で条件分岐させるのは素人のやること。 プロは SELECT 句で分岐させる。

WHERE 句や HAVING 句の条件が違う SQL を、 IF で分岐させて記述したり、 パラメータを変えて何回も実行したりしていた自分は、 まさに SQL 素人だったというわけだ。

CASE は式なので、式が書ける場所はどこでも使える。 SELECT だけじゃなく、GROUP BY や集約関数の中でも使えたりするから、 書ける SQL の幅が一気に広がる。

CASE 式を使いこなせるようになることが、 SQL の素人を脱してプロになるための第一歩だな。

達人に学ぶ SQL徹底指南書

達人に学ぶ SQL徹底指南書