玩式草子─ソフトウェアとたわむれる日々

第3回 みんなでテスト,みんなでデバッグ。~あるいはLinusの法則

この記事を読むのに必要な時間:およそ 4 分

原因の絞り込み

まずYouTube側の問題かどうかを確認するために,firefox-3.5.3 + flashplayerプラグインでYouTubeに接続し,totemでエラーになった動画を表示させてみたところ,特に問題なく表示されました。どうやらYouTube側の問題ではなさそうです。

図3 firefox+flashplayerでYouTubeを見ている例

図3 firefox+flashplayerでYouTubeを見ている例

次に,totemが使う設定ファイルやキャッシュファイルを消してみます。

totemに限らず,Linux/UNIX用のたいていのアプリケーションでは,ユーザのホームディレクトリに設定用のファイルやディレクトリを保存しています。これらのファイルやディレクトリは先頭に "."(ピリオド)を付けた隠しファイルやディレクトリとして配置されるので,存在を確認するにはls-aオプションやファイルマネージャのオプション設定で「隠しファイルを表示」させる必要があります。

どこにあるかよくわからない隠しファイルをコマンドラインで消すのはちょっとメンドウですし,GUI環境用の設定ファイル類をGUI環境の中からイジるのも少々気持ち悪いところです。このような作業の場合,手元ではFDというCUI版のファイルマネージャをよく使います。

図4 ターミナルソフトウェア上のFD

図4 ターミナルソフトウェア上のFD

FDは,昔日のMS-DOS用のツールをモデルに開発されたファイルマネージャで,見た目こそ地味ですが,ターミナル上で利用できるのでリモートマシンのメンテナンスにも便利だし,ファイルを一覧しながら操作できるので,この種の作業には最適です。

今回は~/.config/totem/~/.gconf/apps/totem/を削除し,合わせて多少関係するかと思って~/.gstreamer-0/~/.thumbnails/などのディレクトリを消してみましたが,totemのエラーは変りませんでした。

その他,GStreamerを調べてみると新しいバージョンが出ていたのでパッケージ化して更新したり,HTTPのサーバ/クライアント機能を実装したlibsoupのバージョンをチェックしてみたりと,思いついた可能性をさまざまに検証してみましたが解決せず,どうやらtotem自身の問題だろう,というところにまで絞り込めてきました。

インターネットでの調査

ある程度問題点が絞り込めてきたので,"totem" "gst_soup_http_src_parse_status()" "404 Not Found"をキーワードにGoogleで調べてみました。

最近では,⁠エラーが出たらまずググれ」とばかりに,エラーメッセージをGoogleで直接検索するような例がよく紹介されていますが,個人的な経験では,ある程度可能性を推測した上で検索する方が,必要な情報を効率よく見つけることができるようです。自分の探しているものが何なのかを知らないと,たとえGoogleが優れた検索結果を返してくれても,そこから必要な情報を選り分けるのにむしろ時間がかかりがちです。

Googleの検索結果に示されたページを見ると,⁠YouTube側がインターフェイスをイジったのでは?」⁠プレイリスト機能が関係しそう」⁠むしろ無線LANが問題っぽい」等々,情報が錯綜していましたが,9月の上旬に調べた際は,Ubuntu等の環境でも同じ問題が発生しており,バグ情報のページにもこの問題が登録されていることがわかっただけでした。

前回紹介したfile-rollerのように,特定の環境(ファイルシステムのlocaleがGTK/GDKの内部表現であるUTF-8と異なる環境)でしか発現しない問題はその環境のユーザ自身が何とかしないと解決しませんが,今回の問題は特定の環境に依存する類いのものではなさそうなので,とりあえずしばらく様子を見ることにしました。

YouTube が見れないのは残念だけど,totem自身が動かないわけではないのだし……。

しばらく Plamo Linux 4.7 のリリースに向けた作業で忙しい日々が続き,10日ほど経ってから改めて検索したところ,Ubuntuのバグ情報のページに以下のような投稿がありました(なお,この記事中の"forward slash"は"%"の間違いだった,と投稿者自身が修正投稿しています)⁠

lightpriest  wrote on 2009-09-15:  	  #10

    * Patch to totem-plugins-2.26.1-0ubuntu5/youtube.py (565 bytes, text/plain)

This problem apparently because youtube uses a forward slash in their
"t" param.  On the youtube.py (the plugin itself), the url is built
with a urllib.quote of pythin which escapes this forward slash with a
%25.  I guess gst's API shouldn't "unescape" these URL's and this is
a youtube plugin bug.

I've noticed this plugin was replaced with a C one (in gnome's git
repo) and they had the same escape method there.

Attached a suggested patch.

この報告によると,totemのYouTube用プラグインが,本来クォートすべきでないパラメータを余計にURIクォートしているのが原因,とのことです。添付されたパッチで修正するのは1ヵ所のみで,動画ファイルの位置を示す mrl を生成する際に &t= で渡すパラメータをurllib.quote() しないように変更する,というものでした。

337c337
< 			mrl = "http://www.youtube.com/get_video?video_id=" + urllib.quote (youtube_id) + "&t=" + urllib.quote (t_param) + self.get_fmt_string ()
---
> 			mrl = "http://www.youtube.com/get_video?video_id=" + urllib.quote (youtube_id) + "&t=" + t_param + self.get_fmt_string ()

さっそく手元でも/usr/lib/totem/plugins/youtube/youtube.pyにこの変更を加えてみたところ,再びtotemからYouTubeの動画が見れるようになりました。

図5 totemからYouTubeへの接続が復活

図5 totemからYouTubeへの接続が復活

確か8月の上旬くらいまではurllib.quote()していた古いコードでも見えていたはずなのに,なぜ急に見えなくなったのかは釈然としませんが,そのあたりは恐らくYouTube側の問題なので,外部からあれこれ推測しても無駄でしょう。

とりあえずこの修正を適用してPlamo-4.7用のtotemパッケージを修正,更新することにしました。

インターネットとLinusの法則

Linuxの急速な成長と発展を分析し,⁠伽藍とバザール」という論文にまとめたエリック・レイモンドは,⁠Linusの法則」としてこう述べています。

“given enough eyeballs, all bugs are shallow”

(目玉の数さえ十分あれば,あらゆるバグは解決可能)

事実,Linux はこの法則に従って,ソフトウェア工学の伝統的な常識を打ち破って成長してきました。Linuxが広めた開発スタイルは「バザールモデル」として認知され,⁠Web2.0」的な考え方とともに,ユーザ参加型の開発スタイルとしてさまざまな場面で利用されるようになってきました。

今回はUbuntuのバグ報告システムで解決できましたが,バグ報告システムのような形式を取らなくても,最近では世界中の開発者が自らのブログでオープンソースソフトウェア(OSS)のさまざまな問題を分析,報告し,解決方法を紹介してくれています。それらの情報は,Google等の検索エンジンによって休むことなく収集,整理され,膨大なデータベースとして利用できるようになっています。OSSの世界では,インターネットを通じて世界中の無数の目玉がソースコードを見つめて,日夜テストやデバッグにいそしんでいる,と言っても過言ではないでしょう。

現実世界では決して触れあう機会のないどこかの誰かが,自分と同じ問題に苦しんでいたり,自分では気づかなかった解決策を報告してくれてたりするのを見ると,時間と空間を超えた不思議な親近感を感じてしまいます。

この大海のような知を使わせてもらうお礼に,自分の知を一滴なりとも加えることができれば……と,サボりがちなブログの更新に向けて自らを叱咤している今日このごろです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html