2008年7月アーカイブ

2008年7月30日

iPhone用にmobircをカスタマイズした

tokuhiromさんが公式に取り込んでくれたよ!

iPhoneで動作するIRCクライアントが(まだ)ないので、Safariから使えるmobircを最適化してみた(最初はkeitaircをいじったんだけど、mobircならAjaxで内容を更新してくれると教わったので、乗り換え)。とりあえず実用できそうな感じ。

PerlとかJavascriptとかよくわからないので、だいたいはCSSでそれっぽくしただけです。一緒に悩んでくれた@kenan_とアドバイスくれた@aerithに感謝。

mobirc_iphone_1 mobirc_iphone_2
Uploaded with plasq's Skitch!
続きを読む: iPhone用にmobircをカスタマイズした

iPhone用にkeitaircをカスタマイズした

mobircに乗り換えたので今後使うことはなさそうだけど、もったいないのでアップしておく。

keitairc_iphone_1 keitairc_iphone_2
Uploaded with plasq's Skitch!

keitairc.cssのパスは適時書き換えてください。

2008年7月28日

電波の屆きにくいところでiPhone使ってみた

週末に伊豆で2箔3日して、部屋の中では窓際まで行かないとほとんど電波入らない。窓際でもアンテナ1本な環境でiPhoneをいじってみたんで、その感想をメモ。と言ってもSafari越しにkeitairc使ってIRCしたりTwittelatorからTwitterに(写真付きで)ポストしたりとかした程度。大したことはしていない。

気がきいていたところ

  • Safariで通信中に切断されると、次に接続したときに自動で再通信してくれる。
    • ページを表示しようとしたり、フォームから投稿しようとして切断されても放っておけば勝手にリトライしてくれた。
  • アプリのダウンロード中に切断されても、もう一度やり直せば途中からダウンロードを再開してくれる。
    • App StoreじゃなくてCydiaで試したんだけど、App Storeでも出来るんじゃないかな。

気をきかせてほしかったところ

  • Twittelatorではポスト中に切断されてもリトライしてくれない。
    • 失敗したらもう一度写真撮ったり入力し直さなくちゃいけなかった。アプリの作り込みの問題だろうから改善されると良いな。

まとめ

  • 電波が屆くってすばらしいですね。

2008年7月24日

さくらのレンタルサーバーにmobircを入れたい

iPhone買ったんでkeitaircをiPhone用にカスタマイズして使っていて、やっぱ自動受信は欲しいなーと思ってたら、@kenan_から「それmobircでできるよ」と言われた。

とりあえず本体を入手。さくらにsvn入ってなかったので、手元のMacからsvnしてアップロードした。

$ svn co http://svn.coderepos.org/share/lang/perl/mobirc/trunk/mobirc

make testで不足モジュールをチェックして、

$ perl Makefile.PL
$ make test

cpanからインストールしまくる。

$ cpan
cpan> install モジュール名
...

以下のモジュールでインストールに失敗したけど面倒なのでforce installした。

  • HTTP::MobileAgent
  • Data::Visitor::Encode
  • HTML::Entities::ConvertPictogramMobileJp
  • Encode::JP::Mobile

config.yaml.sample をコピーして適当に編集して保存。

$ cp ~/mobirc/config.yaml.sample ~/mobirc/config.yaml
$ vim ~/mobirc/config.yaml

実行。

