トップ 最新 追記 RSS feed

継続にっき

2004|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|03|05|06|08|09|10|12|
2007|01|02|03|05|07|12|
2008|10|
2009|01|05|12|
2010|04|05|11|
2011|01|09|12|
2012|02|03|05|09|12|
2013|02|03|
2014|05|09|
2015|12|

2005-01-03 (Mon)

))) 年賀状

毎年この時期になると思うんだけど、どこかに小学生向けの文章を書く時のための漢字チェッカーはないのかな。 漢字交じりの文章を打ち込んで対象学年を入力すると未習の漢字を指摘してくれるようなツール。 簡単なので自分で作れって話ですがそもそも必要なのが年1回なのでやる気が起きない。そんなことを考えながら 今年もふりがなをふって出しました。

))) tcpserver(ucspi-tcp) with SSL

2005-01-04 01:08:13.351711500 tcpserver: warning: dropping connection, unable to accept SSL connection

imapsサーバのログにこんなものがいっぱい出ていたので調べてみたらサービスの生存確認に使っているNagiosが原因だった。 TCPでつなぐだけつないで接続を切っていたんだからこんな警告が出るのも当たり前か。 放っておくのもあれなので対策することに。

まずSSL経由でデータを送るためにncs.rbを作成。

#! /usr/bin/env ruby
require 'socket'
require 'openssl'

host, port = ARGV
TCPSocket.open(host, port) do |s|
  ssl=OpenSSL::SSL::SSLSocket.new(s)
  begin
    ssl.connect
    STDIN.each do |line|
      ssl.print line
      print ssl.read
    end
  rescue
    exit 1
  ensure
    ssl.close
  end
end

続けてサービスチェック用のスクリプトを作る。まー、こんなものでいいでしょ。

#!/bin/sh
echo '00001 LOGOUT'|/usr/local/bin/ncs.rb "$@"|grep completed

これで一応問題はなくなったけれどログにNagiosのアクセスが延々と記録されていくのはちょっと嫌な感じ。 特定のIPからのアクセスは記録しないという設定が出来ないか探してみたけれどどうやら無いっぽい。


2005-01-04 (Tue)

))) ドメイン取得

取ってしまいましたよcallcc.net。……いや、その、見たら空いていたのであまりのカッコよさについ。 年が明けた勢いか。

今回利用したのはValue Domain。 Webやメールはすべて自前なので判断基準はWHOIS情報の名義を代理してくれるかどうか。あともちろん値段も。 たぶん海外のレジストラで取った方が安いんだろうけど、クレジットカードはJCBか持っていないし年額数百円で 国内業者に任せられるならよいかなと。13時過ぎに振り込みをしてその日のうちにドメインが使えるようになったのは素晴らしい。

デフォルトだとゾーンは向こうが管理してくれていてネームサーバは次のような構成になっている。

dns1.name-services.com. 161044  IN      A       63.251.163.102
dns2.name-services.com. 161044  IN      A       216.52.184.230
dns3.name-services.com. 161044  IN      A       63.251.83.36
dns4.name-services.com. 161044  IN      A       64.74.96.242
dns5.name-services.com. 161044  IN      A       212.118.243.118

この状態で8レコードまで設定できる。ゾーンの委譲などは出来ないけれど、やりたければ自分で動かせばよいので問題なし。

コントロールパネルで設定できる主な項目はこちら。登録を行わないとこれらの情報を確認できない *1と いうのはどうかと思う。「このサービスを利用することで何が出来るか」というのはユーザーがもっとも知りたいことなのに。

  • WHOIS登録情報の変更
  • DNSレコード/URL転送の変更
  • ネームサーバーの変更
  • メール転送設定の変更
  • 有効期限確認/更新・延長 日付順
  • ダイナミックDNS情報
  • ドメインロックの変更

唯一の懸念は上位レジストラであるeNomの評価。「偽装.INFOドメインについて」はどう判断すべきか。

