仙石浩明の日記

2006年

2006年12月26日

ロングテール戦略が格差社会を生む: 機会均等 hatena_b

仮説: ロングテール戦略が格差社会を生む の検証の三回目 (全七回を予定)。

機会均等

「機会均等」には三つの種類がある。

  • 金持ちになるための機会
  • 貧乏にならないための機会
  • 貧困から脱出するための機会

一番目の「金持ちになるための機会」とは、 例えば「アメリカン ドリーム」のようなものである。 ほとんど全ての人は夢想することはあっても本気で目指そうとは思わない。 本気で目指さないのだから達成できなくても、それは当然だろう。 ほとんどの人が、そういった夢を達成できないからといって、 機会が均等でないことの理由にはならない。

二番目の「貧乏にならないための機会」とは、 「安定した生活」のようなものである。 機会なんかなくても、人並みの努力していれば人並みの生活を維持できると、 かつては信じられていた。 昨今の競争社会は、生活水準が悪くなったと感じる人が増えつつあることから、 努力しても報われない社会だと言う人がいる。 果たしてそうだろうか?

むしろ、「人並みの努力」で中流が維持できた時代が特異だったのではないか? 資本の本質は自己増殖である。 富は富を呼び、お金のないところからはどんどんお金が逃げていく。 もちろん富の再配分によって富の集中を緩和するにしても、 鎖国でもしない限りお金の流れは止められない。 ではなぜ '60年代から '80年代にかけて、 多くの人が中流でいられた (一億総中流) かといえば、 社会全体が成長したから。 何年も2桁成長が続く高度成長期だったからこその現象だろう。

昔、「ドラえもん」の漫画に、「ボーナス1024倍」という話があった。 お金を銀行に預けておくと 10年で約二倍になるから、 100年預けておくと 1024倍になる。 ボーナスを銀行に預けてタイムマシンで 100年後におろしに行く、 という話である。 当時はなんとも思わなかったが、 今から考えると 10年で預金が倍になるなんてのは異常である。 もちろん、実質成長率はそこまで高くないにしても、 今から考えると常軌を逸脱した成長率だった。 しかも 100年後に同じ銀行が存続していることになんの疑いも持たなかった、 というのも今から思えばかなり新鮮な発想である。

高度成長期のような例外的な時代でなければ、 「貧乏にならない」ことは容易ではない。 「人並みの努力」だけでなく、 「機会」を見つけ、それを生かすことが必要である。

三番目の「貧困から脱出するための機会」とは、 「健康で文化的な最低限度の生活」のようなものである。 NHK スペシャル 「ワーキングプア II」の 副題は「努力すれば抜け出せますか」であったが、 「最低限度の生活」は憲法で保証されている権利なのであるから、 努力して獲得すべき性質のものではない。 必要なのは機会均等ではなく、無条件の保証であろう。

というわけで、一番重要なのは二番目の機会均等、 「貧乏にならないための機会」の平等である。 「貧乏にならないため」というのが後ろ向きなので、 多くの人がその「機会」をあまり重視していないようだ。 世の中には、この「機会」はいくらでも転がっているのに 多くの人がその機会をつかもうとしない。 だから資本の論理に立ち向かうことなしに、 ずるずると押し流されてしまっている。

しかも、多くの人はその現実を直視したがらない。 自分達より下に「ワーキングプア」がいるから自分達は「下層」じゃないと 思い込みたがる。 そういう人たちに限って、 「ワーキングプアは自己責任だ」などという。 「自己責任」の元、ずるずると貧乏に落ちていっているのは自分達自身だというのに...

政府の『国民生活に関する世論調査』の中で 「生活程度」についての意識調査の結果を見る限り、 バブル崩壊後も日本国民から一億総中流の意識は抜けていない。 「生活の程度は、世間一般から見て、どの程度と思うか?」という 質問に対する回答で、 「下」と答えた者の割合は、 1960年代から2004年に至るすべての年の調査において、1割以下である。

資本の論理に立ち向かう手段はただ一つ、 「資産を築く」ことである。 ここで言う資産とは、何も金融資産だけに限らない。 「将来の収入をもたらすもの」全てが資産であり、 「将来の支出をもたらすもの」全てが負債である。 そして、 資産の要件は「希少性」と「換金性/収益性」である。 最も効率的な資産である「能力」を例にとれば、 「普通の人にはできないことができる」というのが希少性であり、 「その能力に価値を感じてくれる人を見つける」ことができれば換金できる。

「人並みの能力」に希少性はない。 いつでも代わりの人を見つけられるからだ。 代替可能な人材 (replaceable resource) に支払われる賃金は、 下がることはあっても、上がることは稀である。 ベースアップなどというものは高度成長期のみに許された特異現象である。

では、他人より抜きん出た能力を身につける機会とは何か?

「20:80 の法則」 (パレートの法則) というものがある。 「売上の8割は、全従業員のうちの2割で生み出している」などの経験則が知られるが、 じゃ、その 2割の従業員だけでドリームチームを作れば、 すごい会社が作れるかというと残念ながらそうは問屋がおろさない。 「2割の従業員」がふたたび「20:80」に分かれてしまうのである。 精鋭チームを作ったつもりが、 そのチームの中の多数 (8割) は売上にあまり貢献しなくなってしまう。 逆に、ダメな従業員だけを集めたダメダメチームを作っても、 その中の 2割ほどは頭角を現し、チームを率いるようになる。

つまり能力を向上させる最良の方法は、 自分が上位 20% に入ることを目指せるような集団に属することである。 まさに「寧ろ鶏口となるも牛後となるなかれ」。 上位20% に入ることがどうしても無理なら、 それはその集団が向いていないということである。 牛後に甘んじるよりは思い切って飛び出すべきだろう。

機会均等を押し進めようとするなら、

  • 「再チャレンジ支援」より 「ニート部門
  • 「一斉授業」より「習熟度別指導」
  • 「普通科高校」より「専門高校」
  • 「男女共学」より「女子校」
  • 大企業で中間管理職を目指すより、ベンチャーで経営幹部を目指せ
  • 大企業の研究所で主管研究員を目指すより、ベンチャーで CTO を目指せ
  • 雇われプログラマで人月を換金するより、 世界を変えるオープン ソース ソフトウェアを目指せ

「貧乏にならないための機会」はいたるところで見つけられる。 見つけようとする意志さえあれば。

Filed under: 自己啓発 — hiroaki_sengoku @ 07:22
2006年12月22日

La Fonera を無線LAN 端末として使ってみる hatena_b

La Fonera (FON ソーシャル ルータ) は、 無線LAN アクセス ポイントであるが、 中身は普通の Linux マシンなので、 いろんな用途に使うことができる。 一例として無線LAN 端末として使ってみる。
まずは ssh で La Fonera にログイン:

senri:/home/sengoku % ssh -l root 172.16.254.254
root@172.16.254.254's password: 