$ ~/mobirc/mobirc
Could not load class (App::Mobirc::Plugin::Component::HTTPD) because : Can't locate object method "mk_accessors" via package "Data::Visitor::Encode" at /home/retlet/perl/lib/Data/Visitor/Encode.pm line 16.
BEGIN failed--compilation aborted at /home/retlet/perl/lib/Data/Visitor/Encode.pm line 17.
Compilation failed in require at /home/retlet/mobirc/lib/App/Mobirc/Web/Handler.pm line 4.
BEGIN failed--compilation aborted at /home/retlet/mobirc/lib/App/Mobirc/Web/Handler.pm line 4.
Compilation failed in require at /home/retlet/mobirc/lib/App/Mobirc/Plugin/Component/HTTPD.pm line 7.
BEGIN failed--compilation aborted at /home/retlet/mobirc/lib/App/Mobirc/Plugin/Component/HTTPD.pm line 7.
Compilation failed in require at /home/retlet/perl/lib/i386-freebsd-64int/Class/MOP.pm line 139.
 at /home/retlet/perl/lib/i386-freebsd-64int/Class/MOP.pm line 140
    Class::MOP::load_class('App::Mobirc::Plugin::Component::HTTPD') called at /home/retlet/perl/lib/MooseX/Plaggerize.pm line 20
    MooseX::Plaggerize::load_plugin('App::Mobirc=HASH(0x89b149c)', 'HASH(0x89902c0)') called at /home/retlet/mobirc/lib/App/Mobirc.pm line 44
    App::Mobirc::_load_plugins('App::Mobirc=HASH(0x89b149c)') called at /home/retlet/mobirc/lib/App/Mobirc.pm line 35
    Class::MOP::Class:::around('CODE(0x87732f8)', 'App::Mobirc', '/home/retlet/mobirc/config.yaml') called at /home/retlet/perl/lib/i386-freebsd-64int/Class/MOP/Method/Wrapped.pm line 128
    Class::MOP::Method::Wrapped::__ANON__('App::Mobirc', '/home/retlet/mobirc/config.yaml') called at /home/retlet/perl/lib/i386-freebsd-64int/Class/MOP/Method/Wrapped.pm line 88
    App::Mobirc::new('App::Mobirc', '/home/retlet/mobirc/config.yaml') called at ./mobirc line 36

ひゃー。
モジュール不足じゃないしわからんちーん。と、#Twitter@IRCNetで相談してみたらちょうどData::Visitor::Encodeで問題が発生してることを教えられた。

とりあえずここまで。

kenanさんに perl Makefile.PL でWarningになってるやつを全部入れるんだ。と言われたので入れようとしている。

$ perl Makefile.PL 
include /home/retlet/mobirc/inc/Module/Install.pm
include inc/Module/Install/Metadata.pm
include inc/Module/Install/Base.pm
include inc/Module/Install/Makefile.pm
include inc/Module/Install/TestBase.pm
include inc/Module/Install/Include.pm
include inc/Test/Base.pm
include inc/Test/Base/Filter.pm
include inc/Spiffy.pm
include inc/Test/More.pm
include inc/Test/Builder.pm
include inc/Test/Builder/Module.pm
include inc/Text/Diff.pm
include inc/Test/Exception.pm
include inc/Module/Install/WriteAll.pm
Writing META.yml
include inc/Module/Install/Win32.pm
include inc/Module/Install/Can.pm
include inc/Module/Install/Fetch.pm
Warning: prerequisite Data::Visitor::Encode 0.09 not found.
Warning: prerequisite HTTP::MobileAgent::Plugin::Locator 0.01 not found.
Writing Makefile for mobirc

Data::Visitor::Encode と HTTP::MobileAgent::Plugin::Locator が入らない( ´・ω・)
Data::Visitor::Encode は Data::Visitor のバージョンを下げれば良さそうなので下げてリトライ。

$ cpan i N/NU/NUFFIN/Data-Visitor-0.17.tar.gz
$ cpan i Data::Visitor::Encode
...

入った。
HTTP::MobileAgent::Plugin::Locator はよくわからなかったのでforce installした。

今度こそ動くかな?

$ cd ~/mobirc
$ ./mobirc

エラー出ない。動いてるっぽい。

あれこれいじってたらtiarraが落ちて、その後mobircを起動すると以下のエラーで落ちるようになった。

Can't use an undefined value as an ARRAY reference at /home/retlet/perl/lib/POE/Filter/Stackable.pm line 90.

タイミングからいってtiarraが過去ログ流してるせいかなーと当たりをつけて、tiarra.confから該当モジュールをオフに。