*1 どこかに書いてあるのかもしれないけど、少なくともここ以上にまとめてあるページは見つけられなかった


2005-01-05 (Wed)

))) cp -a

今日になって突然ssh経由でログインできなくなった。

$ ssh example.com
Permission denied (publickey,keyboard-interactive)

昨日まで問題なかったのにおかしいなと思ったらホームディレクトリのパーミッションが755になってた。 そうなってしまった原因を探るべく履歴をあさってみるとこんなものが。

$ cp -a ./ ~/

2005-01-11 (Tue)

))) 発見

テストが近づくと無性にプログラムを書きたくなる法則。


2005-01-12 (Wed)

))) iPod shuffle発表

久しぶりに琴線に触れたデジタルデバイスだ。

  • 液晶なし
  • シャッフル/通常再生のみ
  • 通常の同サイズUSBメモリと比べて数千円差という価格設定

とえらく大胆なコンセプト。思い切りがよいね。自分の用途ならこういう割り切り方は歓迎だし、 USBメモリ欲しいなと思っていたし、デザインもいいし……と大いに物欲を刺激中。

でもiTunesを通さなければいけないっていうのは大きな減点だ。iTMSとの連携やスマートプレイリストの魅力は 理解できるけど、QuickTimeやらReal Playerやらはいれたくないっていうどうでもいいようなポリシーがあるので。 あと、SonicStageのせいで専用の管理ソフト*1に拒否反応が出るっていうのもあるかもしれない。標準のコピーで転送できるなら どうとでもなりそうなのになぁ。

*1 おっと、I氏のつぼなんてソフトがあった


2005-01-15 (Sat)

))) Emacs with PuTTYにおいてC-/でundoするには

現在のPuTTYはC-/(slash)がC-_として送られている。このために日常使っているC-/でundo、 C-_でredoという使い分けが出来ないので何とかならないかやってみた。

そもそもなぜC-/がデフォルトで送られないのかというと、C-/に対応するASCIIコードというものが存在しないからだ *1。 そういうわけでC-/を送るというプロセスはF1やHomeなんかを送ることに近いものになる。つまり当初の目的を実現するには C-/を押すことでC-_でなくC-/を表すエスケープシーケンスを送るようPuTTYをいじればよい。

PuTTY

まずはPuTTYをビルドするところまで持って行く必要があるが、PuTTY ごった煮版にビルドの仕方があるのでパッチと合わせてありがたく頂戴する。 これで最低限の準備は完了。いかにも、な感じがするwindow.cから読んでみる。

Windowsプログラミングはほとんど分からないものの、キー入力を処理していそうなところを探してみると

// window.c
2616       case WM_KEYDOWN:
2617       case WM_SYSKEYDOWN:
2618       case WM_KEYUP:
2619       case WM_SYSKEYUP:

2645                 len = TranslateKey(message, wParam, lParam, buf);

というのが見つかるのでこいつをキーワードにぐぐってみると Re: emacsのキーバンド設定につい てというものがヒット。

これらを割り当てるには WINDOW.C の TranslateKey() あたりに手 をいれる必要があると思います。

私は C-@ とか C-/ などが使えなくて困ったのでちょっと手をいれ ました。

残念ながらこれ以上の情報はなかったが方向としてはこれでよいっぽいな。

ここでTranslateKeyをすらすら読めるだけの知識があればよいのだが、あいにくそのようなものは持ち合わせていないので どうしようかしばし考える。'/'とか47とか0x2fとかで検索してはみるものの該当なし。こういうときはドキュメントから攻めるべし、というわけで再び情報を集め始めたらありましたよ。PuTTYの公式サイトのWishlistよりCtrl+/ should send the same as Ctrl+_。「fixed-in: 2003-01-14」なのでその時に何が行われたかを見れば良いはず。

