2009年5月31日日曜日

から揚げ食べ放題

 
【日曜版】漢達の楽園、唐揚げ食い放題の店が下北沢にあった【休日は脂】 | 未来検索ガジェット通信
この記事につられて、から揚げ食べ放題をしてきました~

 
肉、肉!

 
ひたすら肉でした。結構な勢いで食べて満足満足。

2009年5月29日金曜日

Google Desktop for 64Bit

せっかく最近JavaScriptを覚えたのでGoogle Gadgetでも作ってみようかと家のVista 64BitにGoogle Desktopをインストールしようとしたらなんか対応してませんとかいってインストールできなかった。
昔インストールした覚えがあるのにおかしぃなぁ~と調べてみたら、コマンドラインで/force オプションをつけてやるとインストールできるようになるらしい・・・もう記憶からすっかり抜け落ちてて覚えてないんですが、これやったのかなぁ

2009年5月28日木曜日

アニソンDJバー

 
川崎にあるアニソンDJバー「月あかり夢てらす」にいってきましたー
アニソン系の曲がノンストップで流れ続けてそれに合わせて映像も流れつつお酒が飲めるという所なんだけどなかなか面白かった

 
雰囲気はこんな感じ、ケータイで撮ったのでいまいちわからないかな?各席には抱き枕が敷かれててその上に座ってまったりできますw
メニューも「ホワイトベース」やら「ねこみみもーど」なんていうアニメにちなんだものが並んでたりとなかなかオタク受けを狙ってた。注文すると店員もそのメニューについてのオタトークを少ししてくれたりとなかなかいい感じ。
流れる曲の種類はアニメDJバーと言ってるけど結構オタク的範囲をカバーしてる感じ。ある程度古いアニメから最新のものまで・・・行った時にはふしぎ遊戯とか流れてた。新しい方はその日にCDが出たばっかりの咲のエンディングとか。アニメ以外のところだとニコニコ動画系、チルノのパーフェクトさんすう教室とか。曲も次々流れるんだけど前の曲と次の曲に関連性が持たせてあって面白い。メイドつながりでこれが私のご主人さまから花右京メイド隊とか、釘宮つながりとかw
客の雰囲気はまったりとしてる人から曲に合わせて歌う人。オタ芸をやりだす人とフリーダムな感じ。平日と休日で雰囲気は随分かわるらしい、休日は毎週イベントが入ってるらしく結構激しそうな感じ、まったりするなら平日とのこと

こういう店がアキバじゃなくて川崎にあるっても不思議な感じだな。

2009年5月27日水曜日

Google Ad Plannerで見るゲーム会社

Google Ad Plannerなるサービスが始まった。
指定したサイトのユーザーの傾向(男女比、年齢層、年収など)を調べてくれるサービスでちょっと使ってみたけど面白い。Googleのアカウントがあれば無料で使えるみたい。
とりあえずゲーム会社のURLを入れてどんな感じか調べてみた。リンクをだーっと張っておく

・SEGA
・任天堂
・バンダイナムコゲームス
・コナミ
・カプコン

ん~あまり変化が無くて面白くないな・・・若干任天堂が男女比率が違うぐらいか。
もっと変化がありそうなところを探してみる

・Key Visual arts
・Leaf
・アリスソフト

うん。さすがエロゲ会社だ。男率90%とかになってるw
しかし、一番多い年齢層が17歳以下って・・・いいのかな?てかこれ正しいのか?

2009年5月25日月曜日

LINQ to XML でXPath

最近VisualStudio 2008を入れてLINQ to XMLとか使ってみようかな~といろいろ試行錯誤中。
とりあえずXmlDocument -> XDocument, XmlNode -> XElement な感じでコードをどばーっと書き換えてるが
XmlNode.SelectSingleNode(xpath) が XElement.Element(xpath) だと動かない。
どうもXElement.Elementはひとつ分の子供しか参照できないみたい。まぁそうか
で、XElementに対してXPathって適応できるのかな~ってしらべたらやっぱりちゃんとあった。
using System.Xml.Linq;
を追加してやるとElement.XPathSelectElement って関数が追加される。これあれか、C#3から追加されたクラスに追加メソッドを追加できるとかいうやつかね。

