2008年7月アーカイブ
2008年7月30日
iPhone用にmobircをカスタマイズした
iPhoneで動作するIRCクライアントが(まだ)ないので、Safariから使えるmobircを最適化してみた(最初はkeitaircをいじったんだけど、mobircならAjaxで内容を更新してくれると教わったので、乗り換え)。とりあえず実用できそうな感じ。
PerlとかJavascriptとかよくわからないので、だいたいはCSSでそれっぽくしただけです。一緒に悩んでくれた@kenan_とアドバイスくれた@aerithに感謝。
iPhone用にkeitaircをカスタマイズした
mobircに乗り換えたので今後使うことはなさそうだけど、もったいないのでアップしておく。
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が動作しないと不便なので対応した。
- PageButeプラグインでHomeを分割
- AutoPagerize用のmicroformatsを仕込む
ページ分割にPHPを使用したくなかったので、静的なHTMLを出力してくれるPageButeプラグインを使用した。
あと「次のページ」へのリンクをA要素丸ごと出力するタグしか無いので、URLだけを出力するタグを追加した(そのままだとAutoPagerize用のrel属性を追加できない)。
この辺をクリアできる分割プラグインがあればそっち使った方が楽そう。