『SQL 実践入門』読んだ

SQL実践入門』という名前だけど、 実行計画がバンバン出てくるので、とても初心者向けではない。 SQL と実行計画の解説がたっぷりの、中級者以上向けの本だった。

SQL の実行計画が読めれば、SQL のパフォーマンス問題の大半が解決できそうに思える。 例えば、テーブルに何度もアクセスしていたり、インデックスが使われていなかった、 といったことが原因なら実行計画を見れば判断できる。 また、結合時に TMP 落ちしていて余計なディスク IO が発生している、ということも 実行計画を見て推測できる、かもしれない。

ただ、実行計画は統計情報から作成されるので、統計情報が実際のデータと違っていたら、 実際のデータに即した実行計画は作成されない。実行計画を100%鵜呑みにはできない。 モデルの設計を変更しないと根本的に解決できないようなケースも存在するので、 実行計画が読めれば全て OK というものでもないのがツライところ。

自分の場合、実行計画については無頓着だったので、実行計画を意識して SQL を書くように心がけよう。 本当は実行計画を意識しないで済むのが一番いいし、SQL はそれを理想としているみたいだけど、 理想にまだ現実は追いつけていないから。

博多 元助

無性につけ麺が食べたくなったので、 薬院にある『博多 元助』に行ってみた。 あらかじめ地図で場所を確認したんだけど、通りを間違ってしまい、 たどり着くまで15分くらい彷徨ってしまった・・・。

f:id:griefworker:20150419184059j:plain

着いたら早速、特製つけ麺を注文。麺は中太。 大盛りにするか迷ったけど、昼食が遅かったんで中盛にしておいた。 ツルっとしていてのど越しが良い。

f:id:griefworker:20150419183113j:plain

魚介豚骨のつけ汁は濃厚で旨みたっぷり。 濃すぎるというわけではないので、万人受けしそう。 チャーシューも柔らかくて美味。

f:id:griefworker:20150419183032j:plain

ここ数日つけ麺に飢えていたので、つけ麺分を補給できて満足。 兼虎が夜営業をやめている現在、夜につけ麺を食べる店としては筆頭候補かもしれない。

なにより、テーブルに IH ヒーターが設置してあって、つけ汁を保温できるのが最高。 熱々のまま食べることができて、大変気分が良い。

関連ランキング:ラーメン | 薬院大通駅薬院駅渡辺通駅

ラーメン TAIZO

住吉にあるラーメン TAIZO に行ってみた。 福岡のラーメン本によく登場する有名店なんだけど、 福岡に 9 年住んでいるのに、まだ一度も行ったことがなかったな、そういえば。

f:id:griefworker:20150417183415j:plain

がっつり食べたい気分だったので、 ラーメンとミニチャーハンと餃子のセットを注文した。

ラーメンはもちろん豚骨。 臭みやクドさを感じない飲みやすいスープで、かなり自分好み。

f:id:griefworker:20150417183946j:plain

ミニチャーハンはラーメン屋のチャーハンにしては珍しく、 アッサリした味付けだった。

f:id:griefworker:20150417183915j:plain

餃子は一口サイズ。 博多の一口餃子は食べやすくて良いね。

f:id:griefworker:20150417184210j:plain

このセットで 1000 円というのはコスパ悪くないな。 チャーハンはもっと濃い味付けの方が好みだけど、あっさり味も嫌いじゃないので、 全体としては満足。

関連ランキング:ラーメン | 渡辺通駅薬院駅天神南駅

けごんらーめん

警固にある『けごんらーめん』に行ってみた。 ここは福岡では珍しい味噌ラーメンのお店。

f:id:griefworker:20150408192007j:plain

『けごん味噌らーめん』は豚の背脂が入っていて、 味噌ラーメンにしてはコッテリした味。 結構イケル。

f:id:griefworker:20150408192747j:plain

ご飯ものが欲しかったんで、半ライスと半餃子のセットも注文。

f:id:griefworker:20150408192753j:plain

餃子は皮がもちっとしていて旨かった。

f:id:griefworker:20150408192924j:plain

チャーハンがあれば注文したんだけど、無いものは仕方ない。 ラーメン屋のチャーハン好きなんだよなぁ。

久しぶりに味噌ラーメン食べたけど、やっぱり味噌もいいもんだ。

関連ランキング:ラーメン | 赤坂駅薬院大通駅桜坂駅

LINQ でランキングを作成

LINQ でランキングを作成するサンプルを書いてみた。

using System;
using System.Linq;