$ svn log svn://ixion.tartarus.org/main/putty
------------------------------------------------------------------------
r2576 | owen | 2003-01-14 00:06:56 +0900 (Tue, 14 Jan 2003) | 2 lines

Make ^/ do the same as ^_ (wish control-slash)

------------------------------------------------------------------------

$ svn di -r2575:2576 svn://ixion.tartarus.org/main/putty
Index: window.c
===================================================================
--- window.c    (revision 2575)
+++ window.c    (revision 2576)
@@ -3488,7 +3488,7 @@
            *p++ = "\000\033\034\035\036\037\177"[wParam - '2'];
            return p - output;
        }
-       if (shift_state == 2 && wParam == 0xBD) {
+       if (shift_state == 2 && (wParam == 0xBD || wParam == 0xBF)) {
            *p++ = 0x1F;
            return p - output;
        }

これ以上ないほど明快だ。この前後を見ればTranslateKeyはpに出力したいコードを書き込んでその長さを返せば良いことが分かるので、結局次のようなコードを適当に加えればC-/を押したときに任意のコードが送れることになる。

if (shift_state == 2 && wParam == 0xBF) {
    p += sprintf((char *) p, "code");
    return p - output;
}

端末

問題は何を送るか、だ。

ここでの話のキモは端末機能データベースであるterminfoだ。terminfoの概略についてはいろいろなところで読めるので ここでは省くが、それを踏まえた上でもう一歩進もうとすると結構詰まる。自分の場合はscreenのtermcapinfoの意味を 調べようとして苦労した記憶がある。

といったものを見れば、どういう形で端末上でエスケープシーケンスが処理されていくのかを追うことが出来るようになる。 例えばF1に着目すると

$ man 5 terminfo
     Variable       Cap‐      TCap    Description
      String        name       Code
     key_f1         kf1        k1      F1 function key
$ infocmp xterm
        kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,

見つかった\EOPの根拠は、Xterm Control Sequencesから探せば

     Key         Numeric    Application   Terminfo   Termcap
--------------------------------------------------------------
PF1              SS3 P      SS3 P         kf1        k1

ESC O
     Single Shift Select of G3 Character Set (SS3: 0x8f): affects next
     character only

となっていることが分かる。bash上でC-v F1すれば実際にこのコードを送っていることも確認できる。

同じ流れで「C-/を表すもの」を探すと見つからない。つまりC-/はどうやっても表現できないという結論になる。

Emacs

と、あきらめるのはまだ早い。C-/が使いたいのはあくまでEmacs上に限った話で、それならばEmacsが 適当なエスケープシーケンスをC-/として理解してくれるようになってくれれば問題ないはず。そしてそれに対する答えが これ。

lisp/term/iris-ansi.el:219:(define-key function-key-map "\e[112q" [?\C-/])
lisp/term/iris-ansi.el:271:(define-key function-key-map "\e[179q" [?\C-/])

2005-01-23 (Sun)


2005-01-27 (Thu)

))) CCCD

CCCDに初めて遭遇した。知らないでドライブにディスクを入れたら、ガガガガ……と あり得ない音がしたのでケースをよく見たところ判明。これはありえないでしょ。


2005-01-31 (Mon)

))) Linuxのブートプロセスをみる

Linuxのブートシーケンスを見ていく本、ではあるんだけどそれ以前に最初の部分で前提知識として紹介されるIntel CPUや PC/ATアーキテクチャの話などが非常に面白い。ともすれば(現実感の感じられない)理論だけで終わってしまいそうな 内容を、実際に使われている「たかだか512バイト」のbootsectを読むという目的を持って読めたので楽しかった。 ようやく少しはPCのことが分かったかな。


2004|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|03|05|06|08|09|10|12|
2007|01|02|03|05|07|12|
2008|10|
2009|01|05|12|
2010|04|05|11|
2011|01|09|12|
2012|02|03|05|09|12|
2013|02|03|
2014|05|09|
2015|12|
トップ 最新 追記 RSS feed