Personal tools
Document Actions

仕事の周辺

Up one level

Document Actions

ASXファイルをASPで動的に生成する

by Days posted at 2006-05-15 23:18 last modified 2006-05-15 23:19
タイトル通りのことは、Microsoftの[HOWTO] ASP ページを使って ASX ファイルを動的に生成する方法を踏んでやれば、問題なくできるわけですが、それなのにはまりました。
映像が表示されるはずのエリアは真っ白、「指定されたストリームの種類は認識されません」というエラーメッセージ。
これは、OBJECTタグを使って、HTMLにWindows Media Playerを埋め込んだ場合にだけ表示され、ロケーションバーからASXのURLに直接アクセスする場合は問題なくWindows Media Playerが呼ばれ、目的の映像が再生されます。いったいなぜ?

MIME-Typesが間違っているのかと思い、調べていると "video/x-ms-asf" で間違いない。ASXも、ASFも同じMIME-Typesなんだな、と思いつつ、はたと気づく。「指定されたストリームの種類は認識されません」というのは、この判別がWindows Media Playerにできていないせいのではないだろうか。
というのは、"generate_asx.asp?file=movie.asf" というふうに、映像ファイルの名前をそのまま引数に使っていたから。これだと、ASPファイルの冒頭に response.contenttype = "video/x-ms-asf" と書くだけじゃ、ASXファイルではなく、ASFファイルと誤解されてしまうようなのです(ちなみに、拡張子を ".wmv" にしても解決せず)。

引数では拡張子を外し、"generate_asx.asp?file=movie" というふうにして、ASPファイルの中で 引数 & ".asf" としたら、解決しました。
つまりはWindows Media Playerは「ストリームの種類」を拡張子で区別していたわけで、その素朴さにちょっと驚いた次第。

Category(s):
仕事の周辺

どちらでも同じURL

by Days posted at 2006-05-31 23:51 last modified 2006-05-31 23:51

パソコンのブラウザからでも、ケータイからでも同じURLを使ってアクセスさせ、でも表示する内容はそれぞれの端末に合わせたもの、というふうにするには、サーバ側で工夫が必要になる。
例えば、IISでASP (VBScript) を使ってやろうとすると、こんな感じ。

<%
agent = request.servervariables("http_user_agent")

if instr(agent, "DoCoMo") <> 0 then
response.redirect("http://www.somewhere.com/docomo/")
elseif instr(agent, "J-PHONE") <> 0 then
response.redirect("vodafone/")
elseif instr(agent, "Vodafone") <> 0 then
response.redirect("vodafone/")
elseif instr(agent, "UP.Browser") <> 0 then
response.redirect("au/")
else
response.redirect("/index.html")
end if
%>

デフォルトドキュメントの設定で、default.asp を default.htmより優先されるようにしておいて、default.asp にこのスクリプトを書いておく。PC向けのサイトは、index.html以下、ケータイ向けのサイトは、docomo, vodafone, auそれぞれのディレクトリに入れておく。
DoCoMoの一部機種では、相対パスでのリダイレクトが効かないそうなので、DoCoMo向けだけ相対パス必須。

難点は、キャリアの名前が変わると、それに応じてたぶんこのスクリプトも変えなければならないことだ。ケータイサイトの賞味期限は、短い。

Category(s):
仕事の周辺

Softbank

Posted by days at 2007-01-11 23:24

ソフトバンクケータイはUAが新しくなります。
"elseif instr(agent, "Softbank") <> 0 then" とか、追加してやってください。

nasty way

by Days posted at 2006-06-09 00:29 last modified 2007-02-27 01:12

汗をかきながら走っている自転車に、クラクションをあびせながら、アクセルを踏んで後ろから無理に抜き去るドライバーのことを、卑劣という。

経営者の不正を警告した社員に、その事実を隠して退社を迫る経営者のことを、卑劣という。

Category(s):
仕事の周辺

Nihombashi

by Days posted at 2006-06-28 01:10 last modified 2006-06-28 01:10
日本橋レガッタ

いつものように自転車で、日本橋の南岸から西河岸橋を渡り、常盤橋に抜けようとしたら、川面から静かに何かが近づいてきた。いつも工事用のはしけや小さな警備用のボートしか見ない日本橋川で、「東京商船大学」と書かれたレガッタは、かなり新鮮だった。
先週の23日金曜日、午後のこと。

Category(s):
仕事の周辺

Writing XML by ASP in Japanese

by Days posted at 2006-07-31 23:31 last modified 2006-07-31 23:35
iTunesのPodcast向けにRSSを書いているのだが、日々の運用のためにこれをASPで出力することにした。DBにitemを書き込んでもらい、それをまとめてRSSに書き出すのだ。
で、ASPはS-JIS、XMLはUTF-8で日本語を書くので、ちょっとした工夫が必要。
dim resp
resp = resp & "<?xml version=""1.0"" encoding=""UTF-8""?>" & vblf
resp = resp & "<rss xmlns:itunes=""http://www.itunes.com/dtds/podcast-1.0.dtd"" version=""2.0""?>" & vblf
resp = resp & "<channel>" & vblf
resp = resp & "<title>ホアランポーンからのポッドキャスト</title>" & vblf
...
resp = resp & "</channel?>" & vblf
resp = resp & "</rss?>" & vblf
などと、"resp"に必要な文字列をS-JISで入れておく。もちろんDBからの出力文字列を織り交ぜるのもOK(のはず)。RSS自体の書き方は、"PodcastingとiTunes: 技術仕様" をご参照。