BusyBox v1.1.3 (2006.09.11-19:54+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

 _______  _______  _______ 
|   ____||       ||   _   |
|   ____||   -   ||  | |  |
|   |    |_______||__| |__|
|___|

 Fonera Firmware (Version 0.7.1 rev 1) -------------
  * 
  * Based on OpenWrt - http://openwrt.org
  * Powered by FON - http://www.fon.com
 ---------------------------------------------------
root@OpenWrt:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

実験に先だってアクセスポイントとしての機能は殺してあるので、 ルーティング テーブルは至ってシンプル。 default route がないので、この時点では当然インターネットへはアクセスできない。

まず wlanconfig コマンドを使って無線LAN デバイスを端末モードで作成し、 続いて接続先アクセスポイント (もう一台の La Fonera ;-) の ESSID および WEP キー (もちろん伏せ字) を設定:

root@OpenWrt:~# wlanconfig ath0 create wlandev wifi0 wlanmode sta
ath0
root@OpenWrt:~# iwconfig ath0 essid "MyPlace"
root@OpenWrt:~# iwconfig ath0 key "6162636465666768696a6b6c6d"
root@OpenWrt:~# ifconfig ath0 up

これだけでアクセスポイントへの接続が完了する。 iwconfig コマンドで確認してみる。

root@OpenWrt:~# iwconfig ath0
ath0      IEEE 802.11g  ESSID:"MyPlace"
          Mode:Managed  Frequency:2.417 GHz  Access Point: 00:18:84:10:XX:XX
          Bit Rate:36 Mb/s   Tx-Power:18 dBm   Sensitivity=0/3
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:6162-6364-6566-6768-696a-6b6c-6d   Security mode:restricted
          Power Management:off
          Link Quality=53/98  Signal level=-42 dBm  Noise level=-95 dBm
          Rx invalid nwid:664  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

あとは 「ifconfig ath0 192.168.10.2」 などと手で IP アドレスを設定するか、 あるいは DHCP クライアントを実行すればよい。

root@OpenWrt:~# udhcpc -i ath0
info, udhcpc (v0.9.9-pre) started
debug, Sending discover...
debug, Sending select for 192.168.10.146...
info, Lease of 192.168.10.146 obtained, lease time 43200
deleting routers
adding router 192.168.10.1
adding dns 192.168.10.1
root@OpenWrt:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 ath0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 ath0

設定された default route 192.168.10.1 は NAT ルータなので、 これでインターネットへの接続が完了している。試しにアクセスしてみる:

root@OpenWrt:~# telnet mx.gcd.org 25
220 senri.gcd.org ESMTP
help
214 qmail home page: http://pobox.com/~djb/qmail.html
quit
221 senri.gcd.org
Connection closed by foreign host.
root@OpenWrt:~# wget http://www.klab.org/
Connecting to www.klab.org[211.13.209.203]:80
index.html           100% |*****************************| 11992       00:00 ETA
root@OpenWrt:~# ls -la index.html
-rw-r--r--    1 root     root        11992 Dec 22 05:27 index.html
Filed under: La Fonera — hiroaki_sengoku @ 14:44
2006年12月19日

La Fonera (FON ソーシャル ルータ) hatena_b

La Fonera (FON ソーシャル ルータ) を2台購入した (正確に言うと1台は店頭で購入、もう1台は無料キャンペーンで入手)。

入手方法 店頭で購入 無料キャンペーン
Model FON2100E FON2100E
S/N 8638001XXX 8646022XXX
MACアドレス 00:18:84:10:XX:XX 00:18:84:16:XX:XX
ROMバージョン 0.7.0 r3 0.7.0 r4

店頭で購入した物のほうが古いのは、まあ当たり前か。 新しい方のシリアル番号の下のほうの桁が 2万を超えているので、 現在は万単位で製造しているのだろう。 シリアル番号の上の方の桁、 および ROMバージョンが異なるのは、 製造ロットが違うから? もちろん両ルータともネットにつないでおくことにより、 現時点での最新バージョンである 0.7.1 r1 に自動アップデートした。

自動アップデートは、 cron から呼び出される /bin/thinclient プログラムによって行なわれる (/bin/thinclient は起動時にも呼び出される)。

root@OpenWrt:~# /bin/thinclient cron
upgrade.fon          100% |*****************************| 61473       00:00 ETA
This is a FON hotfix v2 archive
Verified OK
Upgrade name: upgrade_0711
Upgrading...

/bin/thinclient は、まず download.fon.com:1937 へ ssh 接続する。 ポート番号が変則的なのは、 間にファイアウォールがはさまっていないか確認するためか? なお、ssh は /etc/dropbear/key にある秘密鍵を用いて DSA 認証を行なう。 この秘密鍵は両ルータとも同じ内容だった。 /bin/thinclient は、次に この ssh セッションにおいて、 次の文字列を送信する。

mode='cron' wlmac='00:18:84:16:XX:XX' mac='00:18:84:16:XX:XX' fonrev='4' firmware='0.7.0'

ここで、「mode=」は /bin/thinclient の実行方法を示している。 cron から呼び出されたときは「mode='cron'」、 起動時に呼び出されたときは「mode='start'」。 「wlmac=」および「mac=」はそれぞれ、 無線(FON_AP)側の MAC アドレスと、 有線(WAN)側の MAC アドレス。 後者の MAC アドレスに 1 加えた値が前者のアドレスになっているようだ (ちなみにプライベート アクセス ポイント(MyPlace)側の MAC アドレスは、 さらに 1 を加えた値)。 「firmware=」および「fonrev=」はバージョンおよびリビジョン番号を示す。 つまり、個体識別ID を FON に送信しているものと考えられる。

すると、download.fon.com:1937 から、 以下のような sh スクリプトが返ってくる。

cd /tmp
wget http://download.fon.com/firmware/update/0.7.0/4/upgrade.fon
/bin/fonverify /etc/public_fon_rsa_key.der /tmp/upgrade.fon

rm -f /tmp/.thinclient.sh

exit

/bin/thinclient は、 この送られてきた sh スクリプトを /tmp/.thinclient.sh に保存した上で実行する。 つまり、 この例の場合だと、「upgrade.fon」をダウンロードして 「/bin/fonverify」に与える。 おそらく upgrade.fon がアップデートのための差分データで、 「/bin/fonverify」が、このデータを認証した上で展開しているのだろう。

アップデートの必要がないときは、 以下のような何もしない sh スクリプトが返ってくる。


rm -f /tmp/.thinclient.sh

exit

0.7.0 r4 と 0.7.1 r1 の差分をとってみた。
新規に追加されたファイル:

/etc/config/ntpservers
/etc/config/openports
/etc/config/webif
/etc/init.d/N45ntpclient

ntpclient を使って時刻あわせするようになったようだ。 アップデート前するは起動時に「2000年1月1日 9:00 JST」にセットされていた。 これでは起動時からの経過時間しかわからないので、 ntpclient を使うように変更したのだろう。

変更されたファイル:

--- /rom/etc/banner        2006-09-13 02:41:30.000000000 +0900
+++ /jffs/etc/banner        2006-11-22 04:07:20.000000000 +0900
@@ -4,7 +4,7 @@
 |   |    |_______||__| |__|
 |___|
 
- Fonera Firmware (Version 0.7.0 rev 4) -------------
+ Fonera Firmware (Version 0.7.1 rev 1) -------------
   * 
   * Based on OpenWrt - http://openwrt.org
   * Powered by FON - http://www.fon.com

--- /rom/etc/fon_revision        2006-09-12 06:43:42.000000000 +0900
+++ /jffs/etc/fon_revision        2006-11-16 05:08:40.000000000 +0900
@@ -1 +1 @@
-4
+1

--- /rom/etc/fon_version        2006-09-12 04:32:01.000000000 +0900
+++ /jffs/etc/fon_version        2006-11-16 05:08:40.000000000 +0900
@@ -1 +1 @@
-0.7.0
+0.7.1

--- /rom/etc/functions.sh        2006-09-12 04:32:01.000000000 +0900
+++ /jffs/etc/functions.sh        2006-11-15 02:44:26.000000000 +0900
@@ -112,3 +112,18 @@
         esac
 }
 
+#
+# This functions forwards a port. The next args are required:
+# $1 = WAN interface
+# $2 = Origin Port
+# $3 = Destination IP
+# $4 = Destination Port
+# $5 = protocol used
+#
+# Example: open_port $WAN 8080 192.168.1.2 80 tcp
+#
+open_port() {
+        iptables -t nat -A prerouting_rule -i $1 -p $5 --dport $2 -j DNAT --to-destination $3:$4
+        pdots=`echo $4 | sed 's/-/:/g'`
+        iptables        -A forwarding_rule -i $1 -p $5 --dport $pdots -d $3 -j ACCEPT
+}

--- /rom/etc/hotfix        2006-09-12 04:32:01.000000000 +0900
+++ /jffs/etc/hotfix        2000-01-01 09:35:00.000000000 +0900
@@ -0,0 +1 @@
+upgrade_0711

--- /rom/etc/init.d/S45firewall        2006-09-12 04:56:53.000000000 +0900
+++ /jffs/etc/init.d/S45firewall        2006-11-17 22:12:29.000000000 +0900
@@ -105,3 +105,7 @@
 }
 # check if the connection is already up and add WAN_HOOK rules automatically
 env -i ACTION=ifup INTERFACE=wan /bin/sh /etc/hotplug.d/iface/20-firewall
+#
+# Forwarded ports
+#
+/etc/config/openports $WAN

--- /rom/etc/sysctl.conf        2006-09-12 04:32:01.000000000 +0900
+++ /jffs/etc/sysctl.conf        2006-11-08 03:04:39.000000000 +0900
@@ -6,3 +6,4 @@
 net.ipv4.tcp_keepalive_time=120
 net.ipv4.tcp_timestamps=0
 net.ipv4.tcp_vegas_cong_avoid=1
+net.ipv4.ip_local_port_range=4096 8192

このあたりはわずかな修正だが...

--- /rom/etc/init.d/rcS        2006-09-12 22:16:13.000000000 +0900
+++ /jffs/etc/init.d/rcS        2006-11-15 02:44:26.000000000 +0900
@@ -21,13 +21,24 @@
         done
         
         while :; do
+                lock -w /var/run/restart-services
+                
+                # just in case
+                lock -u /var/run/network-connection 
+                killall lock
+                
+                # grab the locks again
                 lock /var/run/restart-services
+                lock /var/run/network-connection
+
                 killall N50chillispot
                 killall chilli
                 killall dnsmasq
                 ifup lan_noinet
                 ifup wan
                 /etc/init.d/S45firewall
+                
+                lock -w /var/run/network-connection
                 for i in /etc/init.d/N*; do
                   $i start 2>&1
                 done

これは、起動時に問題が起きることがあることへの対策か?

そして、0.7.1 へのアップデートで一番の目玉が、 /usr/lib/webif 以下の変更、 すなわち設定 Web インターフェースの多言語対応なのだろう。 /usr/lib/webif/lang ディレクトリが追加され、 /usr/lib/webif/lang/jp/fon.txt などのファイルに、 ローカライズのための文字列置換表が追加された。 /etc/config/webif に現在選択している言語が設定される。

日本語で設定できるようになったのはいいことだと思うが、 0.7.1 r1 にアップデートしてから、 FON Maps で濃いグリーンで表示されなくなったような気がする... アップデート前は FON_AP 登録位置に濃いグリーンの円が表示されていたのだが、 アップデート直後から薄いグリーン(直近で非アクティブ)の円で 表示されるようになってしまった。 前述したようにバージョン番号は thinclient で FON へ送信されるが、 0.7.1 r1 だと電波を出しているとは認識してもらえなくなってしまったのか? (thinclient の実行頻度を高めてみても、淡い緑のまま...)

もう一点、気づいた不具合として、 設定 Web インタフェースにて WAN 以外の設定を行なわずに何らかの設定を行なうと、 WAN が使えなくなってしまう、という問題がある。 すなわち、/etc/config/fon において

config network wan
        option mode        ''

などとなってしまう。 これだと WAN (つまり有線インタフェース) に IP アドレスが設定されない。 つまり有線もパブリック アクセス ポイント「FON_AP」も使えなくなってしまう。 エイリアス「eth0:1」には常に 169.254.255.1 が設定されるので、 大事には至らないのだが...

eth0:1    Link encap:Ethernet  HWaddr 00:18:84:16:XX:XX
          inet addr:169.254.255.1  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          Interrupt:4 Base address:0x1000

このような状態になってしまったときは、 この 169.254.255.1 へアクセスするか、 プライベート アクセス ポイント「MyPlace」へアクセスして、 設定 Web インタフェースにて WAN の設定を行なえばよい。 例えば「DHCP」を設定すると、 /etc/config/fon の該当箇所が

config network wan
        option mode        'dhcp'
        option ipaddr        ''

となるので、「/sbin/ifup wan」を実行するか、 あるいは再起動すれば DHCP で取得した IP アドレスが WAN に設定される。

Filed under: La Fonera — hiroaki_sengoku @ 14:15
2006年12月14日

年功主義と実力主義 ~大企業とベンチャー~ hatena_b

