トップ «前の日(01-20) 最新 次の日(01-22)» 追記   RSS 1.0 FEED  

Journal InTime


2002-01-21 (Mon)

_ 風邪

一日家にいても直らなかった。 家にいても仕事するのは同じなんだよなあ。


2004-01-21 (Wed)

_ [Ruby] Net::IMAPでclosed streamエラー

mobileimapで以下のようなエラーが出るというレポートをいただいた。

closed stream
/usr/local/lib/ruby/1.8/net/imap.rb:1013:in `write'
/usr/local/lib/ruby/1.8/net/imap.rb:1013:in `print'
/usr/local/lib/ruby/1.8/net/imap.rb:1013:in `put_line'
/usr/local/lib/ruby/1.8/net/imap.rb:986:in `send_command'
/usr/local/lib/ruby/1.8/net/imap.rb:980:in `synchronize'
/usr/local/lib/ruby/1.8/net/imap.rb:998:in `send_command'
/usr/local/lib/ruby/1.8/net/imap.rb:311:in `logout'
...

Net::IMAPのせいではないか、ということだけど、そうに違いない。 ごめんなさい。

でも、上記のバックトレースだけでは状況がよくわからない。

Net::IMAPはスレッドを使ってるのだが、Rubyだとメイン以外のスレッド が例外で落ちた時にデフォルトでは何もおこならい(Javaとかはどうなんだっけ) ので、バックトレースの情報があんまり有用でないことがある(本当の問 題はバックトレースが出てくるより前の、別スレッドの挙動にあるため)。 こういう時は、Thread.abort_on_exception = trueとすると原因 がわかることが多い。 *1 *2

あと、Rubyのスレッドではまりやすいのは、Cで実装したメソッドの中で ブロックしてしまうと(関係ないスレッドもふくめて)全部の処理が止まっ てしまうことだ。 たとえば、データベースのトランザクションなんかでデッドロックに陥 ると、どうしようもなくなる。 *3

*1  あとでこの場合はこの話はあんまり関係ないことがわかった。 ensureでNet::IMAP#logoutを呼んでいて、そこで更に例外がおきていた ので、原因がわかりにくくなっていたようだ。 こういうのもありがち。

*2  結局、原因はenvelopeやbodyがNILになっているメッセージのparseに失 敗したせいだとわかった。CVSのHEADでは修正済。

*3  postgresだったら、PGconn#aync_execを使えば大丈夫そうだ。

_ [Ruby] Changes

rubyの変更点を日本語で読みたい時は <URL:http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs> を見ればいいらしい。 *1

*1  というか、書かなきゃ。


2005-01-21 (Fri)

_ [Ruby] fixed typo

ひさびさにcommit。 ChangeLogに、

fixed typo. fixed: [ruby-list:40546]

と書こうとしたら、

fixed typo. fixed: [ruby-lis:40546]

と書いてしまった。

もう一度直したけど、今度はだいじょうぶだよな。

_ [仕事] コーディング規約

Cでやるプロジェクトのコーディング規約について話し合う。

ちょっと自分の好みと違う部分が残る*1ものの、だいたい妥協できるところに落ち着きそうだ。 英語で話す時は日本語の時と人格が変わる、という話をよく聞く けど、Cで書く時は、Rubyで書く時と、好みがだいぶ変わるなあ。

*1  たとえば、if分にはかならず{}を使うとか。


2017-01-21 (Sat)

_ [Ruby][Textbringer] Textbringer 0.1.0

年末から作っていたテキストエディタをいったんリリースした。

こんな感じのスクリーンエディタである。

$ gem install textbringer

でインストールして、

$ tb

で起動する。

日本語テキストも扱える。

ISO-2022-JPも扱いたい場合は~/.textbringer.rbに以下のように書いておくとよい。

Buffer.detect_encoding_proc = Buffer::NKF_DETECT_ENCODING

マニュアルは何もないので、lib/textbringer/keymap.rbあたりを読んで使い方を想像してほしい。 まあだいたいEmacsと同じでredoがundoと別のコマンド(C-xC-/)になっているくらい。

Rubyモードも一応作ったけど、まだオートインデントとC-cC-cでのrake実行くらいしかできない。

名前の由来はマイクル・ムアコックのメルニボネの皇子とかに出て来る魔剣Stormbringerなんだけど、新訳が出たと思ったらもう紙は絶版になっているようでつらい。

何でテキストエディタを作っているかというと、会社の忘年会の時に中村君と話していて最近作りたいものないという話になって、昔テキストエディタを作りたいと思っていたことを思い出したから。 そのためにcursesの拡張ライブラリを作ったのだが、その時から20年くらい経ってしまった(しかも結局ncurseswというgemを使うことにしたので活かされてない)。

今のところEmacsに対するアドバンテージは括弧が少ないことくらいだが、地道に育てていきたい。

1/22追記

tbというコマンド名がtb.gemとconflictするという指摘があったのでtextbringerにrenameした0.1.1をリリースした。


2018-01-21 (Sun)

_ [キーボード][Viterbi] QMK Firmwareのカスタマイズ

Viterbi keyboardに載せているQMK Firmwareに面白そうな機能があったのでカスタマイズしてみた。

RGB Lightingの無効化

ViterbiのデフォルトのキーマップではRGB Lightingが有効になっているが、LEDは付けていなので無効化した。 これでかなりファームウェアのサイズが小さくなる。

Mousekeysの有効化

マウスの移動やボタンイベントをキーに割り当てられるので、Lower + カーソルキーをマウス移動、Lower + 最右列下から三つをボタンイベントに割り当てた。

Dynamic Macroの有効化

Emacsのキーボードマクロのような機能があるので有効にした。 Raise + Homeで記録開始、Raise + Escで記録終了、Raise + Endでマクロの実行とした。 マクロは二つまで同時に記録できるので、もう一つはPage Up / Page Downに割り当てた。

その他

他にはAuto Shiftを試してみたけど、hjklあたりの長押しが使えなくなるのでいったん無効化した。

OS毎にUnicodeサポートもあるようなので、頑張ればキーボード単体でT-Code入力もできるかもしれない。