仙石浩明の日記

2006年5月11日

「他の人に勝つ」ということに価値を見いださない人たち tweets

私が面接でよく聞く質問に:

生活するために働かねばならない、ということが仮になかったとしたら、
仮に、一週間何をしてもいい、と言われたら、何をしますか?

# 仙石浩明CTO の日記: 面接 FAQ (4) から引用

というのがあるのであるが、 意外なまでに多くの人がこの質問に答えることができない。

そんな馬鹿な、何をしたいか分からないなんて、 そんなことが有り得るのだろうかと思っていたのだが、 あまりにこの質問に答えられない人が多いので、 一つの仮説を立ててみた。

好きなことがない、あるいは明確にこれが好きと言えない人たちというのは、
「他の人に勝つ」ということに価値を見いだせない人たちなのではないか?

つまり、私の場合だと、 他の人にできないことが自分ならできる、 ということに自身の存在理由を求め、 この分野なら他の人に勝てる、という分野を追い求めてきた。

他の人に勝てれば、その分野が好きになるし、 好きになれば、それだけいっそうその分野に注力することになる。 そうすることによって実力がついて、 よりいっそう他の人たちより優位に立てた。 そういう正のフィードバックによって実力を磨いてきた。

だからこそ、私にとっては 好きなこと = 他の人に勝てる分野 なのである。

この感覚が、 私にとってはあまりに自然な発想だったので気付かなかったのであるが、 もしかすると私が自明なものとして疑うことがなかった 「他の人に勝つ」という大前提が、 人によっては、それほど重要なことではないのかもしれない。 いや、むしろ他の人と同じであることに価値を見いだす人たちなのかもしれない。

Filed under: 技術者の成長 — hiroaki_sengoku @ 23:46
2006年5月11日

IT企業には技術者と経営者の両方と話せるバイリンガルが必要 hatena_b

今日は昨日の続きで情報漏洩防止ネタを書こうと思っていたのですが、 トンデモない文章を見つけてしまったので、 急遽予定を変更...

この日記の副題にもあるように、 私は「プログラマ兼システム管理者」なのですが、 いちおー (^^;) 取締役でもあるので、 著名な経営者の方々のブログも読んでおります。 で、今朝起きて読んだ日記がコレ↓

渋谷ではたらく社長のblog」から引用:

本日の決算説明会。参加者からの質問・・・
「アメーバの進捗が遅れているボトルネックは何ですか?」

「スピードが遅れている理由はいくつか組織に存在しますが・・」
「一番は技術者の頭数が明らかに不足していることです」

うわっ、「頭数」なんて表現使ってる...

優秀な技術者であればあるほど、 「人月」という考え方には反発するものだし、 優秀な技術者は、 平凡な技術者の何倍、いや何十倍のパフォーマンスを発揮できる (私は技術者の生産性は、ピンとキリでは 3桁の違いがあると常々主張してるのですが) わけで、 「頭数」なんかで数えられたらたまらない、 というのが、優秀な技術者の感覚だと思います。

オソロシイことに、まだ続きがあって

さらってきてでも、拉致してきてでも・・・必ずや採用します。
それは冗談ですが、思いつく限りの採用強化策を考えています。

こういう冗談が口から出ること自体に違和感を感じてしまいます。
技術者をモノとしてしかとらえてないというか...

で、さらに続いて...

当社の技術陣の意見も参考に考えました。↓

・技術者のいるフロアをリニューアル。 空間デザイナーを入れて開発に集中できる環境に改善します。
・技術者のオフィス家具を総入れ替え。ひとり当たりのスペースをひろげます。
・最終面接では私もお会いして、今後の方針などを直接説明します。 (6月末まで)
・給与面を含む待遇面を見直し、優遇します。
・マッサージを入れます。

まあ、労働環境を改善して頂けるのは、 そこで働く技術者の方々にとっては望ましいことですが...

いろんな経営者の方々のお考えを見聞きするたびに、 経営者と技術者との間には、 深い深い溝があるなあ、という思いが深まりますが、 今日読んだこの「渋谷ではたらく社長のblog」には、 その断絶が極端な形で表現されているように思いましたので、 あえて引用させて頂きました。

この断絶はあまりに根本的なので、 経営者と技術者が互いに力を合わせることなぞ、 所詮不可能なのではないか、という絶望感に おそわれることもないわけではないのですが、 とは言っても、 「IT業界」で事業を推進し、かつ技術革新を進めていくには、 両者の協力が必要不可欠であることもまた事実です。

経営者と技術者が反発しあうのではなく協力するために、 技術者と経営者の双方と会話ができる「バイリンガル」こそ重要である、 という思いを新たにした今朝の事件でした。

Filed under: 技術と経営 — hiroaki_sengoku @ 08:21
2006年5月10日

