JavaScript デバッグツール

投稿者 nanki 2008-06-12 13:04:00 GMT

inspection

いろんなブラウザでチェックしているうちに、ちょくちょく使う機能をまとめてみた。

DebugTool.alertbox(msg)
  console.log の代わり。

DebugTool.report(target, filter)
  target内の関数呼び出しを監視。
  内部でprototype.js とかを使いまくってるので、DebugTool.report(Prototype)とかはやらないこと!

DebugTool.inspect(target)
  DOM ツリーを遡って、タグ名、id、class属性などを表示。

DebugTool.shell()
  シェルっぽいのがでてくる。未完成、おまけ。

などなど。

要 prototype.js, effect.js

debug.js

これを任意のページでロードするbookmarkletの話は、別エントリで書く。

reportの中身は結構面白いと思う。

  report: function(target, filter) {
    var func = function(name) {
      return (function(a){
        var result = a.apply((function() {return this}).apply(a), $A(arguments).slice(1));
        DebugTool.alertbox(name + '(' + $A(arguments).slice(1).inspect().gsub(/^\[|\]$/, '') + ') -> '+$A([result]).inspect()+'.');
        return result;
      });
    };

    for (key in target) {
      if (typeof target[key] == 'function' && (!filter || filter(key))) {
        target[key] = target[key].wrap(func(key));
      }
    }
  },

wait もおすすめ。

  wait: function(wait_for, callback) {
    var check = false;
    try{
      check = (typeof(wait_for) == 'function') ? wait_for() : eval(wait_for);
    }catch(e){
    }

    if(check){
      callback(check);
    } else {
      var wait = arguments.callee;
      setTimeout(function(){wait(wait_for, callback)}, 100);
    }
  },

英数を英数+ESCに - KeyRemap4MacBook

投稿者 nanki 2008-04-28 23:38:00 GMT

vimで日本語を入力していると、ESC押しても日本語が解除されない。

そもそも、ESC遠すぎる。

以前使っていたThinkpadでは、半角/全角、無変換、F1が全てESCで便利だったのに。

DefaultKeyBindings.dictでなんとかなると思ったけど、ならなさそうなので、KeyRemap4MacBookを導入してみた。

英数をESCにする設定はあるが、英数を英数+ESCにする設定はないようだ。 というわけで、しばしの格闘の末…よくわかってないけど動いているっぽい。

たまに、英数にしようとして、検索ボックスの文字列を消したりする。 英数x2を英数+ESCにしたほうがいいかもしれないけど、取りあえずしばらく使ってみる。

diff -r 7af393f8e690 files/prefpane/checkbox.xml
--- a/files/prefpane/checkbox.xml Mon Apr 28 06:27:59 2008 +0900
+++ b/files/prefpane/checkbox.xml Mon Apr 28 23:37:57 2008 +0900
@@ -1053,6 +1053,10 @@
               <sysctl>remap.jis_eisuu2escape</sysctl>
             </item>
             <item>
+              <name>EISUU to EISUU &amp; Escape</name>
+              <sysctl>remap.jis_eisuu2jis_eisuu_escape</sysctl>
+            </item>
+            <item>
               <name>EISUU to Tab</name>
               <sysctl>remap.jis_eisuu2tab</sysctl>
             </item>
diff -r 7af393f8e690 src/kext/RemapUtil.cpp
--- a/src/kext/RemapUtil.cpp  Mon Apr 28 06:27:59 2008 +0900
+++ b/src/kext/RemapUtil.cpp  Mon Apr 28 23:37:57 2008 +0900
@@ -749,6 +749,15 @@
   }

   void
