12/30/2004

侍、堀江社長を切る

さっきテレビで。

でも、インリンのマラカス侍のほうがおもしろかったですから!残念!

12/29/2004

20歳の竜王誕生

第17期竜王・渡辺 明

森内を4-3で破っての奪取。羽生世代の終わりの始まりなんだろうか。ちなみに僕も羽生世代(笑)。

12/26/2004

iPodか、それとも901iを買うのか。

既報のとおり、ドコモの901iシリーズならiTunesのAACが聞けるらしい。加えて、最近は出先で写真を撮ってFlickrに載せるってのも私的流行の兆し。iPodも、まともなデジカメも、カメラつきケータイも持ってない状況では、901iがどうにも気になる。うーん、Premini買ってまだ数ヶ月だしなぁ。

Ocean's 11

オーシャンズ11 特別版
ブラッド・ピット

ワーナー・ホーム・ビデオ
2002-08-09
売り上げランキング 7,039
おすすめ平均 

Amazonで詳しく見る
   by G-Tools

結構面白かった。ただ、ジュリアロバーツはやっぱり好みじゃないなあ。

Audioscrobbler サイドバー

AudioscrobblerのRSSをサイドに表示するようにしてみた。

<%@Page Language="C#"%>
<%@Import Namespace="System.Net"%>
<%@Import Namespace="System.IO"%>
<%@Import Namespace="System.Xml.XPath"%>
<%@Import Namespace="System.Xml"%>
<%
Response.Clear();
Response.ContentType = "text/html";

WebClient wc = new WebClient();
Stream str = wc.OpenRead(
"http://ws.audioscrobbler.com/rdf/history/fumiakiy");
XPathDocument doc = new XPathDocument(str);
str.Close();
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr =
nav.Compile("//rss:item/rss:link");
XmlNamespaceManager nsm =
new XmlNamespaceManager(nav.NameTable);
nsm.AddNamespace("rss", "http://purl.org/rss/1.0/");
expr.SetContext(nsm);
XPathNodeIterator links = nav.Select(expr);
Response.Write("document.write('");
Response.Write("<ul>");
while (links.MoveNext()) {
XPathNavigator cur = links.Current;
string link = cur.Value;
cur.MoveToNext();
string description = cur.Value;
Response.Write("<li><a href=\"" +
link + "\">" + description + "</a></li>");
}
Response.Write("</ul>");
Response.Write("')");
Response.End();
%>

んでもってこれを
<script type="text/javascript" src="http://your_url/thiscode.aspx"/>
みたいに貼る。以上。

12/23/2004

テンプレ変更

FireFoxでうまく見られなかったのでテンプレ変更。

12/22/2004

YahooとGoogle、あとAmazon

YahooとGoogleは何が違うのか

なるほど。で、Amazonはというと、どっちかといえばYahoo!に近いんだろうなぁ。下のエントリ見てもわかるとおり。自分自身の努力によってコンテンツを生み出しているという点で、やっぱりYahoo!に近いだろうと思う。

Yahoo!にもエバンジェリストがいるってのは興味深い。だってGoogleにはテクノロジを語る人間はいないから。Googleの中の人たちは、作ることの方を重視していて、それを広める力を自社内に持つ必要はないと思っていると思う。Yahoo!やAmazonにはエバンジェリストがいる。これもやっぱり人の力を借りるかどうかってことなんだろうか。

サンタが街にやってくる

今日、僕は知った。サンタはほんとにいるってことを。

一人じゃない、たくさんのサンタが千葉県の市川市にいた。彼ら彼女らは誰にも知られることなく、ただもくもくと、子供たちにプレゼントを届けるために働いていた。トナカイはいない、魔法のずた袋もないけど、やっぱりサンタたちは子供たちにプレゼントを届けるために、休憩も取らずにがんばっていた。

彼ら彼女らにも、ギフトの受け取り人とおなじくらいの幸あらんことを。