ファイナルファンタジーXI 7周年記念!「冒険者さんありがとうキャンペーン+」

ファイナルファンタジーXI 7周年記念!「冒険者さんありがとうキャンペーン+」
今年もやってきました。FFXIは普段はやらないんだけど、この時期になると前の年にもらったアニバーサリーリングを消費しないとなぁ~とFFXIをやってしまうw
アニバーサリーリングってのは使うと一定時間経験値が2倍になるというアイテム。買える物ではないのでこういうイベントでもないと貰えない。そして2個以上所持できないので、手に入るイベントがあったらそれまでに消費しきって捨てないともったいないのだ!
さて、今年の秘密情報はこれ

 
まぁそんなにやってない感じだよね。毎年すこーしずつやってますが、今年はアニバーサリーリングを消費してたらついにレベル50まで来てしまった・・・限界突破クエストなるものをやらないとそれ以上レベルが上がらないらしい・・・来年のアニバーサリーリングを消費する時期までに終わらせておくかねぇ

2009年5月23日土曜日

Greasemonkey(JavaScript)入門

ここ2週間ほどGreasemonkeyのスクリプトを毎日書き続けてる。
まじめにJavaScriptを書いたのが今回が初めてなので色々作法がわからずつまずいたところとかがあったのでまとめておく。解決した項目も未解決の項目も・・・長文になりそうだ

最初にJavaScriptの第一印象なんだけど、なんというか自由な言語。好き勝手できるし、しちゃうと収拾が付かなくなる。最初に作られた仕様の拡張拡張でここまできちゃってもうぐちゃぐちゃなのかな~という感じ
こんな言語で高度で複雑なものなんか作れるわけ無いと最初は思ってたけど色々使ってるうちに意外といける気もしてたり・・・コーディングに自分なりの制約をかけてやればちゃんと使えるのかな?

まず、Greasemonkeyを使うにあたっての開発環境だけど、ブラウザはFireFox3 アドオンにもちろんGreasemonkey、あとFireBug、これが無いと色々不便。最低限必要なものはこんな感じか
で、肝心のエディタなんだけど・・・これ普通何つかうものなの?
最初はnotepad.exeでちくちく書いてたんだけど8タブなのがどうしても我慢できずサクラエディタに切り替え。最近のプログラマにありがちなオートコンプリートが無いとコードがまともに書けない状態に陥りVisual Web Developer 2008 Express Edition をインストールして単純にエディタとして使ってるのが現状。普段使ってるエディタがVisualStudioなのでやっぱり使い慣れたエディタが一番だよね

デバッグについて、GM_logって関数でいわゆるprintfデバッグのようなことができる・・・が、ブレークポイントとか張れないのか!?FireBugでサーバー側のスクリプトに対してはブレークポイントが張れたんだけどgreasemonkeyのスクリプトが一覧に出てこないのでブレークが張れずいまだにGM_logでがんばってデバッグしてる・・・ちょっと調べたけどいまいちやり方がわからんかった。

配列をforeachしたい

for(var i in list)
{
    list[i];
}
とりあえずコレでいいみたい。ただプロトタイプ拡張(?)をすると追加したメンバー関数もリストアップされちゃうので注意らしい。まだその域に達していないので良くわからない。単純な配列であれば問題ないみたい。

ページ遷移のたびに変数が消えてしまう・・・
GM_setValue GM_getValueってのを使ってページ遷移を通じで変数の受け渡しをするみたい。だけど連想配列とか丸ごとsetValue getValueしたいけど対応している型がbool int string の3種類だけみたい。
ちょっと調べてみたらFireFox3.1からはJSON形式なるものになってオブジェクトがまるっと保存できるそうな?まぁJSONってのが何なのかわかってないんだけどねw 現状では無理みたい。toSource関数とevalってのを組み合わせることでJSON形式の文字列としてうんたらってのもあったけどよくわからなかったのでとりあえず保留。1次連想配列を id:name=value:name=value,id:name=value:name=value っていう独自の形式で出力、入力する関数を作って対応してしまった。もうちょいすればきっとこの辺を簡単にやってくれるようになるはず!