+  FireFunc::firefunc_jis_eisuu_escape(const RemapParams &params) {
+    unsigned int flags = allFlagStatus.makeFlags(params);
+    listFireExtraKey.add(FireExtraKey::TYPE_AFTER, KeyEvent::DOWN, 0, KeyCode::JIS_EISUU, CharCode::JIS_EISUU);
+    listFireExtraKey.add(FireExtraKey::TYPE_AFTER, KeyEvent::UP, 0, KeyCode::JIS_EISUU, CharCode::JIS_EISUU);
+    listFireExtraKey.add(FireExtraKey::TYPE_AFTER, KeyEvent::DOWN, flags, KeyCode::ESCAPE, CharCode::ESCAPE);
+    listFireExtraKey.add(FireExtraKey::TYPE_AFTER, KeyEvent::UP, flags, KeyCode::ESCAPE, CharCode::ESCAPE);
+  }
+
+  void
   FireFunc::firefunc_space(const RemapParams &params) {
     unsigned int flags = allFlagStatus.makeFlags(params);
     listFireExtraKey.add(FireExtraKey::TYPE_AFTER, KeyEvent::DOWN, flags, KeyCode::SPACE, CharCode::SPACE);
diff -r 7af393f8e690 src/kext/RemapUtil.hpp
--- a/src/kext/RemapUtil.hpp  Mon Apr 28 06:27:59 2008 +0900
+++ b/src/kext/RemapUtil.hpp  Mon Apr 28 23:37:57 2008 +0900
@@ -178,6 +178,7 @@
     void firefunc_commandSpace(const RemapParams &params);
     void firefunc_enter(const RemapParams &params);
     void firefunc_escape(const RemapParams &params);
+    void firefunc_jis_eisuu_escape(const RemapParams &params);
     void firefunc_space(const RemapParams &params);
     void firefunc_jis_kana(const RemapParams &params);
     void firefunc_jis_kana_x2(const RemapParams &params);
diff -r 7af393f8e690 src/kext/remap.cpp
--- a/src/kext/remap.cpp  Mon Apr 28 06:27:59 2008 +0900
+++ b/src/kext/remap.cpp  Mon Apr 28 23:37:57 2008 +0900
@@ -1589,6 +1589,15 @@
   }

   void