Happy Holidays for every single Amazon Employees at the Fulfilment Center!

12/21/2004

JScriptの「なぞのエラー」

宮川さんのところから。

JScript にしたいんだけど 謎のエラーでMyFriendlyName がとれないのでパス

なんだろ、と思ってみてみたら。わーこれ昔はまったっけ。

new ActiveXObjectではなく、WScript.CreateObjectを使えば解決だ!

msg = WScript.CreateObject('Messenger.UIAutomation.1');
WScript.Echo(msg.MyFriendlyName);

スクリプトエンジンのオブジェクト作成メソッド(JScriptならnew ActiveXObject、VBScriptだとCreateObject)を使うと、スレッドモデルの設定からDCOMからとにかくあらゆる問題が出るんで、ランタイムのオブジェクト作成メソッド(WSHならWScript.CreateObject、ASPならServer.CreateObject)を使わないとダメなんですよね。

なんだかなつかしいけど、いまさらながらCOMの話をほうぼうで聞くのはなんでだろうなぁ。以外にCOMの波がキテるのかも?

12/20/2004

ターミナルは観てはいけない

ターミナルを観た。

終わってから出口で、後ろにいた女の子が、開口一番。「今までで一番つまんなかった!」

はげどー。っつーかつまんねー。内容がねー。

宮川さん台北で

YAPC::Taipei 2005

宮川さん、今度はTaipei Perl Monger: YAPCTaiepi2005でしゃべるそうな。すごいなー。

ところでTaipei.pmのページ、

  • 活動時間:
  • 地點:
  • 講者:
  • 預算:
  • 贊助:

この辺まではなるほど。で、

  • 工作人員:


うー、激しく反応してしまう。

12/18/2004

プライド?それって食べられるの?

セブンアンドワイ誕生

さ、大変だ、と。

RemoteTunes 完成

RemoteTunes、できた。C#.NET+DCOMでiTunesをリモート操作します。
remotetunes

コードの肝は以下のライブラリで、GUI部分は単にこれらを呼んでいるだけです。これを作ると何がいいって、デバッグしやすいってだけですかね。tlbimpしたDLLを使ってもいいんですけど。


using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

namespace ITunesLib {
[ComImport()]
[Guid("9FAB0E27-70D7-4E3A-9965-B0C8B8869BB6")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IITObject {
[DispId(0x60020001)]
string Name { get; set; }
}

[ComImport()]
[Guid("4CB0915D-1E54-4727-BAF3-CE6CC9A225A1")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IITTrack : IITObject {
[DispId(0x60030005)]
string Album { get; set; }
[DispId(0x60030007)]
string Artist { get; set; }
}

[ComImport()]
[Guid("9DD6680B-3EDC-40db-A771-E6FE4832E34A")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IITunes {
[DispId(0x60020000)]
void BackTrack();
[DispId(0x60020002)]
void NextTrack();
[DispId(0x60020003)]
void Pause();
[DispId(0x60020004)]
void Play();
[DispId(0x60020008)]
void Resume();
[DispId(0x6002000a)]
void Stop();
[DispId(0x60020037)]
IITTrack CurrentTrack {
get;
}
}

[ComImport()]
[Guid("DC0C2640-1415-4644-875C-6F4D769839BA")]
[ClassInterface(ClassInterfaceType.None)]
public class ITunesApp : IITunes {
#region IITunes メンバ

[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020000)]
extern void IITunes.BackTrack();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020002)]
extern void IITunes.NextTrack();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020003)]
extern void IITunes.Pause();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020004)]
extern void IITunes.Play();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020008)]
extern void IITunes.Resume();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x6002000a)]
extern void IITunes.Stop();
[DispId(0x60020037)]
extern IITTrack IITunes.CurrentTrack {
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020037)] get;
}

#endregion
}
}