変換にはADODB.Streamを使う。
Set iStream = Server.CreateObject("ADODB.Stream")
function ConvUTF(strValue)
	call iStream.Open
	iStream.Position = 0
	iStream.SetEOS
	iStream.Type = 2
	iStream.Charset = "utf-8"
	iStream.WriteText strValue
	iStream.Position = 0
	iStream.Type = 1
	iStream.Position = 3
	ConvCharset = iStream.Read()
	call iStream.Close
end function
Set iStream = Nothing

Response.ContentType = "text/xml"
Response.Charset= "utf-8"
Response.BinaryWrite ConvUTF(resp)
という感じ。
ASPスクリプトそのものをUTF-8で書いて、response.writeしても文字化けの嵐だったので、このようにした次第。
Category(s):
仕事の周辺

WebDAV mini-redirector

by Days posted at 2006-09-28 00:39 last modified 2006-09-28 00:44

写真データを受け取るのに、FTPではなくWebDAVを使おうと思ったのは、送り主があまり詳しくなさそうな人だったからだ。FTPクライアントのインストールの仕方を訊かれても、私の手には余る。Windowsで言う「ネットワークプレースの追加」だったら、うまく説明できなくてもWindowsのせいにできる。
と思ったのが甘かった。「書いてもらったとおりにやったんですが」という電話があってから、約2時間、こちらもログイン失敗を繰り返し、あれ、こんなはずじゃなかったのに、と後悔。そのわけは。

IIS 5.0とWebDAVには深刻なセキュリティ問題があったのだが、この際それは置いておく(セキュリティパッチをお忘れなく)。IIS側は、WebDAVでアクセスしてもらうディレクトリに対し、匿名アクセスのチェックがなく、基本認証がかけられていることを確認し、「書き込み」「ディレクトリの参照」にチェックを入れる。
いままでだったらこれだけで「ネットワークプレースの追加」からアクセスできていたはずなのだ。現に、他のユーザはちゃんとアクセスできている。新たに設定したディレクトリに、新たなユーザがアクセスできないはずがない。
Windows 2000やMac OS 10.4(私の机上にあったのはその2つだけだった)から試してみると、新たに設定したディレクトリにちゃんとアクセスできるから、どうやらWindows XPの問題のよう。ログを見てみれば、XPのときだけ、UserAgentが "WebDAV mini-redirector" となっている。アヤシイ。
この「ミニリダイレクタ」は、"WebClient"サービスとしてWindows XPに実装されていて、「ネットワークプレースの追加」から呼ばれるようになっている。で、セキュリティ確保には必須のアップデート、Service Pack 2をインストールすると、基本認証が通らなくなる(仕様?)らしいのだ(余談。しっかり試したわけではないけれど、SP2インストール以前に設定したショートカットからはアクセスできるようなので、このセキュリティ強化にもなんだか穴がありそう)。
Windows 2000でアクセスできるのは、"WebClient"サービス実装ではなく、IE 4あたりから実装されている "Web Folder" という機能によるもので、もちろん Windows XP のIE 6〜7にも、この機能がある。
ということで、Windows XPには2つのWebDAVクライアント機能があるというわけ。ややこしい。

では今回のように、IIS 5.0(Apacheも同じかもしれない)で基本認証を使いたい、という時にはどうするか。今回は単純に "WebClient"サービスを停めてもらった。「マイ コンピュータ」を右クリックして、「管理」を出して、「サービスとアプリケーション」の中から「サービス」を選んで、というのを説明するのが、ちょっと大変だったけど。そしたら、無事「伝統的な」 "Web Folder" が立ち上がり、文字通りフォルダとして使えるようになった。これで解決。
Version Control with Subversion によれば、もうひとつ解決策がありそうだ。
「ネットワークプレースの追加」でサーバのURLを、"http://..." から始めるときに、"http://webserver.someone.who:80/webdav" のように port、つまり ":80" を明示することで、認証の問題を回避できるという。まだ試していないけれど、こちらのほうが簡単だったかもしれない。

Category(s):
仕事の周辺

Getting Articles from RSS Feed

by Days posted at 2007-01-11 23:19 last modified 2007-01-11 23:19
必要に迫られて、RSSフィードから特定の項目だけを抜き出してWebに表示するASPプログラムを作った。
AJAX使えばサーバサイドで動かす必要はないし、これよりも簡単にできるのだけれど、今回本当はWSHで動かしたかったり、DBへのレコード挿入をしたかったりしたので、VBSで書いてみた。
更新日時を抜き出すstrdateとstrtimeのところは、RFC822に準拠していれば、これで足りるはず。他がどこまで汎用的なのかわからないけれど。
Dim strURL, objHTTP, strRetVal
Dim objDOM, rtResult, objNd

