カゴヤVPSでunixbenchしたら結構良いスコアが出た

こないだβが取れて正式リリースされたカゴヤクラウドVPSを早速一つ契約してみた。
これまで自作サーバ、さくら、EC2(Micro、Standard)、ServersMan@VPS、etcなど色んな環境を使ってきたけど、カゴヤVPSにログインして最初に感じた印象はなんかsshが快適だ!ってこと。特にEC2 MicroやServersManと比べると引っかかりやモッサリ感が殆ど無い。
で、評判はどうなのかなー?とぐぐってみてもまだあまり情報がない。ServersManと同じOpenVZってことは遅いんじゃね?みたいな話しか見当たらないのでとりあえずベンチを取ってみることにした。
とはいえベンチって普段やらないので何を使うか悩んだが、さくらの社長が 格安の低価格VPSを比較する という比較記事を書いていて、その中でunixbenchってのを使ってたのでとりあえずそれを実行してみました。実行結果は後半に貼りつけてあります。

感想

多分さくらの社長のブログに書いてあるグラフはunixbenchの最後に表示される「System Benchmarks Index Score」の値だよね?
てことはカゴヤクラウドVPS2781.6 ってかなり良い数字なんじゃね?CPU数が12個もあるのもイイね。
なので、カゴヤVPSってかなり使えそうってことでハード的に死亡寸前の自作サーバはカゴヤに移転して見ることにするわw

続きを読む

遂に決着!?エディタ別リア充度アンケート結果が公開される

先週からにわかに話題になっていたエディタ別リア充度アンケートが終了して結果が公開されました。


長年続いているemacs派とvi派の対決ですが、今日、一つの面で決着が付いてしまったかもしれません。
【急募】viユーザとemacsユーザのリア充率をキッカケに立てられたアンケートですが先ほどやっと結果が公開されたので簡単に分析してみました。
アンケート内容はシンプルに以下の3つです。

  1. エディタは何派?(択一)
  2. 結婚してますか?もしくは恋人はいますか?(択一)
  3. 年収は?(択一)

これらの結果をクロス集計して傾向を把握してみたいと思います。

続きを読む

カゴヤクラウドVPSが正式サービスイン→早速CentOS6に入れ替えてみたw