PC からの情報漏洩を防ぐには?

昨日は、ノートPC が盗まれても VPN-Warp の relayagent をインストールしておけば、 そのノートPC がどこにあっても外部から操作して、 いろいろ (?) 対抗策を打てる、というお話をしました。

でも、これはあくまで「最後の手段」、 どうにもならないときの「自爆ボタン」という位置づけにしておいて、 できれば押さなくても済むようにしておきたいものです。

では、どうすればよいか?

まず最初にやるべきことは、 ノートPC にどんな情報が入っているか把握することでしょう。

え? そんなの当たり前だって?

でも、みなさんは自分の PC の中にどんなファイルがあるか、 全て把握できていますか? 自宅で仕事をやろうと思って社外秘な機密文書をノートPC に入れて 持ち帰ったことはありませんか?

一時的にノートPC に仕事関連のファイルをコピーする、 などということはありがちで、 用が済み次第きちんと消せばまあいいんでしょうけど、 悲しいかな人間は忘れる動物です。 このファイルは取扱い注意と思っていても、 仕事が一段落して落ち着いた瞬間に忘れてしまい、以後そのまんま、 なんてことはよくあることなのではないでしょうか。

じゃ、定期的にノートPC の中の全ファイルを調べて、 不要になったファイルを消して、と...

ちょっと待ってください。 いまノートPC にどれだけ沢山のファイルがあります? 全てのファイルをリストアップするだけでも日が暮れてしまいませんか? おまけに、ファイル名からだけでは、どれだけクリティカルなファイルか、 分からないケースも多いですよね? 全てのファイルをいちいち開いて中身を確認するんでしょうか? ファイルを一つ一つ中身を確認するなんて単純作業は、 PC に任せてしまいところです。

解決すべき課題は二つあるように思われます。

各種フォーマットのファイルの中身をどうやって参照するか
PC の中には Word 文書あり、Excel ファイルあり、 その他さまざまなフォーマットの文書やデータがあって、 中身を参照するといっても一筋縄にはいきません。
中身が参照できたとして、 クリティカルなファイルか否かをどうやって判断するか
ある特定の単語を検索するだけなら方法はいくつかあります。 例えば Microsoft Office にも、 指定したディレクトリ内の文書全ての中から 特定の文字列を検索する機能があります。 しかし、「クリティカル」なファイルというのは、 単にある文字列があるか無いかで判断できるようなものではないですね。

続きは次回に...

Filed under: 技術と経営 — hiroaki_sengoku @ 16:49
2006年5月10日

時刻表ビューアを Wrist PDA に移植して頂いた

拙作 時刻表ビューア を、 Fossil/ABACUSのPalmOSが搭載された腕時計 WristPDA(腕パーム)移植して頂いた

私は、時刻表ビューアのバージョンアップは 2000年8月を最後に行っていない。 その後、Linux Zaurus SL-C700 を使うようになってからは、 Palm 自体を使わなくなってしまっていたので、 時刻表ビューアを見ることさえなくなってしまっていた。

作者自身が忘れていたソフトウェアを、 新しい機種に移植して利用していただけたというのは 大変嬉しいことであり、 オープンソース化しておいて 本当によかったと思う。

Filed under: プログラミングと開発環境 — hiroaki_sengoku @ 08:02
2006年5月9日

出版社のWebページへ寄稿する理由とは?

出版社のWebページへ寄稿する理由って何だろう?
出版社のWebサイトには、著名人が執筆したコラムが多数掲載されている。

出版社にとっては、 サイトを充実させることによって 来訪者が増えるというメリットがあるのは分かる。 雑誌と違って流通コストがかからないから、 紙面の制限もないわけで、 こうしたコラムは多ければ多いほど好ましいに違いない。

しかし、執筆する側のメリットがよく分からない。 誰でも低コストで自分が書いた文章をネットへ発信できるし、 内容さえマトモであれば、 それがどこにあろうとあまり関係ないように思われる。 まして著名人が書くコラムであれば、 どこに置いたとしても すぐ広まるし、 大勢の人に読んでもらえるだろう。

逆に、出版社のWebサイトに置いたとしても、 内容がなく、著者が無名の人であれば滅多に読まれないだろう。 そのサイトの登録会員にメール等で告知することによって 一時的に読者を増やすことができたとしても、 あくまで一時的であって、 内容が読むに値しなければすぐ忘れ去られるだろう。

つまりWebの場合は、重要なのは内容であって場所ではない。

一方、紙媒体には Webとは異なる読者層へ届けることができるというメリットがあるわけで、 紙媒体への寄稿には書く側にも十分な理由があると思う。 私自身、何年か前に雑誌の連載記事を書いたことがあるが、 原稿料はオマケと思えるくらいの大きなメリットがあったと思っている。