私が大学を卒業したのはバブル (ネットバブルではなく、その前の前世紀のほう) がはじけた年でした。 当時は今ほどベンチャーは一般的ではありませんでしたし、 研究職を目指していた学生 (含む私) が就職先として大企業の研究所を選ぶのは、 ごく普通のことだったのではないかと思います。 終身雇用を信じていたわけでもありませんでしたが、 かといって自分自身が転職することになろうとは、 あまり考えてもいなかったような時代です。 今から振り返ってみれば「就職」というよりは「就社」という感覚に 近かったのだと思います。

その後の「失われた十年 (20年?)」の間に、 年功主義の綻びが誰の目にも明らかになってきて、 大企業以外の就職先を選ぶ人も増えてきましたし、 転職も一般的になってきました。 とはいえ、 就職先の選択肢が広がってきているわりには、 それぞれの企業がどんなところか実態を知ること無く、 なんとなくイメージで決めてしまっている学生さんも多いのではないでしょうか。 最近になって再び「寄らば大樹」的な傾向が復活しつつあるとも聞きます。

どのような進路を選ぶにせよ、 もっと企業の実態を知ってもらった上で決めて欲しいと 思っていたところ、 先日たまたまそういう機会を頂けたので、 学生さん相手のセミナーでお話ししてきました。

私は大企業の研究所に 8年間勤め、 その後ベンチャー (KLab(株), 当時の社名は (株)ケイ・ラボラトリー) の 立ち上げに参加し、順調に規模を拡大し、現在に至っています。 なので、

  • 大企業の研究所 (前職)
  • スタートアップ (立ち上げ当初のケイ・ラボラトリー)
  • 中規模ベンチャー (現在の KLab)

それぞれについて、実地の体験談をお話したわけです。 幸い、ベンチャーについて、もともと興味を持っていた学生さんもいて、 核心をついた (答えにくいとも言う ^^;) 質問もありました。 大企業とベンチャー、 それぞれの実態について理解を深めてもらえたと思っています。

まじめな東大生、悩みすぎ? 3割がニート不安

よく勉強する半面、将来の進路などに思い悩み、 不安や無気力に苦しむ学生が増えている-。 東大が13日公表した学生生活実態調査で、 こんな東大生の姿が浮かび上がった。
調査は昨秋、学部生約3500人を対象に実施(回収率39%)。 83%の学生が進路や生き方に悩んでおり、 自分がニートやフリーターになる恐れがあると感じている学生も28%に上った。
今朝のSankei WEBから引用

悩んでいるより、まずはいろいろな企業の実態について 見聞きしてみて、じっくり将来のことを考えて欲しいと思います。 私でよければ喜んでお話ししますので、 興味あるかたは是非ご連絡下さい。 ただし、企業の実態をできるだけ正確にお話しする、という主旨なので、 対象は (研究者・技術者を目指す) 学生さんに限定させて頂きたいと思います。

参考までに、セミナーで使ったスライドを FlashPaper で Flash 化したもの ↓ を公開します。 このスライド自体は 10ページしかありませんが、 それは「実態」は口頭でお話ししているからです ;-p。 質疑応答が盛り上がったので、2時間近くかかりました。

More...
Filed under: 元CTO の日記,技術と経営 — hiroaki_sengoku @ 16:48
2006年12月12日

戦略的に会社を利用する hatena_b

成功している中小企業が持つ5つの要素」から引用:

Five Secrets of High Performing Organizations」という報告書(PDF)が 公開されていました。 この報告書はアメリカで10~100人規模の企業300社以上を調査して、 成功している企業が持つ要素を5つにまとめています。 さらに、それぞれの要素を実現するためにはどのような努力をすれば良いかを 解説してありました。
...
4. 戦略的に技術を利用する
本当は何が必要かをわかるまでは課題に対して利用する技術を特定してはいけません。 成功している中小企業は、技術を使う事が目的ではなく、 戦略を達成するために技術を利用する事を知っています。 また、一度使うと決めた技術に対する調査も徹底して行われます。 調査には、技術そのものに対してだけではなく、 効果を最大化するためのトレーニングも含まれます。

誠にごもっとも。 目的は課題を解決することであって、技術はその手段に過ぎない。 いま自社にある技術を中心に考えてしまうと、 それに引きずられ課題を見失うことになりかねない。 だから技術のことはいったん忘れて何が目的なのかしっかり考えなければならない。 目標が明確になった時、 自社が現有する技術と必要な技術との間に乖離があれば、 自社の技術者たちはスキルシフトか職探しを求められる。

合理主義を貫こうとする限り、 この考え方には反駁の余地がない。 技術者が経営方針に振り回され続け、 その結果スキルを充分に伸ばせなかったとしても、 会社は技術者養成機関ではないのだからその責は負わない、 という考え方は首尾一貫している。

問題は、会社が合理主義を貫こうとしている現代においても、 技術者の側が合理主義を貫ききれていないことにある。 「成功している中小企業が持つ5つの要素」の 技術者版「成功している技術者が持つ5つの要素」が必要であろう。

4. 戦略的に会社を利用する

本当は何が必要かわかるまでは 自身の技術 (あるいはこれから身につけようとする技術) に対して 利用する会社を特定してはいけません。 成功している技術者は、 会社に貢献することが目的ではなく、 自らのスキルを向上させるために会社を利用することを知っています。 また、一度入社すると決めた会社に対する調査も徹底して行ないます。 調査には、会社そのものに対してだけでなく、 効果を最大化するための会社の制度および風土なども含まれます。 経営者の技術に対する考え方や、 昇給・昇格などの人事制度や、 どのような人物が自分の上司になるか、 あるいは互いに切磋琢磨できるような同僚がいるかどうかは、 自らのスキルをどれだけ伸ばすことができるかに大きな影響を与えるからです。

経営者にとっては、事業の遂行が目的であって技術はその手段に過ぎない。
技術者にとっては、自らの技術スキルの向上が目的であって 事業はその手段に過ぎない。

スキル向上に役立たなくなった仕事はどんどん捨てるべきである。 なぜなら技術スキルこそが、技術者にとって最大の資産であるからだ。 目先のキャッシュフロー (若いときの給料) にとらわれることなく、 将来のキャッシュフローを生み出すストックをどうやって積み重ねていくかを第一に考えて欲しい。

Filed under: 技術者の成長 — hiroaki_sengoku @ 12:31
2006年12月8日

なぜ人月見積もりが優れているのか hatena_b

人月見積りでは生産性が上がらない。 IPA が警告するまでもなく、 ソフトウェア技術者ならば誰しも 人月見積りに嫌悪感を持っているのではないでしょうか。 生産性を上げれば上げるほど金額が低くなってしまうし、 そもそも開発者の生産性なんて人によって大きく異なる (私の持論は、 「ピンとキリでは 1000倍の差がある」、です) のだから、 「標準的な技術者一人が一ヶ月かかる仕事」なんて基準をおいたところで 意味がありません。

人月見積もりについては、 「人月見積もり、生産性について」に いろいろな意見へのリンクがまとめられているので参考になります。 このように人月見積もりがなぜ問題なのか、 それこそ掃いて捨てるほど主張が繰り返されていますから、 いまさら同じようなことを唱えても仕方がありません。 そこで、ここでは逆にあえて肯定してみることにします。

そもそもこれだけ嫌われ者の「人月見積もり」が なぜいまだに行なわれているか、 そこには「人月見積もり」ならではの「良さ」があるからではないでしょうか?

誰にとっての「良さ」か? それはもちろん見積書を受取る「お客様」にとっての 良さです。 そもそも技術者の仕事なんてのは、 技術のことを知らない「お客様」にとってはよくわかりません。 「この仕事はすごく高度なんだぞーっ」って言われたって、 「ハイそうですか、じゃ沢山お金を払いますね」なんて言ってくれるお客様が いたらぜひお目にかかりたいものです。 ふつうは「どれだけ価値がある仕事なのか、きちんと説明してもらいたい」って 言うでしょう。

じゃ、どうやって説明しましょうか、技術者の仕事の価値を。

お客様にどう説明すれば納得してもらえるか考えるには、 お客様の立場に立つのが一番分かりやすいでしょう。 といっても、我々技術者にとっては、技術者でない人の気持ちを想像するのは ちょっと難しいですよね? こういうときの常套手段として、立場を逆にして考えてみます。 つまり我々技術者がお客で、 技術者でない相手が何かを我々に売りつけようと見積書を出している 状況を想像します。 売り付けるモノは (コモディティでなければ) 何でもいいんですが、 例えば何かの調査レポートにしましょうか。

相手は、このレポートがいかに創造的で革新的で価値があるものであるか、 必死に説明しようとしています。 が、残念ながら我々はその分野には全く疎いので、 どれだけ価値があるのやら、いまいちピンときません。 そもそも疎いからこそレポートを買おうとしているわけで、 ピンと来ないのは当たり前ですよね? さあ、どうしましょう?

そのレポートを活用することによって我々の利益がどのくらい増えるのか、 目に見えるのであれば分かりやすいのですが、 あいにくそのレポートが即、利益につながるわけではありません。 確かにそのレポートが役に立つであろうことは間違いない (だから買おうとしている) のですが、 利益増にどのくらい貢献しそうか、というと主観的に判断せざるを得ません。 でもって、主観ということになると、 どうしても他社の仕事より自社の仕事の 利益貢献度合いのほうを高く見積りたくなるものでしょう。

- o -

御社のレポートが、弊社のビジネスに大変役立つであろうことは 疑いの余地がないのですが、 もちろんレポートが直接利益を生むわけではなく、 弊社としてもいろいろコストをかけていく必要があるわけでして、 御社がこのレポート作成に多大なコストをかける必要があることは 重々承知しているのですが、 最終的な利益を御社と弊社とでどう配分すべきか、というと なかなか難しいものですね~ なにかもっとこう客観的な指標はないでしょうか。

と、いいますと?

例えば、このレポート作成に、何人の人が何ヵ月くらいかかりそうか、とか。

Filed under: 元CTO の日記,技術と経営 — hiroaki_sengoku @ 17:40
2006年12月8日

ソフトウェア産業の究極の振興策 hatena_b

