そこはかとなく

モバイル環境初心者が衝動買いしたモバイル機器と格闘した様と日々の備忘録など

MSN with pidgin 2.6.1

2009-12-08 06:22:23 | NetBSD
pkgsrcを最近のものにupdateして,make updateをしていたら,pidginもupdateされました.
そして,MSNに繋がらなくなりました...
「Invalid certificate chain」というメッセージが出てきて接続できません.

[ヘルプ]→[デバッグ・ウィンドウ]でデバッグ情報を確認すると,

certificate/x509/tls_cached: Certificate omega.contacts.msn.com is not yet valid, will be at Tue Jan 24 22:23:31 4868

こんなこと言われてます.4868年からactivateされるっていうのはどういうことなんでしょうか...parserのバグか本当に証明書がおかしいのかもしれないなぁ...

そして,omega.contacts.msn.comに接続しに行って,証明書の期限をチェックしているところで,弾いてしまっている様です.以前のpidginだと動いていたのに...以前のバージョンでは有効期限をチェックしていなかったのかな...

追ってみると,/usr/pkgsrc/chat/libpurple/ がチェックしている様です.libpurple/work/pidgin-2.6.1/libpurple/certificate.c で有効期限をチェックしている様に見受けられました.セキュリティ上の問題もあるかもしれませんが,使えない方がもっと困ります.
ということで,以下の様にして有効期限のチェックを外してしまいました.ただし,有効期限のexpirationだけは見ています.

