83's

Top > Archives > 2005 > December

December 02, 2005

雷おこし 23:56

chamiから、東京出張のおみやげを もらいました。 例によってうちがハブになってるので、欲しい人はうちに来てもらって、と。 それか、月曜日に学校に持っていこうと思うので、そのときに食べたそうな人は集合かけます。 うん、それでよさそうだね。 以上、内輪向けのアナウンスでした。

December 03, 2005

Rubyレシピブック届く 00:20

るびま1周年記念企画で当たったレシピブックが(1日に)届きましたよ!

レシピブックに書かれた青木さんと高橋さんのサイン

なんと、最近流行りの高橋メソッドの高橋さんと、最近気になってしょうがない 『ふつうのLinuxプログラミング』の青木さんのサインもつけてもらいました! 感激!  このダブルビッグネームは、Rubyistにはたまらない( ^ω^)

よーし、『ふつうのLinuxプログラミング』も買っちゃうぞー。

December 12, 2005

lighttpdのlogrotate 04:19

Apacheのようにはいかないみたいなんで、どうしたもんか悩んでます。

うちのlighttpd(1.4.6)は/var/runにhttpd.pidみたいのは作らないんだろうか。ファイルないんですけど。

Apacheのlogrotateは次のようになってるんで

/var/log/httpd/access_log {
    missingok
    postrotate
        /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

lighttpdも同じようにやりたかったんだけどpidファイルが無い。

しかたがないからkillallで代用できないかと思って、前に

/bin/killall -HUP lighttpd || true

なんてやってみたけど、ダメだったような。

とりあえずlogrotateしとかないとログのサイズが大変なことになるので(今まではたまに手で再起動してました)、 こんな感じで。

/sbin/service lighttpd restart

とりあえずlogrotateはうまくいったみたいだけど、再起動しちゃうのはどうなんだろう。よくない気がする。 || trueはつけなくていいのかな。

/sbin/service lighttpd reloadってがあるのに今気がついた。これでもいいのかな? よくわかんねーよー。 あれ? 他の人lighttpd.pidあるみたいじゃん。なんでうちだけ……。もうちっとググろう(眠いから今度)。

trueってコマンドは初めて見た。int main(){ return 0; }ってことかな?

pidファイルがないのはlighttpd.confのserver.pid-fileという設定がコメントアウトされていたせいだった。 コメントはずしたら/var/run/lighttpd.pidができました。でも、logrotate自体はreloadでよさげ

December 15, 2005

Bloglinesの編集画面 15:02

「Edit Subscription」クリックして現れるフィード情報の編集ウィンドウ。

Bloglinesの編集画面

これさ、Updateの隣にUnsubscribeってのはちょっとどうなんだろうといっつも思うんです。 並べるならCancelじゃないかと。

大体Unsubscribeしたかったら、ウィンドウ開かずに「Edit Subscription」のとなりをクリックしてるんじゃないの?

Unsubscribe | Edit Subscription

ミスるから、とかじゃなくて(確認ダイアログ出るから誤って登録削除してしまうことはない)、 主観的な批判で申し訳ないけど、美しくないんだよー!

少なくともオレがこのウィンドウを開く場合は、こちょこちょいじって最後に保存ってパターンだから、 文脈上Unsubscribeが編集ウィンドウの一番下にあるのはおかしい。

あと、UpdateとUnsubscribeっていう機能的に異なるものが関連してるかのように近くに並んでるために、 押すときに一瞬考えてしまうようなUIはきっと美しくない。

まー慣れちゃったから、左端のボタン押せばいいって知ってるけどさ!

December 17, 2005

Linuxのプロセス一覧 06:13

最近やる気が無くて研究の中間発表で忙しくて書くことないから、他人のネタに乗っかるよ!

jeselがWindows APIでプロセス一覧を取得ってのを やってたから、こっちはLinux版だよ!

$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:01 initng [default]
    2 ?        SN     0:00 [ksoftirqd/0]
    3 ?        S      0:00 [watchdog/0]
    4 ?        S<     0:00 [events/0]
    5 ?        S<     0:00 [khelper]
    6 ?        S<     0:00 [kthread]                                            
      :
      :

すみませんでした。

ふつうのLinuxプログラミング』読んでたら、 Linuxでは/proc以下にプロセスの情報があって、psもそこから読んで表示してると書いてあった。

$ cd /proc
$ ls
1/     1169/  2/     3869/  800/     buddyinfo    ioports     pci
1015/  1176/  2096/  3958/  801/     bus/         irq/        scsi/
1045/  1178/  2107/  4/     839/     cmdline      kallsyms    self@
1048/  1182/  2113/  401/   86/      cpuinfo      kcore       slabinfo
1050/  1184/  2114/  5/     876/     crypto       key-users   stat
1052/  1186/  2115/  562/   878/     devices      keys        swaps
1061/  1195/  2116/  573/   881/     diskstats    kmsg        sys/
1065/  138/   2118/  574/   89/      dma          loadavg     sysrq-trigger
1066/  139/   2125/  575/   920/     dri/         locks       sysvipc/
1068/  1398/  228/   576/   970/     driver/      mdstat      tty/
1069/  140/   3/     577/   974/     execdomains  meminfo     uptime
1085/  141/   3120/  6/     975/     fb           misc        version
1094/  1423/  3121/  619/   976/     filesystems  modules     vmstat
1096/  1424/  3122/  702/   977/     fs/          mounts@
1099/  1639/  3520/  703/   978/     ide/         mtrr
1101/  1675/  3749/  782/   acpi/    interrupts   net/
1105/  1765/  3860/  8/     asound/  iomem        partitions

これらの数字がプロセスIDに対応していて、プロセスの情報はそのディレクトリ以下に、という 話らしい。Linux初めて以来謎に包まれていたこの数字の樹海についに光が……。

APIは無いんですかね。するとプロセス一覧をRubyで作るとするなら、こんな感じですか。 とりあえずpsコマンドのCOMMANDのカラムと同じになるように。

Dir.glob('/proc/[0-9]*') do |dir|
  cmd = `cat #{dir}/cmdline`.gsub(/\000/, ' ')
  cmd = '[' + `head -n 1 #{dir}/status`.split(/\s+/)[1] + ']' if cmd.empty?
  puts "#{dir.slice(/\d+/)}\t#{cmd}"
end
1       initng [default]
2       [ksoftirqd/0]
3       [watchdog/0]
4       [events/0]
5       [khelper]
6       [kthread]
8       [kacpid]
86      [kblockd/0]
138     [pdflush]
139     [pdflush]
141     [aio/0]
89      [khubd]
140     [kswapd0]
228     [kseriod]
401     [kjournald]
562     [kjournald]
573     /sbin/mingetty tty2
574     /sbin/mingetty tty3
575     /sbin/mingetty tty4
576     /sbin/mingetty tty5
577     /sbin/mingetty tty6
    :
    :

こんなことしなくてもpsコマンドの出力いじれば上と同じになるけど……。

でもまーLinuxの仕組みを理解するにはコマンドのやってることを追ってみるのもおもしろい。

そういえばDir.globの引数はこれシェルが展開するの?  シェルとプログラムとの関係ってのがよくわかってない。まだまだ知らないことばかり。 なんかジャストミートな本って無いんだろうか……。なんか最近ネットから中途半端に調べた知識ばっかだよ……。

VineのinitNGのcrond 06:51

最近朝4時にパソコン付いてるのに(どう見ても廃人です)、 ハードディスクがガリガリ言わなかったんで見てみたらcrondが動いてなかった……。 InitNGを設定したときは見落としてました。

どうやら設定ファイルがdcron.iという名前になっていたので気づかなかったらしい。

追加。

# cd /etc/initng
# ng-update add daemon/dcron

そしたら起動時にこんな表示が……。

daemon/dcron               [Stopped]

工工エエエ(´д`)エエエ工工

/etc/initng/daemon/dcron.iのdaemon_args = -nが不要みたいです。

service daemon/dcron {
    need = system/initial system/clock system/mountfs
    daemon = /usr/sbin/crond
    daemon_args = -n
}

          ↓

service daemon/dcron {
    need = system/initial system/clock system/mountfs
    daemon = /usr/sbin/crond
}

上のようにしたら起動しました。

December 20, 2005

わかりやすいプレゼン資料 06:19

jeselが卒論のレジュメ書くのムズいと言っていたけど、 プレゼン資料を作るのも大変。ちゃちい中間発表のくせに……。

で、資料の作りなおしをしないとならないんだけど。

注目してほしい場所がわかるように、自分の話す順にテキストや図が出現するようにしていたスライドが いくつかあったんだけど、これ注意された。

話に集中しつづけるのは大変だから、ぱっとスライドを見て流れがわかるよう初めから出しておくべきだ、と。 そうすれば、わかる人は話聞かなくてもスライド見ればわかる、と。 さっさとわかってしまえば話してる間にほかのこと考えられるもんねー。 逆に小出しにされるのはウザい。

話す速度はだいたい一定だとしても、聞いてる人の理解の速度は人それぞれ内容の部分部分によって違うわけだから、 自分の話す順序・ペースで人に理解してもらおう、プレゼンを見てもらおうってのは、とても独りよがりだったようです。 そういえばオレ結構人のプレゼン聞いてないことある。考えごとしてたり。

要は伝わればいいので、まずスライドに出しておいて、 スライドのわからないところは話に集中してもらえばいいんでしょう。

これを意識すると、話を聞いていないと理解できないような図なんて書きにくくなるんじゃないかと。

まープレゼンもしっかりやらされると、なかなか得るものがありますね。

これ、ちょっとプログラミングと似てる。 今回のは「自分の書いてるコードが汚いことに気がついた」って感じかな?  「自分の話を聞いていればわかる」ってのは、プログラミングで言う「自分はコードを理解しているから問題ない」とか 「動くからいい」っていう状況。 どちらも他人が見るものだから、ベストなのは「ソースが語る」ようなプログラム、「スライドが語る」ようなプレゼン、ですか。 ちと強引かな。

December 22, 2005

f = f > 0;って 08:19

Cで2分木、という話。

struct varent *v_link[3]
/*  ちょっと省略 */
#define v_left  v_link[0]
#define v_right  v_link[1]
#define v_parent  v_link[2]

(snip)

一致しないとわかっている文字列str1とstr2を比較して、語順があとにくるものは、 右のノードに、前のものは左のノードに追加していくとします。

f = strcmp(str1,str2);
f = f > 0

(snip)

このfをvarentのv_linkの添字として使えば、簡単に探索ができてしまうと。

(注・木に追加するのはstr1のほう)

(´・ω・`)なんかキモいよーそれ。

このコード書かれたころって3項演算子がなかったんだろうか。

f = (strcmp(str1, str2) > 0) ? 1 : 0;

これじゃいけないの? 断然読みやすいと思うんですが。

で、このあとv_link[f]とかやってアクセスするんなら、 せっかくの#defineしてあるから、こう書けないかな?

struct varent *v;
v = (strcmp(str1, str2) > 0) ? v_right : v_left;

f = f > 0;ってのはギミックとしては多少感動できるけど、 なんとも使いどころを見付けるのが難しいし、見にくくて個人的に嫌なんですが。

December 23, 2005

内輪ネタ 16:50

ネットワークの知識が足りないので(単位も(´Д⊂))昨日本を買いました。

生協の本棚をよく見てる人なら、この本は見たことあるよね。まだ半分も読んでないんですが、 単位のないオレにもわかりやすく書いてあります。
『絵で見るTCP & UDP』表紙

ペラッとめくると、著者が隠れてましたw
『絵で見るTCP & UDP』カバーをはずす

著者はこうなってますww↓。携帯のカメラじゃ文字読めないので。 さっきめくって初めて気づいたw

水野 忠則,   佐藤 文明
村田 嘉利,   石原 進
井手口 哲夫, 日経NETWORK

|
|
|∧
|゜∀゜) コレモ ヨンデネ
|∧ ∧
|( ゜∀゜) ____
|  つ|タネン |
|―u'  |バウム|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


