2007年6月22日金曜日

FreeBSDの起動時に/usr/local/etc/rc.d/以下が2回実行されるんだけど... b

FreeBSDで/usr/local/etc/rc.d/以下にはportsなどから入れたツールの起動スクリプトが格納され,/etc/rc.confに条件で,OSの起動プロセスの最後で実行される.
ある日サーバのApache2.2の調子が悪くなったのでいろいろ調べたら,プロセスが2重に起動していた,

$ ps -aux grep httpdroot 749 0.0 0.4 143292 16468 ?? Ss 8:56PM 0:00.20 /usr/local/sbin/httpdroot 756 0.0 0.5 143292 18656 ?? Ss 8:56PM 0:00.17 /usr/local/sbin/httpdwww 836 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 837 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 838 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 839 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 840 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 841 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 842 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 843 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 844 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 845 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpd

ログを見てみると,どうやらOSブート時に/usr/local/etc/rc.d/apache22 startが2回行われているっぽい.さて実際rc.dって誰が呼び出してるんだっけ?起動周りは全部/etc/rc から派生していろいろ実行される.それで/usr/local/etc/rc.d/以下のスクリプトは最終的に/etc/rc.d/localpkgというスクリプトが実行を行う.その中ではlocalとして指定されているディレクトリを取得するが,これはlocal_startup変数に格納されており,/usr/default/rc.conf内で,
local_startup="/usr/local/etc/rc.d /usr/X11R6/etc/rc.d" # startup script dirs.

と記述されている.要は,
/usr/local/etc/rc.d/usr/X11R6/etc/rc.d
の2つのディレクトりの中のスクリプトが実行されるわけだが,X11R6のほうをのぞいたら,/usr/localとまったく同じ構成になっていて,おかしいなと思ったら,/usr/X11R6が/usr/localのシンボリックリンクになっていた・・・・だから/usr/local/etc/rc.dも2倍~OSブート時の実行回数も2倍~

rubyのCGIで500 Internal Server Error b

FreeBSDでのお話.
原因はrubyの実行パスが通ってなかった.

よくrubyのCGI(tDiaryとかHikiwikiとか)だと,パスとして

#!/usr/bin/env ruby

で通してある.
でFreeBSDだと実態は/usr/local/bin/rubyになるわけで,envから/usr/local/binのパスが取得できるから実行できるが・・・でもこれだと実行時の環境変数しだいで,動くか否かが変わるよね.

そんな現象に出くわしまして,ApacheをOS起動時のままCGI実行するとエラー.Apacheをユーザー側で再起動かけると,ちゃんとCGI実行できるということがあった.原因としては起動プロセス中に立ち上がったApacehは環境変数がからっぽ(?)らしくて,/usr/local/binのパスが通ってなかったから,env rubyって言われても実行できませんという話.

この辺の仕組みってあまり詳しくないから知らないけど,このやり方って微妙なんじゃないのかなぁと思ったり.結局
#!/usr/local/bin/ruby

と書けば動いた.

2007年6月19日火曜日

RFCを印刷 b

どうにもRFCを印刷するときはずれる.

RFCは完全なテキストで公開されており,その文書体裁はRFC2223 "Instructions to RFC Authors" で定められている.
@ITの詳説 TCP/IPプロトコルなんかにも解説がある.

ページごとに改ページの制御コードが入っているので,それを理解できるテキストエディタだと,少なくともページがずれることはない.残念ながら愛用のEmEditorは対応してないようで,これで印刷するとずれる.探せば改ページコードに対応しているテキストエディタはたくさんある.でも印刷は微調整しないとマージンが微妙.

Vectorにもツールが若干あったけど,どうにも微妙.
RFC Viewerなるものもあったりしたけど,読むのにはいい感じだけど,印刷はこれまた微妙.
時間が空いたらそのうちなんか作ろうと思う.

2007年6月12日火曜日

ちょっと化けるんだけど・・・ b

なんか急にIEだと勝手にs-jisで表示するようになった・・・
xmlの宣言にもmetaタグにもutf-8が指定してあるのに・・・なぜ?

と・・・この投稿を投げたら直った.
↓のSynergyの投稿内でブラウザが変なことしてるのか?

SynergyでWindowsとMacOSX のクリップボード共有ができない b