でもって、クライアント側にiTunesをインスコするのはめんどくさいに決まってるので、iTunes.exeからTYPELIBリソースをエクスポートして、iTunesTypeLib.tlbとかいう名前でファイルを作ります。

クライアント側には.NET Framework 1.1を入れて、RemoteTunes.exeとiTunesTypeLib.tlbをコピーします。regtlb.exeあたりを使って、iTunesTypeLib.tlbをレジストリに登録しましょう。この作業は、iTunesをクライアント側にも入れているなら不要です。

さらに、次のようなレジストリエントリを作ります。「RemoteServerName」のところ、iTunesが入ってるマシンの名前(Windows名)を入れること。


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\AppID\{F98206B5-F052-4965-9FA0-85F61BC3C19D}]
@="iTunes"
"RemoteServerName"="HEY THIS IS WHERE YOUR ITUNES SERVER NAME SHOULD BE"

[HKEY_CLASSES_ROOT\AppID\iTunes.exe]
"AppID"="{F98206B5-F052-4965-9FA0-85F61BC3C19D}"

[HKEY_CLASSES_ROOT\CLSID\{DC0C2640-1415-4644-875C-6F4D769839BA}]
@="iTunes Class"
"AppID"="{F98206B5-F052-4965-9FA0-85F61BC3C19D}"

[HKEY_CLASSES_ROOT\CLSID\{DC0C2640-1415-4644-875C-6F4D769839BA}\ProgID]
@="iTunes.Application.1"

[HKEY_CLASSES_ROOT\CLSID\{DC0C2640-1415-4644-875C-6F4D769839BA}\TypeLib]
@="{9E93C96F-CF0D-43f6-8BA8-B807A3370712}"

[HKEY_CLASSES_ROOT\CLSID\{DC0C2640-1415-4644-875C-6F4D769839BA}\VersionIndependentProgID]
@="iTunes.Application"

[HKEY_CLASSES_ROOT\Interface\{9DD6680B-3EDC-40DB-A771-E6FE4832E34A}]
@="IiTunes"

[HKEY_CLASSES_ROOT\Interface\{9DD6680B-3EDC-40DB-A771-E6FE4832E34A}\ProxyStubClsid]
@="{00020424-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Interface\{9DD6680B-3EDC-40DB-A771-E6FE4832E34A}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Interface\{9DD6680B-3EDC-40DB-A771-E6FE4832E34A}\TypeLib]
@="{9E93C96F-CF0D-43F6-8BA8-B807A3370712}"
"Version"="1.2"


さてさてこれでインスコは終わりなんですが、昨今のWindowsはセキュリティが厳しいので、作業はまだあるんですな。まず、管理ツールでコンポーネント サービスを開いて、コンポーネント サービス-コンピュータ-マイ コンピュータ-DCOM の構成と展開すると、段ボール箱にボールが入ったアイコンがいっぱい出ますね。中に「iTunes」があるんで、右クリックでプロパティを開けます。で、「ID」タブで「対話ユーザー」を選択しましょう。これやらないと、GUIをもつDCOMサーバーは、たいていまともに動きません。

実はクライアント側でも「コンポーネント サービス」でサーバー名とか設定できるんですが、今回は上のレジストリ設定でやっちゃったので、なし。

それと、XP SP2とかでファイアウォールを使ってる場合は、サーバー側でTCP 135を開けないとDCOMは使えません。

さらに、サーバー側のWindowsで有効なWindowsユーザーと同じユーザー名パスワードのユーザーをクライアント側でも使って、RemoteTunes.exeを起動しないと、セキュリティではねられます。ドメインなら同じユーザーでいいけど、自宅でActive Directory、しないよなぁ。。

そういうわけで久々のDCOMプログラミングは意外にすんなりいったのでした。あー、強いていえば、iTunesにはCOMイベントも定義されているんだけど、うまく拾えませんでした。

12/16/2004

AirMac Expressとの戦い、我が家の場合

