December 02, 2005
雷おこし 23:56
- Permalink
- Comments (1934)
- Trackbacks (0)
日記
chamiから、東京出張のおみやげを もらいました。 例によってうちがハブになってるので、欲しい人はうちに来てもらって、と。 それか、月曜日に学校に持っていこうと思うので、そのときに食べたそうな人は集合かけます。 うん、それでよさそうだね。 以上、内輪向けのアナウンスでした。
December 03, 2005
Rubyレシピブック届く 00:20
- Permalink
- Comments (0)
- Trackbacks (0)
Ruby
るびま1周年記念企画で当たったレシピブックが(1日に)届きましたよ!
なんと、最近流行りの高橋メソッドの高橋さんと、最近気になってしょうがない 『ふつうのLinuxプログラミング』の青木さんのサインもつけてもらいました! 感激! このダブルビッグネームは、Rubyistにはたまらない( ^ω^)
よーし、『ふつうのLinuxプログラミング』も買っちゃうぞー。
December 12, 2005
lighttpdのlogrotate 04:19
- Permalink
- Comments (2304)
- Trackbacks (0)
サーバ
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
- Permalink
- Comments (2230)
- Trackbacks (0)
Web
「Edit Subscription」クリックして現れるフィード情報の編集ウィンドウ。
これさ、Updateの隣にUnsubscribeってのはちょっとどうなんだろうといっつも思うんです。 並べるならCancelじゃないかと。
大体Unsubscribeしたかったら、ウィンドウ開かずに「Edit Subscription」のとなりをクリックしてるんじゃないの?
ミスるから、とかじゃなくて(確認ダイアログ出るから誤って登録削除してしまうことはない)、 主観的な批判で申し訳ないけど、美しくないんだよー!
少なくともオレがこのウィンドウを開く場合は、こちょこちょいじって最後に保存ってパターンだから、 文脈上Unsubscribeが編集ウィンドウの一番下にあるのはおかしい。
あと、UpdateとUnsubscribeっていう機能的に異なるものが関連してるかのように近くに並んでるために、 押すときに一瞬考えてしまうようなUIはきっと美しくない。
まー慣れちゃったから、左端のボタン押せばいいって知ってるけどさ!
December 17, 2005
Linuxのプロセス一覧 06:13
- Permalink
- Comments (2523)
- Trackbacks (0)
Linux
最近やる気が無くて研究の中間発表で忙しくて書くことないから、他人のネタに乗っかるよ!
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
- Permalink
- Comments (1961)
- Trackbacks (0)
Linux
最近朝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
- Permalink
- Comments (2339)
- Trackbacks (0)
大学
jeselが卒論のレジュメ書くのムズいと言っていたけど、 プレゼン資料を作るのも大変。ちゃちい中間発表のくせに……。
で、資料の作りなおしをしないとならないんだけど。
注目してほしい場所がわかるように、自分の話す順にテキストや図が出現するようにしていたスライドが いくつかあったんだけど、これ注意された。
話に集中しつづけるのは大変だから、ぱっとスライドを見て流れがわかるよう初めから出しておくべきだ、と。 そうすれば、わかる人は話聞かなくてもスライド見ればわかる、と。 さっさとわかってしまえば話してる間にほかのこと考えられるもんねー。 逆に小出しにされるのはウザい。
話す速度はだいたい一定だとしても、聞いてる人の理解の速度は人それぞれ内容の部分部分によって違うわけだから、 自分の話す順序・ペースで人に理解してもらおう、プレゼンを見てもらおうってのは、とても独りよがりだったようです。 そういえばオレ結構人のプレゼン聞いてないことある。考えごとしてたり。
要は伝わればいいので、まずスライドに出しておいて、 スライドのわからないところは話に集中してもらえばいいんでしょう。
これを意識すると、話を聞いていないと理解できないような図なんて書きにくくなるんじゃないかと。
まープレゼンもしっかりやらされると、なかなか得るものがありますね。
これ、ちょっとプログラミングと似てる。 今回のは「自分の書いてるコードが汚いことに気がついた」って感じかな? 「自分の話を聞いていればわかる」ってのは、プログラミングで言う「自分はコードを理解しているから問題ない」とか 「動くからいい」っていう状況。 どちらも他人が見るものだから、ベストなのは「ソースが語る」ようなプログラム、「スライドが語る」ようなプレゼン、ですか。 ちと強引かな。
December 22, 2005
f = f > 0;って 08:19
- Permalink
- Comments (2297)
- Trackbacks (0)
プログラミング
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
- Permalink
- Comments (326)
- Trackbacks (0)
大学
ネットワークの知識が足りないので(単位も(´Д⊂))昨日本を買いました。
生協の本棚をよく見てる人なら、この本は見たことあるよね。まだ半分も読んでないんですが、
単位のないオレにもわかりやすく書いてあります。
ペラッとめくると、著者が隠れてましたw
著者はこうなってますww↓。携帯のカメラじゃ文字読めないので。 さっきめくって初めて気づいたw
水野 忠則, 佐藤 文明 村田 嘉利, 石原 進 井手口 哲夫, 日経NETWORK
|
|
|∧
|゜∀゜) コレモ ヨンデネ
|∧ ∧
|( ゜∀゜) ____
| つ|タネン |
|―u' |バウム|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|
|
|
|
|ミ サッ
| ____
|ミ |タネン |
| |バウム|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
December 25, 2005
タイプミスには気をつけて… 01:51
- Permalink
- Comments (1983)
- Trackbacks (0)
サーバ
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
- Permalink
- Comments (0)
- Trackbacks (0)
Linux
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で言ってたから、このままだと……。
