簡易パスワード生成ブックマークレット2010年01月21日 05時10分08秒

たいした話じゃないのだが

ちょっとWEPキーを生成したくなったので、ずいぶん前に取り上げた、Number#toStringで生成してみた。とりあえずはFirebugのコンソールでちょろっと実行して済ませたのだが、ちょっと思いつきがあったのでブックマークレットにしてみることに。

このリンクをクリックすると、数字とアルファベットの小文字のランダムな組み合わせで長さ16の文字列を生成。クリップボードにコピーできるよう、生成結果表示にはprompt()を使用。

Firefox3.5/IE 5.5~8(IETester使用)/Opera9.6/Safari 4/Google Chrome 3で動作確認してます。

生成部分のコードは展開するとこんな感じ。

(function(p) {
  var s = '';
  with(Math) {
    while(s.length < p)
      s += floor(random() * pow(2, 32)).toString(36)
  }
  return s.slice(-1 * p);
})(16);

思いつきってのは、生成部分でfloor/random/powと、Mathメソッドの利用頻度が高いので「withでMath囲えば短くなるんじゃね?」ってとこだったんだけど、やってみたら3文字しか稼げてないし。まぁ可読性はいいような気がするんだけども。

36進数の生成は、以前capture.tumblr.jsの改造ときはMath.random()をnew Date().valueOf()で持ち上げてからピリオドを落とすやり方してたんだけど、今回は2^32で持ち上げた結果の実数部を切り捨てにしてみた。そのほかは、まぁシンプルですな。

もうちょっとだけ強度を上げてみる

これでも間に合わせにはいいかなと思うんだが、どうせならアルファベットは大文字小文字の混在にしたいな、と。で、やってみた。

展開すると、こんな感じ。
(function(p) {
  with(Math) {
    var s = '', r = random, f = floor, i;
    while(s.length < p)
      s += f(r() * pow(2, 32)).toString(36);
    s = s.slice(-1 * p).split('');
    for(i = 0;i < p;i++)
      if(f(r() * 10) % 2)
        s[i] = s[i].toUpperCase()
  }
  return s.join('')
})(16);

複数回出現するMathメソッド(floorとrandom)のエイリアスを作っちゃってるのでちょっと比較しづらいんだけど、手を入れた部分は
for(i = 0; i < p; i++)
の部分で、ここで1文字づつスキャンして、約50%の確率でtoUpperCase()による大文字変換をしてます。あと文字数短縮のためにvarを1回で済ませてたり。

実用性があるかはわからんのだが

これらのリンクをブックマーク登録しておけば、思い立ったときにランダムな文字列を生成できます。て、そうしょっちゅう需要があるものでもないんだろうけど。

Stylishでtumblrのダッシュボードを軽くできた件2008年09月21日 19時05分51秒

以前、Firefox3でtumblrのダッシュボードが重いって愚痴エントリを書いたのだが、ふとしたことでこれが解決したのでメモ。

やっぱりメインはFirefox3、なんだけど。

ChromeでもMinibuffer+LDRizeが動くのでダッシュボードをつらつらと見たりして遊んでるうちに、やっぱりこの操作感が気持ちいいので久々にFirefox3でもLDRizeをONにしてみたのだが、やっぱり重い。

いや、LDRize云々以前に、普通にスクロールさせるだけでも猛烈なストレスなわけで、「やっぱPC買い替えかぁ?」とか思ってたのだが、ふと「なにがボトルネックになってるのだろうか」と疑問。

Firebugでスタイルを表示してみて、いろいろ試したところ、「ol#posts li.post」(個別エントリの要素)に

    -moz-border-radius-bottomleft: 10px;
    -moz-border-radius-bottomright: 10px;
    -moz-border-radius-topleft: 10px;
    -moz-border-radius-topright: 10px;
なんて、不思議な指定があるのを見つけた。名前から推測するに、ボックスの角を丸めてるっぽい。

ためしにFirebug上でこれらを0px指定にしてみたら、スクロールがかなり軽くなった。これが原因か!

で、Stylishの導入ですよ

ということで、tumblrのダッシュボード向けに-moz-border-radius-*を無効にできれば快適なダッシュボード生活がまた戻ってくると判明したのだが、どうやってそうやるんだ?