したがって、執筆する側にとっては、 Webと紙媒体は根本的に異なるものだと思う。 にもかかわらず、Webサイトへの寄稿の場合も、 雑誌等への寄稿と同様の扱いらしい。 つまり、文章量に応じた原稿料のみで、 ページビューに応じた支払いとかの制度は無い、 という説明を、某出版社の編集者のかたから受けた。

それならなぜ、Webサイトに寄稿する人がいるのだろう?
単に、私が書く駄文には価値がないから原稿料だけで我慢しろ、 ということ? (^^;)
実は私が知らされてないだけで、 Webページならではの報酬体系がある?
まあ、それならそれでかまわない ;-( ので、 原稿料以外のメリットとして、 どんなものがあるのか教えていただけると幸いである。

More...
Filed under: その他 — hiroaki_sengoku @ 19:57
2006年5月9日

盗まれたノートPC を外部から操作する方法 (VPN-Warp 応用編 2) hatena_b

VPN-Warp の応用例の第一回目は、 ノートPC に VPN-Warp の relayagent をインストールしておくことによって、 そのノートPC が万一盗まれたり紛失したりしたときに、 外部から操作できるようにしておく方法の紹介です。

VPN-Warp の使い方の基本的なところを説明した、
VPN-Warp 入門編 6 回シリーズも合わせてご参照下さい:

  • 入門編 (1) VPN-Warp の特長: ふつうの SSL VPN と比べて
  • 入門編 (2) VPN-Warp の特長: ssh のポートフォワードと比べて
  • 入門編 (3) stone & relayagent の設定方法
  • 入門編 (4) stone の代わりに OpenSSL の s_client を使ってみる
  • 入門編 (5) stone の代わりに普通の WWW ブラウザを使ってみる
  • 入門編 (6) WWW ブラウザを使う場合の注意点
  • 応用編 (1) VPN-Warp 試用ライセンス提供開始のお知らせ

relayagent をノートPC にインストールしておくと、 常にリレーサーバに対して https アクセスを試みます。 もちろん、ネットワークにつながっていなければアクセスは失敗するわけですが、 きょうび PC をネットワークにつながずに使うというのは、 かなりレアケースと言えるのではないでしょうか。 何をするにも WWW へのアクセスは必須ですからね~。

で、WWW へアクセスすることができる環境 (正確に言うと https へアクセスできる環境) でありさえすれば、 たとえファイアウォールの中であろうと、 relayagent はリレーサーバに接続することができます。

そして、relayagent がリレーサーバに接続しさえすれば、 そのノートPC がどこにあろうと、リモートから操作することができます。 例えば Windows 標準のリモート デスクトップや、 VNCなどの リモート コントロール ソフトウェアを使って、 例えば重要ファイルを (漏洩する前に) 消すなり、 ハードディスクごと消去してしまうなりできるでしょう。 あるいは、 そのノートPC を拾った人へのメッセージをデスクトップに表示しておくことにより、 もしかしたら返してもらえるかもしれません。

というわけで、早速設定方法です。 まず relayagent の設定ファイルは次のようになります。

-c "C:/Program Files/KLab Security/VPNワープ relayエージェント/user.pem"
-k "C:/Program Files/KLab Security/VPNワープ relayエージェント/user.pem"
-n
relay.klab.org:443 localhost:3389

「-c」オプション、「-k」オプションで、 それぞれ公開鍵と秘密鍵 (この場合は同じファイル名ですね) を指定し、 「-n」オプションは、 relayagent をポートフォワーダとして使うための設定ですね (入門編 (3) を参照してください)。 フォワード先は、「localhost:3389」つまり リモート デスクトップ サーバのポートです。 VNC を利用する場合は、3389番ポートの代わりに 5900番ポートなどを指定することになるでしょう。

設定ファイルである「C:\Program Files\KLab Security\VPNワープ relayエージェント\relayagent.cfg」を 直接編集してもいいのですが、 Windows 版 relayagent では、 「コントロールパネル」の「プログラムの追加と削除」から 「VPNワープ relayエージェント」の「変更」を行なうことで GUI で設定変更することもできます。 この場合、設定ウィザードが表示されますから、

対象サーバ:      localhost
対象ポート:      3389
relay サーバ:    relay.klab.org

HTTP 以外のプロトコルを中継する

公開鍵:  C:/Program Files/KLab Security/VPNワープ relayエージェント/user.pem
秘密鍵:  C:/Program Files/KLab Security/VPNワープ relayエージェント/user.pem

を、それぞれ指定することにより、設定ファイルの変更が行なわれます。 あとは、「コンピュータの管理」の「サービス」で 「Relay Agent Service」を「開始」するか、 あるいは Windows を再起動するだけです。 これで、ノートPC 側の設定は全て完了です。

次に、このノートPC を外部からコントロールする側の PC (ここではデスクトップPC と呼ぶことにしましょう) の設定です。 設定といっても、stone を以下の設定で実行するだけです:

-q cert=user.pem
-q key=user.pem
relay.klab.org:443/ssl,http localhost:3388 "GET / HTTP/1.1"

SSL証明書 user.pem は、relayagent の設定で使ったものと同じものを使います。

これで、デスクトップPC の 3388番ポートが、 ノートPC の 3389番ポートへ、フォワードされます。 しかも、ノートPC がどこにあろうと、間にファイアウォールがあろうと、 ノートPC から WWW へアクセスできる限り、ポートフォワードが常に行なわれます。

したがって、あとはデスクトップPC 上で「リモート デスクトップ接続」を 実行して「localhost:3388」へ接続すれば、 ノートPC を自在に操作できるというわけです。 今回紹介した例では「リモート デスクトップ」を使いましたが、 「VNC」やその他のリモート コントロール ソフトウェアでも全く同様に 使うことができます。 また、SSL 証明書は前述したようなファイル(user.pem) で置いておくのではなく、 Windows の証明書ストアや、USBトークン、ICカードなどの、 よりセキュアな場所に置いて利用することもできます。

Filed under: システム構築・運用 — hiroaki_sengoku @ 09:54
2006年5月8日

Emacsでtrampを使って /su:root@localhost:/ をアクセスする hatena_b

先日書いた「su & emacsclient」にトラックバックを頂きました (_O_)。曰く:

tramp は /su: や /sudo: なパスを扱う場合は内部で su や sudo を使うだけで、 なんでもかんでも ssh を使うわけではないです。

思い切り誤解してました。orz
私の場合、su は opie 使っていて、

senri:/home/sengoku % su
otp-md5 416 se2369 ext
root's response:

などとなるので、

(setq tramp-password-prompt-regexp
"^.*\\([pP]assword\\|passphrase.*\\|\n.*response\\):^@? *")

と設定することにより、 チャレンジの部分を含めてプロンプトに出すことができて、 無事 tramp & su で root 権限でファイルを編集することができました。 長年(?)の懸案が解決しました(_O_)。

日記で質問してよかった~

Filed under: プログラミングと開発環境 — hiroaki_sengoku @ 17:49
2006年5月8日

満員御礼: 新卒採用面接を兼ねた会社説明会

会社説明会といいつつ、 要は私といろんな話題についてお話しましょう、 というノリですので、 私の日記 (CTO日記もよろしく) を見て、 波長が合いそうだと思ったかた、 ぜひ登録をお願いします。

おかげさまで第一回(5/9)と第二回(5/15)は満席につき、 現在は三回目を募集中です。

KLab(株) CTO仙石 (KLabセキュリティ(株) CTO を兼務) と語る、
「技術者の成長にとって一番役に立つ会社」
「技術者が自ら伸びていくことができる会社」とは

理工系の学生の皆様に、弊社で、 CTO仙石と少人数でコミュニケーションをとって頂く、 1次選考を兼ねた会社説明会をご案内致します。 皆様のお申し込みお待ちしております。

日時  2006/5/30(火)  13:30~15:00
場所  KLab(株) 本社会議室 (六本木ヒルズ森タワー 20F)

CTO日記のほうで書いている 「面接 FAQ ~弊社の面接で(私に)よく聞かれること、面接官自身が語る面接攻略法~」を読んでおけば、 面接事前対策もばっちり ;)。