AirMac Express到着。さて我が家には802.11bがすでに入っているので、AirMac Extremeではない既存無線LANルータをベースステーションに、Expressを無線クライアントとして利用することに。

パイオニアは常に偉大であることをここでも実感。うちでもWEP 128+MACアドレスフィルタを使っているので、まずはこれらをOFFにした。

続いて、無線LANルータのEthernetポートとAirMac ExpressのRJ-45を接続してコンセントに差し込む。母艦となるWindowsデスクトップにはAirMac Express付属のユーティリティをインストール。AirMac Expressのランプが緑点灯するのを確認。2-3分はかかる。起動遅っ。

さて、早速困った。AirMac Expressの設定アシスタントで、「新しいExpressの設定」->(AirMac Expressを認識)->「既存のネットワークに接続」(拡張はしない)で先に進んでも、無線LANネットワークの名前が出てこない。

ここでいろいろ四苦八苦し、設定をいじってはリセットを繰り返したんだけど、結局はこういう手順でいけた。

まず、アシスタントは使わない。同時にインストールされる管理ユーティリティを利用する。AirMac Expressがリストに出てきたら、「設定」ボタン。

「AirMac」タブで、「ベースステーションの接続先」を「既存のワイヤレスネットワークに接続する」を選択し、ネットワーク名に使ってる無線LANのESSIDを指定。

「セキュリティ」ボタンでWEPの設定をする。

これで「更新」ボタン。すると、AirMac Expressを更新して、再起動する。

再起動が終わると、当然Ethernetではつながらなくなるわけなので、AirMac Expressのランプがオレンジ点灯になったあたりで一度コンセントから引っこ抜き、つながっていたRJ-45をはずして、再度コンセントへ。再度起動シーケンスが始まる。

で、ここでしばらく悩んだんだけど、どうやらAirMac Expressの起動はべらぼうに遅いらしい。オレンジ点灯(2分)、一瞬緑、オレンジ点滅(2分)、緑点灯(起動成功)となる。オレンジ点滅の時間が長いので、「また失敗か。。。」などと悲観してはいけない。しばらーく待ってみると接続できた。

そういうわけで、うちの構成は
マンションEthernet-有線-Aterm WB45RL
Aterm WB45RL-有線-デスクトップ(iTunes)
Aterm WB45RL-有線-会社用VPNハード-有線-会社ラップトップ
Aterm WB45RL-無線-その他いろんなラップトップ
Aterm WB45RL-無線-リビングのAirMac Express
ということになったとさ。

どうやら、AirMac Extremeをベースにしない限り、WDSはできない模様。妙な囲い込み戦略だな。まあうちなんか狭いからいいけど。

さて問題はリビングにはまともなスピーカーはないってことだ。どうしよ(笑)

12/14/2004

ブラックホール プロジェクト

Black hole projects

:D

あるあるあるあるあるあるあるあるあるあるあるあるあるある。

JRの指定席特急券はなぜ1度しか変更できないの?

JR東日本旅客営業規則 第248条

普通乗車券、急行券、特別車両券、寝台券、コンパートメント券又は座席指定券を所持する旅客は、旅行開始前又は使用開始前に、あらかじめ係員に申し出て、その承諾を受け、1回に限つて、当該乗車券類から同種類の他の乗車券類に変更(この変更を「乗車券類変更」という。)することができる。(強調は筆者)

なんで?乗る前だよ?なんで1回しか変更できなくてその後は払い戻し扱い(手数料がかかる)なの?これって著しく消費者に不利じゃないの?

12/13/2004

COM is fun!

iTunes COM for Windows SDK

ちょー久々のCOMプログラミング。目標は、リビングに常駐している奥さんのThinkpadにDCOMクライアントを入れ、隣の部屋にあるデスクトップのiTunesを操作し、そのiTunesからAirTunesで飛んでいる音楽をリビングのAirMac Expressで聴くという、まあAirTunesのリモコンみたいなものですね。ついでにリビングからデスクトップをリモートシャットダウンできるようにしよう。移動するの面倒だから。