ユーザスタイルシートやらいうキーワードは聞いたことがあったので調べてみると、Stylishという機能拡張を導入すると、グリモンでユーザJSを適用できるようにサイトごとにスタイルシートを設定できる、と。

さっそくインストール、見よう見まねでこんなスタイルを書いてみた。

@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("www.tumblr.com") {
    ol#posts li.post {
        -moz-border-radius-bottomleft: 0px !important;
        -moz-border-radius-bottomright: 0px !important;
        -moz-border-radius-topleft: 0px !important;
        -moz-border-radius-topright: 0px !important;
    }
}
ちなみに後ろの「!important」をつけないとうまく適用されなかった。

やっぱり重く感じてた人は他にもいたんだねぇ。

で、あんまりうれしくなったので上のスタイルをtumblrにPOSTしたら、さらに徹底的に改良したreblogが。

特にアバター(ユーザのアイコンみたいなもの)にまで適用したことで、notesを表示するときのアコーディオンエフェクトもずいぶん軽くなり、ほんとに快適。ありがたや、ありがたや。やっぱりv4になってから重たいと感じてた人は他にもいたのだなぁ。

最終的には先のtizooo氏のをベースに自分のPOSTと他の人のPOSTを若干色分けするルールを追加してこんな感じに落ち着いた。

こちらが適用前(デフォルト)。
ユーザスタイル適用前
で、カクカク適用後はこんな感じ。
ユーザスタイル適用後

ついでにGoogleも。

実はGoogleの検索結果も、表示している内容のわりに妙に重かった。これまたFirebugで調べて突き止めた原因が、font-familyのArial指定。これでなんでそこまで重くなるのかはわからんけど、ともかくarial指定を解除することで軽快になることだけは確か。ってか、俺のPCどんだけ重いのかと。

ということで、Google向けにこんなのやってみたり。

@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("www.google.co.jp") {
    body, td, div, .p, a {
        font-family: sans-serif !important;
    }
}

まぁ他にも重いサイトはあり、場合によってはユーザスタイルシートじゃどうもならんところもあるんだろうけど、利用頻度が高いところをこうやって潰せるとまだまだこのPCでも使えるかなぁ、と思ったり。

Google Chrome、その後2008年09月16日 03時17分08秒

まだしつこくChromeで遊んでるので、前回前々回のその後をば。大したネタじゃないんだけど。

Greasemetalは動きますな。

前々回のエントリではSafari対応版のoAutoPagerizeがうまく動かないって話書いたんだけど、どうもページ表示直後に動作しない状態だったらしく、ちょっと待つと動いたり、リロードすると動いたり、といった感じのようですな。

プロセス間通信のオーバーヘッドも大きいのか、自宅PCではちと負荷が高めだし、Firefoxのようにさくさくとはいかないけどtumblrのダッシュボード限定とかいった感じで使えてます。

ほんとはグリモンよりJSActionのほうがほしいんだけどねぇ。

safebrowsing/downloadsへのアクセス

やっぱりWin2Kだとなぜか約3分に1回アクセスしてる。けど、「フィッシングや不正なソフトウェアからの保護を有効にする」をオフにしておけばアクセスそのものが発生しないので、まぁ気にするほどでもないかと。

ちなみに上記URLからのリスト取得(というか「Safe Browsing」機能、か)はFirefox3にも実装されてて、こちらは30分ごとにアクセスしてるみたい。

あ、あと

と思ってたら、自宅のXP環境ではこんな頻度ではリクエスト投げてないんだよなぁ。その代わりかしらんが、なんかUDPのポート空けてるみたい。TCPViewで眺めてたらリモートは*.*になってるのでブロードキャスト待ちなのかな。そのわりには起動ごとに違うローカルポート使ってるけど。
なんて書いてたんだけど、XPで動かしててもUDPの待ちうけはやってますな。これ、なにやってるんだろ。

canvasの速さ

てっきりV8パワーかと思ってたんだけど、前回のエントリをネタにしてくださったロックスターになりたいさんでこんな記述が。

chromeのcanvasはskiaのパワーみたいです。
なるほど、グラフィックライブラリの性能ってのも要因足りうるのかぁ。

そんで、使うの?使わんの?