カゴヤ・クラウド/VPSが一昨日(10/26)にようやっとβが取れてサービスインしたようなので早速お試しで一つ契約してみました。
契約から起動までほんの2,3分で完了。とっても簡単。そしてサーバの追加や起動もとっても速いです。
sshしてざっと見回った感じでは動作もサクサク、ストレス無く操作できて快適な感じ( ´∀`)

続きを読む

jQueryのbind/live/delegateの違いまとめ、と新API .on()の使い方

jQueryのイベント記述方法はいくつかあり、大雑把におさらいしたのが以下の3パターンです。

  1. まず一番基本的なのが $("a").click(fn) や $("a").bind('click', fn) です。click(fn)はbind('click', fn)の省略形です。
  2. 次にjQuery1.3で $("a").live("click", fn) という機能が出来ました。liveの良いところはDOM操作で出たり消えたりするエレメントに対して再バインド無しでイベント定義ができる利便性と、内部的にはbind個所がdocumentの1か所になり複数個所へのbindが無くなることによるメモリ効率と実効速度の向上です。
  3. 更にjQuery1.4.2で $("#foo").delegate("a", "click", fn) という書き方が出来るようになりました。これは特定要素以下に限定するliveイベント定義のようなもので、範囲を限定することによるパフォーマンス向上効果があります。あとliveでは登録時の先頭の$("a")で不必要な要素検索が一度実行されてしまう無駄がありましたがそれが無ありません。$(document).delegate("a", "click", fn)は$("a").live("click", fn)と同じ効果です。

特徴を纏めると↓こんな感じのハズ。

  • パフォーマンスは delegate > live > bind で優れていて*1
  • DOM操作耐性は live > delegate >> bind
  • 実行順序は bind > delegate > live *2

これらに加えて今回追加されるのが次に説明する新APIのon/offです。

*1:http://bit.ly/pNBiEn ←ここページのRun testsボタンを押すと自分のブラウザでベンチマークができます。昔は何となく対象DOMに直接bindした方がliveとかより速いと思ってたんだが全く逆だったので印象に残ってる。delegateやliveはDOM操作でイベント消えたりしないわ速いわで最強だった。

*2:bindはイベント発生元に一番近いので一番最初に実行されます。delegateで設定した要素は必ずイベント発生源の親か祖先要素なので、発生源からバブリングしてきたイベントは次にdelegateでセットしたコールバックを実行します。全ての祖先要素をたどってバブリングしてきたイベントは最後documentに辿り着きます。liveハンドラはdocumentにbindされるので必ず最後の実行になってしまいます。

続きを読む

僕が広告に載ったよー!w

Google AdWords のクーポン1万円がGoogleから届いたので特に宣伝するものもないので自分を広告に載せてみたよ。
広告掲載までの手順はこんな感じ。

  1. AdWordsにログイン
  2. メニューの料金→課金設定でプロモーションコードを入力→9/30の期限付きで1万円チャージ完了
  3. キャンペーン管理から新しいキャンペーンを作成
  4. 更にその下に新しい広告グループを作成、ここで広告の文言とかキーワードを入力して保存
  5. 保存成功したら5分くらい待つ
  6. おもむろに設定したキーワードでGoogle検索(ドキドキ
  7. 出たー!ww


1クリック貰うために数10円払うとか、お金が稼げるサイトでもなきゃなかなか試す気にもならないので(^^;、クーポンでこういう機会を作って貰えるのは良いですね。

追記

後日Google様から規約違反の使い方だとかいう警告メールが来て今後Adwordsが使えなくなりました…。

DevQuiz締め切ったのでコード公開 #gdd11jp

Web Game

ブラウザで神経衰弱をひたすら解くという問題。GoogleChrome拡張を作らせたかったみたいだけどマニフェスト書くのも面倒だったのでuserscriptで作った。
ソース:http://bit.ly/nTWY8B

// ==UserScript==
// @name          devquiz2011_resolve_webgame
// @namespace     http://userscripts.org/users/kawaz
// @description   GDD2011のDevQuizのWebGameを解く
// @include       http://gdd-2011-quiz-japan.appspot.com/webgame/problem
// ==/UserScript==
var click = document.createEvent('MouseEvents');
click.initEvent('click', true, true);
var cards = Array.prototype.slice.apply(document.querySelectorAll(".card"));
var colors = cards.map(function(){return ""});
(function(){
  //次の空き地を探す
  var i = colors.indexOf("");
  if(i < 0) {
    //クリア
    return;
  }
  //空き地を開く
  cards[i].dispatchEvent(click);
  //開いたカードの色を取得
  var c = cards[i].style.backgroundColor;
  var j = colors.indexOf(c);
  console.log("" + i + "," + j + "," + colors);
  if(j < 0) {
    //初めてなら覚える
    colors[i] = c;
  } else {
    //既出なら同色のカードを取る
    cards[j].dispatchEvent(click);
    if(!cards[i].style.backgroundColor) {
      cards[i].dispatchEvent(click);
    }
    //取ったカードにフラグ立て
    colors[i] = colors[j] = 'OK';
  }
  //次手へ再帰ループ
  //arguments.callee();
  setTimeout(arguments.callee, 100); //アニメーションを楽しむ為にゆっくり化
})();

実行風景も録画してみたので公開。デフラグぽくて見てると落ち着く(笑

Google Apps Script

GoogleDocsでプログラムが出来るよーというのがAppsScript(通称GAS)。これを使った問題で、与えられたJSONデータからスプレッドシートを作成するという問題。Javascriptで簡単に操作できるのでとても便利です。

var ss = SpreadsheetApp.getActiveSpreadsheet();

function resolveQuiz() {
  var qs = ss.getActiveSheet();
  var q = qs.getRange(1, 1).getValue();
  try {
    var json = JSON.parse(q);
  } catch($e) {
    Browser.msgBox("A1セルに問題のJSONを入力しておいて下さい");
    return;
  }
  //シートを全削除
  qs.setName("問題入力用");
  ss.getSheets().forEach(function(s){
    Logger.log(s.getSheetName());
    if(s.getName() != qs.getName()) {
      s.activate();
      ss.deleteActiveSheet();
    }
  });
  //回答シートを作成
  json.forEach(function(v, i){
    var sheet = ss.insertSheet(v.city_name);
    v.data.forEach(function(d,i){
      sheet.getRange(i + 1, 1).setValue(d.capacity);
      sheet.getRange(i + 1, 2).setValue(d.usage);
      sheet.getRange(i + 1, 3).setFormula("=B"+(i+1)+"/A"+(i+1));
      sheet.getRange(i + 1, 3).setNumberFormat("##.00%");
    });
  });
  //問題入力用シートを削除
  ss.getSheetByName("問題入力用").activate();
  ss.deleteActiveSheet();
}

スライドパズル

3x3から6x6までの障害物付きスライドパズルの盤面が全5000問出題されてそれを解くというもの。
コード公開しようかと思ったんだけど、Chromeデバッグコンソールで解いたのでちゃんとしたコードが残ってない(^^;
ちなみに1時間くらいごちゃごちゃしてたら幾つか解けるようになり、一晩回して553/5000問解けたところで一旦提出しました。んでその後放置で締切(^^;
でも足切り101点前後で、105点出してるから多分参加資格はGET出来るはず!

その他

今回はスルーしたけど他にも、Androidのライブラリが与えられて回答を得る問題や、Go!言語でPNG画像解析をさせるなど、Googleプロダクツを使ってみてよ!というGoogleの声が聞こえる問題ばかりで楽しかったです。
11月1日の当日に入ってしまっていた健康診断の予約もずらして準備万端。
どんなサプライズが用意されてるか期待してます。

VirtualDocumentRootを使って複数ドメインをスッキリ管理(Apache)

最近は個人的にはnginxnode-http-proxyを使うことが多くなってきましたが、phpを手軽に使いたいときとかhttpdもまだまだ使う機会は多いです。今日は新しいサーバの設定しながらふとTipsを一つ吐き出してみます。

続きを読む