Filed under: 技術者の成長 — hiroaki_sengoku @ 12:51
2006年5月7日

ブログの読み手のためのタイトルと、書き手のためのタイトル

同時に考えよう (3)」で 「相手の気持ちになって考える」とはどういうことなのかを考えたのであるが、 そもそもこのタイトル自体が、 読み手のことを何も考えていないタイトルだったと反省することしきりである。

「同時に考えよう (3)」というタイトルは、 無意識の思考についての一連の考察のうちの一つという意味合いで使った。 後から読み直したときに、 関連する日記を見つけやすいように、 という書き手としての私の都合である。

この「GCD日記」は、 考えをまとめるための メモとしての位置づけで あるので、 書き手の都合を考えてもいいのかもしれないが、 100% メモであるなら公開したりせずにメモ帳に書けばいいわけであるし、 実際、そういう (非公開) メモを書いている。

そして、 「仙石浩明CTO の日記」のほうは、 考えをある程度まとめた上で公開に重きを置いた日記であるのだから、 読み手の都合だけを考えてタイトルを決めねばなるまい。

読み手のことを考えたタイトルとはどういうタイトルだろうか? 毎日ブログを読む人というと、 沢山のブログを斜め読みする、という人が大半であろう。 一つの日記を時間をかけて読んでもらえるとは限らないし、 まして何日分にもわたるシリーズ物を順番に熟読してもらえるのは、 よっぽどの愛読者だけだろう。