|
|
|
|
|ミ サッ
|     ____
|ミ   |タネン |
|     |バウム|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

December 25, 2005

タイプミスには気をつけて… 01:51

sshアタックがひどいので、うちのサーバも未熟なりにも対応をしてます。 sshがつながらないという ことにならないように、少し説明をしておきます。

sshのアタックは、1回1回ユーザ名を変えてアクセスしてきます。 だもんで同じユーザが何回失敗したら蹴るっていう方法は無効(もちろん正規ユーザ名での辞書攻撃に備えて設定はしてあります)なので、 ログに「Invalid user ○○」と残したIPアドレスをhosts.denyにかたっぱしから突っ込むスクリプトをcronで15分おきに動かしてました。 だからInvalidなユーザ名でログインしたら、もうそのIPは拒否されます。これが以前の対応。

昨日の朝方、これをiptablesに追加する方法(参照:sshdに対する不正アクセスを動的に防ぐ)に 変えてたんですが、これも30分で拒否が解除になることを除いて同じことです。 「Invalid user」というログを残したIPがiptablesによって蹴られるはず(iptablesについてはまだよく知らない)。

つまりユーザ名を1回間違えれば、どちらの方法でもそのあとのアクセスが拒否されます。

サーバ側で正規ユーザがタイプミスをすることを許容したりするよりは、初めからタイプミスのないようにするほうが 賢いと思うので、ミスらないようにしてください。〉katamayu.netのみなさん