' original feed URI
strURL = "http://www.mobileplace.org/dias/blog/RSS"

' Get data from feed
Set objHTTP = server.CreateObject("MSXML2.XMLHTTP")
	objHTTP.Open "GET", strURL, False
	objHTTP.Send
	strRetVal = objHTTP.responseText
Set objHTTP = Nothing


Set objDOM = Server.CreateObject("MSXML2.DOMDocument")
	rtResult = objDOM.loadXML(strRetVal)
If rtResult = True Then
	set objNd = objDOM.documentElement.selectNodes("/rdf:RDF/item")
	for i = 0 to objNd.length-1
		strtitle = objNd(i).selectSingleNode("title").text
		strlink = objNd(i).selectSingleNode("link").text
		strdcdate = objNd(i).selectSingleNode("dc:date").text
		strdate = mid(strdcdate, 1, 10)
		strtime = mid(strdcdate, 12, 5)
		strdescription = objNd(i).selectSingleNode("description").text

		' Output articles
		response.write strtitle & "
" response.write strlink & "
" response.write strdate & " " & strtime & "
" response.write strdescription & "
" Next End If Set objDOM = Nothing
Category(s):
仕事の周辺
The URL to Trackback this entry is:
http://www.mobileplace.org/dias/blog/getting-articles-from-rss-feed/tbping

Trouble with AirTunes

by Days posted at 2007-12-16 22:20 last modified 2007-12-17 00:16
休日で、子供たちが遊びに行って出払っていたりすると、リビングでTom Waitsをがんがんにかけて、一緒にうたいながら食器を洗っていたりする。
音源はiTunes。10GB近くのiTunes Music Libraryを抱えたPowerMac G4は同じリビングでも、オーディオと部屋の対角線上にある。Internetへのアウトレットたるフレッツ光のモデムやらルータやらが、オーディオやテレビと一緒に置かれているので、そのあいだは2台のAirMac Expressによってつながれているのだけれど、そのおかげで "AirTunes" という機能が使えるようになった。
"TV Tower" と名付けたAirMac Expressのオーディオジャックからケーブルを伸ばして、オーディオコンポのAUXに接続すると、離れたiTunesのメニューから "Computer" から "TV Tower" に変えるだけで、iTunesの曲をMacのパソコン用スピーカーではなく、オーディオコンポから再生できるようになるのだ。
この機能のせいで、買い集めたCDをオーディオコンポのトレイに入れることはなくなった。CDの入れ替えをしなくてよいのだ。しかも、「パーティシャッフル」に設定すれば、まるで100連奏ディスクチェンジャー付きのコンポのように、いろんなCDの曲をランダム再生できる。これははまった。

きょうもそんな幸せな時間を過ごしながら、洗濯ものを畳もうと思っていたのが、どうもおかしい。曲が途切れ途切れにしか再生されない。5秒待って、1秒鳴り、また5秒待つの繰り返し。はて新しいCDをiTunesに読み込む時に失敗したかと思ったが、元々入っていた曲もそうだから、どうやらどっかが壊れているみたいだ。
iTunesを終了させてまた立ち上げ。PowerMacの再起動。いずれも効果なし。
2台のAirMac Expressを交互に再起動。これもダメ。
"TV Tower" からオーディオまでのケーブルは特におかしなことはなさそうだし、オーデォオもFMラジオはちゃんと聴ける。ちなみにCDプレイヤーは壊れてだいぶ経つ。
いよいよ困って、洗濯物が手につかなくなった頃、先週 iTunes を7.5にバージョンアップしたことに思い当たった。何度もソフトウェアアップデートが表示されるので、トラブルが起きるとは思わず、深く考えもせずアップデートしたのだ(だって、そういうものでしょ?)
Webを漁ると、以下のディスカッションに行き当たった。

iTunes 7.5 and AirTunes - broke!

どうやら同じような現象が頻発しているらしい。メッセージを見ていると、直ったり直らなかったり、直らない場合には踏んだり蹴ったりだけれど、私の場合には "TV Tower" のAirMac Expressの設定を保存した上で「ハードリセット」をして、無名の状態からまた "TV Tower" になるように設定を読み込んだら、直った。

AirMac Expressのリセット方法

日本語ではこの問題に関する記述がまだないんだけど、それは日本のユーザにとってはよくあることで、みんな解決策を知っているからなのだろうか? そんなにいつもリセットしなきゃならないほど、悪い機械じゃないと思っていたんだけど‥‥。
Category(s):
仕事の周辺
The URL to Trackback this entry is:
http://www.mobileplace.org/dias/blog/airtunes7_5/tbping
« May 2012 »
Su Mo Tu We Th Fr Sa
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Recent entries
Okirai days 2012-05-07
Aneyoshi days 2012-05-06
Takatoe days 2012-05-05
Tateshina days 2012-05-04
Two Tibetan Cousins Self-Immolate in Dzamthang days 2012-04-20
Monk Dies a Week After Burning days 2012-04-08
Growin' Up days 2012-04-07