2022年04月01日

『ゲッター/セッター関数を後から変更する方法』を読んで不可能じゃない部分

ゲッター/セッター関数を後から変更する方法』を読んで「スコープを外れても参照すること自体」は不可能じゃないよなぁと思ったので、とんでもなく久しぶりに記事アップ。

ちなみに記事は面白かったですー。
最近 js 使ってなくてですね。getter / setter を書き変えられることを知らなかったんですよね。勉強になりました!

ただですね。最後の方に
ゲッター関数の変更理由として、戻り値の計算方法を変えたいということがあります。
そこで、val * 2 などを返したかったのですが、これは不可能でした。

ってありますが、不可能でもないかなーっと。
eval なんて危険なものを使う必要もなく、例えばこんな程度で出来てしまう。

ds.get_old = ds.get;
ds.get = () => ds.get_old() * 2;
Object.defineProperty(obj, "val1", ds);

obj.val1 = 20;
console.log( obj.val1 ); // 40 <- できた

obj.val1 = 50;
console.log( obj.val1 ); // 100 <- 問題なし

もともとの val は scope が違うので直接参照することは出来ないんですけどね。参照できるもともとの get を残しておけば余裕です。

const uhaha = {bugaisha:ds.get_old};
console.log(uhaha.bugaisha()); // 50

まあ、val を直接参照しようと思ったら eval で書き変えりゃ多分行けるんじゃなかろーかw js って面白いよね。最近はかたっ苦しい勢力が圧倒的な最大勢力ですけどね。ゆる〜いなんでもありが好きな自分としてはつまんない。仕事では「ゆるいことを」毛嫌いする人が増殖しちゃったんで自分もかたっ苦しくやってましたが、そんな安定ルーチンな仕事はすぐに飽きたんで仕事じゃ js もやってない。工場の流れ作業か!っつうの。

でも今日は
Object.defineProperty
Object.getOwnPropertyDescriptor
なんて面白いものを知れて良かった!感謝!

てか、自分のブログをざっと見返すと本筋から離れてアホなことばっかやってるwww
てか2、こういうアホなんは seesaa でしか言えねぇぇぇぇwww





