Google App Engineで実現して欲しい3つのこと

まず、一つ目は独自ドメインをネイキッドドメインにすること。

現状では、ネイキッドドメインは不可能。
なぜなら、独自ドメインを実現するにはGoogle Appsの利用が不可欠であり、Google Appsはホスト名を必ず指定しないといけないからである。
例えば、example.comというドメインを持っていた場合、Google Appsではwww.example.comやd.example.comのようなホスト名がある完全修飾ドメイン名(FQDN)が必須。
ちなみに、Google App Engine側ではマッピングしてくれない。こちらを参照
もし、ネイキッドドメインにしたいなら、レジストラ、もしくは所有しているサーバでURL転送を行うと良いが、フレーム転送ではドメイン以下のURIに対しては転送してくれない、そしてリダイレクト転送では、ネイキッドドメインにアクセスしても結局違うドメインにリダイレクトされるのだから意味がない。
よって、ネイキッドドメインによるサイト運用は不可能である。

二つ目はSSL

Google App Engineのスタートガイドにはこう書いてある。
SSLが使用できない理由。

受託開発をされている企業なら、Google App Engineの採用は絶望的だろう。
ただ、プロキシサーバを用意すれば、可能だが、そこまでして他のサーバから乗り換える企業はいないだろう。

三つ目はファイルの書き込みが不可能。

この項目は目をつぶろうと思えばつぶれるが・・・。
そもそもGoogle App Engineのサーバが大量並列化されているので、ファイルを書き込んでもそのファイルが分散されて保存されてしまうから読み出し不可能なのである。

以上が最低限実現可能になって欲しい項目である。
あとトランザクションもそうだが、これはGoogle App Engineでの話だけでなくKey-Valueストア全体による問題なので、RDBと比較しても、メリット、デメリットを考慮して納得できそうだ。
あと欲を言うならサーバに入りたい・・・。

JavaScriptのfunction文とfunction式を考えてみる

まずJavaScriptの関数のおさらい。
以下の二つは同じ意味。
function hoge() {}

var hoge = function() {};//無名関数を代入

両者の違いはかということ。
前者は文、後者は式である。
どちらを使うかはプログラマの好みであるが、自分は後者を使い続けてる。
理由は、関数を値として持つ変数ということを常に意識しているから。
JavaScriptではfunctionが文か式かを把握していないとのちのち困ることが出てくる。

特に
文では通常「関数の巻き上げ」という現象が起こる。「関数の巻き上げ」とは、スコープに関することで、JavaScriptでは関数を文で置くとどこに置かれているかに関わらず、スコープの一番先頭に移動されるのである。
文だけ。
関数呼び出し部分よりも後に記述しても呼び出し可能なのはこのため。
自分はゆるい感じでソース書くから文を使うと非常に危険なことに・・・関数は式のほうがスマートでコーディングしやすい!

JavaScriptのfunctionに関して余談だけど
以下はamachangさんの記事なんですが・・・、
(function(){})() と function(){}()

↑からわかるように
いきなり function(){}() なんて書けない!
なぜならJavaScriptでは「function」という単語から始まる文はfunction文であることがルールであるから。
もしfunctionから書きたいなら (function(){})()と書こう。

ってか function(){}()←最後の丸括弧をつけることによって・・・
まず以下の例を。
var foo = function() {
    var value = 0;
    return {
        hoge: function(num) {
            return value += typeof num === 'number' ? num : 1;
        },
        getValue: function() {
             return value;
        }
    };
}();
foo.hoge(5) //5
foo.getValue() //0
つまり、丸括弧は関数を呼び出した結果得られる戻り値を変数fooに代入している。

ちなみに上の式には、「クロージャ」の要素も取り入れている。
クロージャに関しては次回の記事で!

以上。自分用JavaScript日記でした。