もちろん、そういう愛読者は大切であるし、 そうやって真剣に読んで頂けるのであれば大変ありがたいことであるが、 大多数の読者にそういう態度を期待するのは間違いであろう。 そうなると、タイトルだけである程度内容が判断できることが好ましい。 そのトピックに興味のない人には読み飛ばしてもらう一方で、 愛読者になる可能性のある「見込み客」の目は、 たとえ斜め読みしていたとしても捕らえられるような キャッチーなタイトルでなければならない。

そういう適切なタイトルを考えることは、 本文を書くより難しく時間もかかりそうな気がするが、 まずはできるレベルから始めてみようと思う。

Filed under: その他 — hiroaki_sengoku @ 14:03
2006年5月7日

面接FAQ: 「人の役に立つことをしたい」と言う技術者の卵たち hatena_b

これまで 「弊社の面接で(私に)よく聞かれること、 面接官自身が語る面接攻略法」を、 「面接 FAQ」シリーズで書いてきたのですが、 タイトルでは内容が分かりにくかったのではないかと反省する今日このごろなので、 今回から より内容を表わすタイトルに変えてみます (2007/7/12追記: 以前のページのタイトルも修正しました)。

内容自体は、「面接 FAQ」シリーズの続き物ですので、 以下のページも参照して頂けると幸いです。

(1) 高い技術力って例えばどんなことですか?
(2) 何か質問はありませんか?
(3) 前職でいくらもらっていましたか?
(4) 仮に、何をしてもいい、と言われたら、何をしますか?

続く 5 回目となる今回は前回の続きで、 「何をしたいか」と質問したときの、 応募者 (つまり面接を受けに来た人) の答についてです。

一生の時間のうちのかなりの時間を仕事に費やすのですから、 一生かけて取り組みたいと思うようなことをすべきだと私は思います。 嫌々仕事をしたって、好きでやってる人に勝てるはずはありません。 転職 (新卒の学生さんにとっては就職) を成功させる第一歩は、 自分が本当は何をやりたいか自覚することから始まるのだと思います。 だからこそ、私は面接で「何をしたいか」をしつこいくらい聞くのですが...

私にとっては意外なことに、 「人の役に立つことをしたい」 と
答える人が少なからずいます。

もちろん、「人の役に立つこと」という目的は崇高なものです。 NHK の番組「プロジェクトX」を引き合いに出すまでもなく、 人のために自らを投げうって技術革新に取り組む技術者たちの姿は 人の心を打つことでしょう。

でもそれって、平たく言えば、 技術者でない人 (視聴者) に技術者の人生が分かったような気にさせるための、 技術者でない人 (番組制作者) が考えたストーリーに他ならないわけです。 つまり、技術者の(技術者を描いた)、非技術者による、非技術者のための番組なわけで、 これから技術者としてスキルアップしていこうとする人が、 そんなマスコミの「嘘」を信じちゃいけません。

13歳のハローワーク 公式サイト では、 「人の役に立つのが好き」な人に勧める職業として、

  • 政治家, 公務員 などの行政職
  • 弁護士, 裁判官 などの司法職
  • 保育士, 小中学校教師 などの教育職
  • 警察官, レスキュー隊員 などの安全に関する職種
  • ソーシャルワーカー, ホームヘルパー などの福祉関係の職種

があげられています。 「人の役に立つ」のを第一の目標とするなら、 まず技術を身につけて、その技術で人の役に立つ、なんて 回りくどいことをせずに、 もっとストレートにこういった職業を目指すべきでしょう。 技術を身につける、なんてサブ・ゴール (sub goal) を設定していては、 ゴールを目指す前に人生終わっちゃいます。

「技術」をあくまで目的を達成するための一手段としてとらえるのなら、 自分で技術を習得するなんて遠回りをするより、 技術者を雇うなりアウトソースするなりして技術面は他の人に任せ、 自分は自分の目標に邁進すべきなのです。 「技術」と「人の役に立つこと」両方を追い求めるには人生は短すぎます。

技術者としての人生を歩もうとするなら、 まず自分がどれだけ技術が好きか、 とことん自分の気持ちを確認してみるべきだ、 と私は思います。

- o -

連休初日に、 「今日から五月連休ですね。会社によっては 9 連休のところもあるとか。あなたは何をしますか?」という問いかけをしました。 連休最終日の今日、連休を振り返ってみていかがでしょうか? 好きなことができましたか?