posted by HiFa at 20:27 | 愛知 ☁ | Comment(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2021年08月07日

正しい誤りではなく方向性

https://teratail.com/questions/299976

ああすべき、こうすべき、かくあるべき……。

javascript や php、mySQL が Web 界隈を席巻したら、逆に Java その他の Strict な連中が入り込んできて「鬱陶しい堅苦しい世界」になったね。

自分も Java, VB, VC から js、php に入ったんだけどね。その自由な発想や視野に目から鱗、楽しくってしょうがなかったんだが……。「こうでなきゃダメ」という「もともと緩い言語を馬鹿にしていた界隈」が入り混じってきて、はぁ、だっる。

そもそものアーキテクチャを貫けなくなってきて「自由を制限して堅さを求める」ことが正義のような扱い。方向性が違うだけで「正しい、間違い」という考え方そのものが大間違いなんだが……。まるで悪いことのように扱われ始めている。

学術的、先進的分野では制限は「邪魔」や「無駄」でしかない。そこでブラッシュアップされる訳だが、一般に広まるにつれ「堅さ」が必要になる。もやもやするがここまでは仕方ないとして受け入れられるんだが……、その先、その大局的な流れを読めず「悪いこと」扱いされるの、クッソうざいわ。
posted by HiFa at 14:04 | 愛知 ☁ | Comment(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2021年07月05日

最近のプログラミングってつまらんよね

あーもう作法作法ってうるさいっての!

そりゃ〜美しいコードを見たら思わず目がキラキラ、両手を握って天を仰ぎ見て神に感謝しちゃうよ!その気持ちは分かる。難解なだけなら全然マシで、雑くて飛びっ飛び。fat controllerなんて可愛いねぇって言いたくなるぐらい一貫性なにそれ、 configure にロジック盛ってるどころか、同じ処理がMVCの境界を越えてシステムコアまで飛び回って侵食しまくり、もはやウィルスに食い散らかされたんじゃねーの?ってコード。まあ、俺も雑いから人のこと言えないんだけどさ。

そんな箸棒コードと格闘するのが当たり前だとね。分かるよ。作法作法言いたくなるの。

メソッドが長すぎるだの、処理の重複だの(コレはほんと大変)、単一責任原則違反だのオブジェクトは Immutable にしろだの、細かいところなら protected でもスコープ範囲が広すぎるだの、var ではなく let を使うべきだだの……うるさ〜い! どんどんガチガチ万歳!うるさ〜い!

だったら静的型付言語使えやぁぁぁぁ!

php も javascript もあの馬鹿馬鹿しいほど緩いとこが面白いんだよ! ミュータブルどころかぐりゅんぐりゅんミューテーションするのが面白いんだよ!カプセル化なにそれ?で、関数内変数すら書き換えられるとこが面白いんだよ(このブログでも過去やってる)

そりゃまあ、業務でそれやったら殺される勢いで嫌われるが……。もっとプログラミングを楽しもうよ。
アプリが「完成」するのは当たり前。そこで止まってるだけなんてつまらんことない?

と、言いますかね。

続きを読む
posted by HiFa at 08:12 | 愛知 ☁ | Comment(2) | よもやま | このブログの読者になる | 更新情報をチェックする

2013年11月09日

プログラマって人種は基本「バカ」です

バカさ加減は色々あるけど、今日、ふとイラっとしたバカさ加減は「新しいもの好き」「設定が大好き」ってこと。

ま〜ホント、道具のこだわりには鬱陶しいもんがあるね。
たかだかテキストエディタですらあれが良いこれが良いと、この上なく「どうでもいい」ことに執念燃やす連中です。これが、プログラム言語に対するこだわりになると、もうとんでもなくやっかい問題でして、嫌いな言語に対しては憎悪入り乱れて七転八倒、抱腹絶倒の混沌世界で言いたい放題。まあ、最近はアホらしさに気付いたのか、大炎上!なんてことはない。なんて勝手に思ってますけど。(情弱なんでw)

あ、でもついこの前、phpの本家サイトがクラックされてましたね〜。
ぼんやりマニュアル眺めてたら、突如Chromeくんが接続を拒否って、その後、Google検索で「このサイトは〜」って、、、php本家はホントよくヤラレるね!



 なんてかな。新しいものって善し悪しなんよ


結局、最小の労力で最大の効果を望むのが、自分の中では一番で(当たり前だよね)当然、多くのプログラマは出来るだけラクをしたいと思ってる(ハズ)まあ、結局、そのための道具として言語やツールがある訳だけど、大工道具は一度マスターしたら生涯使えるがツールはそうは行かないんだよね。

プログラマが高評価するのは「自分のやりたい事が、いかにスムーズにできるか」「新しい方法論を自らに指し示してくれるか」ってあたりじゃないかねぇ。それと最悪なのが「カスタマイズ性」。
このカスタマイズ性が諸悪の根源なのね。プログラマは気付いてない(と思う)けど。



 なぜか?


なぜってアンタ、超簡単よ。
またまた大工道具で例えるなら金槌は数種あれど、その基本構造はもう何百年?と変わってない。(最近の大工は金槌使わないらしいが)しかし、ツールなんてITが一気に盛り上がったこの20年でどれだけ進歩した?

それなのにいいツールを探し、それをなんとか見つけ、慣れるまで使いこなし、自分用にカスタマイズする。

これ、ものっそい労力使ってんの。もうね。本末転倒じゃね?
使うツールって常時最低でも十数種はあるでしょ。そのウチで拘ってるツールは一つ二つじゃないハズだよね。そのツールを「探して」「慣れて」「カスタマイズ」って、人生でどれだけの時間をこの作業に費やしてんのか?ってハナシ(笑)そりゃあ、古くさいツールを延々と使ってるレガシー世代ちゃんは論外だけどさ。痒いところに手が届き「すぎる」ツールを有り難がって、ものっそい時間費やして自分好みに設定して、悦に入ってる。そんな奴は新しい物アレルギーなレガシー世代並にどうかしてる。

まあ、そう言う奴らの言い分は全く一緒「作業効率を上げるため」
はは、ホントに上がってんのか?と聞きたい。いや、弾糾したい。
成果スピードは全然変わってないぞ!!!全然作業効率上がってないじゃないか!

ま、俺の話なんだけどね。

posted by HiFa at 14:45 | 愛知 ☁ | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2011年12月18日

実は嫌なクローラって多い?

前回「ezooms.botのイヤラシイ挙動?」なんて書いたけれども……。

実は嫌らしいクローラって多いのかな。別にどーでもいいし、なんて思ってたが、注意してログを見るとチマチマと妙ちくりんな事を試行するボットがある。まあ、認証を試みるようなクローラー!(笑)は幸いにもまだ見てないが、どうなんしょ。すでにもうサイト収集ではなくて、ただのアタックなんで、堂々とやる奴ぁ偽装っしょ。と、思いつつ、世界は広いので、ま、色々。かな。

今回は以下

IP : 180.19.***.***(一部晒しw)
UA : Mozilla/5.0 (compatible; heritrix/3.1.0 +http://www.dehenken.co.jp)

UA は、上記だけども本当に http://www.dehenken.co.jp と関係あるかは UA 自体信用できんし、問合せも面倒だから知らん。

が、このUAとIPでのクローラー。js 内のURLらしき文字列をURLとみなして、勝手につなげてくる。例えば、evernote の noteit.js を http://domain.com/a/ にあるページで読み込んでいる時、その js 内に "multipart/form-data" という文字列を見つけると、http://domain.com/a/multipart/form-data へのリクエストを試みてきなさる。一応、リファラに noteit.js が書かれているのは、まだ救いだが「リンクも無い」「存在もしない」ファイルを闇雲に探すと言うのは、一体どういう了見なんだろう? 名乗って堂々とやるにしても「節操がない」というもんじゃなかろーか?

自分が管理しているサイトのアクセス総量自体が少なくて知らないだけかも知れないが、こう言ったことは「普通」なんだろうか?

ちなみにIPは日本かつ京都OCNです ^^;;;;

posted by HiFa at 01:12 | 愛知 ☁ | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2011年11月24日

ezooms.botのイヤラシイ挙動?

今日 ezooms.bot で良く分からん挙動を見つけた。

あるサイトでは ezooms.bot は「SEO、SEM、検索エンジンの技術、動向の研究、紹介をしているサイト」のものという一文を見つけたが真偽は未確認。

UA は以下
Mozilla/5.0 (compatible; Ezooms/1.0; ezooms.bot@gmail.com)

だが、このボット少々イヤラシイ動きをしている。
例えば
http://www.domain-a.com/aaa/bbb/ccc/ddd.html
を見つけたとする。
すると以下のように別ドメインでも、ある程度ディレクトリ構造が同じだと
http://www.domain-b.com/aaa/bbb/ccc/
ddd.html
にアクセスを試みようとする。これ、あくまでログからの推測だが(つまり未検証)かなりイヤラシイことないか? どこにもリンクがないはずのページを探りだすこともある。もちろんリンクを見つけるまでアクセスしないより早く見つけられるかもしれないが……。

今回は、ディレクトリ構造が同じだけで対象ファイルが無かったから気付いたが、もし事実なら、あまり気分の良いボットじゃない。

posted by HiFa at 19:12 | 愛知 ☁ | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2011年10月18日

javascript:関数で別の関数をクロージャ化してローカル変数を与える

関数をクロージャ化してローカル変数を与えてみる。
※ ローカル変数云々というより、関数を encloser でラップして、スコープチェーンを encloser につなげるって言った方がいいのかな。(同日追記)

function f(){
  alert(v);
}


辿れるスコープ内に v という変数が無ければ、v は当然 undefined。
で、以下の関数。

function encloser(){
  eval('var ' + arguments[1] + ' = "' + arguments[2] + '";');
  return eval('arguments[0] = ' + arguments[0]); // ※ () 追加では ie が ng
}

※ とりあえず string のみ対応。json 化すれば object でも。

この encloser関数にさきほどの f関数を渡してやると……。

f = encloser(f, 'v', 'I am closer!');
f(); // I am closer!


v に値が入れられる。

続きを読む
posted by HiFa at 14:01 | 愛知 ☀ | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2011年10月12日

PHP:array_key_existsより array自体がヤバいんじゃないか?

互換性のために作った array_intersect_key を見直していて、ふと不思議な文をマニュアルに見つけた。それが下の一文。

「二つの要素は、 (string) $elem1 === (string) $elem2 の場合のみ等しいとみなされます。言い替えると、厳密なチェックが行われるため、文字列表現が同じである必要があります。」
(つたない英語力だが英語サイトも同様)
ref) http://www.php.net/manual/en/function.array-intersect-key.php

一瞬「え?」です。

ここで配列の基本の幾つか。

  1. key は、整数 または 文字列です。

  2. 整数の標準的な表現形式である場合、 そのように解釈されます (つまり、"8" は 8 として解釈されます。一方、 "08" は "08" として解釈されます)。


ref) http://www.php.net/manual/ja/language.types.array.php

つまり、厳密であろうと曖昧であろうと、key は「重ならない」と思っていたわけです。つまり array(1 => value1, "1" => value2) と定義しても array(1 => value2) と解釈される。そのため array_key_exists に strict が無くても問題はなく、isset のような恐ろしく曖昧なものより信用していたんですね。それなのに array_intersect_key の場合は、string への型変換後に厳密なチェック云々とはどういうこっちゃ? と。array の性質上すでに解決済みのハズ。

で、この前書いた。
PHP:array_key_exists のバグ?
http://zombiebook.seesaa.net/article/228944224.html
がまざまざと蘇る訳です。
しょーがなので、イヤイヤ試すと案の定といいますか……。
(※ 今回は Windows, php 5.2.4 のみで検査です)

array(
 '2147483647' => int 0,
 2147483647 => int 0,
);

あらまあやっちゃってるよ。コノ人。上記2のルールが解決されてない。そう思うと array_key_exists には strict だとどこにも書いてないが、strict だとしたらそっちのほうが正しい動きをしていた訳だ。むしろ array が悪い子じゃん。まあ、内部的にいつ解釈されるのか知りませんが、var_dump の結果です。

本来なら。
array(
 2147483647 => int 0,
);
になるはず。

これ放置するのオカシイよね? こんな基本的な事ホントに既知じゃないの? 5.2 までスルー? それとも私が何か読み落としてる?

既知かどうか、色々調べようかと思ったけど……。
なんだかどうでも良くなってきた。ハァ……。php 嫌いじゃないんだけどねぇ。なんだか型宣言が必要な言語が懐かしくなってきたよ。

ちなみに1
int max は設定できる。これを設定しなおすとどうなるか不明。

ちなみに2
キーが想定できない場合 $ary[$key] で走査する部分は危険かもしれない。具体的には for や foreach よりも each でペアを取った方が安全。もう調べる気力も試す気力もないが。

個人的に以下はエラーにすべきだと。検査してはいるが存在自体気分悪い。
key に浮動小数点数値を指定すると、 その値は integer に切り詰められます。キーとして TRUE を使用した場合、 整数型の 1 がキーとして解釈されます。 キーとして FALSE を使用した場合、 整数型の 0 がキーとして解釈されます。 キーとして NULL を使用した場合、 空の文字列として評価されます。


posted by HiFa at 00:31 | 愛知 ☁ | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする

2011年10月08日

CSSハックは使わないようにしてます

タイトルは下請選定のための業者プレゼンが行われた時の発言。

主流はどうか分からないけれども、自分は CSSハックは極力使わない。むしろ cssハックを使ったスタイルシートを渡された時には、将来、不具合発生時に javascriptにあらぬ疑いをもたれるのが嫌で修正を提案するぐらい。それほど嫌。

でも「cssハックぐらい使えないとねぇ」と言われるとやっぱり凹む。

使えないんではなく使わない。ググってみれば cssハックのリストは幾らでも転がってる。それに自分はコーダーでもデザイナーでもなくプログラマ(請負わざる得ない低予算もかなり多いが^^;;;)ま、請負っている以上、プログラマ主張してもしょーがないがw

ただ、悪い事ではないハズなのになぜかテンパってしまうんだよね。プレゼン慣れしてないのが不味いんだろうけどね。デザインは良いとして、切り分けで意味不明な事して、苦し紛れに cssハック使ってる事って……、かなり多い。多分、コード見てイラっとする人も多いんじゃないかな?

cssハックは諸刃なのをもうちょっと意識して欲しいかな、なんて思う今日この頃。結局、小手先というかその場しのぎだもんねぇ。とはいえ、自分のコードも決して美しくない、というかむしろ汚いが……。言うか言わぬかいかんとも、ではあったりする^^;;;

古い記事だけども
CSSハックしてはいけない5つの理由
http://journal.mycom.co.jp/news/2009/03/05/040/index.html

posted by HiFa at 17:23 | 愛知 ☀ | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2011年10月06日

PHP:array_key_exists のバグ?

array_key_exists('2147483647', array(2147483647 => 1));

が true にならない……。(バグ?)
知っての通り array_key_exists は strict ではない。
ということで、2147483647 から 1 を引いた

array_key_exists('2147483646', array(2147483646 => 1));

では true になる。(期待通り)
そこで、面白いことに

array_key_exists('-2147483647', array(-2147483647 => 1));

も true。(期待通り)
これは 32bit 版固有の問題で、整数型の取りうる範囲が-2147483647〜2147483647までだから、「2147483647」という値に起こったのだと思う。これは既知のバグなのだろうか? 徹夜の追い込み中で調べる気力がないので、ここでメモw

一応調査した環境は
CPI Linux, php 5.1.6
Xserver Linux, php 5.1.6
XREA Linux, php 5.2.5
Windows, php 5.2.4

SAKURA FreeBSD, php 5.2.17

ただし! 最後の SAKURA は期待通り true になった! ふぅ。なんじゃそりゃ^^;;; php 5.3以上ではどうだろう。誰か知ってる人コメください。
ところで整数型で -2147483648 を作るには……

var_dump(-2147483647); // int -2147483647 <-- int 扱い
var_dump(-2147483648); // float -2147483648 <-- float 扱い
var_dump(1073741824 << 1); // int -2147483648 <-- int になったw
posted by HiFa at 05:10 | 愛知 ☔ | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする

2011年04月12日

CPI の GlobalSign でハマりかけた

CPI で SSL 取得の割引キャンペをしているんだけども、はまり掛けたのでメモ。

端的に言えば、
CPI のキャンペを利用するとワイルドカード証明書が取得できない
これは、2011/4/12 11:00現在、CPIサイトのどこにも注釈がない(ヘルプセンターに問い合わせ済)ので注意。参考:CPI のセキュリティキャンペーン
救済手段としては、CPI から送られてきたPINコードが未使用であれば返金できるという事。(ヘルプセンター談)

なんというか……。VPS 以外のルート権限のないサーバならそれも「あり」というか「サービス次第」だと思うが、ルート権限付きの場合はオプションでも良いのでワールドカード証明書が取得出来ると良かった。というか少なくとも注意書きぐらいは欲しいと思う。
ちなみにワイルドカード証明書とは、一つの証明書で指定されたドメイン名に属している全てのサブドメインでSSLが有効にできるもの。参考:ワイルドカード証明書

---

今回、もともとサブドメインでの運用は視野に無く、後日サブドメイン運用になったからすんなり報告できたけども、サブドメイン運用を始めに依頼されていたら後になって「サブドメインにしか適用できません」ってかなり言いづらい。不信感にもつながるしねぇ。
結局 SSL は、サブドメインだけに適用して、今後サイトが大きくなったら改めてワイルドカード証明書を取得しようと言う事で落ち着いた。

今回のケースはそれほど致命的ではないが、最悪こちらが出資する羽目にもなりかねない。

サーバって石橋叩いてても地雷踏むよね。ま、明らかに経験値不足もあるけど。
CPIは30日間のテストが出来るのが最大の救いかな。
posted by HiFa at 12:42 | 愛知 ☀ | Comment(0) | TrackBack(0) | おぼえとけよ〜 | このブログの読者になる | 更新情報をチェックする

2010年11月10日

Extend.js に関して 404 Blog Not Found さん

■ 404 Blog Not Found
javascript - making primitive types extendable
http://blog.livedoor.jp/dankogai/archives/51529944.html

の記事で、これだと予期しない不具合を増やしかねないよなぁ。と。
上の記事は、下記の Extend.js に言及しているのですが、こんな無防備に晒しちゃっていいのか?っと思ったのが今回記事。コメントに書こうと思ったらログインしなくちゃいけない orz

■ あゆたブログ - 株式会社あゆた
【連載】Extend.jsで楽しくJavaScriptプログラミング! - 第1回 Extend.jsのつかいかた (JavaScript,javascript,extend.js) - 株式会社あゆた
http://blog.ayuta.co.jp/blog/2010/07/22/Extend.js%E3%81%A7%E6%A5%BD%E3%81%97%E3%81%8FJavaScript%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%EF%BC%81-Extend.js%E3%81%AE%E3%81%A4%E3%81%8B%E3%81%84%E3%81%8B%E3%81%9F

続きを読む
posted by HiFa at 01:34 | 愛知 ☀ | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2010年04月12日

javascript:遅い push も使い方次第?

Array.prototype.push が遅いのは割と知られていると思う。なので何も考えずにひたすら length を使ってましたが・・・、使い方として push の方が有利な場合について。

続きを読む
posted by HiFa at 15:23 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2010年04月10日

php:関数を再帰的に利用できる関数

配列に対して関数を再帰的に適用させる関数は幾つかありますが、どれも使い勝手が悪い。array_walk_recursive では与え値は1つだけで、コールバックに渡されるのは「配列の値、配列の添字、与え値」と言う感じで、組み込み関数にも適用しづらい。コールバックには「処理対象、オプション1、オプション2・・・」って渡す方が使いやすい。

recursive('mb_convert_encoding', $ary, 'UTF-8', 'SJIS');
recursive('trim', $ary);

とか出来ればラクだよなー。
なので与え値可変長で、関数を再帰的に利用する関数を作ってみました。

ちなみに array_map_recursive も巷で見かけるけど array_map 自体が配列の処理が前提で、与え値にも配列を要求するので再帰処理として面倒(じゃない?)
他、使えそうなのって無かったよなぁ・・・。探す前に作ってしまうのは、仕事ってより骨休めの趣味なんだろなぁ。

「結果の違い」で結果の表記を間違っていましたので直しました。(同日修正)
続きを読む
posted by HiFa at 14:23 | 🌁 | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする

2010年04月07日

ロシアのサーチエンジン

自分が納入したシステムにはアクセス履歴と sql他の動作報告がセットになったログを残しているんだけども、普段は動作報告だけでアクセス部分は全然見てない。そして当然の事ながら、クライアントさんの中には小手先の SEO を多用したがるところもある。「あんまり姑息な事はしない方が良いですよ」と言いつつ、ふとそのアクセス履歴を見ると・・・。

海外のサーチエンジンばっかだ ^^;;;

一体何をしてるんだろう。百度(中国)あたりならまだ分かるけど、Yandex って・・・。
3/20 辺りからやたら増えてる。

露Yandex、独自マルウェア探知システムの運用を開始
http://internet.watch.impress.co.jp/docs/news/20100302_352121.html

ひょっとしてこれの兼ね合いなのかなぁ。
UA は、単に Yandex/1.01.001 (compatible; Win16; I) だけども・・・。他のクライアントさんも確認した方が良いのかな。

posted by HiFa at 15:32 | 🌁 | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2010年03月28日

ruby:ブロックも保存出来るよーな

このブログは証明できない。さん
■[Ruby]Rubyのblock、Proc、lambdaを理解する
http://d.hatena.ne.jp/shunsuk/20090101/1230816826

blockとProcの唯一の違いは、blockは保存できないということです。

トラックバック頂きました。なるほどー勉強になります。
んー。そうするとさらに疑問が出てきますね。Block が渡された関数内ではすでに Proc オブジェクト。ブロックはいつ Proc オブジェクトになるのかなぁ。ブロックを受け取る与え値に & が要るし、ary.each &a とすればOKとのことですし・・・。& かな。と、仕様書頼るかぁw(10/04/10)

とのことですが保存出来るんでは?
と、言いつつ ruby は rail をインストールしてちょこちょこっと弄っただけなので全然分かってない。つらつらマニュアル見るとプログラマの欲望を詰めに詰め込んだ言語ですねー。いや、すばらしいw 引き合いが少ないので使えないのが残念。

例えば、こんな事ではダメ???

def ref(&block)
block
end

a = ref {
  puts "ok!"
}

a.call # ok!
puts a.class # Proc class

ブロックを返せばどんなでもいいけども。a は ブロックへの参照だし、a のクラスを見ると Proc になってる。ブロックは単純に Proc クラスのインスタンスって考え方じゃダメなん?もちろん、使いまわし出来る。

def evl1(block)
  block.call
end

evl1 a # ok!

ただ、ary.each a なんて感じで使いたいけど・・・。このままだとエラーになる。
多分、なんとか出来るんだろーけど。知識も経験も圧倒的に不足してるw

posted by HiFa at 01:30 | 🌁 | Comment(2) | TrackBack(1) | へなちょこruby | このブログの読者になる | 更新情報をチェックする

2010年03月26日

javascript:for の小ネタ

for の小ネタと checkbox を同期させる tip の例です。
すみません。色々間違ってましたので改めて書き直しました。(同日追記)

ふと、さらに追記w(10/03/29)

for で走査したいとき・・・。

elements = document.getElementsByTagName('DIV');
for(var i = 0, l = elements.length; i < l; i++) 処理・・・

なんてのが常道なのかな。
ちなみに l に length 入れるのは、その方が速いから。
そこで

elements = document.getElementsByTagName('DIV');
for(var l = elements.length; l--;) 処理・・・

こうするともっと速くなるし、変数も一つ減る。
で以降、実例です。

続きを読む
posted by HiFa at 01:30 | 🌁 | Comment(1) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2010年03月18日

javascript:ちょっと粋な配列の定義だけども

たまに見かける split を使った配列の定義ですが、当然の事ながら遅いです。それに、ff3 では驚いた事に new Array() を使った方が圧倒的に速い。

ary = 'a b c d e'.split(' ');
ary = ['a', 'b', 'c', 'd', 'e'];
ary = new Array('a', 'b', 'c', 'd', 'e');

ie7 で 3倍程度、op10 で 2倍弱、safari/chrome では信じられないほどの差になります。ただ vista, ff3 は安定していないようです。[e1,e2,e3,…] と普通に列挙したものは安定しているのですが、split を使うと早い時と遅い時で 5倍近いブレがあるようです。ただ、他のブラウザでは2番目と3番目に有意義な違いはなかったのに ff では圧倒的に3番目が速いです。

とは言え、何度も回すような事をしなければ split は分かりやすい。・・・なんて事を言いながら自分は使ってない ^^;;; 一つや二つならまだしも、意識せず使いまくれば体感で差がでる可能性もある。

結局、split は使わない。[] が良いんでしょうけど、ff を考えれば new Array が最も無難。ただ、一々 new Array なんてやると「知らない」と思われそうでイヤですね(笑)

以下テスト用コード
var t = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49'.split(' ');
}
t = (new Date()).getTime() - t;