IPA (情報処理推進機構) のかたとお話しした。 優秀なソフトウェア技術者の成果をビジネスにつなげるための支援をするには、 どうしたらいいかヒアリングしたいとのこと。

ああ、この人もソフトウェアをモノと誤解している人なんだ。

ソフトウェア以外の分野、 たとえばバイオや新素材などでは 優れた発明・発見がビジネスに直結する。 真に有効なモノ (例えば新薬や新素材) の真に有効な製造方法が発明されれば、 あとは製造工場を建設するのに必要なカネがあればよい。 だから、資金援助を行なうことが即、その産業の振興につながる。

しかしながらソフトウェアはモノではない。 ソフトウェアには特殊な製造方法などなにもない。 あるソフトウェアを作るのに特殊な「知的財産」が必要、 などということはないのである。

確かに、ソフトウェアの分野にも一応「発明」と称するのものがあるが、 その「発明」が公開されなければ製造できないソフトウェアが果たしてあるだろうか? 「ソフトウェア特許」を認めるべきか否かについては様々な議論があるが、 ソフトウェアを他の分野と同列に扱うことはできない、 ということだけは確かであろう。

では、ソフトウェア産業の振興には何が必要なのか? なぜ日本のソフトウェア業界には (例えば Google のような) 破壊的なイノベーションが生まれないのか?

簡単である、ソフトウェアを作る優秀な技術者が足らないからである。 だから振興策も簡単で、 技術者をビジネスの現場に引き合わせればよい

と言ったら、IPA でも 未踏ソフトウェア創造事業で発掘した人材を、 ソフトウェアの販売会社と引き合わせている、 という答が返ってきた。

そんなことを言っているのではない!

未踏事業で開発したソフトウェアを販売会社に紹介すれば、 確かに興味を持つ会社は出てくるだろう。 実際に販売してくれるところも出てくるかも知れない。 でもそんなことをして高々数千本ソフトウェアを売ったところで何になる? せいぜい (すごくうまくいったとしても) 数憶円の売上にしかならないだろうし、 数千本といえど売れば開発者はサポートに忙殺されてしまう。 せっかく発掘した貴重な人材の使い道としては、 あまりにモッタイナイ使い方ではないか。

優秀な技術者をソフトウェア販売会社に引き合わせたって意味はない。
優秀な技術者を「ビジネスの現場」に引き合わせなければならない。
つまり、優秀な技術者がその能力を存分に発揮し、 その能力に見合う報酬を喜んで支払う「事業家」に引き合わせなければならない。

日本のソフトウェア産業がアメリカに負けっぱなしなのは、 優秀な技術者が日本にいないからだろうか?

否!!

優秀な技術者と、優秀な事業家が、出会っていないだけである。 日本にも、勢いのある IT ベンチャーは数多い。 ところがそうしたベンチャーに入社しようと思う優秀な技術者がどれだけいるのか? ほとんど全ての IT ベンチャーは優秀な技術者を渇望している。 その一方で、大企業の研究所には優秀な技術者がゴロゴロしている。 私は日立製作所の研究所に 8年間勤めたので痛感しているのだが、 私よりよっぽど優秀な人が、特に活躍するわけでもなくゴロゴロしている。 つまり凡人でもできるような仕事をして、 凡人と同レベルの給料をもらって満足しているのである。

もちろんお金が全てではないし、 優秀な人はすべからくその能力をフルに発揮して活躍しなければならない、 というものでもない。 自らの能力を披露することなく静かに暮すのも一つの生き方であろう。

しかし、優秀な技術者の大半が、大企業の奥底で眠っているのだとしたら...?
そして日本のソフトウェア産業を振興させたいと思うのなら...?
それなら有効な振興策は一つしかない。 唯一にして最も効果的な究極の振興策、それは...

大企業の一つをつぶして、死蔵していた優秀な人材を放出させることである。

Filed under: 技術と経営 — hiroaki_sengoku @ 13:18
2006年12月5日

チープ教育: 「無意味にポジティブ」のススメ hatena_b

KLab 社内には、社内専用の IRC サーバがあります。 IRC (Internet Relay Chat) つまり、 ネットワークリアルタイム会議システムです。 普通の IRC はインターネットに接続できれば、 誰でも使えるのですが、 KLab 社内 IRC は、KLab のイントラネットに接続できる人しか使えません (VPNワープを使って社外からもアクセスできます)。 だから社外秘な内容も流せますし、 社内ミーティングを IRC で済ませてしまうこともよくあります。

社内 IRC が真価を発揮するのは、 コンテンツ提供用の WWW サーバ システム (DSAS) の メンテナンス作業の時など、 多くの人がリアルタイムに状況 (メンテナンス作業の進捗状況) を 共有したいときです。 メンテナンス作業は、 コンテンツ提供サービスに悪影響を与えていないか確認しつつ 慎重に進める必要があるのですが、 それには実作業を行なう人と、 その作業をチェックする人、 そしてコンテンツ提供に悪影響が及んでいないか監視する人など、 沢山の人が進捗状況をリアルタイムに把握する必要があります。

関係者が全員同じフロアにいれば、 大声をあげるだけでも進行状況の「雰囲気」を共有できるでしょうが、 KLab の場合は東京、大阪、福岡のオフィスの他、 SOHO 形態で働いている人もいますし、 DSAS メンテナンスの場合はデータセンタ (東京二ヶ所と九州一ヶ所) にいる人とも 連係しなければなりません。 遠隔地の人と手軽に「雰囲気」を共有する手段として、 社内 IRC はとても便利です。

あまりに便利なので、 技術者の大半が常時 IRC サーバに「常駐」しているのですが、 こうなってくると計画的な作業の連絡用だけでなく、 技術者全員の横のつながりというか、 部署を超えて技術者同士が連係できる共有空間の役割を果たすようになります。 例えば昨晩も...

18:28 (sengoku`) チープ教育 http://cn.ce-lab.net/ja/toshi/archives/2006/08/post_75.html
18:29 (sengoku`) ↑これ、かなり本質をついてる気がするのですが、皆さんはどう思いますか?
18:30 (sengoku`) 私がはじめて出会った PC (当時の呼称はマイコン) は、とてもチープだったんで、自分で作ろう、という気が起きたけど、今の PC 見て、作ってみよう、と思う人はいないよねぇ..

チープ教育」を読んで、 ぜひみんなに紹介したいと思ったので、 とりあえず社内 IRC に投げてみたわけです。 ほどなく隣の部署の人から反応がありました。

18:34 (koura-h) 細部の作り込みに入ってしまうのって、それはそれで楽しいときもありますけど、苦痛になってしまうことも多いっす。。。
18:35 (koura-h) 制作環境における「チープさ」って、ありがたいと思うす。

続いて、協力会社の人からも...

18:39 (ktaka) ある意味、何でもそうだと
18:39 (ktaka) 思います。
18:40 (ktaka) 自動車でも、
18:40 (ktaka) 楽天のような商売でも
18:41 (ktaka) 物理学者が生物学に入っていって、DNAとかの研究が盛んになり始めた衣
18:41 (ktaka) 頃も
18:42 (ktaka) ショックレイがフェアチャイルド社(?)を始め、Intelができた頃も
18:42 (sengoku`) あはは
18:42 (ktaka) みんな始めは、
18:42 (ktaka) ある意味、やればできそうという感覚があったんでしょうね
18:43 (sengoku`) ですよね~
18:43 (sengoku`) 「へぼくても許される感」って重要ですね~

反応してない人も、この会話の流れを見てはいるわけで、 技術者同士、考え方を共有することはとても重要なことだと思います。 もちろん社内には情報共有の方法としてメーリングリストも多数あるのですが、 なんでも気楽に書込めるという敷居の低さで、 IRC のほうが勝っていると思います。

