blog.ishinao.net

282月/05

そしてハットトリックを決められた (18:10)

上の子もインフルエンザ確定。熱が下がってから、さらに2日は休まなければならないんで、今週いっぱい保育園休みは確定だな。せめて今週中に治癒証明をもらえれば、来週頭から行かせられるんだけど。

Filed under: 日記 No Comments
282月/05

逆をつかれた (15:23)

下の子供がおなかを下し気味なんで、下手したら保育園から呼び出しを食らうかなーと思っていたら、上の子が熱を出したと呼び出しを食らった。なんだか思いっきりフェイントに引っかかって脇を抜かれたような気分。

Filed under: 日記 No Comments
282月/05

本格化してきましたねー (09:23)

昨日から標準で鼻水オプションが付くようになり、今日はもうくしゃみオプションが頻発するようになったので、防具屋で立体マスクを装着してきましたよ。このくらいになってくると、薬を飲むタイミングをきちんと測らないと、朝起きたら目が開かなくなっていたりしそうだ。

Filed under: 日記 No Comments
272月/05

DBをHDD×2+別サーバー×1に分散 (23:48)

今まで一台のサーバー上のHDD2台に分散させていたDBデータを、さらにもう1台のサーバー上にもレプリケーションするように変更。ついでに、検索系の処理でリアルタイム性が必要そう&そんなに重くないQUERYが多いものに関しては、新しいレプリケーションサーバーに回すようにしてみた。ただ、新しくDBを動かしたサーバーのスペックがしょぼいんで、もしかしたら逆効果になるかもしれない。ダメそうだったら設定を元に戻しつつ、新しいいまどきのスペックのサーバーにリプレースすることを真剣に考えてみよう。

Filed under: 日記 No Comments
272月/05

タグベースのブラウザ (00:58)

mixiのshinoさんの日記を元にしたネタ。ソーシャルブックマークサービスのタグをたどって閲覧していく行為に特化したブラウザを、Ajaxを使って作るといいのでは。

まず元になる(MMの場合は)メモを開く。すると、そのメモの周辺にはそのメモにつけられたタグが描かれている。タグをクリックすると、そのタグで検索された最新n件のメモが表示され、さらにそれぞれのメモの周辺にはそれにつけられたタグが描かれている……。

って感じのもので、タグによる検索をAjaxを使って先読みしておいて、クリックされた段階で実際に表示する。もしもMindMap的な表現をするとしたら、以下のような感じ(JavaApplet。動作環境がよくわからないんで、見れない人ごめんなさい)。wemaあたりをベースに非同期で読み込んだ付箋を追加していくインターフェースを持たせたら何とかなるかもしれない。

あるいは単純にツリー表示にしてもいい。

  • 『[ネット]『「パソコン通信」とは何だったのか』反応』
    • [SNS]
      • 『Socialtunes』
      • 『はてな SNSもどき』
      • 『[TypeKey][SNS] TypeKey SNS (18:22)』
    • [blog]
      • 『コメントとツッコミとレスとトラックバックのあるブログはどうか』
      • 『ラブラブドキュンパックリコ - Blogのコメント欄が賛同か批判の両極端になりやすい理由とは?』
      • 『ウェブログの心理学』
      • 『アマゾンアソシエイトにNOと言え。』
    • [パソコン通信]
      • 『ITmedia ライフスタイル:「パソコン通信」とは何だったのか (1/3)』
      • 『ニフティ: 「ワープロ・パソコン通信」サービスの終了について』

ツリー表示と言えば、trackbackの追跡なんかもAjaxを使って非同期読み込みにしてもいいな。というか、現在blogmapに組み込んでいるtrackback追跡機能はそのうちAjaxを使って、解析状況に応じてツリーの枝を表示していくように改造しよう。

現在はリミットに達するまでサーバーサイドでたどってから表示しているんで、とっても重い機能になっちゃってる。Ajaxを使えば、1階層だけたどって結果を返すサーバーサイドスクリプトとそれを非同期で読んで結果を表示(追記)するJavaScriptの連携になるんで、とてもシンプルかつ高速に表現できる。しかもユーザーのアクションに応じて展開していけば、不要な枝をいちいちたどらなくてすむ。

Filed under: 日記 No Comments
252月/05

javascriptでテンプレート的なことをやる方法は? (18:48)

JavaScriptでテンプレート的なことをやってみようかと思って試しに、

<script language="javascript">
function add() {
var clone = document.getElementById('template').cloneNode(true);
var contents = document.getElementById('contents');
contents.appendChild(clone);
clone.all('title').innerHTML = '<h1>タイトル</h1>';
clone.all('number').innerText = Math.random() * 100;
clone.style.display = "block";
}
</script>
<a onclick="add()">add</a>
<div id="template" style="display: none;">
<span id="title"></span>
<span id="number"></span>
</div>
<div id="contents">
</div>

とかやってみたんだけど、allってIEでしか使えない(というか、Mozilla系では使えない)のか。Mozilla系でも使えるようにするには、どう書けばいいんだろう?

惜しい

DIVの子エレメントを取得できないなら、元テンプレートの内容を書き換えちゃってからcloneNodeしてしまえ! と思ったんだけど、Firefoxではなんか挙動が変だ。title、numberを書き換えると一個前にcloneNodeした内容まで書き換わってしまう。cloneNodeしてもIDが一緒だから、getElementById('title')とかしたターゲットがtemplateの中身だと絞れていないってことか? IEだとこっちでも正常に動いているんだけど。
 そういやFirefoxでは中身が空のspanのinnerTextは設定できなかった(多分createTextNodeしなきゃダメなんだと思う)んで、innerHTMLに変えた。

<script language="javascript">
function add() {
document.getElementById('title').innerHTML = '<h1>タイトル</h1>';
document.getElementById('number').innerHTML = (Math.random() * 100).toString();
var clone = document.getElementById('template').cloneNode(true);
var contents = document.getElementById('contents');
contents.appendChild(clone);
clone.style.display = "block";
}
</script>
<a onclick="add()">add</a>
<div id="template" style="display: none;">
<span id="title"></span>
<span id="number"></span>
</div>
<div id="contents">
</div>

やっと動くようになった

なんか無駄に回りくどいんだけど、互換性のためにはこう書かなきゃだめなの? もっと短くて両対応な書き方あるかなー。

<script language="javascript">
function add() {
var contents = document.getElementById('contents');
var template = document.getElementById('template');
var clone = template.cloneNode(true);
contents.appendChild(clone);
var title = getChildElementByClass(clone, 'title');
if (title) {title.innerHTML = 'タイトル';}
var number = getChildElementByClass(clone, 'number');
if (number) {number.innerHTML = (Math.random() * 100).toString();}
clone.style.display = "block";
}
function getChildElementByClass(pnode, className) {
for (var i = 0; i < pnode.childNodes.length; i++) {
var current = pnode.childNodes[i];
if (current.className == className) {return current;}
}
}
</script>
<a onclick="add()">add</a>
<div id="template" style="display: none;">
<h1 class="title">default title</h1>
<span class="number">default number</span>
</div>
<div id="contents">
</div>
Filed under: 日記 No Comments
252月/05

ってなんか (16:53)

Ajaxをつかった「くっつき〜」系みたいな感じだな。違いは、js無効でも前回リビルド時のデータが表示されている、と言う点くらいか。

Filed under: 日記 No Comments
252月/05

静的コンテンツとして生成しつつも、Ajaxを使って動的コンテンツを埋め込む (16:51)

Ajax関連の思いつき。movable typeみたいに基本的にコンテンツは静的に生成する。が、コメントやtrackbackみたいな動的コンテンツ部分が混ざっていると、通常はリビルドしないとコンテンツは表に反映されない(んだよね。MTの作りって見てないけど)。

そこでAjaxを使い、コメントやtrackbackなどの動的要素部分について、非同期でサーバーに問い合わせ、もしも更新があったらその部分だけをダイナミックに書き換える。そうすることで、完全リビルドしなくてもAjaxが有効なブラウザ環境ならば最新データが見える。もしもAjaxが無効な環境だとしても、少なくとも最後にビルドされた状態は見える。

といった感じで、静的生成しつつも、Ajax環境なら動的生成の恩恵も受けられる、という中間形態でパブリッシュできるようにしておくといいかもしれない。

まあblogツールの例の場合は、リビルドした方が効率がよさそうな感じだけど、CMS系一般として考えるとほとんど静的コンテンツ生成+Ajaxによる一部動的コンテンツ、という仕組みがうまくはまる例がありそうだ。blogツールでも切込隊長blogみたいなコメントチャット状態のところだと結構いけるかも。

Filed under: 日記 No Comments
252月/05

なんで楽曲データとか歌詞とかのデータを入れないのか (15:30)

コピーコントロールCDとかSACDとかDVD-AUDIOとか、レコード会社さんはなんかいろんなことをやっているけど、そんなのに金をかける余力はあるのに、いまだにCDの楽曲情報はCDDBとかから取らなきゃいけないの? CDの楽曲情報(CDタイトル、曲タイトル、作成者、歌詞、ジャケット画像……)をとっととCDに入れてくれよ。

Filed under: 日記 No Comments
252月/05

なんかRubyがやたらとCPUを食っているんで (14:14)

いったんリファラーの表示を中止。高速化されたという新しいdisp_refererを入れてみようか。でもうちの場合、あんまりリファラーって使われていない気もするから、非表示のままでもいいかな。

Filed under: 日記 No Comments