タグ

ブックマーク / monjudoh.hatenablog.com (13)

  • JavaScriptでコマンドを作って実行する - monjudoh’s diary

    前置き Firebug1.10にhelpコマンドなるものが入ってました。 consoleでhelpって入力して実行するとFirebugで使える関数等が表示されます。 help();じゃないんですよ。 関数じゃなくてコマンド。 どうやって実現しているんだろうかって気になったのでエスパーして似たようなのを作ってみました。 Firebugのソースは読んでないけど多分おんなじようなことをしているはず。 コード 以下、with文の中でcommandって書いて実行するとcommand is executed.って出力されます。 var obj={}; Object.defineProperty(obj,'command',{ get : function() { console.log('command is executed.'); } }); with (obj) { command // com

    JavaScriptでコマンドを作って実行する - monjudoh’s diary
    raimon49
    raimon49 2012/09/08
    getアクセサにwith文のスコープからアクセスしてコマンド風に呼び出せる。
  • JavaScriptでのbuilt-in/DOM objectのprototype拡張 - monjudoh’s diary

    @rosylillyが気にしていた のでまとめた。 built-in/DOM objectのprototype拡張による弊害 追加したプロパティ/メソッドがfor inで列挙される var obj = {a:1}; for (var i in obj) { console.log(i); } こうするとaだけ出るはずが、 Object.prototype.b=function(){}; こうした後だとa,bが出てしまうって奴ですね。 そのまま代入しないでObject.defineProperty/definePropertiesでenumerable:falseのプロパティとして定義すれば列挙されなくなるので特に問題ありません。 今回挙げるprototype拡張の弊害の内唯一これだけはECMAScript5時代になって解消されました。唯一これだけは。 built-in/DOM object

    JavaScriptでのbuilt-in/DOM objectのprototype拡張 - monjudoh’s diary
    raimon49
    raimon49 2012/09/05
    prototype拡張とラッパーオブジェクトの比較
  • JavaScriptでの非同期関数合成 - monjudoh’s diary

    Unserscore.jsや互換ライブラリのLo-Dashを使うと関数合成が出来ます。 複数個の関数があって、関数を呼び出した結果を使って関数を呼び出して…っていうのを1個の関数にします。 ドキュメントの例を見れば分かるかと。 簡略化のために関数合成の対象になる関数を1引数・戻り値ありの関数とします。 これを非同期処理をする関数に当てはめるとcallbackを含む2引数・戻り値なしの関数が当てはまるでしょう。 この場合のcallbackは1引数の関数とします。 まず、logを出力するcallback関数を定義しましょう。 function log(result){ console.log(result); } 次にcallbackを含む2引数・戻り値なしの関数を定義します。別に非同期処理はやっていないです。 // 1を足す function add1(callback,arg){ call

    JavaScriptでの非同期関数合成 - monjudoh’s diary
  • LT概要「GitとMercurialのリポジトリ構造の違いと歴史改変について」SCMBootCamp in Tokyo - monjudoh’s diary

    SCMBootCamp in Tokyo 開催しました。KPT公開。 - うさぎ組にて手ぶらLTをしたので資料はないが、内容を軽くまとめておく。 GitとMercurialの比較 Git Mercurial リポジトリ commit objectのグラフと、branchのHEAD,tagなどの参照で出来ている。 commit objectのグラフだけで出来ている。 歴史改変サポート デフォルトであり。 デフォルトではなし。extensionが必要。 歴史改変 新しいcommit objectグラフを作成し、参照を古いHEADから新しいHEADに移す。表面上要らない歴史の削除として使われるresetはHEADの移動のみを行う。 新しいcommit objectグラフを作成し、古いcommit objectグラフをリポジトリから除去する。要らない歴史の削除として使われるstrip(MQExte

    LT概要「GitとMercurialのリポジトリ構造の違いと歴史改変について」SCMBootCamp in Tokyo - monjudoh’s diary
    raimon49
    raimon49 2011/08/09
    >特にGitとMercurialのコマンド対応表といったものを鵜呑みにするのはやめること。
  • githubで複数ユーザを使い分ける - monjudoh’s diary

    githubというかgitosisはsshの鍵でユーザを判定します。 設定の仕方はhelpでも見てくだしあ。 Redirecting... Redirecting... Redirecting... 自分のgithubユーザとして色んなマシンからgithubを使う場合は簡単です。 上記の説明のとおりに公開鍵を追加していけばいいだけです。 で、同じマシンの同じユーザアカウントで、 複数のgithubユーザとしてgithubを使うのはどうすればいいかというと、 ホストのエイリアスを設定して別の秘密鍵を設定してやれば大丈夫です。 入門OpenSSH / 第4章 OpenSSH を使う ↓の例は複数HostNameへのSSH接続の管理ですが、 ~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶろ 同一HostNameで別Hostというふうにも出来るのでそれを使います

    githubで複数ユーザを使い分ける - monjudoh’s diary
    raimon49
    raimon49 2011/04/11
    同一HostNameで別Host エイリアスを設定
  • RequireJS moduleについて - monjudoh’s diary

    RequireJSって何? 公式サイト RequireJS スライド jQueryRequireJS.pdf語記事だとこの辺? http://zudolab.net/blog/?p=451 要はJavaScriptの依存性解決をしてくれるライブラリで、こんな感じで使えます。 require( [ 'lib/a' ,'lib/b' ,'lib/c' ], function(){ // lib/a.js,lib/b.js,lib/c.jsが読み込まれていることが保証されているcallback require( [ 'lib/d' // lib/a.jsに依存しているライブラリ ,'lib/f'// lib/b.jsに依存しているライブラリ ], function(){ // lib/a.js,lib/b.js,lib/c.js,lib/d.js,lib/e.jsが読み込まれていることが保

    RequireJS moduleについて - monjudoh’s diary
  • 昨日騒ぎになったTwitterのXSS脆弱性によって実際に受けそうな被害とその対策 - monjudoh’s diary

    何が出来るのか どんな脆弱性かの詳細はこちらを参照2010 年 9 月 21 日現在のツイッターのバグ(脆弱性)について 外部JavaScriptを読み込むコードを仕込めたので、 どんなJavaScriptでも実行できる状態でした。 以下、JavaScriptの実行によってTwitter上で出来る事。 セッションハイジャック JavaScriptからcookieを参照できるのでログイン状態のセッションIDも参照できます。 また、任意のJavaScriptが実行できる以上、参照したセッションIDを攻撃者のサーバ等に送信することも出来ます。 攻撃者は奪ったセッションIDをcookieに設定すれば、被害者のアカウントでtweet,direct messageの閲覧・送信が出来ます。 確認してみたところ、ログイン状態のセッションIDはログアウトしても無効にはなりません。 設定→パスワードからパスワ

    昨日騒ぎになったTwitterのXSS脆弱性によって実際に受けそうな被害とその対策 - monjudoh’s diary
    raimon49
    raimon49 2010/09/23
    >ログイン状態のセッションIDはログアウトしても無効にはなりません。設定→パスワードからパスワード変更操作をすれば(変更前後のパスワードが同一でも)以前のセッションIDを無効にできます。 / な、なんだってー
  • TortoiseHG+hgsubversionでのsvnのbranchのmerge - monjudoh’s diary

    概略 hgsubversionではhg mergeしてできたmerge済みrevisionをpushすることはできない。 hg mergeしたら merge前revisionにhg update merge済みrevisionでrevert hg commit とやって同内容の非merge revisionを作ってそれをpushすれば良い。 せつめー 黄色のbranchから黒のdefaultにmergeするとする。 まず、TortoiseHGで普通にmergeする。 確認ダイアログでlocal:default,other:branchとなっているようにすること merge直後の状態はこのようになる。 hgsubversionではhg mergeしてできたmerge revisionをpushすることはできないので、 defaultのmerge直前revisionにhg updateし、 m

    TortoiseHG+hgsubversionでのsvnのbranchのmerge - monjudoh’s diary
  • hgsubversionの導入 - monjudoh’s diary

    的にhttp://monkeyisland.pl/2009/11/04/hgsubversion-on-windows/を参考にする svnをインスコする hgsubversionを使うにあたってはsvnコマンドのインストールが必要。 TortoiseSVNが入っていてもダメ。 Apache Subversion 設定時に知っておくべきことか http://mino.blog.eonet.jp/minoproject/2009/08/windowssubversi.html Subversionのリポジトリをsvn+sshで管理する - Lism.in * blog - nekoya (id:studio-m) Mercurialをインスコする こちらはTortoiseHGを入れれば入るので、 好みに応じてTortoiseHGもしくはMercurial体のみをインストールする。 Bi

    hgsubversionの導入 - monjudoh’s diary
  • Firebugで元のJavaScriptのコードに手を入れずにdebug用のconsole出力を入れる方法 - monjudoh’s diary

    Firebugでは条件付きブレークポイントが使えるので、 scriptタブにて該当行にブレークポイントを貼り、 条件としてconsoleへの出力を||区切りで、最後に&& falseを入れる。 console.debug('this.lastPosition') || console.dir(this.lastPosition) && false こうするとブレークポイントを通る度にconsoleへの出力は評価され、 consoleに出力され、最後の&& falseのため式全体は必ずfalseとして評価されるため ブレークすることはない。 追記 console出力系関数の戻り値はundefinedなんだから&& falseは不要か 追記 nanto_vi @monjudoh JSでは||より&&の方が優先順位が高いので、a || b && c はaが真ならbもcも評価されずに全体が真として

    Firebugで元のJavaScriptのコードに手を入れずにdebug用のconsole出力を入れる方法 - monjudoh’s diary
    raimon49
    raimon49 2010/02/24
    右クリックで追加できる条件付きブレークをfalseと評価されるようにconsole.logを仕込む。なるほどー。
  • jQueryでのDOM要素生成 - monjudoh’s diary

    $('') とすると、 (中略) 空の div タグを作って、その中に innerHTMLHTML 文字列を流し込んで DOM ノードを作成しているようだ。 http://d.hatena.ne.jp/nitoyon/20090219/object_jquery これ、1.3系では$('')とか$('')の場合は createElementでDOM要素を生成するように変更されましたな。 だからどうしたって話だけど。 --- jquery-1.2.6.js 2009-02-12 03:54:38.000000000 +0900 +++ jquery-1.3.1.js 2009-01-30 01:50:52.000000000 +0900 - clean: function( elems, context ) { - var ret = []; + clean: function( el

    jQueryでのDOM要素生成 - monjudoh’s diary
    raimon49
    raimon49 2009/07/15
    1.3.x から、$('<tagname/> ')の動きがinnerHTML→createElementに変更された。
  • The Performance of Dynamic Site (id:amachang) - monjudoh’s diary

    Javaユーザーグループ 概要 JavaScriptの誤解 重くしている犯人 プロファイラ JavaScriptの誤解 JavaScriptは遅い 速いです 重くしている犯人 DOM DOMをフェーズに分けて考える JavaScriptとコンポーネント(C++)との通信(取得) DOMノードの追加、値の変更 スタイルの計算 レイアウトの計算 JavaScriptとコンポーネント(C++)との通信(取得) XPConnectやCOMとの通信 単純なプロパティアクセスの数十倍(IE以外は無視しておk) COMは重い 通信回数=DOMのオブジェクトの「.」の数 DOMノードの追加、値の変更 取得の場合と同じ「.」の数 ノードに変更したというフラグが立つ parent.appendChild(child)だとparentとchildにフラグが立つ。 重要:再計算がJavaScriptの実行後に

    The Performance of Dynamic Site (id:amachang) - monjudoh’s diary
    raimon49
    raimon49 2008/10/17
    >通信回数=DOMのオブジェクトの「.」の数
  • withの挙動がFirefoxとIE・Operaで違う件 - monjudoh’s diary

    (function(){ var namespace={a:'hogehoge'}; with(namespace){ alert(a); } })(); 上記のコードのようにwith文の中で、どのスコープでも未定義の変数aを使おうとすると、 with文の括弧の中に入ってるオブジェクトのaプロパティを代わりに使ってくれます。 これはもちろんIE・Firefox・Opera共通。 (function(){ var namespace={a:'hogehoge'}; with(namespace){ function fuga(){ alert(a); } } fuga(); })(); 今度はwith文の中で宣言した関数の中で同じく変数aを使おうとした場合です。 Firefoxだとhogehogeとalertが出るけど、 IE・Operaだとaは未定義だと怒られてしまいます。 (functi

    withの挙動がFirefoxとIE・Operaで違う件 - monjudoh’s diary
  • 1