Filed under: 元CTO の日記,技術と経営,自己啓発 — hiroaki_sengoku @ 09:27
2006年5月6日

stone 2.3a リリース

stone 2.3a をリリースした。 stone 2.3 からの変更点は以下の通り。

二重 free するバグの修正

stone 2.3 における最も重大なバグ。 同時に大量に socket を close する、という利用パターンにて、 二つのスレッドが同時に同じ ExBuf に対して ungetExBuf を行なってしまうために、 二重 free が起きてしまう。 stone.c 2.2.1.11 で修正 (わずか一行の修正だが極めて重要)。

Pair を thread で処理しているときは scanClose 対象から外す。

thread 処理中は、そもそも close 要求が出ていないわけで、 当然 scanClose 対象から外れるはず、と思っていたが、 thread 処理中に proto_close をセットすることもあるわけで、 dowrite が ungetExBuf を呼ぶタイミングと、 scanClose が freePair を呼び出して ungetExBuf を呼ぶタイミングとが 重なる可能性があると思われるので、その防止策。

socket を close しないバグの修正

SSL_accept に失敗したとき、すなわち TCP レベルでの accept は成功したが、 続く SSL ハンドシェークで失敗した時に、 中継先の socket が open しっぱなしになるバグ。 これは、中継元 socket の accept に成功した時点で、 中継先の socket を open するが、 SSL_accept に失敗したときに close していなかったために起きた問題。 stone.c 2.2.1.8 で修正 (これもわずか一行の修正だが重要)。

SSL ハンドシェークを行なわない TCP レベルのヘルスチェックを stone の中継元ポートに対して行なったとき、 stone が open した socket がどんどん増え、 too many open files エラーが起きて accept 出来なくなったことにより発覚。

SSL_accept に失敗したとき、pair2 側に close 要求出すのを忘れていた。 SSL_accept に時間がかからない時 (localhost からの接続時) は、doaccept 内で freePair するので問題にならないが、 SSL_accept に時間がかかる時は、doReadWrite 内で p[i]->proto |= proto_close; するので、この時 p[1-i]->proto |= proto_close; も行なう必要がある。

epoll 対応 (select 版も大幅に性能向上)

select(2) の代わりに epoll(2) も利用できるようにした。 コンパイルオプション「-DUSE_EPOLL」をつけることにより epoll 版を make できる。 linux 2.6 以上のカーネルと、 glibc 2.3 以上が必要。

epoll 対応のため、stone のコード全体の見直しを行なった。 結果、(epoll を使わない) select 版も大幅にパフォーマンスが向上した。 「stone 2.3 が遅い理由」および 「stone 2.3a (候補) ベンチマーク」を参照。

アドレスキャッシュ機能の実装

Windows 2000 などで、gethostbyname が遅いという問題があるようなので、 proxy で resolv した IP アドレスをキャッシュする。 stone.c 2.2.2.11 で実装。

unix domain socket で uid 等の取得

SO_PEERCRED 参照。

  <host>:<port>/http <sport> <request> [<xhost>...]

http リクエストにのせて中継します。<request> は、 HTTP 1.0 で規定されるリクエストです。 リクエスト文字列中、 「\」はエスケープ文字であり、 次のような置き換えが行なわれます。

  \u   接続元のユーザID (番号)
  \U   接続元のユーザ名
  \g   接続元のグループID (番号)
  \G   接続元のグループ名

stone.c 2.2.2.18 で実装。

ミリ秒単位のログ出力

stone.c 2.2.2.12 および stone.c 2.2.2.17 で実装。

health HELO コマンドの分割

stone.c 2.2.2.13 で実装。

Filed under: stone 開発日記 — hiroaki_sengoku @ 20:54
2006年5月6日

VPN-Warp 応用編 (1)

VPN-Warp の使い方の基本的なところを、
VPN-Warp 入門編 6 回シリーズで説明してきました:

  • 入門編 (1) VPN-Warp の特長: ふつうの SSL VPN と比べて
  • 入門編 (2) VPN-Warp の特長: ssh のポートフォワードと比べて
  • 入門編 (3) stone & relayagent の設定方法
  • 入門編 (4) stone の代わりに OpenSSL の s_client を使ってみる
  • 入門編 (5) stone の代わりに普通の WWW ブラウザを使ってみる
  • 入門編 (6) WWW ブラウザを使う場合の注意点

これからの「VPN-Warp 応用編」では、VPN-Warp を利用した実運用例を 紹介していきます。VPN-Warp は、 KLab(株) および KLabセキュリティ(株) のネットワーク インフラを支える 基盤技術の一つとなっており、 様々な用途に使われていて、 かつ長期にわたる安定運用実績があります。

とはいっても、実際に VPN-Warp を利用してみないことには 絵に描いた餅でイマイチ実感がわかないと思いますので、 この「仙石浩明CTO の日記」の読者のみなさま限定で、 VPN-Warp 試用ライセンスをご提供します。

試用をご希望のかたは、 vpnwarp@klab.org 宛に、

  • どのように VPN-Warp を利用してみたいか
  • 「VPN-Warp入門編」を読んだ上での質問 and/or 感想
  • 簡単な自己紹介

を送って頂ければ、relayagent (Windows 用 or Linux 用) と、 VPN-Warp を利用するための SSL証明書をお送りします。 試用期間はとりあえず一ヶ月程度を考えていますが、 ご利用方法によっては延長も可能です。 また、商用ライセンスをご希望のかたは別途ご相談下さい。

なお stone については、 stone 公式ページ から Windows 用のバイナリ、 ないし Linux 用などのソースコードをダウンロードできますので、 そちらをご利用下さい。

Filed under: システム構築・運用 — hiroaki_sengoku @ 07:46
2006年5月5日

su & emacsclient hatena_b

普段 emacs を使っている人に質問なのですが、
root 作業するときどうしてますか?

私は、GNU Screen の中で emacs をずーっと立ち上げっぱなしにしていて、 ほとんどの作業を emacs の中で行なっています。 もちろんコマンドラインから何かを実行するときも、 emacs の shell モード (正確に言うと j-shell.el なんですが ^^;) の中で 行なっています。

いきおい、root になるときも shell モードで「su」を実行することになります。 で、root 権限でファイルを読み書きしようとしたとき、 どうするのがいいか、というのが問題です。

そんなの root で emacs を実行しておけばええやん、 という声が聞こえてきそうですが、 root 権限で常に emacs が動いている、というのは 想像するのもおぞましいですし、かといって 編集するたびに root で emacs を立ち上げるのは、 (起動に時間がかかるので) もっと嫌です。 そもそも root 権限で emacs (に限らずエディタならなんでも) を 立ち上げるには、 Screen の別ウィンドウで行なわなければならず、 ウィンドウの切替で作業がかなり煩雑になってしまいます。

ちなみに、ずーっと以前は、ange-ftp を使っていました。 つまり、emacs から root@localhost へ ftp して (root の) ファイルを読んできて編集し、 保存するときも ftp で書込む。 この方法は root でログインする、 という気持ち悪さがもともとあったので、 ftpd を走らせなくなったのを機会に止めました。

で、それ以来使っているのが、 今回紹介する emacsclient を使う方法です。 もしもっといい方法があるぞっ、というかたがいらっしゃいましたら、 是非教えてください (_O_)。

- o -

emacs 上で「M-x server-start」と入力すると、 emacsserver (gnuserv) を 走らせておくことができます。 この状態で、コマンドラインから

% emacsclient ファイル名

などと emacsclient (gnuclient) を実行すると、 引数に指定したファイルを、emacs で編集することができます。

したがって、root 権限でファイルを編集するときは、 まずファイルを emacs で読み書きできるようテンポラリファイルへコピーし、 それを emacsclient で開き、 テンポラリファイルが変更されたら、 それを元のファイルへ root 権限で書き出せばよいことになります。

私は suemacs と名付けた以下のような perl スクリプトを書いて使っています。 例えば

# suemacs /root/.cshrc

などと実行すると、 /root/.cshrc の内容が /tmp/suemacs5544/.cshrc_0 へコピーされ、 emacsclient /tmp/suemacs5544/.cshrc_0が実行されます。

suemacs スクリプト

#!/usr/bin/perl
$user = $ENV{'LOGNAME'};
$tmp = "/tmp/suemacs$$";
$Debug = 0;
$Once = 0;
use POSIX ":sys_wait_h";
use Getopt::Std;
getopts('do') || &help;
$Debug = 1 if $opt_d;
$Once = 1 if $opt_o;

sub help {
    print <<EOF;
Usage: suemacs <opt> <file>...
opt:  -o        ; write once on closing
      -d        ; for debug
EOF
    exit 1;
}

if ($> != 0 || ! $user) {
    exec "emacsclient", @ARGV;
}
($login, $pass, $uid, $gid) = getpwnam($user) or die;
print "login: $login,  uid: $uid,  gid: $gid\n" if $Debug;
umask 077;
mkdir $tmp || die;
chown $uid, $gid, $tmp;

