タグ

ブックマーク / sawat.hatenablog.com (9)

  • Unicodeエスケープ - sawatのブログ

    付箋紙Greasemonkeyで、GM_setValueに登録した日語の文字化け対策にencodeURIをつかったけど、encodeURIはURIをエンコードするための関数なのであんまり褒められた使い方ではないですね。しかも、encodeURIのようなURLエンコーディングは文字列をUTF-8にしてから、エンコード対象の各バイトを%xx形式*1で表現するので、日語1文字をあらわすのにたいていの場合ASCII9文字が必要になって効率が悪いです。*2 なので、前述のような単に非ASCII文字をエスケープしたいだけのようなケースではUnicodeエスケープを使った方がよいです。Javaのpropertiesとかnative2asciiとかのやつです。 Unicodeエスケープは\uxxxx*3の形式であらわすので、たいていの日語1文字はASCII6文字になって、URLエンコーディングに比べ

    Unicodeエスケープ - sawatのブログ
  • クライアントサイドWeb付箋紙 Greasemonkey - sawatのブログ

    グリモンでこんなの作ってみました。 図1: はてなのトップページに付箋紙をぺたぺた貼り付けてみた これは何? Greasemonkeyを使ったWeb付箋紙ツールです。 Web上の任意のページにメモを貼り付けておくことができます。 GreasemonkeyのGM_getValue/GM_setValueを使ってデータをクライアントサイドに保存します。 そのためログイン不要で使えますけど、複数端末で共有したり、他の人に見せてあげたりはできません。 作成動機 まるごとJavaScript & Ajax ! Vol.1に載っていたFirefox2.0のクライアントサイドストレージを使って何かできないかなと思って作りました。最初、普通の<script>タグでスクリプトを読み込まして作って*1ちゃんと動いたのですが、Greasemonkeyのuser.jsとして動かしたら、なぜかクライアントサイドスト

    クライアントサイドWeb付箋紙 Greasemonkey - sawatのブログ
  • ローカル変数も展開したい! - sawatのブログ

    弾さんのとこで、JavaScriptでテキスト内の変数展開をやる方法がでてる。 テキスト内の変数展開はいつも欲しいと思う。+で文字列を連結するのうざい!というわけで作ってみました。 function interpolate(str){ return str.replace(/#\{([^\}]+)\}/g, function(m0,m1){ var v = ''; try{ v = eval(m1); }catch(e){ v = e } return v; }); } http://blog.livedoor.jp/dankogai/archives/50766443.html でも、 先生、これじゃローカル変数が展開できません! なので、こんな感じでいかがでしょう? function interpolate(str) { return "\""+ str.replace(/\\/g,

    ローカル変数も展開したい! - sawatのブログ
  • JavaScriptで擬似ヒアドキュメント - sawatのブログ

    今度は、JavaScriptで、sleepとかヒアドキュメントとかやる方法を ききにいきたいので、できるようにしておいてください!おねがいします! http://d.hatena.ne.jp/Hamachiya2/20070215/devsum というのをみて、 「関数内にコメントで書いて、arguments.callee.callerでごにょごにょっとやればできんじゃない」と思って、以下のようなのを作ってみました。 function heredoc(tag) { var regexp = new RegExp("\\*+"+tag+"$[\r\n]+^((.|[\r\n])*)$[\r\n]+^.*"+tag+"\\*+\/","m"); return arguments.callee.caller.toString().match(regexp)[1]; } (function ()

    JavaScriptで擬似ヒアドキュメント - sawatのブログ
  • クイックソートよりも遅いマージソートな理由 - sawatのブログ

    404 Blog Not Found:javascript - Array#sortがオレquicksortより遅い!?について コメントしようと思ったけどちょっと長くなったのでTrackbackに。 コメントには"Perl-inspired"とあって使っているのはmerge sortなのだけど、なぜこんなに遅いのか、これだけじゃまだわからないなあ。 遅いのはマージソートだからでいいのでは? (注:これは間違でした。次のエントリも参照してください。) 計算量で言えばクイックソートもマージソートも同じO(nlog(n))ですが、現実的にはクイックソートの方が高速だと思います。例のAppletのデモでも見るからにクイックソートの方が速いですし。 では、なぜ遅いマージソートを使うのか。 同じくマージソートを採用している*1javaではjavadocに以下の記載があります。 このソートは固定である

    クイックソートよりも遅いマージソートな理由 - sawatのブログ
  • Array#sortはオレmergesortよりも遅い!? - sawatのブログ

    前のエントリのトラックバックが相手方になぜか反映されないのですが、言及していただけました。 404 Blog Not Found:perl - the sort pragma 「マージソートだから遅いわけじゃない」ってことが書いてありました*1。なるほど。 せっかくなので、マージソートもJavaScriptで作ってみました。 var msort = function(ary, cmp) { var aux = new Array(ary.length); for(var i=0,n=ary.length;i<n;i++) { aux[i] = ary[i]; } function m(src, dest, low, high, cmp) { var len = high - low; if(len <= 1) { return; } else { var mid = (high + low

    Array#sortはオレmergesortよりも遅い!? - sawatのブログ
  • "aaa".match(/regexp/) == ? - sawatのブログ

    JavaScriptで正規表現マッチをする関数は Stringオブジェクトの match(regexp) な訳ですが、これの戻り値は (null or マッチした文字列)かと思ってた*1ら違うみたいですね。昨日のグリモン作るときに使って気づきました。 gオプションの有無やブラウザによっても微妙に違うみたいなので、メモ代わりにまとめてみます。 gオプションなしの場合 var m = "aabbcc".match(/a(b+|(c+))/); プロパティ 内容 値 IE6.0 Firefox2.0 Opera9.0.2 m.input 入力した文字列 "aaabbbaabb" ○ ○ ○ m.index マッチした箇所のインデックス 1 ○ ○ ○ m.lastIndex マッチした箇所の末尾のインデックス 4 ○ undefined undefined m.length 正規表現のグループ個

    "aaa".match(/regexp/) == ? - sawatのブログ
  • はてダ内ブックマークレット有効化Greasemonkey - sawatのブログ

    それすぐ実行!JavaScript! - IT戦記を見ながら、ブックマークレットが貼れないはてなダイアリーは不便だと思いました。*1 そこで、Greasemonkey。 動作 中身が"javascript:"で始まるpreタグをdocument内から探して、内容をAタグで囲んでブックマークレット化させます。 同じくamachang氏作のHDJSExecuterのブックマークレット版です。 Greasemonkeyのみじゃなく、Trixieでも動作します。OperaのUser JavaScriptでも多分いけます。 こいつをインストール http://sawat.jf.land.to/gm/hd_bookmarklet_activator.user.js ソースは以下の通り // ==UserScript== // @name Hatena Diary Bookmarket Activato

    はてダ内ブックマークレット有効化Greasemonkey - sawatのブログ
  • しなもんとどこでも遊べるGreasemonkey & Bookmarklet - sawatのブログ

    id:sawat:20060922の続きですが、ふと思うところがあって作ってみました。 しなもんがブラウザ上のマウスカーソルを追いかけてきます。マウスをぐるぐる動かして気が済むまで、しなもんと追いかけっこしましょう。 図1 : しなもんがマウスカーソルを追っかけてくるいわゆるデスクトップアクセサリーの類です。ただし、ブラウザ内でしか動かないので正しくはブラウザトップアクセサリー。ページが変わるたびに消えてしまうのが難点。 さすがにこれだけじゃつまんないので、おしゃべり機能も搭載してみました。 図2 : しなもんがしゃべった! はてなブックマークエントリー情報取得APIを使用して、だれかの受け売りコメントを発します。よって、だれもブックマークコメントを書いていないページでは無口です。 Greasemonkey または Trixie は以下をインストール。 http://sawat.jf.la

    しなもんとどこでも遊べるGreasemonkey & Bookmarklet - sawatのブログ
  • 1