- Log::Recent

再度mobircを立ち上げたら大丈夫っぽい。その後、設定を戻しても落ちなくなった。
tiarraが落ちたあたりのログに変なものでも混じってたのかなー。

参考

2008年7月 7日

VimperatorでコピーやペーストとかOSのショートカットが効かない

Vimperatorの1.2pre 06-17版くらいから、Mac OS X標準のキーバインドが一部効かなくなった(Winでも起こるけど同じタイミングで問題が発生したかは不明)。キーバインドがバッティングしているわけでもないので原因がよくわからないのだけど、不便なので個別にmap書いて対応してる。

Mac

imap <C-f> <Right>
imap <C-b> <Left>
imap <C-n> <Down>
cmap <C-f> <Right>
cmap <C-b> <Left>
cmap <C-n> <Down>
map  <M-c> <C-v><M-c>
imap <M-a> <C-v><M-a>
imap <M-z> <C-v><M-z>
imap <M-x> <C-v><M-x>
imap <M-c> <C-v><M-c>
imap <M-v> <C-v><M-v>
cmap <M-a> <C-v><M-a>
cmap <M-z> <C-v><M-z>
cmap <M-x> <C-v><M-x>
cmap <M-c> <C-v><M-c>
cmap <M-v> <C-v><M-v>

なぜか<C-p><Up>だけは効く。<M-c>は効いてるっぽいけどそのままだとビープ鳴ってウザいので書く。
ちなみに<M-c>のmap先はYでもいいんだけど、フレーム分割されたページだとYでヤンクできなかったのでこうした。

Windows

メイン環境じゃないのでちゃんと検証してないです。
よく考えたら noremap <C-c> はページのロードを中止する機能と被ってた。のでteramako-vimperatorrcを参考にテキスト選択してたらコピー、 してなかったらロードを中止するよう変更。

inoremap <C-a> <C-v><C-a>
inoremap <C-z> <C-v><C-z>
inoremap <C-x> <C-v><C-x>
inoremap <C-c> <C-v><C-c>
inoremap <C-v> <C-v><C-v>
cnoremap <C-a> <C-v><C-a>
cnoremap <C-z> <C-v><C-z>
cnoremap <C-x> <C-v><C-x>
cnoremap <C-c> <C-v><C-c>
cnoremap <C-v> <C-v><C-v

" Add Mapping <C-c> copy or stop loading
js <<EOM
mappings.addUserMap([modes.NORMAL,modes.VISUAL],['<C-c>'], 'Copy selected text or stop loading',
    function(){
        var sel = window.content.window.getSelection().toString();
        if (sel){
            copyToClipboard(sel,true);
        } else {
            BrowserStop();
            echo('Stopped loading !');
        }
    }
);
EOM

noremap は再帰しないmap。上の例だと無限ループするのを防ぐ。

コピーやペーストのmapは、コマンドライン・バッファの出力をでコピーとかテキストエリアで簡単にペーストする方法 - hogehogeにあるように<C-Insert><S-Insert>使ってもいいかも。

ただ、Insertでもうちの環境だとバッファウィンドウのテキストはコピーできなかったので、どっちのmapでも特に違いは無さそう。

2008年7月 1日

Movable TypeのHomeをAutoPagerizeに対応させる@Vicuna

エントリを見返すのに、AutoPagerizeが動作しないと不便なので対応した。

  1. PageButeプラグインでHomeを分割
  2. AutoPagerize用のmicroformatsを仕込む

ページ分割にPHPを使用したくなかったので、静的なHTMLを出力してくれるPageButeプラグインを使用した。
あと「次のページ」へのリンクをA要素丸ごと出力するタグしか無いので、URLだけを出力するタグを追加した(そのままだとAutoPagerize用のrel属性を追加できない)。

この辺をクリアできる分割プラグインがあればそっち使った方が楽そう。

続きを読む: Movable TypeのHomeをAutoPagerizeに対応させる@Vicuna