var j = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = [
    '0','1','2','3','4','5','6','7','8','9',
    '10','11','12','13','14','15','16','17','18','19',
    '20','21','22','23','24','25','26','27','28','29',
    '30','31','32','33','34','35','36','37','38','39',
    '40','41','42','43','44','45','46','47','48','49'
  ];
}
j = (new Date()).getTime() - j;

var k = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = new Array(
    '0','1','2','3','4','5','6','7','8','9',
    '10','11','12','13','14','15','16','17','18','19',
    '20','21','22','23','24','25','26','27','28','29',
    '30','31','32','33','34','35','36','37','38','39',
    '40','41','42','43','44','45','46','47','48','49'
  );
}
k = (new Date()).getTime() - k;

alert(t + "\n" + j + "\n" + k);

このテストに限りませんが、実は評価の順序でも「差」がでる事があります。当然、立ち上がっているアプリケーションの影響も受けます。何度か入れ替えながら評価すると良いかも。

addon について語れるほど知りませんけど、addon が山の様に積めこまれてれば影響を疑った方がいいかもしれません。たまーに spinoff のモノで云々あったり・・・。

posted by HiFa at 12:38 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2010年01月26日

javascript:「new」そんなに嫌わないで・・・

前の「javascript:クラス風の定義をしないメソッドチェーンです」で、new なんて・・・。とか言いながら下記の記事を見つけたので、天の邪鬼に走った思考がムクムク。と。

あと味さん
JavaScriptのnewって本当にいらない子?
http://d.hatena.ne.jp/jdg/20090706/1246840565

function f(){}
f.prototype.m = function (){
  alert(this == window);
}; //「;」は略せない! 試すと分かるけど下の結果が変わる。よく抜けてしまうけどw

(new f()).m(); // false



続きを読む
posted by HiFa at 04:32 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2010年01月24日

php:${ }って結構便利よ

うっかりプログラミング日誌さん
ReflectionClassでメソッドを動的に呼ぶ&ベンチマーク
http://d.hatena.ne.jp/gom68/20090926/1253939933

あまり、記事内容に沿うリンクじゃありませんが、ReflectionClass を調査していてふと・・・。

続きを読む
posted by HiFa at 15:29 | 🌁 | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする