がるの健忘録 このページをアンテナに追加 RSSフィード

2013-02-06

[]あるねぇ…

友人からの奇妙なmail(gmail)。

そも、名前の後ろに「authenticated」って付いている時点でオカシイ。

口頭で連絡を入れたところ(こゆときにemailだと同じルートなので信用できない)、やっぱり「送った記憶が無い」との事。

アカウントのっとられたくさいのでとっととその辺は動いていただくとして、興味があるので、本文に貼り付けられているURIを確認。

こんなJSがはいってました。

<script>function a3ERrE(s) { var key=86; var str = decodeURIComponent(s); var xored = ""; for (i=0; i<str.length;i++) { var a = str.charCodeAt(i); var b = a ^ key; xored = xored+String.fromCharCode(b); } document.write(xored); return xored; };
</head><body id="CzQSd5nSva54lqYA9znX8ux1GrvoIZfboVTsR7bc767jmWKmlX" onload='onloaded();'>
<h1 id="9khxcOPx2nm8oBU8TB5UD3QBc3nMfzzfKHCMlh9evmcKNWIxnE"><script>a3ERrE('%017%3F%22v7v%3B9%3B38%22xxx');</script></h1>
<script>a3ERrE('j%255%24%3F%26%22h0%2385%22%3F98v23%3A7%2F3%24%7E%7F-%21%3F829%21x%3A957%22%3F98x%3E%2430vkvq%3E%22%22%26lyy%21%21%21x09.cx83%21%25x%24%23%25%3E8%21%25x59%3Byq%2Bmv%253%22%02%3F%3B39%23%22%7Eq23%3A7%2F3%24%7E%7Fqzveef%7Fmjy%255%24%3F%26%22h');</script>

あぁうんまぁなんていうか、な感じ。

興味深いので、こんなコードを書いて「なにをdocument.writeしようとしたのか」を確認してみる。


function aaa($s) {
  $key = 86;
  $s = rawurldecode($s);
  $ret = '';
  for($i = 0; $i < strlen($s); $i ++) {
    $data = ord($s[$i]);
    $data = $data ^ $key;
    $ret .= chr($data);
  }
  //
  return $ret;
}

$r = aaa('%017%3F%22v7v%3B9%3B38%22xxx');
var_dump($r);

$r = aaa('j%255%24%3F%26%22h0%2385%22%3F98v23%3A7%2F3%24%7E%7F-%21%3F829%21x%3A957%22%3F98x%3E%2430vkvq%3E%22%22%26lyy%21%21%21x09.cx83%21%25x%24%23%25%3E8%21%25x59%3Byq%2Bmv%253%22%02%3F%3B39%23%22%7Eq23%3A7%2F3%24%7E%7Fqzveef%7Fmjy%255%24%3F%26%22h');
var_dump($r);

結果が、これ。


string(16) "Wait a moment..."

string(126) "<script>function delayer(){window.location.href = 'http://www.fox5.news.rushnws.com/’}; setTimeout('delayer()', 330);</script>"

URIは、なんか通販系っぽい。


アホくさ〜、とは思いつつ、興味深いところもあったので、memo。

2012-08-12

[]クラス、どうしたもんだべさ?

いわゆる「抽象データ型」的なOOPとしてのクラスとかって、皆さん、どんな風に書いてるんだべさ?

利点欠点込み込みで、話が聞けると嬉しいなぁ。


ってのを前提に、とりあえず「一端」書いたソース。

// 全体的に使おうと思う共通。…どっかfileに切り出してincludeだよねぇ
function object(o) {
  var F = function() {};
  F.prototype = new o;
  return new F();
}

// 基底クラス:プロパティ
//var base_obj = function() {
function base_obj() {
  this._x = 0;
  this._y = 1;
};
// 基底クラス:メソッド
base_obj.prototype = {
  get_x: function() { return this._x; },
  set_x: function(i) { this._x = i; },
  get_y: function() { return this._y; },
  set_y: function(i) { this._y = i; }
};
/*
var obj = new base_obj();
alert('x is ' + obj.get_x() );
alert('y is ' + obj.get_y() );
*/

// 敵クラス extends 基底クラス:プロパティ
//var enemy_obj = function() {
function enemy_obj() {
  this._name = 'enemy';
};
//enemy_obj.prototype = new base_obj();
enemy_obj.prototype = object(base_obj);