Windowsをサーバ,Macをクライアントにした場合のお話.
原因はMacでのSynergycを自動起動させるのに,StartupItemsを利用したところっぽい.
本家サイトのautostartのページには,

1. Create a System Level Startup Item
という項目があり,StartupItemsとやらを利用して,サービスのように起動する方法が載ってっている.しかしこれで起動すると,ログイン画面の前から起動して便利なのだが,どうもクリップボードの共有がうまくいかないらしい.どうも実行権限周りの問題な感じがするなぁ.
# Macは全然詳しくないのでStartupItemsの仕組みはよくわからないが・・・

というわけで,もう一個の
2. Run Synergy When a User Logs In
というほうで設定すると,ログインした時点で自動起動して,クリップボードもしっかり動いた.
# $(hostname -s) の置き換えがどうも怪しいのでホスト名は直に書いた


ついでにMac上でaltとコマンドキーあたりのバインドが,いけてない件についても.
Winsows側で動いているSynergyサーバ側で,
Macに対する設定のModifiersの項目
Meta -> Super
Super -> Alt
Alt -> Meta
が良い感じ.

2007年6月11日月曜日

Gmailに完全移行(3) b

とりあえずIMAPにがんがん入れていったら軽く1万通を超えた.
200件/hなんて速度で行かれるといったい何日かかるやら・・・毎回アカウント再設定したらそのつどいってくれないかな~なんてやってみたら,「情報を編集」押して何も変更せずに保存すれば,そのつどPOP受信しにいってくれた.これで200件/2分ぐらいのスピードで受信できるようになった.そしたらあんま早すぎたのか,POPサーバ側から怒られた.



ともあれこれでメールを完全移行することに成功.
全部で3万通ほどになった.なんか入れ忘れがありそうで怖いなぁと,こんな些細なことが気になりだす.ほんと物(ファイル)が捨てられない性格は損だ.



今回はまった点
  • 受信はランダム間隔(?)で1回200通しかできない -> 強制受信で2分に1回ぐらいいける.
  • zipやexeは,割りとウイルス疑惑で受信してくれない(感染してないのに).
  • これだけ一斉に受信すると,結構な勢いで迷惑メールに誤分別あり.
  • メールの抜けをチェックしてたら,何度受信させてもGmail側に受信されないメールがあった.何度IMAP->POP受信してもGmailの受信トレイに入らない.おかしいと思ったら,Gmailのゴミ箱に入ってた.重複するメールは受信されない(ゴミ箱行き?)と関係あるのかな.
  • POPで全部メールを受信し終わっても,すぐに全件受信トレイに入るわけじゃないみたい.完全に受信が完了している現在でも,受信トレイの未読メールが徐々に増えている.新たにメールを受信しているわけではなく,すでに受信を終えているはずのメールが,ぽこぽこ追加されている.メールのハッシュ化に時間がかかっているのかな?よくわからん.

2007年6月10日日曜日

Gmailに完全移行(2) b

さて次はどのようにして今までのメールをGmailに突っ込むか.

ぐぐって見ると,Google GMail Loader という,様々なメール形式(mBox,MailDir,MMDF,MH,Babyl,etc..)をGmailにインポートするツールなんかがはやっているようである.
ただこの欠点として,Gmail上の受信箱でのメール時刻が,実際にメールが届いた日付でなく,Gmail自身が受け取った日時で表示されるらしい.
もちろんヘッダのDataフィールドは残るからいいっちゃいいが,ちょと微妙.

通常の方法でGmailにメールを送るには,「転送」と「外部POP受信」の2通りがある.
ちょっと試したところ,転送されて届いたメールは,Gmailが受け取った日時で表示されソートされるっぽい.そして最近できた機能の外部POP受信(別のアカウントからメールを受信)は,POPサーバから直接取得するからか,しっかりメールのDataの日時がGmail上でも表示され,その順に取得される.

ということで,一度POPサーバにメールをまとめ,そのPOPサーバに対して,Gmail側から取りに行かせるのが綺麗にGmailに格納できそう.

これを実現するのに手っ取りばやいのはIMAP/POPの両方に対応したメールサーバを仲介させることだろう.