具体的には、

alias ssh_katamayu='ssh user_name@katamayu.net'

としたり。

#pre export SERV='user_name@katamayu.net' scp $SERV:/home/user_name/xxx ./ #endpre としたり、まー工夫してくださいな。

しかしセキュリティ関係って本とか買う気にならないんですよね。 ネットにパソコンがつながっていくのはおもしろいけど、 つながらないようにする作業ってのはつまらない、とこれはLinuxサーバHacksにあった言葉。 まったく同感です……。そして学生さんはお金が無い!

でも「知識のある管理者がたくさんいたのが昔のネットなんだよな。今の新参は知識無いくせにサーバを立てるから困る」 ってよく言われるけど、サーバ立てなきゃ管理者育たないぞーというのがオレの主張なので、 少しは勉強しないと……。ホスティングサービスに逃げたら負けかなと思ってる。

December 26, 2005

テキストモードで起動したのは初めてだ 11:02

Vine Seedにあがったパッケージをapt-getしたらgdmが起動しなくなりました(´Д⊂) こえぇー。

多分原因はXOrg6.9.0-0vl2じゃないかと思う。でもこれ、どうやらカーネルが2.4の場合に動かないんじゃないかと。 SeedでGNOMEな人はGNOME2.12を動かすためにカーネルは2.6になってるはずなので、 まあgdmが起動しないなんてことにはならないんでしょうが。

実は少し前にinitNGの新しいパッケージをapt-getしたら起動中にエラーが出て gdmがこれまた起動しなかったので、ここ最近は以前のようにカーネル2.4 + initで使っていたのでした。 (2.6 + initは設定してなかった)

初めはapt-get dist-upgradeしなきゃならないものが残っていたのかと思ってたので、 テキストモードでログインしました。

liloの画面でEsc押して、

linux2.6.12           linux2.4.30
boot: linux2.4.30 3

として起動。最後の3ってのがテキストモードのランレベル。

このあとvimで/etc/lilo.confにカーネル2.6+initの設定を追加したわけだけど、 テキストモードでvimってのはなかなか緊迫した雰囲気が醸し出されてGoodwwwww(←見にくい)

実はテキストモードでやらなくても、2.6でないと動かないことがわかっていれば 以下のようにやれば良かったわけですが。まーそれは結果論。

boot: linux2.6.12 init=/sbin/init

複雑に事情がからみあった末のトラブルでした。

そういえばVineのRubyのバージョンは8.1のままRuby 8.4のリリースを迎えてしまったわけだけど、 どうなるんだろう。8.5は4月みたいなことをMLで言ってたから、このままだと……。