ページを開いて5秒してから実行したい
setTimeoutなる関数を使う。
setTimeout(function(){
    //code...
}, 5 * 1000);
比較的簡単でこりゃ便利と思ってたら思わぬ罠が・・・どうもこのfunction(){}の中が実行されるのが指定した時間の後になるため、function内部でfunction外部の変数を使ってると変数が変わってしまうと動作時に参照される変数も変わってしまう。ややこしいなつまり
var list = ["hoge", "boe", "moe"];
for(var i in list){
    setTimeout(function(){
        alert(list[i]);
    }, 5 * 1000);
}
こんなコードを実行するとhoge boe moe と表示してほしいのに
moe moe moe と表示されてしまう。ようはfor文が回りきった後のi=2 の状態に対してfunctionが呼ばれてしまうからみたい。回避策としては匿名の関数を作ってその中でローカル変数に使いたい値を代入してやるのが一番らくちんかな?
var list = ["hoge", "boe", "moe"];
for(var i in list){
    (function(){
        var tmp = list[i];
        setTimeout(function(){
            alert(tmp);
        }, 5 * 1000);
    })();
}
(function(){})(); でこの外側のfunctionがその場で実行されて、その中の変数tmpはそのつど作られるのでそこに値を代入(参照?)してやればうまくいくとそういう感じ

ページ遷移、リンククリック
locationというオブジェクトに対して操作することで可能
location.reload(); //ページをリロード
location.href = "http://....";  //指定のURLに飛ぶ
var a = document.getElementsByTagName("a")[0];
location.href = a.href; //aタグのリンクに飛ぶ
location.href = a.getAttribute("href"); //これはダメ どうも絶対パスじゃないといけないみたい

さて、ここから先は解決していない問題。
GM_xmlhttpRequestの結果のパース
 GM_xmlhttpRequest({
  method:"GET",
  url:target_url,
  onload:function(x)
  {
                    x.responseText;
                    //code...
                }
 });
とりあえずリクエストを発行するところまではいいんだが、結果のこのx.responseTextの処理の仕方がわからなかった。この結果をdocumentと同じように扱いたいがどうやってその形式にパースしてやるのかわからない。結局responseTextを単なるテキストとして文字列マッチで処理してしまってる。
DOMParserとかを使ってパースするとか書いてあったんだけど、リクエスト先が普通にhtmlでbrタグが閉じられてなかったりとかでまともにパースできない。でもGreasemonkeyで実際にHTMLをパースして結果をdocumentというオブジェクトであらわせてるんだからできると思うんだけどなぁ 分からん。

Arrayクラスのメンバー関数がいろいろ便利
.someとか最初知らなくて普通にforでまわしてフラグ立てたりしてた。
そんな中困ったのが.filterや.sort 関数。配列で飛び飛びの配列ID番号(list[332] = 10; list[567] = 20; みたいな感じ)が入ってるのがあって、そのID番号に意味があるんだけどそいつらを加工するのにfilterやsortを使うと。出来上がる配列がもとにあった飛び飛びのIDがきえちゃってて0,1,2 と詰まった感じのものになってしまう。これIDを引き継いでやる方法ないのかな?

別のJavaScriptで付加されたイベントの実行ができない
input type=button のオブジェクトにたいしてonclickが別JavaScriptで設定されている場合はうまく動いている気がするんだけど、img タグにonclickイベントを負荷した場合にimgタグに対してimg.click(); って呼び出しをしてもonclickイベントが通知されないみたいでコードが実行されずうんともすんとも言わない。これは何で!?結局良くわからなかったので別ソースのJavaScriptのonclick部分をコピペして自分で独自にイベントを追加しちゃいました。何でなんだろう・・・

でもまぁ、なんだかんだ言いながらも作りたいものは作れる状態になってきた。Haskellをやったときのような不自由さは感じないかなぁ。