// 敵クラス extends 基底クラス:メソッド
enemy_obj.prototype.get_name = function() { return this._name; };
enemy_obj.prototype.set_name = function(s) { this._name = s; };

//var obj = new enemy_obj();
var obj = object(enemy_obj);
//alert(obj);
//alert(typeof obj);
alert('x is ' + obj.get_x() );
alert('y is ' + obj.get_y() );
alert('name is ' + obj.get_name() );

さらして、反応を興味津々で待ち受けてみるなど。

継承で、いわゆる「parent::メソッド()」って、このパターンだとどやって実装するんだべさ?

2012-03-30

[][]Node.jsについて

まだおおむねメモ書き程度なので、メモ程度に。


node.js とは何か

http://d.hatena.ne.jp/badatmath/20101020/1287587240


node.js とは何か (2)

http://d.hatena.ne.jp/badatmath/20101022/1287701281


と、おおむねこれに対立すると思しきこれ。


訳:Node.jsは癌だ

http://blog.uu59.org/2011-10-04-node-js-is-cancer.html


…うん、過去にも「シングルプロセスかつシングルスレッドでイベントループ」なhttpdの実装って、見た記憶がある(というか、直接ではないにしても同じ会社さんで業務として扱っていたし、ちょっとだけコードを書く都合上、説明を受けたりもしたなぁ)。

結局のところ「大量アクセスをさばきたい」に起因して「より効率的なやり方はなに?」っていうあたりに進んで、ってまでは普通に理解できる。

で、Node.jsの人たちは「シングルスレッドでイベントループ」にした上で、さらに明らかにボトルネックになる「ディスクI/Oを強制的に非同期にする」ことで、全体的に「暇こいてるところ」をつぶして、マシンの性能をぎりぎりまで持ち上げよう、って考えたんじゃないかな。


で…うんまぁ理屈はわかる。

で、おいちゃんが業務でhttpdにかかわった時に考えたこととほぼまったくおんなじことを、反証のほうに書いてある。

イベントループは、端的に「CPU負荷が高い悪い子(処理)がいると瞬時に全員巻き込まれる」。

そもそもマルチプロセスがマルチプロセスたる所以、あるいは「わざわざ、相互干渉が難しいプロセス空間なるものを作り出した理由」に、少し思いをはせてみて欲しい。


別にNode.jsを否定はしないし、使いどころと設計と実装を「間違えなければ」、アイデアとしては結構面白いと思う。

ただ…どっちかっていうと「間違えちゃう人」の数の多さに思いが行ってしまうときに、実務で業務で「使いたいか?」と聞かれると…メンバー見るまでは躊躇するんじゃないかなぁ、と。


うまいこと使えれば面白そうなんだけどねぇ。

どうなっていくんだろ?

2012-02-21

[]実行確認

つづりをいつもいつもいつもいつもド忘れするので、めも。

管理画面系で「削除に対する壁一枚」を、最も雑に実装する手段。

onclick="return confirm('削除します。よろしいですか?');"

confirmのつづりを、いつも間違える上で忘れるんだ orz

2012-02-14

[]JSのテンプレートエンジン?

発端はまぁ「JSん中にがりんごりんHTMLエレメントかかれてのHTML生成」を見て、色々とアレがナニだったりするあたりがきっかけなのですが。

「じゃぁどんな方法がよろしげ?」って考えて…まぁ、わりと定期的に一時期やっていた「テンプレートエンジン」っていう概念に対する再考察ネタとして、面白いかなぁと思ったので。


先に、おさらい。もっぱら「サーバサイド」でのお話。

元々、Perlなんかで組んでた2000年以前、くらいのころは、割と「プログラムん中にべた書き」が多かったと記憶しています。