いやぁ、COMってほんっとーに楽しいもんですね。

12/09/2004

元、株式会社ライブドアの執行役員である宮川達彦氏

KNN's Photolog

元、株式会社ライブドアの執行役員である宮川達彦氏というよりも「BlogHacks」の著者、「未来検索」、RSS-NEWSギャザリングの「bulknews」の開発者して有名な「みやーん」のSN.BARに登場です!

うわっ、やっぱりそうなんだ!「元」か...。で、現は?

12/08/2004

ソフトウェア開発は知的か否か

IT最新事情 第43回~「ソフト開発を根底から見直そう」

もう1つ前川氏の注目すべき発言は「ソフト開発はソフト工場ではない」ということ。工場のように再生産をする場ではないからだ。もし再生産ならコピーの場になる。企画、設計、開発、テストというソフト開発は、プロセス管理よりも結果、つまりユーザーにとっていかに使いやすいシステムを作り上げるかにある。「バグのない完璧なシステムだが使い勝手の悪いものより、少しのバグはあるものの使い勝手のいいシステムのほうがいい」。


むむ?前半と後半で話につながりがないのですが。工場生産=使い勝手が悪いってこと?そんなことないでしょ。実際これまで散々人手が介在したせいで「たくさんバグがあって使えないシステム」が大量に生産されていたのでは?

「ソフト開発は知的労働でもあるはず。(だからこそ)個人の能力をより重視する必要がある」と前川氏は主張する。ところが、ソフト産業のSE、プログラマの給与実態を見ると、年齢序列になっている。プログラマ1人ひとりの生産性は大きく異なるにもかかわらずだ。できないプログラマほど開発時間が長くなるので、残業代は多くなる。

うーん、僕もそう思っていたんだけど、最近考えが変わってきた。伊藤さんのコメントを。

インターネット時代のエンジニアの価値
しかしいま周囲を見渡すとどうでしょう。対外的な交渉能力や管理能力などのメタな知識を除いた、いわゆる技術に関しての能力という意味では、高速道路の登場により各個人間での差がどんどん縮まってきているのが今の状況なのです。つまりは、人月計算による計算の方がより妥当であるという見解も、あながち間違いではないという方向に近づいているのかもしれないと見ることもできます(決してそうはあって欲しくないのではありますが)。

さらに過激に、Microsoftはソフトウェア工場を現実化しようとしています。
Software Factory

もちろんこの試みには反論もあって、たとえばGrady Boochみたいな人は、ソフトウェア開発を知的生産だと考えているようです。
Friday, December 3, 2004

Microsoft and Domain Specific Languages


さて、どっちが正しいことを言っているのでしょうね。私は、ソフトウェア開発の大部分は知的生産ではなく、機械で代替しうる肉体労働だと思います。その意味では年をとるほど体力がなくなるので、給与は安くなるべきだし、いずれはプログラマという仕事は人間の仕事ではなくなると思ってます。果たして。

---

それにしてもGrady Boochって人はブログの何たるかをまるで理解していないね。エントリからのリンクの多くは全部総称ページへのものだし、おまけにこの人のブログ、Permalinkがないじゃん。何だこれ。

12/06/2004

あたまの悪い人

科学者とあたま

いやなブログから。

なんとなくわかっていることも正面からずばり書かれるとあらためてなるほど。

12/04/2004

米IBM:全パソコン事業の売却を検討

うーん、そうですか。ThinkPadもですか。最近のThinkPadは良くないしなあ。

かといってDellやHPは買う気にならない。こりゃますますPowerBookへ移行か...。

12/02/2004

はてな伊藤さん、CTOに

おめでとうございます。

さて、それより気になるのは、宮川さんのブログ。プロフィールから肩書きが消えているじゃあありませんか。興味津々。