for ($i=0; $i < @ARGV; $i++) {
    my $tmpfile = $ARGV[$i];
    $tmpfile =~ s@.*/@@;
    $tmpfile = "$tmp/${tmpfile}_$i";
    push @argv, $tmpfile;
    my $mtime = &cp($ARGV[$i], 0, $tmpfile);
    push @mtime, $mtime;
    chown $uid, $gid, $tmpfile;
}
if (!$Debug) {
    if (!fork) {
        close(STDOUT);
        close(STDERR);
        open(">&STDOUT", "/dev/null") || die;
        open(">&STDERR", "/dev/null") || die;
    } else {
        exit 0;
    }
}
if (!fork) {
    ($(, $)) = ($gid, $gid);
    ($<, $>) = ($uid, $uid);
    exec "emacsclient", @argv;
    exit 0;
}
my ($ret);
do {
    sleep 1;
    $ret = waitpid(-1,WNOHANG);
    print "ret: $ret, status: $?\n" if $ret > 0 && $Debug;
    for ($i=0; $i < @argv; $i++) {
        $mtime[$i] = &cp($argv[$i], $mtime[$i], $ARGV[$i])
            if $ret > 0 || ! $Once;
        unlink $argv[$i] if $ret > 0;
    }
} until ($ret > 0);
rmdir $tmp;
exit 0;

sub cp {
    my ($src, $stime, $dst) = @_;
    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
        $atime,$mtime,$ctime,$blksize,$blocks) = stat($src);
    if ($stime == $mtime) {
        print "$src is not modified.\n" if $Debug;
        return $mtime;
    }
    print "cp $src $dst\n" if $Debug;
    open(SRC, $src) || die;
    open(DST, ">$dst") || die;
    while (<SRC>) {
        print DST;
    }
    close(DST);
    close(SRC);
    utime $atime, $mtime, $dst;
    return $mtime;
}
Filed under: プログラミングと開発環境 — hiroaki_sengoku @ 19:35
2006年5月5日

自己評価をしよう

技術者にとっても、無知の知が重要、という話は以前にも書いた。 自分が何が分かっていないか正確に把握していれば、 適宜質問したり、勉強したりできる。 自身の実力がどのくらいか正確に把握できていれば、 判断を誤まらずに済む。

過去の成功体験がアダとなって失敗した、という話をよく聞く。 過去とは状況が変わっているのに、 今でも自分が正しい判断をできると思い込み、 過去の手法を現在に適用してしまう。 過去の成功体験を過剰適用してしまっている。

自信を持つことは悪いことではないが、 ともすると自信過剰に陥る。 自分の実力をどこまで正確に評価できるかが鍵だろう。 努めて自分の短所を見るようにしなければならない。

自分の短所は見つけにくい。 ついつい長所ばかりを見てしまう。 一方、他人の短所はよく見えるもの。 ならば逆に、無理矢理にでも他人の長所を見つけよう。 そうすれば、自分が何ができていないか見えてくるだろう。

Filed under: 技術者の成長 — hiroaki_sengoku @ 08:19
2006年5月4日

同時に考えよう (5)

アナロジーで考えると理解しやすいのはなぜだろう?

新しい事柄を、すでに理解している事柄に対応付けると、 分かったような気になりやすいので注意が必要であるが、 どこまで類似していて、 どこが違うかはっきり意識しながら考えるのであれば、 アナロジーは素早くモノゴトの本質を見極める方法として有効である。

すでに完全に理解している事柄というのは、 頭の中にその事柄に対応する「回路」が出来上がっていて、 無意識の思考で高速に考えることができる。 一方、初めて見聞きする新しい事柄は、 当然のことながら頭の中にはなにも準備ができていないから、 無意識の思考で考えるのは難しく、 意識した思考で考えることになる。つまり非常に遅い。

ここで、もし新しい事柄の一部でも、 無意識の思考で考えることができるのなら、 つまりすでに理解している事柄と似ている点があるのなら、 その部分は無意識の思考に任せることができて、 理解を加速することができるのではないか。 おそらく、これがアナロジーで考えるということなのだろうと思う。

このように考えていると、 マービン・ミンスキーのフレーム理論が思い起こされる。 つまり知識の枠組みができている事柄についての理解が速い、 ということと似ているが、 単なる知識の整理にとどまらず、 無意識の「自動化された」思考によって、 新しい事柄への理解が加速されるのではないか。

その一方で、過剰な類推をしてしまう、 つまり無意識への「丸投げ」をしてしまうのが、 「分かったつもり」であって、 頭の中の回路がどこまで正しいのか、 つまり「どこまで類似していて、どこが違うか」を検証する必要がある、 ということなのだろう。

その検証を、意識して行ってもよいのだが、 検証を無意識の思考で行うことができれば、 さらに強力だろう。 これは、比喩のやりすぎや、論理の誤謬を「直感で」感じられる人は、 検証を実際に無意識の思考で行っているのだろうと思う。

Filed under: 技術者の成長,自己啓発 — hiroaki_sengoku @ 20:14
« Newer PostsOlder Posts »