Index: distinfo
===================================================================
--- distinfo (revision 31)
+++ distinfo (working copy)
@@ -4,3 +4,4 @@
RMD160 (pidgin-2.6.1.tar.bz2) = f1682e2d37ca272bc10b0c7710e73fb4807749bf
Size (pidgin-2.6.1.tar.bz2) = 8964827 bytes
SHA1 (patch-aa) = 7a1ec6bc64226dff60eac4b4835fabf1daecb9b3
+SHA1 (patch-xa) = a9dc2da12ac05cee4b49725f575f3b38a0e2098f
Index: patches/patch-xa
===================================================================
--- patches/patch-xa (revision 0)
+++ patches/patch-xa (revision 0)
@@ -0,0 +1,49 @@
+*** libpurple/certificate.c.orig Tue Dec 8 05:48:23 2009
+--- libpurple/certificate.c Tue Dec 8 06:02:07 2009
+***************
+*** 36,41 ****
+--- 36,44 ----
+ #include "signals.h"
+ #include "util.h"
+
++ /* XXX: dirty hack for now... */
++ #define PURPLE_CERTIFICATE_IGNORE_ACTIVATION
++
+ /** List holding pointers to all registered certificate schemes */
+ static GList *cert_schemes = NULL;
+ /** List of registered Verifiers */
+***************
+*** 229,235 ****
+ uid = purple_certificate_get_unique_id(issuer);
+
+ ret = purple_certificate_get_times(issuer, &activation, &expiration);
+! if (!ret || now <activation || now > expiration) {
+ if (!ret)
+ purple_debug_error("certificate",
+ "...Failed to get validity times for certificate %s\n"
+--- 232,242 ----
+ uid = purple_certificate_get_unique_id(issuer);
+
+ ret = purple_certificate_get_times(issuer, &activation, &expiration);
+! #ifdef PURPLE_CERTIFICATE_IGNORE_ACTIVATION
+! if (!ret || now > expiration) {
+! #else /* PURPLE_CERTIFICATE_IGNORE_ACTIVATION */
+! if (!ret || now > expiration || now <activation) { + if (!ret)
+ purple_debug_error("certificate",
+ "...Failed to get validity times for certificate %s\n"
+***************
+*** 1632,1638 ****
+--- 1639,1649 ----
+ now = time(NULL);
+ ret = purple_certificate_get_times(vrq->cert_chain->data, &activation,
+ &expiration);
++ #ifdef PURPLE_CERTIFICATE_IGNORE_ACTIVATION
++ if (!ret || now > expiration) {
++ #else /* PURPLE_CERTIFICATE_IGNORE_ACTIVATION */
+ if (!ret || now > expiration || now <activation) { + gchar *secondary;
+
+ if (!ret)

そして,入れ替えです.make replaceに失敗したので,make updateを使いました.

% cd /usr/pkgsrc/chat/libpurple/
% make update

うーん...こんなんで良いんだろうか...
世の中では CRL とかもちゃんとチェックしているのだろうか,とも思うので,まぁ,とりあえずは良しとします.

最新の pidgin だったりすると,証明書が無効であれば,ユーザに確認するくらいはしてくれるのかもしれませんが,とりあえず.
コメント (4) |  トラックバック (0) | 

muttとUTF-8

2009-12-08 03:05:14 | NetBSD
メーラは普段muttを使っているのですが,UTF-8にすると表示が微妙に変な気がします.

そこで,http://www.emaillab.org/mutt/ から以下のパッチを取得し,/usr/pkgsrc/mutt-devel にあててみました.

sanitize_ja_char patch
delete_prefix patch
create_rfc2047_params patch
wcwidth (Japanese mutt) patch

ちなみに,PKG_OPTIONSは,こんな感じにして build してみました.

PKG_OPTIONS= ssl smime curses sasl mutt-smtp mutt-hcache

そして,.muttrc に以下を加えてみました.

set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
set sanitize_ja_chars=yes
set rfc2047_parameters=yes
set cjk_width=yes

ちゃんと表示できる様になった様です.ただ,set strict_mime=no というのが mutt-1.5.20 のパッチには含まれていない様で,有効にできませんでした.他にもパッチがあるのかな?

さて,いろいろやり足りないこともありますが,とりあえず,今後の事も考えて,http://www.emaillab.org/mutt/ のパッチも含めて pkgsrc にしておきました.ふぅ.
コメント (0) |  トラックバック (0) | 

X11とuim

2009-12-08 02:49:01 | NetBSD
X11のアプリケーションでuim経由で日本語を入力したかったので,

setenv XMODIFIERS @im=uim

と,.cshrc に書いておくことにしました..xinitrcに書くべきかな...
gtk使ってるものだったら,不要なのかな?良く分かりません.

また,.Xresourcesに

*inputMethod: uim

と書いてみました.最近は,.Xsessions?とかに書くものなんでしょうか?良く分かりません.

ただ,まぁ,firefoxで日本語入力がuimでできる様になったので良しとします.
コメント (0) |  トラックバック (0) | 

mltermとuim-fep skkの▽とUTF-8

2009-12-08 02:43:17 | NetBSD
mltermを使っているのですが,uim-fep skkを使っていると▽などの文字幅がUTF-8でambiguousとなっている文字を表示する際に崩れてしまいます.

そこで,ambiguousな文字幅は常に2にするという設定を加えて対処できました.ふぅ.

% cat >> ~/.mlterm/main
# set width of characters of UTF-8 whose width are defined as ambiguous...
col_size_of_width_a = 2
^D
コメント (0) |  トラックバック (0) | 

tmux.conf

2009-12-08 02:38:41 | NetBSD
tmuxのdefaultの色使いがどうしても気になります.また,nviで日本語を入力する際に,uim-fep skkを使い易い様にしたくてしょうがありません.そこで,こんな感じにしてみました.

% cd /tmp
% tar xfz /usr/pkgsrc/distfiles/tmux-1.0.tar.gz tmux-1.0/examples/screen-keys.conf
% cp tmux-1.0/examples/screen-keys.conf ~/.tmux.conf
% rm -r tmux-1.0
% cat >> ~/.tmux.conf
#
set-window-option -g utf8 on
set-window-option -g automatic-rename off
set-window-option -g monitor-activity off
set-option -g visual-activity off
set-option -g visual-bell off
set-option -g visual-content off
#
set-window-option -g mode-keys vi
set-window-option -g mode-bg white
set-window-option -g mode-fg black
#set-window-option -g mode-bg colour244
#set-window-option -g mode-fg colour243
#
set-option -g status on
set-option -g status-bg colour244
set-option -g status-fg colour243
set-option -g status-left '[%m/%d %H:%M]'
set-option -g status-left-length 13
set-option -g status-right ''
set-option -g status-right-length 0
#
set-option -g message-bg colour244
set-option -g message-fg colour243
#
set-window-option -g window-status-bg colour244
set-window-option -g window-status-fg black
set-window-option -g window-status-current-bg blue
set-window-option -g window-status-current-fg colour244
set-window-option -g window-status-current-attr bold
^D

これで,大体満足できました.ペインってのをもうちょっと勉強しなきゃ...
コメント (0) |  トラックバック (0) | 

screenとtmuxとuim-fep skkとUTF-8

2009-12-08 02:27:55 | NetBSD
uim-fep skkが使える様になったので,screenでUTF-8してみます.うーむ,表示が変です.
しょうがないので,いろいろ探してみると,tmuxなるものがあるらしいというのに気付き,試してみます.

% cd /usr/pkgsrc/misc/tmux
% make update

そして,uim-fep skkしてみると上手く動いていそうです.screenにパッチを当てれば良いのかもしれませんが,折角なので,tmuxを使うことにしました.これで何とか生きていけそうです.

しかし,その後キーバインドが相当違うのに気付きました.CTRL-bはさすがに使い難くてしょうがありません.
そこで,tmux-1.0.tar.gz 内のtmux-1.0/examples/screen-keys.confを ~/.tmux.confとしてコピーして,screenっぽく動作させることにしました.本末転倒だろって気もしないでもありませんが,とりあえず,満足です.

ただ,色使いがちょっと気になるのですが...それは今後の課題ということで...
コメント (0) |  トラックバック (0) | 

UIM with UTF-8

2009-12-08 02:12:01 | NetBSD
UTF-8にしようとして,後には引き下がれないところまで来てしまったので,terminalでのfepを頑張ってみました.

これまでは,skkfepを使っていたので,最初はskkfepをUTF-8対応にしようと思いましたが,コードを見て挫折しました.そして,uimとやらがfepもあり,skkも出来て,UTF-8対応らしいので,uimへの移行に取り組んでみました.とりあえず,pkgsrcから入れてみました.

% cd /usr/pkgsrc/inputmethod/uim
% make update

ただし,anthy canna gtk uim-fep ximがdefaultで有効なので,使いそうなもの(gtk uim-fep xim)だけをオプションで有効にしました.ちなみに,gtkはfirefoxなどのgtkを使うアプリケーションのためです.また,ximはtgifとか古いアプリケーションのために使うかなと思って残してみました.

そして,いろいろ参考にしながら,以下の様に ~/.uim を書いてみました.

% cat >> ~/.uim
(require "japanese.scm")
(define ja-rk-rule
(append '(
(((",") . ()) ("," "," ","))
(((".") . ()) ("." "." ".")))
ja-rk-rule))
(define skk-style-simple
'((skk-preedit-attr-mode-mark . preedit-none)
(skk-preedit-attr-head . preedit-none)
(skk-preedit-attr-okuri . preedit-none)
(skk-preedit-attr-pending-rk . preedit-none)
(skk-preedit-attr-conv-body . preedit-none)
(skk-preedit-attr-conv-okuri . preedit-none)
(skk-preedit-attr-conv-appendix . preedit-none)
(skk-preedit-attr-direct-pending-rk . preedit-none)
(skk-preedit-attr-child-beginning-mark . preedit-none)
(skk-preedit-attr-child-end-mark . preedit-none)
(skk-preedit-attr-child-committed . preedit-none)
(skk-preedit-attr-child-dialog . preedit-none)
(skk-preedit-attr-dcomp . preedit-none)
(skk-child-context-beginning-mark . "[")
(skk-child-context-end-mark . "]")
(define skk-use-with-vi? #t)
(define skk-use-look? #t)
(define skk-use-skkserv? #t)
(define skk-jisyo-code 'euc-jp)
(define default-im-name 'skk)
^D

さて,これで準備できたはずなので,とりあえず,uim-fep skkを使ってみます.

% uim-fep

なかなか良い感じ,,,と思いきや,,,変換する際の表示が何か変です.
例えば,「した」と入力して,「舌」という漢字に変換したいとします.その際,

1. Sita と入力
2. 「▽した」と表示される
3. スペースキーで変換
4. 「▼下」と表示される
5. スペースキーで次候補に切り替える
6. 表示は「▼下」のまま(実際には「▼舌」となっている)
7. 確定する

という様な感じになってしまいました.つまり,候補が表示されている状態で,次候補の文字幅が同じである場合に,次候補を表示させようとしても画面に表示されないのです.これじゃ,使えません;_;

しかし,とりあえず入力できる様にしたかったので,かなり無理矢理ですが,次候補を表示する際には,プリエディット領域の文字を全て再描画する様に pkgsrc/inputmethod/uim へのパッチとして以下の様なものを作ってみました.

Index: distinfo
===================================================================
--- distinfo (.../upstream/inputmethod/uim) (リビジョン 38)
+++ distinfo (.../trunk/inputmethod/uim) (リビジョン 38)
@@ -5,3 +5,4 @@
Size (uim-1.5.5.tar.bz2) = 3259238 bytes
SHA1 (patch-ab) = 81693dd1b62bec4deb99b469a0b8e53ff11e86a8
SHA1 (patch-ac) = 3b3dfd09ed84c9d228836783e18df747ecaa5791
+SHA1 (patch-xa) = d17cb302cc69fef3a990f446421382096fbc202b
Index: patches/patch-xa
===================================================================
--- patches/patch-xa (.../upstream/inputmethod/uim) (リビジョン 0)
+++ patches/patch-xa (.../trunk/inputmethod/uim) (リビジョン 38)
@@ -0,0 +1,39 @@
+*** fep/draw.c.orig Tue Dec 8 00:22:54 2009
+--- fep/draw.c Tue Dec 8 00:25:22 2009
+***************
+*** 102,110 ****
+--- 102,115 ----
+ static int is_eq_region(void);
+ static void draw_subpreedit(struct preedit_tag *p, int start, int end);
+ static void draw_pseg(struct preedit_segment_tag *pseg, int start_width);
++ #ifdef HAVE_CORRECT_AMBIGUOUS_WIDTH
+ static int compare_preedit(struct preedit_tag *p1, struct preedit_tag *p2);
+ static int compare_preedit_rev(struct preedit_tag *p1, struct preedit_tag *p2);
+ static int min(int a, int b);
++ #else /* HAVE_CORRECT_AMBIGUOUS_WIDTH */
++ #define compare_preedit(a, b) 0
++ #define compare_preedit_rev(a, b) 0
++ #endif /* ! HAVE_CORRECT_AMBIGUOUS_WIDTH */
+ static void erase_prev_preedit(void);
+ static void erase_preedit(void);
+ static void set_line2width(struct preedit_tag *preedit);
+***************
+*** 887,892 ****
+--- 892,898 ----
+ }
+ }
+
++ #ifdef HAVE_CORRECT_AMBIGUOUS_WIDTH
+ /*
+ * p1とp2の先頭からの共通部分文字列(属性も等しい)の幅を返す
+ */
+***************
+*** 941,946 ****
+--- 947,953 ----
+ {
+ return a + }
++ #endif /* HAVE_CORRECT_AMBIGUOUS_WIDTH */
+
+ static void erase_prev_preedit(void)
+ {

何となくマルチバイト文字の文字幅のカウントの仕方か,現在の候補と次候補との共通部分をカウントする仕方が怪しそうです.ひょっとすると,▼などのambiguous widthの判定が libc で 1 にされている様な気もしないでもありません.

ncursesではなく,NetBSD標準のcursesを使う様に変更してみようとも考えましたが,ほとんど書き換えないといけない様な状態に陥いってしまい,諦めました.時間があるときにでもやれたらいいな...
コメント (0) |  トラックバック (0) | 

UTF-8への移行と挫折

2009-12-08 01:23:14 | NetBSD
これまでは,ja_JP.EUC-JPで生活していたのですが,何を思ったか ja_JP.UTF-8にしようと思い立ちました.

そこで,環境変数を以下の様にしてみました.

LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
LC_CTYPE=ja_JP.UTF-8

すると見事に色々なものの動作が変になってしまいました ;_;

1. skkfepがUTF-8に対応していない
2. uim-fepにするも,同じ文字幅の変換候補の間で候補選択していると,候補の表示が正しくされない(再描画されない)
3. screenで日本語を入力するとだんだんカーソルが飛んで行く
4. mltermで▽,▼の表示が変になる

とほほ...
コメント (0) |  トラックバック (0) | 

ThinkPad X61 の半角/全角キーとESCキー

2009-12-08 01:06:17 | NetBSD
ThinkdPad 日本語キーボードのESCキーは上の方にありすぎて、指の短い私には押すのが困難です。そこで、半角/全角キーとESCキーを入れ替えてみます。

コンソールの場合:
# echo "keycode 49 = Escape" >> /usr/share/wscons/keymaps/pckbd.us.esc
# echo "mapfile /usr/share/wscons/keymaps/pckbd.us.esc" >> /etc/wscons.conf
コメント (0) |  トラックバック (0) | 

NetBSD 5.99.22 へのアップデート

2009-12-08 01:04:25 | NetBSD
ノート PC の NetBSD が 4.99.73 (2008年10月頃?) と少し古いのでアップデートすることにします。

/usr/src/UPDATING を読むと、

* 新しいカーネル module の枠組み
* time_t/dev_t の 64bits への変更

など激しい変更があった様でいつも通りにアップデートすると嵌りそうです。
いつもは、

1. tool chain/カーネルのコンパイル
2. カーネルのインストール
3. リブート
4. ユーザランドのコンパイル
5. ユーザランドのインストール
6. リブート

この様な手順だったのですが、新しいカーネル module の仕組みを使う場合には、ブート時にカーネル module を読み込める boot loader を入れ、カーネル module も先にインストールしないといけない様です。そのため、カーネルだけでなく、カーネル module もコンパイル/インストールして、さらに、boot loader を入れ替えてからリブートしないと起動できない様です。

少し悩みましたが、やはり、いきなり boot loader を入れ替えて、boot しなくなるのも困ります。そこで、まずは、カーネルの config を GENERIC から変更して、カーネル module が不要なカーネルを作ることにします。

ffs など重要なものをカーネル module ではなく、カーネルそのものに組み込む様に設定します。no option ... の部分をコメントアウトし、ffs といった部分のコメントアウトを消します。そして、kernel を compile します。

% cd /usr/src
% cp sys/arch/i386/conf/{GENERIC,hogehoge}
% vi sys/arch/i386/conf/hogehoge
(no option ... の部分のコメントアウトを外す)
% ./build.sh tools kernel=hogehoge
% cd /usr/src/sys/arch/i386/compile/obj/hogehoge/
% sudo make install

そして、リブートすると、、、と起動できました。ぱちぱち。

次に、ユーザランドを入れ換えます。

% cd /usr/src
% ./build.sh -U distribution
% sudo ./build.sh -U install=/

そして、boot loader を入れ替えてみます。入れ替えるといっても、/boot だけを入れ替えれば良いようです。cp して終わりです。

% sudo cp /usr/mdec/boot /boot

そして、kernel から先に外した no option を復活させて、コンパイル、インストール、再起動すると、、、起動しました。load ffs と出て、ffs の kernel モジュールを正しく load してから boot できている様です。一安心です。

ふぅ、どきどきでした。
WAPBL とか試してみたいですが、それはまた今度。
コメント (0) |  トラックバック (0) |