18:43 (uchikawa-) itronのコードでも弄ってみますか(秋月のボードで自力で動かすというのはやったことあります)
18:43 (sengoku`) 逆に言うと、へぼが許されないような雰囲気のとき、どうやって「無意味なポジティブさ」を学ぶか意識しないと、ってことですね。
18:44 (sengoku`) まあ、遠慮せずにどんどんやれ、ってことなんですけど、
18:44 (ktaka) 私は、そもそも、参入しないと言うのもありかな、と思っています
18:44 (sengoku`) なかなかポジティブになったことの無い人にそれをやれ、ってのは難しいのかもしれませんね。
18:45 (sengoku`) もちろん、参入しない、という選択肢があるときはそれでもいいんですが、
18:45 (ktaka) 高度に専門家されたことを大きな組織でやるよりも、
18:45 (sengoku`) コンピュータ技術者、って道を選択してしまった人に、いまさら他の道を探せ、ってのも酷でしょうから... ;-)
18:46 (ktaka) 一時代を築く可能性がある、チープなものに出会えれば。。。
18:46 (ktaka) でも
18:46 (ktaka) 一口にコンピューター技術者といっても、いろいろあって
18:47 (ktaka) 昔は、ボードの設計からできそう、だったのが、
18:48 (sengoku`) (いまでも、ちゃちな PC ならボードから設計できるんですけどね、実は)
18:48 (ktaka) 今は、Youtube見たいなの作れそう、っていうのがあるとおもいますので
18:49 (ktaka) おお、すごいですね~
18:49 (sengoku`) ようは、ポジティブになれるかどうかが、勝負を分けることになるんじゃないかと...
18:49 (ktaka) チープなフェーズにある、面白そうなものって言うのは、いろんなところにあるんではないかと
18:49 (sengoku`) まあ、そういう話は、
18:50 (katsumiD) ( つhttp://journal.mycom.co.jp/column/architecture/037/
18:50 (sengoku`) プログラマを目指すのに適した時代、適していない時代 https://www.gcd.org/blog/2006/07/83/ ってことに
18:50 (sengoku`) 続くのかな。
18:50 (katsumiD) ちなみに,
18:51 (katsumiD) 今だと CPU を作ろうと思った場合,FPGA とかで作れますが
18:51 (katsumiD) そういうことをしようと思った場合のハードルが,昔に比べて下がっている,と言うのもあるように思いますです
18:52 (ktaka) 確かにそうだと思います>適していない時代
18:52 (sengoku`) いや、あるんですが、ようはそれを自分でやろうという気持ちを起こせるかどうか、ってことだと思います。
18:52 (ktaka) 確かにそうだと思います>CPUを作るハードル
18:52 (sengoku`) 技術的な障壁は確実に下がってるんですが、心理的な障壁は、逆にあがってるかも知れませんねぇ
18:53 (katsumiD) なるほど

若干、会話が錯綜気味で読みにくくなってしまっていますが、 それが逆に、 考えがまとまっていなくてもとりあえず書いてしまえ、 という気楽さにつながっているのでしょう。 メールだと、論旨をはっきりさせて書かねば、という気持ちになりますから、 思ったことをそのままぶつけられる IRC のような場も必要だと思います。

ちなみに、会話に参加している 5人のうち、 4人は声の届く範囲にいたりする (^^;) のですが、 ひざ突き合わせて話そうとすると仕事を中断して集まらなければなりませんし、 大声を出すと会話に興味がない人に迷惑ですし、 URL を伝えるときなどは声よりチャットの方がむしろ便利ですし、 また、IRC だとログが残るので後で参照することもできます。

なお、「プログラマを目指すのに適した時代、適していない時代」に言及したのですが、 どちらかというと「ロングテール戦略が格差社会を生む: 必要は発明の母」のほうが話の流れに近かったかも知れません。 要は、不足感がないと何かをやろうという気力が出てこない、 ということが言いたかったわけです。

18:53 (uchikawa-) 昔だったら「自分で作ったほうが世の中にあるものよりいいものになる」だったですからね
18:54 (sengoku`) 世の中にもっといいものがある、からといって遠慮する必要はないんですけどねぇ、ほんとうは。
18:54 (katsumiD) でも,実は心理障壁を乗り越える人はいつの時代だって乗り越えるし,乗り越えない人はいつだって乗り越えない,というのも,
18:54 (katsumiD) http://www.chiaki.cc/Timpy/index.htm
18:54 (katsumiD) こういうサイトを見ていると思ったりもします
18:54 (katsumiD) (こういうのを見ると,むしょうに自分でも何かをしたくなり出します(^^
18:55 (sengoku`) ぜひぜひ
18:55 (katsumiD) ちなみに,今の時代だと,2足歩行ロボットとか,結構盛り上がってますよね
18:56 (katsumiD) ちょっと前は,2足歩行どころか,普通のロボットでも作る機運ってのは無かったですが
18:56 (ktaka) 私的には、やっぱり、WEBやネットワークがチープなフェーズにあるのではないかと思います
18:57 (katsumiD) 色んな製作記事とかキットが出始めたこととかもあって,アマチュアの人が一杯やってらっしゃいますね
18:57 (sengoku`) まあ、どんな分野でもいいんで、ぜひチャレンジして~と。

収拾がつかなくなってきたんで、ちょっと投げやりになっています > 私 (^^;)

18:57 (katsumiD) (^^
18:57 (ktaka) なるほど
18:57 (ktaka) >ロボット
18:57 (ktaka) 二足歩行のおもちゃ変えますもんね
18:57 (ktaka) 買えますもんね
18:58 (sengoku`) Web が普及して一番困ったことは、誰もが批評家になっちゃって、自分ではやろうとしなくなったことなのではないかと...
18:58 (ktaka) そうなんですか
18:59 (ktaka) 何でも自分でやる技術者の世界に、批評家が入り込んできたという意味ですか?
18:59 (sengoku`) なんでも web 見れば載ってるんで、
19:00 (sengoku`) 自分でやらずに、自分でやってるような気分になっちゃう
19:00 (sengoku`) 見るのとやるのとでは大違いなのに、たいてーの人は見るだけで満足しちゃうんじゃないかと...

うっかり「批評家」と言ってしまって意図が通じにくくなってしまいましたが、 誤解されてもすぐ補足説明できるのが IRC のいいところですね。 「自分で実行しないで他者の行為をあれこれ言う者」という意味で使ったのですが、 「批評家」ではなく「評論家」と表現すべきでした。

19:01 (katsumiD) あぁ,それはあるかもですねぇ・・・
19:01 (katsumiD) 変な事をしてる人は一杯いて,それをいろいろ満てるだけでお腹いっぱいになってるとか・・・
19:02 (sengoku`) そういう傾向はあるんじゃないかなぁ~
19:02 (sengoku`) すでにやってる人がいるから、わざわざ自分でやらなくても、って
19:03 (sengoku`) 思っちゃうんじゃないかなぁ
19:03 (sengoku`) やってみれば、新しい発見があるかもしれないのにね。
19:04 (koura-h) それは分かりますね>わざわざ自分で~
19:05 (koura-h) 何かしりごみするっていうのか、既に誰か手を付けてると後から追いかける意欲が薄れるというか。

ようやく思った通りの結論にたどり着きました (^^)。

19:08 (koura-h) 例えばCPANなんかで、「これ自分で作ったんだけど登録してみよー」とか思っても大抵既に誰かがのっけてたりして、そういうのに何個か当たってしまうとそのしりごみの気持ちが強まってしまうっすね。。。
19:11 (ktaka) なるほど
19:12 (ktaka) >CPAN
19:12 (koura-h) (って打ってたら仙石さんが帰られていったorz

あはは。

Filed under: 元CTO の日記,技術と経営,技術者の成長 — hiroaki_sengoku @ 09:00
2006年11月30日

迷惑メール送信者とのイタチごっこを終わらせるために (2) hatena_b

DNS逆引きできないメールサーバからのメールを拒否するサイトが増えはじめ、 その弊害を指摘する声が上がっているようだ。

reject_unknown_clientは迷惑メール対策としておすすめではない」から引用:

迷惑メール対策として reject_unknown_client を紹介しているページは 多数みつかるのだが、 その弊害の大きさにまで言及しているページはほとんどないことがわかる。 これはあまりよくない傾向だ。そこで、ある程度説明をまとめておくことにする。

逆に言うと、弊害をきちんと理解していれば、 DNS逆引きの結果を迷惑メール判定に用いることは受信側の判断だろう。 DNS逆引きができないホストからメールを送らざるを得ないサイトにとっては 釈然としないところもあるとは思うが、 受け取らない権利があるのもインターネットである。
DNS逆引き設定の無いメールサーバからのメールをspam扱い」から引用:

うーん、自宅は固定IPアドレスにしているので、 追加で月額1050円也を払えば逆引きぐらい設定してもらえるのだが、 きっかけがどうにも癪だなぁ。
元はといえばSPAMMERが悪いのだけれど、 拒否するサーバ側もちょっと乱暴な気がする。
...
悪貨が良貨を駆逐してはいかんよなぁ。
SPAM地獄に陥っているmail Server管理者の気持ちはわかるんだけど...。

「癪だなぁ」という気持ちはとてもよく理解できるのであるが、 「悪貨が良貨を駆逐」というのは...? 「悪貨」は SPAMMER を指すとして、 「良貨」は何を指すのだろう? 逆引きできないメールサーバって「良貨」なのだろうか? 他者と通信するホストは、 基本的には DNS 逆引きできたほうがいいと思うのだが...

性善説が通用した牧歌的なインターネットの黎明期ならいざ知らず、 通信相手はまず疑ってかからなければ手痛い目に会うのが (それがいいことかどうかはさておき) 現代のインターネットである。 通信相手の素性は可能な限り収拾しておきたいし、 できれば ssh や SSL認証のような認証を行なって、 通信相手が間違いなく意図した通りの相手であることを確認したい。

しかし残念ながらメール配送は、いまだ認証無しの通信が大多数を占める。 通信は相手あってのものだし、 特にメールは不特定多数からの通信を受付けなくては機能しない。 一方的に、 「認証無しの接続は受付けません」と主張したところで得るものはあまり無い。 だから完全な認証は棚上げせざるを得ないが、 不十分であっても通信相手の素性が分かる方法は総動員したいところだ。 そして、素性を調べる手段として DNS逆引きは、ある程度の合理性を持つ。
逆引き判定」から引用:

spam をたくさん送ってくる中国韓国あたりは そもそも逆引きを設定する習慣があまりないようで、 このチェックによってこれらの国からの spam を多数撃墜できるのは事実である。 しかしそれは逆引きを設定する習慣がない国と spam を送ってくる国がたまたま重なっているだけにすぎない。 spam を送ってくるホストはとうぜんまともな管理はされていないだろうが、 まともに管理されているホストに逆引きがないというのもふつうに存在する (何をもってまともとするかの定義も曖昧だが)。

「まともに管理されているホストに逆引きがないというのもふつうに存在する」 のは事実だと思うが、 「まともに管理している」ということを通信相手に伝える努力は すべきではないだろうか? 通信はお互いの協力があって初めて成り立つものであるから、 spammer と区別してもらうための努力もせずに、 spammer と一緒にするなと叫んでいるだけでは解決にならない。 もちろん、spammer と区別してもらう方法が DNS逆引きの設定だけであると 主張するつもりはない。 送信側と受信側、双方にとって最も合理的な判別法を選択していくべきであろう。

もし、逆引きを設定することは、 送信側にとってコストがかかる (例えば「追加で月額1050円也を払う」) ので採用したくない、 とお考えのかたがいたら、 そもそもなぜ迷惑メールが蔓延しているのか考えてみて頂きたい。

つまり、迷惑メールは際限無く増大しているのに、 なぜダイレクトメール (つまり宣伝目的で送られる郵便物) はそれほど増えないのか。 言うまでもなく郵便物は送信するのにコストがかかるからだ。 送信側と受信側のコスト負担がアンバランスだったことこそが、 迷惑メールがここまで社会問題化した最大の理由である。 送信側に応分の負担を求めること、 すなわち送信側に身の潔白 (つまり、まともに管理しているということ) を証明する コストを支払わせることこそが根本的な解決策となるのだと思う。

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

stone 2.3c のバグ (select 版の make 方法)

stone 2.3c epoll 版 (つまり -DUSE_EPOLL をつけてコンパイル) において、 proxy 機能にバグを見つけた。 stone を http proxy として使用して、 同じセッション内で異なるホスト (IP アドレスが異なる) へ アクセスすると接続できずにタイムアウトする。 ブラウザで「再読み込み」操作を行なえば、 ブラウザが新規セッションを張るので接続できるようになる。

stone.c 2.2.4.7 にて修正済み。 同一セッションにて異なるホストへ接続しようとしたとき、 stone は旧ソケットをクローズして新しいソケットをオープンするのだが、 このとき EPOLL_CTL_ADD するのを忘れていた。 select 版では新ソケットで FD_SET するので問題はない。

なお、epoll 版は Linux カーネルおよび glibc にて epoll がサポートされていることが必要。 現在使われている Linux ディストリビューションの大半 (?) は、 いまだ EPOLLONESHOT をサポートしていないので、 epoll 版を make することはできず、 次のようなエラーになる:

% make linux-ssl
make TARGET=linux ssl_stone LIBS="-ldl"
make[1]: Entering directory `stone'
make FLAGS="-DUSE_POP -DUSE_SSL -I/usr/local/ssl/include " LIBS="-ldl -L/usr/local/ssl/lib -lssl -lcrypto" linux
make[2]: Entering directory `stone'
make FLAGS="-Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL -DUSE_POP -DUSE_SSL -I/usr/local/ssl/include " LIBS="-lpthread -ldl -L/usr/local/ssl/lib -lssl -lcrypto" stone
make[3]: Entering directory `stone'
cc  -Wall -DCPP='"/usr/bin/cpp -traditional"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL -DUSE_POP -DUSE_SSL -I/usr/local/ssl/include  -o stone stone.c -lpthread -ldl -L/usr/local/ssl/lib -lssl -lcrypto
stone.c: In function `healthCheck':
stone.c:1687: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c:1687: error: (Each undeclared identifier is reported only once
stone.c:1687: error: for each function it appears in.)
stone.c: In function `asyncConn':
stone.c:3517: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c: In function `getident':
stone.c:3703: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c: In function `proxyCommon':
stone.c:5054: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c: In function `proto2fdset':
stone.c:5699: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c: In function `doAcceptConnect':
stone.c:6277: error: `EPOLLONESHOT' undeclared (first use in this function)
stone.c: In function `asyncClose':
stone.c:6350: error: `EPOLLONESHOT' undeclared (first use in this function)
make[3]: *** [stone] Error 1
make[3]: Leaving directory `stone'
make[2]: *** [linux] Error 2
make[2]: Leaving directory `stone'
make[1]: *** [ssl_stone] Error 2
make[1]: Leaving directory `stone'
make: *** [linux-ssl] Error 2

このようなエラーが出る場合は、 Makefile にて 「-DUSE_EPOLL」 を削除して make することにより、 select 版を作成できる。

% diff -u Makefile.org Makefile
--- Makefile.org        Tue Nov 28 13:52:54 2006
+++ Makefile        Tue Nov 28 13:52:09 2006
@@ -95,7 +95,7 @@
         $(MAKE) FLAGS="-DNT_SERVICE $(FLAGS) $(POP_FLAGS) $(SSL_FLAGS)" LIBS="$(LIBS) $(SSL_LIBS) $(SVC_LIBS) -ladvapi32 -luser32 -lgdi32 -lshell32 -lkernel32" $(TARGET)
 
 linux:
-        $(MAKE) FLAGS="-Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
+        $(MAKE) FLAGS="-Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
 
 linux-pop:
         $(MAKE) TARGET=linux pop_stone

このようなパッチを Makefile にあてた後、make すればよい。

% make linux-ssl
make TARGET=linux ssl_stone LIBS="-ldl"
make[1]: Entering directory `stone'
make FLAGS="-DUSE_POP -DUSE_SSL -I/usr/local/ssl/include " LIBS="-ldl -L/usr/local/ssl/lib -lssl -lcrypto" linux
make[2]: Entering directory `stone'
make FLAGS="-Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_POP -DUSE_SSL -I/usr/local/ssl/include " LIBS="-lpthread -ldl -L/usr/local/ssl/lib -lssl -lcrypto" stone
make[3]: Entering directory `stone'
cc  -Wall -DCPP='"/usr/bin/cpp -traditional"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_POP -DUSE_SSL -I/usr/local/ssl/include  -o stone stone.c -lpthread -ldl -L/usr/local/ssl/lib -lssl -lcrypto
make[3]: Leaving directory `stone'
make[2]: Leaving directory `stone'
make[1]: Leaving directory `stone'
Filed under: stone 開発日記 — hiroaki_sengoku @ 06:37
2006年11月27日

作ること と 売ること (未踏集会 ESPer2006 秋の陣) hatena_b

先週末、 未踏ソフトウェア創造事業の集会 ESPer2006 秋の陣 でプレゼンしました。 KLab(株)の黎明期に、いかに未踏事業の支援が助けになったか、 そして 5 人でスタートした KLab が 160人を超える会社に発展した過程を紹介しつつ、 私がそこから学んだことなどをお話ししました。 これからベンチャーを立ち上げよう、 そして発展させようとしている技術者の方々の参考になれば幸いです。

使ったスライドを公開します。 25分の持ち時間なので、スライド 21ページくらいは話せるかなと思っていたら、 調子に乗って喋りすぎ、大幅に時間を超過してしまいました。 ゴメンナサイ。 後半かなり早口になってしまい、一番言いたかった 「技術者の地位を向上させるには、 技術者以外の視点にも立ってみて、 技術者自身が視野を広げていかなければならない」 という主旨が、果たしてどこまで伝えられたかちょっと不安に思っています。

私のプレゼン手法は OHP (OverHead Projector) 時代に身につけたもので 1ページあたり 1分以上話すのが普通なのでした。 もう少し内容を絞り込めばよかったと反省しております (これでも、イイタイコトを大幅に削って 流れを単純化したつもりだったのですが... ^^;)。 でも、私の 21ページというのはかなり少ない方で、 多い人だと 100ページを超えていましたね (25分間なのに!)。 OHP 時代は、1ページ数秒しか見せないなんてことはありえなかったわけで、 いろいろなプレゼン手法があるものだと、とても参考になりました。

また懇親会や二次会 (残念ながら三次会は終電が気になってしまって参加できませんでしたが) で、沢山の方々とお話しすることができて とても有意義な時間をすごすことができました。 このような場を準備運営してくださった事務局の方々に感謝します。 ありがとうございました & お疲れ様でした。

スライドを PDF 化したものと、 FlashPaper を使って Flash 化したもの ↓ を公開します。

More...
Filed under: 元CTO の日記,技術と経営 — hiroaki_sengoku @ 08:48
2006年11月14日

未踏ソフトウェア創造事業の集会 ESPer2006 秋の陣 でプレゼンします

ご存じの方も多いと思いますが、 情報処理推進機構(IPA)が実施している個人支援事業に、 未踏ソフトウェア創造事業 (Exploratory Software Project) があります。 私自身、第一回め(2000年)に 「携帯電話用アプレット開発ツール」を採択いただき、 超優秀な学生さん二人と共に、 Java と文法レベルで互換のコンパイラ&VM (Virtual Machine) を開発しました。 テーマ概要から引用:

携帯電話上で走らせるJavaプログラムは, サイズが小さいことが第一の条件である. しかし,Javaは元々 PCなど比較的リソース制限が緩いコンピュータ上で走らせることを想定していたため, 小さいプログラムを書くには特殊なテクニックが必要となる. つまり,一般のプログラマには敷居が高すぎ, このままでは携帯電話のJavaコンテンツの発展を阻害する恐れがある.

そこで,携帯電話上で動作するプログラムを開発するための コンパイラなどの開発を提案する. このコンパイラが生成するプログラムは, 同機能を持つ携帯電話上の通常のJavaプログラムの 1/10以下のサイズ (目標値) であり, 現状の携帯電話網においても無理なくダウンロードすることができる.

携帯電話がどんどん高機能化し、 当時のPC よりよほどパワフルになってしまった現在から見ると、 遠い昔の話のようです(^^;)。 採択・支援いただいた PM (プロジェクトマネージャ) の指摘:

現地ヒアリングのときに聞いた携帯電話上のJavaリソース制限の 技術的あるいは政策的な厳しさ (例えば,一つのiアプリのコードは10Kバイト以下に抑えないといけない) は, マウスイヤーの今日どれくらいの期間意味をもつのだろうか. このプロジェクトはこういったことに若干振り回されてしまったような印象もあるが, 得られたKamiyaシリーズの技術自体は, 携帯電話のモデルチェンジ周期より長い生命をもつであろう. 特にダイナミックリンクが要らないという見切りは 典型的なアプリケーションに対してある程度の汎用性があると思われる.

は、実に的確でした。 携帯電話があっという間に高機能化してしまって 成果物の製品化は実現しなかったのですが、 KLab株式会社 (当時の社名は、株式会社ケイ・ラボラトリー) の 創業期に技術会社としての基礎をどう築くか模索していた私にとって、 この開発プロジェクトは大きな意味を持ちました。

そんなわけで、KLab株式会社の黎明期に、 いかに未踏事業の支援が助けになったか、 機会あれば発表したいと思っていたところ、 「未踏」集会 ESPer2006 秋の陣 で 何かプレゼンしないか、とお誘い頂き、 一も二もなく引き受けました。

ESPer2006 秋の陣

日時 2006年11月25日(土)
   13:00開場、13:20開始、18:00頃まで
   その後 懇親会を行いますので、是非ご参加ください
会場 神戸国際会議場 国際会議室

定員 最大240名まで

プログラム・企画と登壇者
    IPAより、事業の紹介等
    PM談議(仮称)
    仙石 浩明氏
    尾藤 正人氏
    平林 幹雄氏
    森 悠紀氏
    油井 誠氏

2000年8月に 5人でスタートしたベンチャーが、 160人を超える会社 (2006年11月現在) に成長した、 その発展秘話(?) を、 未踏事業に採択された一技術者 (つまり私) の視点からお話ししたいと思います。 経営者の視点で書かれた会社発展物語はあまたあれど、 技術者の視点というのは、そんなに多くはないと思います (ってまだどんな話にまとめようか、まとめきっていませんが... 25日までに間に合うかな ^^;)。 自身の技術を起業につなげたい、 それも、十数人の規模ではなく、 100人あるいはそれを超える規模を目指したい、 と思っている方々の参考になれば幸いです。

会場にはまだ余裕があるようですから、 興味あるかたは 予約申込み の上、 ご参集下さい。 懇親会もあるようですから、読者の皆様とお会いするのを楽しみにしております。

Filed under: 技術と経営 — hiroaki_sengoku @ 07:20
2006年11月11日

ADSLモデム Aterm WD735GV の WAN 側 IP アドレスを取得する方法

ケータイのキャリアを WILLCOM に変えたついでに、 自宅のバックアップ回線も WILLCOM に変更した (メインの回線は Bフレッツ)。 マルチパック割引につられた (^^;) ため。 ケータイとの抱き合わせ割引でなくても フレッツより安い らしい。 普段はほとんど使わない (死活確認パケットを飛ばすだけ) バックアップ回線なので、 1円でも安いほうが助かる。

そして MNP が巷を賑わす昨今、なぜ MNP 対象外の WILLCOM かというと、 W-ZERO3[es] が 使いたかったから (^.^) であるが、 eメールの送受信と PHSへの通話が全て 定額料金に含まれるというのもうれしい。 おかげで一ヶ月の電話代が半額になった。

ウィルコムADSLサービスは、 アッカ・ネットワークスの ADSL サービスを使っていて、 アッカでは市販モデムを利用できるサービスは行なっていないという。 つまりアッカが(ウィルコムユーザ向けに) レンタルするモデムを使えということ。 それまで使っていたモデム (買い取り) が無駄になってしまうし、 このレンタルモデムはモデムといいつつルータ機能まで含んでいるので、 バックアップ回線として使いにくい機器だと困るなぁと躊躇したのも事実だが、 月額費用が 2000円ほど安くなる (モデムが買い取り可能ならもっと安くなるのに...) という誘惑には勝てず、乗り換えてしまった。

私が何のためにバックアップ回線を契約しているかというと、 メイン回線が落ちたときにも、 外部から自宅のサーバへログイン可能とするためである。 だから IP アドレスが固定割当てでないのであればダイナミックDNS などの 仕掛けを併用して、 外部からアクセスする際の IP アドレスが常に調べられなければならない。 反面、内部から外部へのアクセス (つまりいわゆる一般的なインターネットの利用法) には全くといっていいほど使用しないわけで、 普通の ADSLサービスの利用方法とは大きく異なる。 レンタルルータ込みのサービスだと、 提供側が想定する「標準的な」利用方法を「押し付けられる」リスクがあるわけで、 なるべくなら利用したくない、という思いがあった。 まあ、後述するようにそれは杞憂だったのであるが。

届いたレンタルモデム WARPSTAR Aterm WD735GV をいろいろいじっていると、 PPPoE パケットをスルーして、 ルータ機能を使わないことも可能であることがわかり一安心。 PPPoE の認証のとき必要となるログインID とパスワードも、 レンタルモデムから無事読み出すことができた。 というわけでしばらく (数日ほど) モデムとしてのみ使っていたのであるが、 レンタルモデムにルータ機能がついているのなら それを使いたくなるのが技術者のサガだろう。

ただし、外部からログイン可能、という条件だけは譲れない。 バックアップ回線としての唯一の存在意義だからだ。 それまで使っていたルータは、ダイナミックDNS サービスに対応していたので、 gcd.iobb.net を DNS で引けばルータの WAN 側の IP アドレスを 取得することができた。 今回のレンタルモデムには、少なくともマニュアルには、 WAN 側の IP アドレスを取得する方法は書かれていないし、 「クイック設定Web」インタフェースを見ても WAN 側の IP アドレスを取得できるページは見当たらない (「通信情報ログ」以外は)。

もちろん、このレンタルモデムを経由して外部にアクセスすれば、 WAN 側の IP アドレスが送信元アドレスとなるパケットが飛ぶので、 それをもとにダイナミックDNS に登録してくれるサービスがあれば いいのであるが、 そういったダイナミックDNS サービスを見つけるより、 WAN 側の IP アドレスを取得する方法を見つけるほうが早かった。

さてどうしたものか、と思って ダイナミックDNSサービス iobb.net のプロトコルを調べるためにダンプしておいた Aterm WD735GV との通信内容を眺めていると、 Aterm WD735GV が送信したマルチキャスト パケットを見つけた:

17:13:16.645897 IP (tos 0x0, ttl   4, id 2784, offset 0, flags [DF], length: 298) 192.168.1.251.1900 > 239.255.255.250.1900: [udp sum ok] UDP, length: 270
        0x0000:  4500 012a 0ae0 4000 0411 b845 c0a8 01fb  E..*..@....E....
        0x0010:  efff fffa 076c 076c 0116 484b 4e4f 5449  .....l.l..HKNOTI
        0x0020:  4659 202a 2048 5454 502f 312e 310d 0a48  FY.*.HTTP/1.1..H
        0x0030:  4f53 543a 2032 3339 2e32 3535 2e32 3535  OST:.239.255.255
        0x0040:  2e32 3530 3a31 3930 300d 0a4e 543a 2075  .250:1900..NT:.u
        0x0050:  706e 703a 726f 6f74 6465 7669 6365 0d0a  pnp:rootdevice..
        0x0060:  4e54 533a 2073 7364 703a 616c 6976 650d  NTS:.ssdp:alive.
        0x0070:  0a55 534e 3a20 7575 6964 3aXX XXXX XXXX  .USN:.uuid:XXXXX
        0x0080:  XXXX XXXX XXXX XXXX XXXX XXXX 3a3a 7570  XXXXXXXXXXXX::up
        0x0090:  6e70 3a72 6f6f 7464 6576 6963 650d 0a43  np:rootdevice..C
        0x00a0:  4143 4845 2d43 4f4e 5452 4f4c 3a20 6d61  ACHE-CONTROL:.ma
        0x00b0:  782d 6167 653d 3132 300d 0a4c 6f63 6174  x-age=120..Locat
        0x00c0:  696f 6e3a 2068 7474 703a 2f2f 3139 322e  ion:.http://192.
        0x00d0:  3136 382e 312e 3235 313a 3238 3639 2f75  168.1.251:2869/u
        0x00e0:  706e 702f 726f 6f74 6465 7669 6365 2e78  pnp/rootdevice.x
        0x00f0:  6d6c 0d0a 5345 5256 4552 3a20 4947 442d  ml..SERVER:.IGD-
        0x0100:  4854 5450 2f31 2e31 2055 506e 502f 312e  HTTP/1.1.UPnP/1.
        0x0110:  3020 5550 6e50 2d44 6576 6963 652d 486f  0.UPnP-Device-Ho
        0x0120:  7374 2f31 2e30 0d0a 0d0a                 st/1.0....

こんな、家庭用の安物ルータ (しかもモデムと称している) でさえ UPnP (Universal Plug and Play) をサポートしているような時代になったとは... シリアルケーブルでつないだ端末でルータ設定をしていたころが懐かしい... という感慨はサテオキ、 まずは 読みやすいように整形してみる (Universally Unique Identifier の部分は伏せ字)。

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
NT: upnp:rootdevice
NTS: ssdp:alive
USN: uuid:XXXXXXXXXXXXXXXXX::upnp:rootdevice
CACHE-CONTROL: max-age=120
Location: http://192.168.1.251:2869/upnp/rootdevice.xml
SERVER: IGD-HTTP/1.1 UPnP/1.0 UPnP-Device-Host/1.0

機器の詳細は、http://192.168.1.251:2869/upnp/rootdevice.xml を見よ、 と言っているのでアクセスしてみると、 レスポンス中に次のような記載がある:

<service>
<serviceType>urn:schemas-upnp-org:service:WANPPPConnection:1</serviceType>
<serviceId>urn:upnp-org:serviceId:WANPPPConn1</serviceId>
<controlURL>/upnp/control/WANPPPConn1</controlURL>
<eventSubURL>/upnp/event/WANPPPConn1</eventSubURL>
<SCPDURL>/upnp/WANPPPConn1.xml</SCPDURL>
</service>

実は UPnP を使うのはこれが初めてだったりする (^^;) のだが、 WANPPPConn1 という名称からしておそらくこれが「接続先1」を意味するのだろう。 サービスの詳細は、SCPDURL に書いてある URL を見ればよいのだろうと、 http://192.168.1.251:2869/upnp/WANPPPConn1.xml にアクセスしてみると、 GetExternalIPAddress というメソッドがあることが分かる:

 <action>
  <name>GetExternalIPAddress</name>
  <argumentList>
   <argument>
    <name>NewExternalIPAddress</name>
    <direction>out</direction>
    <relatedStateVariable>ExternalIPAddress</relatedStateVariable>
   </argument>
  </argumentList>
 </action>

試しに呼び出してみる:

#!/usr/bin/perl
use SOAP::Lite;
my $soap = SOAP::Lite
    ->ns('urn:schemas-upnp-org:service:WANPPPConnection:1')
    ->proxy('http://192.168.1.251:2869/upnp/control/WANPPPConn1');
my $som = $soap->GetExternalIPAddress();
my $ip = $som->valueof('//GetExternalIPAddressResponse/NewExternalIPAddress');
print "$ip\n";

するとあっさり Aterm WD735GV の WAN 側 IP アドレスを取得できてしまった。

use SOAP::Lite;」の部分を、 「use SOAP::Lite +trace => debug;」に変更すると、 http リクエストとレスポンスの内容を見ることができる。 これを真似して http リクエストを手で打ってみる (やはり、どんなプロトコルでも一度は手で打ってみないと... ^^;) と、こんな感じ:

% telnet 192.168.1.251 2869
Trying 192.168.1.251...
Connected to 192.168.1.251.
Escape character is '^]'.
POST /upnp/control/WANPPPConn1 HTTP/1.1
Host: 192.168.1.251:2869
Accept: text/xml
Accept: multipart/*
Accept: application/soap
Content-Length: 503
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:schemas-upnp-org:service:WANPPPConnection:1#GetExternalIPAddress"

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
 xmlns:namesp1="urn:schemas-upnp-org:service:WANPPPConnection:1"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
 <namesp1:GetExternalIPAddress xsi:nil="true" />
</soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
CONTENT-LENGTH: 423
CONTENT-TYPE: text/xml; charset="utf-8"
SERVER: IGD-HTTP/1.1 UPnP/1.0 UPnP-Device-Host/1.0
EXT:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
                <m:GetExternalIPAddressResponse xmlns:m="urn:schemas-upnp-org:service:WANPPPConnection:1">
                        <NewExternalIPAddress>222.147.27.89</NewExternalIPAddress>
                </m:GetExternalIPAddressResponse>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

たかがルータの IP アドレスを取得するために、 これだけ沢山のデータをやり取りするのもどうかと思うが...

Filed under: システム構築・運用,ハードウェアの認識と制御 — hiroaki_sengoku @ 08:23
2006年11月4日

ダイナミックDNSサービス iobb.net

ダイナミックDNS というと RFC 2136 で定められている 「Dynamic Updates in the Domain Name System (DNS UPDATE)」がまず思い浮かぶ。 自宅のバックアップ回線 (ADSL) 用として使っている無線LANルータ WN-G54/R2 は、 「アイ・オーが提供する無料ダイナミックDNSサービス iobb.net 対応」と 書いてあるので、 てっきり DNS UPDATE 方式なのだと思っていた。

ADSL 回線を、NTT東日本の フレッツ・ADSL から、 ウィルコムADSLサービス に切り替える (バックアップ回線なのでコスト最優先) にあたって、 以前使っていた ADSL モデムはアッカ回線に適合しないようなので、 素直にウィルコムのレンタルモデムを使うことにした。 ところが、このレンタルモデム「Aterm WD735GV」には、 ルータ機能もついている。

ウィルコム曰く、 「ウィルコムADSLサービスのレンタルモデムは、 あらかじめお客さまのログインIDとパスワード等が設定されています」、 ということだそうで、 ログインIDとパスワードは教えてもらえない。 教えてもらわないことにはレンタルモデム以外のルータを使えないのだが、 サポートに電話して教えてもらうのも面倒だったので、 このレンタルモデムの「クイック設定Web」の「接続先設定」画面にて、 ログインIDとパスワードを変更せずに「設定」ボタンを押してみたら、 パスワードが平文で POST されたので、 リクエストボディを観察するだけでパスワードを知ることができた。

レンタルモデム WD735GV の「PPPoEブリッジ」機能を使えば、 WD735GV を単なる ADSL モデムとして使うこともできるし、 実際まずは ADSL モデムだけ入れ替えて ルータは元の WN-G54/R2 のまま使っているのだが、 ADSL モデムにルータ機能があるのなら それを使いたくなるのが人情というものであろう。 機器の数を減らせばそれだけ故障する確率も減らすことができる。

しかし、PPPoE 接続を WD735GV に行なわせると、 WN-G54/R2 のダイナミックDNS 機能が利用できなくなってしまう。 iobb.net 以外のダイナミックDNSサービスに乗り換えれば済む話なのであるが、 せっかく iobb.net に対応した機器を使っているのに iobb.net を使わないのは モッタイナイと思ってしまったので、 とりあえず iobb.net に対して RFC 2136 で定められている DNS UPDATE パケットを 飛ばしてみた... が何の反応もない。

無闇矢鱈にテストパケットを飛ばしていては怒られそう (^^;) なので、 ADSLモデム (つまり Aterm WD735GV) と無線LANルータ (WN-G54/R2) との間に Linux ブリッジをはさんで iobb.net への通信 (つまり PPPoE セッション) を tcpdump でダンプしてみた。 すると...

# brctl addbr br0
# brctl addif br0 eth0
# brctl addif br0 eth2
# ifconfig br0 up
# ifconfig eth0 up
# ifconfig eth2 up
# tcpdump -i br0 -s 1500 -vvv -X
tcpdump: WARNING: br0: no IPv4 address assigned
tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 1500 bytes
        ...
17:13:20.954864 PPPoE  [ses 0x1e10] IP (tos 0x0, ttl 150, id 2, offset 0, flags [none], length: 228) 60.38.65.147.31602 > XXX.XXX.XXX.XXX.http: . [tcp sum ok] 1:189(188) ack 1 win 5656
        0x0000:  1100 1e10 00e6 0021 4500 00e4 0002 0000  .......!E.......
        0x0010:  9606 b91e 3c26 4193 XXXX XXXX 7b72 0050  ....<&A.XXXX{r.P
        0x0020:  0361 fb73 903f 4510 5010 1618 0ce3 0000  .a.s.?E.P.......
        0x0030:  4745 5420 2f63 6769 2d62 696e 2fXX XXXX  GET./cgi-bin/XXX
        0x0040:  XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX  XXXXXXXXXXXXXXXX
        0x0050:  XXXX XXXX 2e63 6769 3f68 6f73 743d 6763  XXXX.cgi?host=gc
        0x0060:  642e 696f 6262 2e6e 6574 266d 7969 703d  d.iobb.net&myip=
        0x0070:  3630 2e33 382e 3635 2e31 3437 2048 5454  60.38.65.147.HTT
        0x0080:  502f 312e 300d 0a48 6f73 743a 20XX XXXX  P/1.0..Host:.XXX
        0x0090:  XXXX XX2e 696f 6262 2e6e 6574 0d0a 5573  XXX.iobb.net..Us
        0x00a0:  6572 2d41 6765 6e74 3a20 574e 4735 3452  er-Agent:.WNG54R
        0x00b0:  322f 312e 320d 0a41 7574 686f 7269 7a61  2/1.2..Authoriza
        0x00c0:  7469 6f6e 3a20 4261 7369 6320 XXXX XXXX  tion:.Basic.XXXX
        0x00d0:  XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX  XXXXXXXXXXXXXXXX
        0x00e0:  XXXX XXXX XXXX XXXX 0d0a 0d0a            XXXXXXXX....

何のことはない、IP アドレスを登録するための Web ページを アクセスしているだけだった。 登録するホスト名と IP アドレスを、 それぞれ「host=」「myip=」パラメータで CGI へ渡し、 認証は Basic 認証を使っている (上記ダンプ中、URL の一部および認証文字列は伏せ字にした)。

したがって curl コマンドなどを使って、 ダイナミックDNSサービスに ホスト名と IP アドレスを登録することができる。

curl --interface eth0:1 --user-agent 'WNG54R2/1.2' --user 'XXXXXXXXXXXX:XXXXXXXX' 'http://XXXXXX.iobb.net/cgi-bin/XXXXXXXXXXXXXXXXXXXXXXX.cgi?host=gcd.iobb.net&myip=60.38.65.147'
Filed under: システム構築・運用 — hiroaki_sengoku @ 07:25
2006年11月1日

TheBus Monthly Pass

休暇を取ってハワイ (オアフ島) へ行ってきた。

オアフ島の主要公共交通機関である路線バス 「TheBus」についてメモ。

旅行者が TheBus を利用するときに便利なのが、

  • 4 日間 乗り放題の 4日間パス (4 - Day Pass) $20.00 と、
  • 特定の月 乗り放題のマンスリー・パス (Monthly Pass) $40.00

ちなみに一回の乗車は $2.00 なので、観光などでオアフ島に来ていて、 バスに一日何度も乗る、という場合はいずれかの Pass を買うのがお勧め。

単純に考えると、9日間以上滞在するなら、4 - Day Pass よりは、 Monthly Pass のほうが安くつきそうであるが、 注意すべき点が二つほどある。

Monthly Pass は月初から月末までの期間固定

「Monthly」だから一ヶ月 乗り放題、と思ってはいけない。 旅行期間が月をまたいでいると、 一ヶ月以内の旅行 (例えば 10/25 ~ 11/5) であっても、 二ヶ月分の Monthly Pass (10月分と 11月分) が必要になってしまう。 私は昨年、Halloween を見ようと 10月末をはさんだ旅行計画を立ててしまい、 4 - Day Pass を二枚買って、しかも Pass が使えない日ができてしまった。

月末が近いと来月分の Monthly Pass しか売っていない

昨年の失敗で学習して、今年の旅行は 10月におさまる日程にしたのだが、 10/20 に Ala Moana Center の Satellite City Hall で 10月分の Monthly Pass を買おうとしたら、 11月分の Monthly Pass しかないと言われてしまった。 Monthly Pass は、Satellite City Hall の他、 7-Eleven や Star Market などの店でも買えるが、 いずれも下旬に入ると来月分の Pass しか購入できない。 ただし一ヶ所だけ例外があって、 TheBus Pass Office でなら月末であっても当月の Monthly Pass を購入できる。 もちろん、月末残り 8 日を切れば 4 - Day Pass を選ぶべきなので、 TheBus Pass Office へ行ってでも Monthly Pass を買うべきなのは、 中旬以降の数日間に限られる。

TheBus Pass Office へは、Route A CityExpress! のバスが便利。 Ala Moana Center からなら、Keeaumoku St. を Kapiolani Blvd まで歩いて Kapiolani Blvd 沿いにあるバス停 (Kapiolani Blvd / Keeaumoku) から Route A CityExpress! のバスに乗ればよい。 時刻表を見ると、 15分に一本くらいの割合で運行している。 TheBus Pass Office がある Kalihi Transit Center (路線図中の E) へは 30 分ほどで着く。

Kalihi Transit Center でバスを降りると、 目の前に「BUS PASS / LOST AND FOUND」と書かれた建物:

TheBus Pass Office

があるので、迷いようがない。今月分の Monthly Pass が欲しいというと、 「月末までしか使えないけど値段は $40.00 のままだぞ」と念押しをされたが、 無事 10月分の Monthly Pass を購入することができた。

Filed under: Hawaii — hiroaki_sengoku @ 06:41
Older Posts »