ちなみに、おいちゃんが作っている「conv」というテンプレートエンジンの原型を作ったのが、1999年の、確か初夏ごろ。当時はC言語で実装していたのをありありと覚えております(笑


話を戻して…


まぁ、プログラム中に「ベタでエレメント書かれる」と、デザイン修正などが面倒なことこの上ない、ということを、体でというか工数で身につまされて。

でまぁ、世の中「業務ならテンプレートエンジン必須だよねぇ」って流れに流れていったんじゃなかろうか、と見ております。

…まぁどこぞの某Smartyとかで「テンプレートん中でgetパラメタ受け取ってpostパラメタ受け取ってDBハンドルもってSQL発行して関数切って」なんていうコードも散見されるので、なんていうか「…やれやれ」とか思いはするのですが。


おいといて。


本質的には、テンプレートエンジンって

・テンプレートがあって

・変数の塊りがあって

・テンプレートに変数の塊りをぶつけると、動的なHTMLが出来上がる

くらいのシンプルさが好みですし、基本はそーゆーもんだと思ってます。

なので、一端上述を前提に。


JSであろうとも、上述は結局代わりがないはずなので。

ってことは「元になるテンプレート」と「変数の塊り」が必要であろう、と。


で。

JSにおける「変数の塊り」は、おそらく「非同期通信(Ajax)で取得したjson」でよろしかんべ、と考えております。

この辺あんまり深い考察ではないので、突っ込みあったら大歓迎。


問題は「元になるテンプレート」をどこにおくかなんじゃなかろうか、と。


んで。なんとなく「JSのテンプレート展開」を、2つに切り分けて考えてみたりしました。

・部分的な展開

・HTML全部


後者のほうが多分イメージだけはしやすくて。すげぇ大雑把には「DOM構造全面改修」くらいの感じ(笑

…ただ、実際できるのかなぁ?

一つ考えてるのは

・cgi request(ページ本体)

・responseで、JSだけ(with 必要なら適当なパラメタ値)が書いてあるPageを受け取る

JSを実行する

・・JSで、このページの元になる「HTML テンプレート」を取得する

・・JSで、「変数の塊り」を取得する

・・JSで「テンプレートに変数ぶつけて」動的なHTMLを作成する

・・JSで、動的なHTMLを「まるっと一通り」差し替える

こんな流れ。

…できなくもないけど、なんか1Pageあたり「JS用のPage」と「表示用のPage」があるのが面倒な気もするなぁ。


ん…

「BODYを空にしておいて、JSで作ってマルっとぶち込む」は普通にありだと思うのよ。

ただ、状況によっては「HEAD」のほうも置き換えたかったりするじゃない? そこを「ベタでゴリゴリ」書くんなら「いっそHTMLを全面的に」って思ったんだけど…乱暴かなぁ?


疑問に対して考察もせずに伏線はりっぱなしの疑問投げっぱなしジャーマンで、次w

「部分的な展開」。


ん…やっぱり勝手なイメージとしては。

・HTMLん中に「テンプレートとしてのDOM構造」を入れておく

JSが動き出す

・・とりあえず「テンプレートとしてのDOM構造」を取得

・・動的なjsonを取得

・・テンプレートと変数の塊りから動的なHTMLを作成

・・適切な場所にぶち込む

こんな感じ。

ちなみにこれやるんなら「テンプレートとしてのDOM構造は、非表示とかにしないと一瞬きちゃないよ」って突っ込みをもらった。極めて正論だと思う。感謝。


このやりかただと…「複数個所」で若干「…面倒?」な可能性の気配が印象としてなんとなく感じたりはするんだけど(つまり考察も検証もしていない)、でもまぁ、その辺はなんか、妙手が生まれるような気もする。


あとは…テンプレートの実装?

色々考えたんだけど、結局「オートマトン組み上げてゴリゴリと文字列操作する」のが、もしかしたら一番早いのかしらん? 的な、やっぱり雑な発想(笑


で…調べてみると。

JSのテンプレートエンジン、やっぱり、それなりに出てるなぁ、と。

今度、すこし使い比べてみようかしらん?


例えば、の一例。 jTemplates ってのを見かけたです。


{#template MAIN}
 <div id="header">{$T.name}</div>
 <table>
 {#foreach $T.table as r}
  {#include row root=$T.r}
 {#/for}
 </table>
{#/template MAIN}

{#template row}
 <tr bgcolor="{#cycle values=['#AAAAEE','#CCCCFF']}">
  <td>{$T.name.bold()}</td>
  <td>{$T.age}</td>
  <td>{$T.mail.link('mailto:'+$T.mail)}</td>
 </tr>
{#/template row}

<select>
        <option{#if $T.optionCode}{#else} selected="selected"{#/if}>選択してね</option>
        {#param name=optionCode value=$T.optionCode}
        {#foreach $T.optionMap as option}
        <option value="{$T.option$key}"{#if $T.option$key == $P.optionCode} selected="selected"{#else}{#/if}>{$T.option}</option>
        {#/for} 
</select>

ふむ…なんとなく「とりあえずそんなに好みからはずれていない」っぽい雰囲気がする。

…そのうち、腰すえてやることになりそうなので、まずは一発目のメモってことで。