namespace LinqRankingSample
{
    class Student
    {
        public string Name { get; set; }
        public int Score { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var students = new Student[]
            {
                new Student()
                {
                    Name = "香川",
                    Score = 70,
                },
                new Student()
                {
                    Name = "本田",
                    Score = 85,
                },
                new Student()
                {
                    Name = "柴崎",
                    Score = 70,
                },
                new Student()
                {
                    Name = "宇佐美",
                    Score = 80,
                },
                new Student()
                {
                    Name = "長友",
                    Score = 60,
                },
                new Student()
                {
                    Name = "岡崎",
                    Score = 65,
                },
            };

            var ranking = from s1 in students
                          let higher = from s2 in students  // 現在の生徒より点数が良い生徒を取得
                                       where s2.Score > s1.Score
                                       select s2
                          select new
                          {
                              s1.Name,
                              s1.Score,
                              Rank = higher.Count() + 1, // 現在の生徒より点数が良い生徒の人数 + 1 が順位
                          } into s3
                          orderby s3.Rank  // 順位で並び替え
                          select s3;

            foreach(var student in ranking)
            {
                Console.WriteLine("{0} 位 {1} {2} 点", student.Rank, student.Name, student.Score);
            }

            Console.ReadLine();
        }
    }
}

f:id:griefworker:20150416215636p:plain

ある生徒の順位は、「その生徒よりも点数が高い生徒の人数 + 1」で求めることができるので、 それを LINQ に落としんだ。

『Yコンビネーター』読んだ

Kindle 版があったので購入してみた。 本書はそのものずばり、著者がY コンビネーターの2011年夏学期に密着取材して書いた本。 それも、やるなら徹底的にだと言わんばかりに。

例えば、応募チームをYコンビネーターが採択するかどうかを決める面接。 面接で交わされた質疑応答だけでなく、面接後のスタッフ間だけの会話まで載っていて、 当時ポール・グレアムがどう評価したのかを本人の言葉で知ることができた。 学期内に何度も行われるミーティングでの、ポール・グレアム達と応募者のやりとりでも、 その光景が容易に思い浮かぶほどの情報量で、Yコンビネーターの雰囲気が文面から伝わってきた。

MongoHQ や Parse、そして Codecademyといった、 自分が知っているスタートアップが出てきたのも嬉しい。 MongoHQ や Parse のチームは優秀で、終始順調だったみたいだ。 読んでいて正直、Y コンビネーターに応募する必要がなかったのではとさえ思った。

ドラマチックだったのは Codecademy。 なんと、投資家へのお披露目『デモ・デー』の一週間前までサービスをローンチできていなかったが、 ローンチしてから数日で急激にユーザーを集めたという、小説家でも書かないような逆転劇。 当事者たちにとって、ものすごいプレッシャーだったことは想像に難くない。

ポール・グレアムが優れたエンジニアだったから、Yコンビネーターは注目を集めたし、 優れたビジネスセンスも持ち合わせていたから、成功したんだろうな。 両方が備わっていたからこそ、シリコンバレーハッカーがアドバイスに耳を傾けるし、アドバイスを求める。 スタートアップに投資するベンチャーキャピタルはこうであって欲しいという理想像だ。

非常に面白かった。 著者の取材力もさることながら、ここまでの密着取材を許可したYコンビネーターの懐の広さも素晴らしい。 起業を目指す人は読んで損は無い。 むしろ「○○市を日本のシリコンバレーに」なんて考えている人にこそ読んで欲しい。 Yコンビネーターみたいなベンチャーキャピタル、 いや、ポール・グレアムみたいな存在が必要だと思うはず。

Microsoft Azure の Cloud Services のデプロイで嵌った

嵌ったのでメモ。

WCF Service WebRole を含む Cloud Service を、Visual Studio 2013 Update 4 で Microsoft Azure にデプロイしたら、 パッケージを作るところでエラー発生。

Could not load file or assembly ‘Microsoft.WindowsAzure.Packaging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Windows Azure Tools\2.5\Microsoft.WindowsAzure.targets

インストールしている Azure SDKツールが壊れたのかと思い、個別にインストーラーを実行して修復。 するとパッケージの作成でエラーは出なくなった。

再度、Visual Studio 2013 で Microsoft Azure にデプロイすると、 今度は「IISConfigurator.exe が無い」みたいなエラーが発生。

The file provided is not a valid service package. Detailed error code: WCFServiceWebRole Invalid application runtime - a runtime component is missing:/base/x64/IISConfigurator.exe.

Twitter で @kosmosebi 氏に「Azure SDK を 2.5.1 にしたらいいかも」というアドバイスを頂いたので、 2.5.1 をインストールして再度デプロイを試みたが、同じエラーが発生。

最終的には @kosmosebi 氏のブログ記事

にある通り、Azure Authoring Tools をアンインストールしてリンク先のツールを入れることで、問題解消。

ほんと、今回は困った。