レンダリングには問題ないし、動作はきびきびしている(たまにメニュークリックしても反応しないことがあるが)し、単純なWebブラウジングの性能はまったく文句ないんだけど、個人的には最低限JSActionのような、メニューから実行するユーザスクリプト機能がないとメインブラウザにはできないなぁ。

あと、これはまず無理だけど、Tomblooみたいなtumblrへのクイックポスト機能もはずせないんだよなぁ。

やっぱChrome速いって。2008年09月12日 04時57分06秒

またChromeネタ。しかも中身ないし。

Chrome、速くねぇよ」とかって意見もあるわけだが、個人的にはとっても速いと思う。

上のリンクでは、「DOM操作が大したことねぇよ、Safari最強!」ってな感じだったので、ドキュメントロード時に5000個ほどノード作成→bodyにappendしてその時間を計るようなテストをしてみたら、確かにSafariには及ばないが、それでもOpera9.5よりもFirefox3よりも速い。大体こんな感じだった。

Safari > Chrome > Opera9.5 >> Firefox3 >>> IE7

これだけ見るとSafari最強!って思わなくもないんだけど、ブラウザ自体の起動速度と、ウィンドウ自体やメニューなんかの非HTML領域の描画速度が決定的に違う。Chrome最強。

Chromeはここら辺に引っ掛かりがないので体感上はSafariよりかなり速く感じる(というか、Safariは独自UIを持ち込んじゃってるのでこのあたりが軽いってことはWindows上ではありえないだろ)。でもそのうちテーマ対応したり拡張APIが提供されて拡張しまくったりとかでもっさり起動になることもあるのかも。

ま、こういう部分が気にならないスペックのPCを使ってる場合は、Firefoxつかっててもぜんぜんストレス感じないわけで、そういう環境ではSafariどころかChromeもメインブラウザの選択肢にはならんかな、と思ってたり。

あとね、こちらのエントリにあるように、canvasのパフォーマンスはもう並ぶものがない勢い。リンク先のコンテンツはcanvasを使った3Dゲーム風のデモなんだけども、元々負荷の高いコンテンツなのでウチのしょぼスペックPCだとストレスないのはChromeのみ、かろうじてSafariまでは、ってな感じ。こうね。

Chrome >>> Safari >>>> Opera >>>>>>>>>> Firefox3 >>>>> IE7

IEを比較しちゃうのは気の毒なんだけどね。しかし俺のPC、どんだけしょぼいのかと。

自分でcanvasで遊んだときは「Safari、圧倒的じゃん」というくらいSafariのcanvasは良いパフォーマンスを見せてくれてたんだけど、こういうコンテンツは、それこそV8効果なのかも。浮動小数点演算しまくるだろうから。

あー、あとどこかで書かれてたけど、setInterval/setTimeout系はChromeの独壇場みたいね。タイミング保証できちゃうようなレベル。

ってな、中身のない記事でした。

Google Chrome いろいろ2008年09月12日 04時34分12秒

前エントリでごにょごにょいってるわりに、合間合間にGoogle Chromeの実験ばかりしてたりして。で、そのメモっつーか。

Portable Chrome、まともに動くじゃないっスか!

前エントリのコメントトラックバックで黒翼猫さんよりご指摘いただきました。試してたポータブル版ではなく0.2.149.29だとKDWでラッパー入れなくてもクラッシュせずに動作します。「Win2K使うんじゃねぇよ、ゴルァ」の消し方はトラックバック元の記事を参照のこと。黒翼猫さん、ほんと感謝です。

ちなみに前回試したやつ(Portable_Chrome_08.09.208.exe)は0.2.151.0版で、どうもテストビルドバージョンみたいね。

どうでもいいが、前の記事のタイトル、「Potable Chrome」とか書いちゃってるし。なんだよ、ポタブルって。

それどころか、ちゃんとインストールできるじゃないっスか!

で、先ほどのコメント見てもらうとわかるんだけども、元々Google ChromeはWin2Kでクラッシュせずに動作するんだったのね。ただし、

  • 普通のダウンロードページにアクセスするとWin2Kではリンクが示されない(=ダウンロードできない)。なんか方法があるみたいだけどソース失念しちゃったのでわからん(^-^)
  • セットアップ関連の実行ファイルがいくつかWin2Kでは動作しない
ってのが壁として立ちはだかると。