ローカル ---(送信)--> IMAP/POP ---(受信)--> Gmail
自由になる外部アクセス可能なサーバがあれば自前で準備してもいいんだが,あいにく身動きとれない状況.どこかにフリーのIMAP/POPなサーバはないかと探したら,Inter7なるフリーのメールサービスを発見.
さっそくアカウントを取得してメール転送中....Gmailの外部POP受信が,最大1度に200件ずつなうえ,一度200件とったら次の取得時間が不明(数分後に続きをとりにいってたり,2時間後にとりにいってたり???)なので,気長にまつしかない.

FreeBSDでSambaをマウント b

メモメモ,

FreeBSD6.2

# mount_smbfs -E euc-jp:cp932 -I samba.mydomain.com //userid@samba/hoge /hoge

てな具合に.

-Eオプションは,
-E ローカルの文字コード:サーバの文字コード
今回敵はWindowsなのでcp932を指定

マウントしたら日本語が化けた.
$LANGja_JP.eucJPをセットすることをお忘れなく

Gmailに完全移行(1) b

メールアドレスが多すぎて管理できなくなってきた.

というのも前から目的別にメールアカウントを作る癖があって,サービスごとにメルアドを生成してきたのが諸悪の根源.プライベート用,システムメッセージ受信用,メッセンジャー用,mixi用,メルマガ登録用,etc.....
一番古いアドレスは96年ぐらいから使い続けてるのでスパムの嵐.

そんな悩みもGmailアカウント1つで解決!
以前からプライベートではGmailを使っていたけれど,この際メール統合アカウントとして1個作ることにした.


Gmailのメリット
(1)高精度のスパムフィルタ
(2).と+(ドットとプラス)を使った無限アドレス

やはりこれに尽きると思う.
(1)についてはもはやいうまでもないが,なんと言っても(2)が便利である.
Gmailには,メールアドレスのユーザー名について,「全てのドット」及び「+とそれ移行の文字列」が無視されるという特徴がある.

例えばtblog@gmail.comというアドレスがあったとする.
# Gmailの6文字制限上,上記のアドレスは存在しない
この場合,
1) tb.log@gmail.com
2) tb..log@gmail.com
3) tb.log.@gmail.com
4) tblog+hoge@gmail.com
5) tb.log+hoge@gmail.com
のように1~5のアドレスは,全て同じメールアドレスを意味する.

これを使えば,tblog+mixi@gmail.comをmixi用の登録アドレスにしてみたり,どこかのMLに登録するときはtblog+ml@gmail.comと登録すれば,1つのGmailアドレスで全て解決してしまう!
ちなみにこれは別に画期的な技術とかではなく,例えば独自ドメインなんかを持っていれば,MXレコードの設定で似たようなことはできた.


さて新しくGmailアカウントを取得したわけだが,せっかく全文検索機能なんかもあるので,過去のメールも全部アップロードしたいもの.普通に送ったら受信日時とか全部消えちゃしなぁ.途中にIMAPサーバかませればうまくいきそうかな.今日は疲れたので続きは明日にしようっと.


--
追記
携帯(au)のメール転送先をtblog+ezweb@gmail.comのようにしたら怒られた.
+は使っちゃだめだってさ.

2007年6月7日木曜日

bloggerの投稿画面の文字がおかしい b



ブログの投稿を公開しました。
ブログを見る <span> (新しいウィンドウ)




とりあえず一番変なところ・・・新しい投稿を完了すると出る画面が明らかにおかしい



なぜspanタグが文字として表示されてるんだ・・・・
他はところどこフォントサイズが大きすぎるのか,文字レイアウトが乱れてる気がする・・・仕様?




投稿画面もこの通り文字がずれて重なって・・・これって普通なの?
ヘルプ見渡したりググったりしたけど,同様の現象は報告されてなさげ.


--
6/13追記:
spanタグが表示されてしまう現象はいつの間にか直った。。。なんだったんだろう?

SHARPより新WILLCOM端末発表 - Advanced/W-ZERO3[es] b


SHARPよりWILLCOMのスマートフォンAdvanced/W-ZERO3[es]なるものが発表されたもよう.機種名はWS011SHで,外装の雰囲気はWS007SH[es]をさらに洗練させたような感じ.