+  remap_jis_eisuu2jis_eisuu_escape(const RemapParams &params)
+  {
+    if (! config.remap_jis_eisuu2jis_eisuu_escape) return;
+
+    static KeyOverlayedModifier kom;
+    kom.remap(params, KeyCode::JIS_EISUU, ModifierFlag::NONE, FireFunc::firefunc_jis_eisuu_escape);
+  }
+
+  void
   remap_jis_eisuu2tab(const RemapParams &params)
   {
     if (! config.remap_jis_eisuu2tab) return;
@@ -2122,6 +2131,7 @@
   remap_jis_eisuu2optionL(params);
   remap_jis_eisuu2shiftL(params);
   remap_jis_eisuu2escape(params);
+  remap_jis_eisuu2jis_eisuu_escape(params);
   remap_jis_eisuu2tab(params);
   remap_jis_eisuu2middleclick(params);
   remap_jis_eisuu2rightclick(params);
参考:

これを動かしてみたくなった。

スーパーマリオブラザーズをRubyで作ってみた - I am Cruby!

まず、portsでSDLを入れる。

℗ sudo port install libsdl +quartz
℗ sudo port install libsdl_image libsdl_mixer libsdl_ttf rb-rubysdl

つぎに、こちらのサイトを参考にrsdlのソースをコンパイルして、バイナリをパスの通ったどこかに置く。

℗ wget http://www.kum...
℗ tar zxf rsdl[TAB]
rsdl/        rsdl.tar.gz

あ、あれ?

℗ which rsdl
/opt/local/bin/rsdl

ひゃぁ、入ってる。

本来はこうなったはず。

$ ./configure.rb
$ make
$ cp ./rsdl ....#どこかパスの通ったところ。

これで、

ꐪ rsdl -Irskit main.rb  

で起動できて遊べるのだが、ブロックの上のクリボーを下からたたくと落ちる。 SGEが無いらしい。

macportsにはいらっしゃらないうえに、素直にはmakeできないとか。 こちらこちらを参考に、Makefileにパッチを当てればOKらしい。 二度と見たくないので、Portfileを作ってcodereposに置いておいた。

適当な場所にsvn coして、

/opt/local/etc/macports/sources.confに次の一行を加える。(パスはcoしたパス)

# /opt/local/etc/macports/sources.conf
file:///Users/.../coderepos/config/ports/ [nosync]

さらに、portsディレクトリの中でportindexすれば使えるようになる。

ꐪ sudo port install libsdl_sge

念のためRuby/SDLを入れ直して、めでたしめでたし。 動いた。 mariobros

参考:


QRコードをPostScriptで吐き出す、という話。

QRコード自体の生成には、libqrencode, PostScript 生成には、cairo を利用している。

友人曰く、IllustratorでQRコードをパスとして扱うには、数万円するプラグインを買うか(結構高機能)、ラスター画像をトレースするのが一般的なんだとか。 えぇぇ。

そんなこんなで作りました。betaだよ。

QRコードジェネレータ(PostScript版)

参考:

次のページへ - accessNext

投稿者 nanki 2008-04-09 02:50:00 GMT

ページ中の「次へ」とか「前へ」とかのリンクに、accesskeyを設定して、Ctrl-l / Ctrl-hでショートカットできるようにするGreasemonkeyスクリプト。 $X関数は、こちらのを参考(コピペ)に、以下の修正を加えてある。

- var o = document.createNSResolver(context)(prefix);
+ var o = document.createNSResolver(context).lookupNamespaceURI(prefix);

accessNext.user.js

Googleの検索結果、各種ブログを始め、以下のようなページでお役立ち。 * The Haskell 98 Report: Introduction * 赤い馬 - ときにそのガムはふくれますか?

firefox 2, Safari(GreaseKit)で動作チェック済み。

追記:2008/04/11

nextリンクの優先度付けアルゴリズムを変更。 なるべくキーワードに近いリンクを選択するように。

参考:

" in ~/.vimrc
au BufWritePost */bin/* :silent !chmod a+x <afile>
au BufEnter */bin/* if getline(1) == "" | :call setline(1, "#!/usr/bin/env ruby") | endif
参考:

Simple creation of scripts - Vim Tips Wiki - a Wikia wiki


RubyInline with pkg-config

投稿者 nanki 2008-03-04 16:10:00 GMT

qrencoder.rbにこんなコード足した。

  builder.add_compile_flags "-I `pkg-config --variable=includedir libqrencode`"
  builder.add_link_flags "`pkg-config --libs libqrencode`"

Purl 実行環境!

投稿者 nanki 2008-02-23 21:47:00 GMT

shadow

:区切りの逆ポーランド記法言語、purlのランタイムを公開。

http://purl.netswitch.jp/purl/1:load:3:shadow:medium:to.png
上の画像のURLがそのままソースコードになっています。

こちらから画像をアップロードすると、統合開発環境に飛びます。

こんなかんじ

rubyruby

といったことが、URLだけで実現可能。


プログラミング言語 purl を ruby で実装

投稿者 nanki 2008-02-21 01:40:00 GMT

言語処理系を実装するのは、初めて(だと思う)

PostScript などと同じ逆ポーランド風の言語で、画像処理用途。

以下purlのソース。

2:load:dup:2:shadow:swap:composite:geom:1:load:100:100:4:pull:4:pull:crop:swap:composite:to.png

:がリテラルの区切り、その他は数字と演算子。 上のコードでは、2番の画像をロードして、ドロップシャドウしたものに1番の画像を背景として合成している。

ソースコード中に改行は入れられない。何故ならコードはURLの一部だから…

sample


ターミナルで色づけ

投稿者 nanki 2008-02-02 03:37:00 GMT

手軽に使えるフィルタコマンドが欲しかったので、rubyで書いた。

$ gem install term-ansicolor した後、

☶ cat public/javascripts/prototype.js |color red -- function |color yellow -- return | tail

terminal-color-filter

参考:

/lang/ruby/misc/color - CodeRepos::Share - Trac