んで、黒翼猫さんの最初の記事で配布している「chrome2k.zip」は、ここらへんの壁をいきなり取っ払っちゃってるわけですな。こんな具合で。

  • IEの実行ファイルを別名コピー
  • コピーIEとセットアップ時に互換性で問題がある実行ファイルを「XP互換モード」で動作させるようにレジストリ登録する(詳しいことは黒翼猫さんのサイトをよく読むこと)。
  • 互換モードで動作するコピーIEでダウンロードページを開く
というところまでバッチファイルがやってくれて、その後は手動でセットアップをダウンロードしてから起動すると、見事にインストールされると。うん、ポータブル版こねくり回すよりよっぽど簡単じゃん

Greasemetalは挫折

これもすでにあちこちで話題になってるんだけど、サイボウズ・ラボの奥氏が、Chromeにユーザスクリプト機能(平たくいえばグリモン)を追加するGreasemetalを開発した、と(参考:ChromeにJavaScriptで機能追加、サイボウズ・ラボの奥氏が開発 - @IT)。

もうね、当然興奮しましたよ、えぇ。AutoPagerize使えるだけでぐんと操作性よくなるし。注意点は

  • Greasemetalを有効にするにはChromeが起動していない状態からGreasemetalを起動する必要がある(Greasemetalが自動的にChromeを起動する)。Chromeを直接起動してもGreasemetalは起動しないので当然スクリプトは動作しない、と。
  • 動かないグリモンスクリプトが結構ありそう。グリモンが独自に提供している「GM_」プレフィックス付きの関数なんかは当然提供されていないからね。
といったあたり。なので、OperaやSafariで動作するユーザスクリプトを探してくるか、自前でごりごり改良/スクラッチする必要がある。

で、早速AutoPagerize_opera改め、Opera専用oAutoPagerizeからSafari対応版を落として試してみたんだけども、動いたり動かなかったり。正確には1回しか動いてないんですけど...orz

Greasemetal自体がリリースされたばっかり(っていうか、このタイミングでリリースできるだけでもものすごいことなのだが)ってこともあり、まだちょっと実用とまではいかない感じなので、あえなく挫折、と。願わくばGoogleが拡張APIを用意してくますように。プロセス間通信じゃ開発の敷居高いし。

safebrowsing/downloadsへの定期アクセスのナゾ

アドレスバーのSuggest機能について、なんだかなぁ、という記事を見たので、なんとなくChrome起動した状態でパケットキャプチャしてたら、about:blankを表示しているだけなのに勝手にjp-in-fxxx.google.comにPOSTが発生してるし。

リクエストURLはhttp://jp-in-fxxx.google.com/safebrowsing/downloadsに対して行われてて、こちらの記事で取り上げられてる内容ときわめて似通ってる(URLに含まれるクエリパラメータに、アプリケーション固有だか端末固有だかのwrkeyが付いてたけど)。ま、パケットの中身見たところ、めちゃくちゃ不振ってワケじゃないんだけど、なんだか気になる。

さらに、昼間試してたWin2Kの環境では、大体3分に1回このリクエストが発生してるたんだよね。POSTデータ見たところフィッシング保護用のデータ取り寄せてるみたいなんだけど、なんでこんな高頻度でリクエストする必要があるんだろう

と思ってたら、自宅のXP環境ではこんな頻度ではリクエスト投げてないんだよなぁ。その代わりかしらんが、なんかUDPのポート空けてるみたい。TCPViewで眺めてたらリモートは*.*になってるのでブロードキャスト待ちなのかな。そのわりには起動ごとに違うローカルポート使ってるけど。

ちなみにChromeの[オプション] - [高度な設定] で「フィッシングや不正なソフトウェアからの保護を有効にする」のチェックをはずしておくとjp-in-fxxx.google.com/safebrowsing/downloadsへのリクエストは出さないっぽい。あとでまたWin2Kで確認してみるかな。

その他

あとは「オレオレ証明書なSSLサイトに接続しても、まっとうな証明書のサイトに接続してるのと見た目上違わなそう」とか、「for in でのプロパティ列挙で、列挙順が定義順ではない」とか細かく気になるところはあるんだけど、検証が充分じゃないのでいずれ別記事で(といって書かないことも多いんだが > 俺)。