OSにはWindows Mobile 6が搭載されている.
液晶は3インチのWVGAで,無線LANに802.11b/g搭載.
ジョグ機能内蔵なカーソルキー(Xcrawl)とかいうものが付いている.
プリインストールのソフトも豊富らしい.

Bluetooth機能が内蔵じゃないのは残念.
W-OAM対応っていうけど,そもそもEMに対抗した通信プランを出して欲しいのが本音.

2007年6月6日水曜日

C#でBASIC認証越しにXMLデータを取得する b

C#でXMLデータを読み込む方法はいくつかあるが,
たいていどのクラスでもURLをStringで渡せばそれを読み込みにいってくれる.
だが,閲覧にBASIC認証が必要なXMLファイルを読むにはどうすればいいか?

Microsoftのページに普通に書いてあった.

NetworkCredential nc = new NetworkCredential("id", "pass");
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = nc;

XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;

XmlReader reader = XmlReader.Create("http://my.domain/hoge.xml", settings);


こんな感じであとはXmlReaderのオブジェクトをXmlDocumentなりのパーサに渡せる.
ちなみにNetworkCredentialクラスは,他にも様々な認証に対応しているらしい.

2007年6月4日月曜日

google-code-prettifyを使ってみた b

はてなにはシンタックスハイライト機能があっていいなーと思ってたけれど,
GoogleがJavascriptで動作するシンタックスハイライトスクリプトを作成していた.
google-code-prettify といスクリプト.
早速導入してみた.


The lexer should work on a number of languages including C and friends, Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk and a decent subset of Perl, but, because of commenting conventions, doesn't work on Smalltalk, Lisp-like, or CAML-like languages.

説明書によると
C,Java,Python,Bash,SQL,HTML,XML,CSS,Javascript,Makefile対応で,Ruby,PHP,Awk,Perlも大まかには対応しているらしい.Smalltalk,Lisp,CAMLは無理みたい.そして実際の使い方だが,


Usage:
1) include this source file in an html page via
<script src="/path/to/prettify.js" type="text/javascript"></script>
2) define style rules. See the example page for examples.
3) mark the <pre> and <code> tags in your source with class=prettyprint.
You can also use the (html deprecated) <xmp> tag, but the pretty printer
needs to do more substantial DOM manipulations to support that, so some
css styles may not be preserved.


prettify.css
prettify.js
の二つのファイルからなっており,これをどこかに設置して以下のように読み込ませればよい.
<link href="prettify.cssのパス" rel="stylesheet" type="text/css/">
<script src="prettify.jsのパス" type="text/javascript></script>

そして<pre>タグもしくは<code>タグにclass=prettyprintをつけて使えばよいみたい.

動かないじゃんと思ったら,WEBページの方のREADMEに
Add onload="prettyPrint()" to your document's body tag.
と書いてあった.忘れずに追加.
<body onload="prettyPrint()">

CPU使用率が常に高い b

最近メインで常用しているマシン(WindowsXP SP2)のCPU使用率がコンスタントに高い. 理由の1つはおおかたわかっていてSleipnirのとあるプラグインだ.

MixChain
と呼ばれる,mixi 専用のプラグインなのだが,これを入れてからというもの,
Webブラウズもままならないひどい状態に...
自分は普段からタブブラウザのタブを20~30ひらく人間なのでただでさえ重いのだが,これはたまったもんじゃない.結構便利なプラグインだったが仕方が無いので無効に.でもSleipnirごと落ちるようなエラーも頻発してたし,まだ使うには早かったかな.

案の定これでSleipnirは軽くなったが,まだ悪さ(?)をするプロセスがいた.
svchost.exeである.
こいつはWindowsのサービスを実行しているプロセスなのだが,これの1つが常に50%以上のCPUを割いている.ちょっとあんまりだったので,Process Explorerを使ってどのサービスか突き止める.
# これはMicrosoftのMark Russinovich氏による有名なツール

ntdll.dll!RtlAllocateHeapとなっているが・・・・?
Google先生に聞いてみたところこれはWindows Updateに起因するものらしい.とりあえず邪魔だったので問答無用でkillした.自分で把握しているならWindows Updateの自動更新OFFでもいいかな.


この2つを改善しただけでずいぶんと快適になった.

2007年6月3日日曜日

ブログ新設 b

なんか設定でハマったけど,とりあえず設置