カレンダークイック サーチカテゴリ管理最近のエントリ
|
2009年 10月 29(木曜日)C#でアプリを再起動するC# .Net Frameworkでアプリケーションを再起動するコードC# .Net framework 3.X版でアプリケーションを再起動するコードを紹介します。Windowsのアプリではファイルのロックなどもあり、設定を変えて再起動、というケースがままあると思います。UNIXとは全く違った感じのコードになります。 photostandで設定リセットメニューを実装しました。設定する項目が多くなってしまったときに、とにかく普通に動くようにしたい、ということがあるだろうと"リセット"をメニューに入れていたのですが、実装せずにグレイアウトしてあったものです。 さて、ググると、最初に見つかったのは、System.Diagnostics.Process.Restart。しかし、ヘルプの中には見つかりません。どうやら、バーション2.Xではあったものが、既になくなっているようです。さらに調べると、以下のようなコードが見つかりました。 // Get the parameters/arguments passed to program if any .Netでは、Exit()をコールした後に、コードを書けるんですね。ということで、このままのコードで動きました。このアプリは2重起動をチェックしているのですが、テストでは特に引っかかりません。 ちなみに、UNIX/Cで書くと、以下のような感じでしょうか。 pid = fork(); 実際には2重起動のチェックを回避するために、同期するかウェイトを入れないとならないでしょう。もしかすると、上記でforkなしでexeclしてしまっても構わないような気もしますが、何かのリソース上の問題があるような気もします。 2009年 10月 24(土曜日)YouTubeの仕様変更対応 再びYouTube仕様変更10/22対応私がヤフオクにかまけている間に、YouTubeが仕様変更をしていました。夜にウェブサーバのログをなにげなく見てみたら、10/22の朝9時以降はYouTube Downloaderが全部エラーしているのに気が付きました。試しに手元でダウンロードスクリプトを走らせてみてもやっぱりエラーしますので、変更があったことは間違いないようです。 早速ビデオページをダウンロードして確認してみましたところ、"var swfArgs ="と指定されていたFlashPlayerへの引数が、"'SWF_ARGS\':"という形式で指定されるようになっていました。実際のパラメタの書式に変更はなかったようです。要するに、変数がハッシュとして保持されるように変更されていました。とりあえず、理由を知る必要もなかったので、ビデオページのパーサを変更することで対応し、ウェブサーバにもアップロードしました。無事ダウンロードできるように復活しています。 その後、落ち着いてググってみたところ、あちこちで同じようにびっくり+緊急対応しています。部外の寄生サービス者にも影響は小さくないくらいですのに、YouTubeのサービス自体を稼働中にズバっと替えられる手際の良さには感心しました。それにしても、何のために変更が必要だったのでしょうか。ビデオページをざっと斜め読みした程度では、Ajaxとかいう単語も見えましたけど。
2009年 10月 23(金曜日)ヤフオク用Greasemonkeyスクリプト IIIヤフーオークション画面をカスタマイズする〜その3Yahoo! Auction向けのGreasemonkeyユーザスクリプトに、前回のToDoを追加実装しました。今回で、出品者のブラックリスト管理、業者の商品ページ一杯に表示されるウザい公告の削除、おまけとして、Yahooからの公告("[PR]口臭がなくなります"、みたいな一行公告)を抑制します。 こちらからyahooauctions.user.jsインストールして下さい。Greasemonkeyを有効にしたfirefoxからアクセスすればインストーラ画面が出ます。削除の普通にGreasemonkeyの画面から「アンイストール」できます。設定はユーザスクリプトファイルを直接編集して下さい。ファイルは以下にあります。
できることと設定方法は以下の通りです。[true/false]は、trueで機能有効、falseで無効です。 //-- 設定パラメータ Configuration parameters of the script
ToDoさて、やり残しです。機能的には自分としては満足なのですが、実装上の限定があります。autopagerizeと一緒に使うと、2ページ目以降でブラックリストが効きません。このユーザスクリプトはGreasemonkeyのユーザスクリプトの代表選手であり、私も使っているので看過できません。原因は、autopagerizeが次ページをXMLHTTPRequestで取ってきてそのまま表示しているためと思います(未確認)。この推測が正しければ、今回のスクリプトに限らず、2ページ目以降は全てのユーザスクリプトが効いていないはずです。これを解決するためには、autopagerizeから、Greasemonkeyのスクリプトを実行しないとならないような気がします。その内、確認して対策を考えます。
2009年 10月 22(木曜日)ヤフオクで使うGreasemonkeyスクリプト IIヤフオクスクリプトの機能追加版です追加も含めての機能は以下の通りです。
ユーザスクリプトはyahooauctions.user.jsからダウンロードして下さい。GreaseMonkeyがインストールされていれば、自動的にユーザスクリプトとして認識されて、インストールされます。なお、前回のとは適応範囲が変わっていますので、古いのをお使いの場合、一旦アンインストールしてから、改めてインストールして下さい。 今のところ設定UIを作っていませんので、動作の設定はスクリプト自体を編集して行います。スクリプトは、Firefoxのユーザプロファイルディレクトリの下の、"gm_scripts/yahooauctions"にあります。インストール後に編集してしまっても支障はないようです。 //-- Configuration parameters of the script ToDoこのあと個人的に欲しいのは、出品者のブラックリストです。価格自己釣上げする自作自演業者や、送料のバックマージンで稼ぐ業者は詐欺でしかなく、表示する価値はありませんので、出品物を全て削除して見えなくしたいです。これはさっと見たところ、テーブルレイアウトの<tr>要素毎非表示にしてしまえば良いです。例ですが。 <tr BGCOLOR="#ffffff"> 上記の出品者(評価)の"yyyyxxxx"さんの名前でマッチして、<tr>...</tr>をstyle="display:none"にする。Javascriptに慣れた方であれば一瞬で書けるんでしょうけど。 それにしても、Greasemonkeyはカスタマイズできる便利さを与えてくれる素晴しいシステムです。これがインターネットエクスプローラで動かないのは本当に残念なことです。 2009年 10月 21(水曜日)Greasemonkeyスクリプト Yahoo! Auction検索ソートヤフオクの検索結果を「残り時間順」にするGreasemonkeyスクリプトヤフオクの検索結果など競り商品のリストを「残り時間が短かいもの」順にするユーザスクリプトです。Firefox + Greasemonkey上で動作します。 ささやかな楽しみとして、ヤフオクで少額商品を時々落札しています。Yahoo!AuctionのUIには不便に思うところが沢山あるのですが、その内の一つとして、検索結果など商品のリストが表示される画面で、商品が「お勧め順」にソートされていることがあります。これは、右上のプルダウンメニューでソート方法を選べるのですが、何か操作するとデフォルトの「お勧め順」に戻ってしまい面倒くさいことこの上ないです。 利用者としては、一度ソート方法を設定したら、設定を保持して欲しいところです。結局これはオプション(リスト上位に表示される業者向け有料オプション)を販売する都合でこのような仕様になっているのでしょう。しかも、ヤフオクでは業者による値段の釣上げ行為が常態化していますので、事実上、利用者にとっては「残り時間が少ないもの」以外のソート方法は意味がありません。(スタート価格を安価にしておいて締切り前になると売りたい値段まで人為的に値段が釣上げられますので、一定以上の残期間があるものの現在価格は無意味になります)。 そこで、この不便を解消するべく、Greasemonkeyを使って開発してみました。yahooauctions.user.jsです。極度に簡単な実装で、該当するページで、ソートが「残り時間が少ないもの」順になっていない場合、設定してからページを読み直しています。ヤフオクのパラメタ仕様が良く分らないのと、Greasemonkeyを使うのは初めてですので、完全ではないと思いますが、とりあえず手元では動作しています。本当は、検索ページを呼ぶリンクアンカーを加工するような実装にすればリロードをなくすことができる筈ですが、今回は動かすこと優先で一番簡単な実現方法にしました。 それにしても、このGreasemonkeyは強力なツールです。これを使えば、他者から提供されているWEBサービスを自分が好きなUIで利用できるようになる訳です。Saasのようなものもありますが、APIが開示されることが前提になりますので、全てのサイトで利用することはできません。このような方向性が進められていくと、変更を嫌う提供者は改変不能なWEBページ、例えばFlashなど、を使う割合が増えて行くような悪い予感もします。役所系のサイトでは、文書がなんでもかんでもPDFで配布されているように。
2009年 10月 17(土曜日)長谷川CUP 2009ハセツネ2009のボランティア今年も10/11,12にハセツネにスタッフとして参加して来ました。今年は天気も良く、参加者の皆さんも快適に走れたのではないでしょうか。新記録も出ましたし、特に事故もありませんでした。 この大会はご存じのように、東京都山岳連盟の主催です。元々は山屋が参加することを想定していましたが、年々、ランナー系の参加者が増えてきて、今ではトレイルランナーの大会と言って良くなっています。このこともあるのでしょうが、昨年まではスタッフの大半は都岳連傘下の山岳会会員でしたが、今年からはトレイルランナーのボランティアの方に数多く参加していただきました。私は今回はルート後半の監視ポストで働きましたが、構成人員は、山岳会会員3名(+救護隊員2名)、ランナー6名でした。 現場には昼過ぎに到着したのですが、ハイカーが沢山いて驚きました。山頂には50人くらいはいたでしょうか。それでも、夕方になると皆帰ってしまい、うってかわって静かになります。ランナーが到着する夜半から、応援と監視のために山道に立っていました。妙な鳴き声がしたので木々をヘッドランプで照らしていると、突然ムササビが視界を横切って行きました。初めて見ました。こんなに人里近くで、昼間に人だらけのところにいることには驚きました。暫く見ていましたが、あまり人を恐れてもいません。東京都の管轄下では山も整備が進んでいるようですし、自然が戻ってきているのかもしれません。 小さな事件もありました。コースの分岐には大会期間中にルート指示看板を立てているのですが、その内の一本がなく、道に迷った競技者がいたらしいとのことです。私も終ってから見てみたのですが、比較的民家に近いところで、間違え易そうな分岐の看板が足りなかったようです。担当者が設置し忘れたのでしょう。抜かれた、という情報もあったのですが、確認することはできませんでした。(それらしい穴が見えましたが)。 この大会は大都市東京近郊でハイカーのメッカという開催場所的にも、夜間に2000人もの競技者が山中を走るというその競技実施形態にも、批判的な方がいらっしゃいます。時期になると、ネット上でもそれを表明される方も少なくありません。人それぞれ考え方が違うこと自体は仕方のないことで、山や自然を利用する同好の士としてうまく共存して行く外ありませんし、実際に大きなトラブルになったことはありません。しかし、もしかして今回のが過失(スタッフ、もしくはハイカーの)でなければ、来年度からは対応が必要になってくるかもしれません。地元対応をあきる野市の支援者に頼っている風でもありますし、トラブルが起らないと良いなぁと思います。 2009年 10月 17(土曜日)HTTP Refererの信頼性リファラーは信頼できるかサービスページ毎に掲示板を設置するに当り、設置したページを分別するためにリファラーを利用する実装を試みました。その実装の有効性を調査してみました。 サービスを提供していますと、ユーザの声のフィードバックを受けたくなります。不具合などもエラーログで確認できる以外にも発生しているに違いありません。このように考えて、サービスのページにQA掲示板を設置することにしました。ページに埋め込みで、軽く作りたかったため、クライアント側をAjax/Javascript、サーバ側をCGIと想定しました。 背景ネットを漁り、lebhaft Ajaxの一行掲示板というBBSソフトが想定に合致しました。利用に制限がないし素晴しいものです。しかし若干の改造が必要です。これは一つの掲示板を管理するソフトウェアですが、私の利用では、各サービス毎に掲示板を設置します。簡単にするために、インストールは1つで、コードを共有できるようにと考えました。要するに、設置したページ毎にデータベース(この掲示板ではファイル)を分けることになり、サーバではリクエスト毎に設置したページを知る必要があります。 前置きが長くなりましたが、このページを見分けを実現するために、2つの方法を考えました。
(2)はリクエスト側、CGI側の双方にパラメタの追加を行う実装になり、(1)の場合CGI側だけの追加になりクライアント側は自動で付加されますので、Ajaxのリクエストを変更する必要がありません。 ブラウザによるリファラーの対応の違いさて、(2)の実装は問題ないとして、(1)で実装する場合、リファラーは信頼できるのでしょうか、いつも送られて来るのでしょうか。PCではあまり話題に上りませんが、携帯電話などではリファラ送信不可の設定がデフォルトだったりします。また、私のブログでは画像取得時のリファラの変更なども扱ってきました。皆、平気で設定を変えているのではないでしょうか。
基本的には、インタラクティブなHTTPクライアントはデフォルト送信し、バッチなものは送信しません。インターネットエクスプローラは通常の方法ではリファラを止めることはできませんので安心です。しかし、firefoxとoperaは止められるので完全には信頼できないことが分ります。なお、バッチのwgetもaria2cもどちらも、自由にリファラを付けることができます(そもそもクライアントは何を指定すべきか分りませんので)。しかしこれらは一般的ではないので考慮しなくて良いでしょう。 結論としては、firefox (とopera)でリファラを止めている人の割合の統計データを確認できるまでは、当てにできない、ということになります。今回は、安全のために、CGIは(1)(2)の両対応とし、クライアント側はページURLを送る(2)の実装にしました。 2009年 10月 7(水曜日)eacceleratorとmod_perlApacheの高速化: eacceleratorとmod_perlWebで動的なページを作るとき、私は通常ページはPHP、CGIにはPerlを使っています。これらの処理が遅いと思ったことは特にないのですが、各々を高速化するソフトウェアがあります。私が書いているコードは大した行数ではないので効果は薄いかもしれませんが、PHPで書かれているserendipityには多少なりとも効果があるかもしれないと思い、導入してみることにしました。 PHPの高速化eacceleratorの設定eacceleratorというものがあるのを最近知りました。Apacheには元々PHPのインタープリターが組込まれているので、特に高速化手段はいらないものと思っていましたが誤解であったようです。仕組としては、コンパイル済みコードをメモリ/ハードディスクにキャッシュしておくようです。(PHPも実行時コンパイルする仕掛だったのですね) ソースはEacceleratorのプロジェクトページから取得することができます。 cd eaccelerator-0.9.5.2/ しかし、何故かphpizeでエラーします。以下のように"/usr/bin/phpize"を修正します。色々インストールしていたからでしょうか。phpizeを修正してから、再度実行します。 6,7c6 インストールします。 make install httpdのrestartの前には、"/etc/php.d/eaccelerator.ini"を編集しておきましょう。 eaccelerator.cache_dir = "/var/cache/eaccelerator" 動作状況は、http://yourhost/usage/control.phpをアクセスすると表示されます。(この画面から設定もできるようです) Perl CGIの高速化: mod_perl通常PerlはCGIとして動かされています。つまり、別プロセスとして起動したperlによって処理されています。 mod_perlは各ディストリビューションで配布されていますので、インストールして下さい。 Alias /perl /var/www/perl これで設定は完了です。httpdを立ち上げ直せば動作します。以下の"hello.cgi"を置くとmod_perlのバージョンが表示されます。 #!/usr/bin/perl -w しかしながら、cgi-binから/var/www/perlにCGIを移動しただけでは、簡単には動作しないようです。 まず、ライブラリのサーチパスが変わってしまい、カレントディレクトリは含まれません。これに対しては、 効果や考察などさて、効果ですが、計測していません。eacceleratorのほうは動いていて、遅くなることはなさそうですのでそのまま使っています。特にエラーも出ていないようです。 mod_perlのほうはちゃんとは動いていないので、使うことができていません。くやしいので少し考察してみました。 localhost$ time for i in `seq 1 1000`; do ./bar; done ここで、"bar"はmain(){exit(0);}だけのプロセスです。trueはbashの組み込みコマンドなので、プロセス起動コストの大まかな評価としてはこれで良いでしょう。 これで見ると、プロセス1個の起動に掛かる時間は大体600μ秒くらいでしょうか。とりあえずは、問題のないオーバーヘッドと思われます。アクセスが極度に多いサーバ、かつ、一回のCGIで行っている処理が軽い場合には無視できないかもしれません。 2009年 10月 4(日曜日)Dave's CD player その2dcdのパッチその2数日前にdcdのパッチを掲載しましたが、更なる変更を加えました。複数のCD ROMを使えるようにする目的でオプションを追加したパッチdcd-0.99.2-2.patch.gzを作成しました。 パソコンに2台以上のCD ROMやDVDのドライブが付いている場合、デバイス名で使い分けることになります。音楽CD(CDDA)の場合は、どのドライブでも再生できるわけですから、dcdでもデバイス指定して動作させたいところです。しかし、元々はビルド時に指定できるだけでしたので、コマンドラインオプションを追加することにしました。オプションは"-D デバイス名"です。 プログラムの構造とコンフリクトがあり、変更が少し大きくなってしまいました。その上、両方同時に再生するのには問題が残っていて、2番目に再生するドライブで"dcd s"としても同時再生できません。これは、常駐プロセスが1台のみ管理することを想定しているためと思われます。しかし、同時再生してミックスして聴く必要は通常ないと思いますので、対応はしないことにしました。
2009年 10月 1(木曜日)Dave's CD playerdcdのインストールとパッチLinux/BSDにdcdというCDプレイヤーがあります。それのコマンドラインでのプログラムモードを可能にするパッチです。 PCのCDプレイヤー今迄gnome-cdを使っていましたが、プログラムモードがない(≒プレイリストが作れない)ことに不便を感じていました。 据え置き型のオーディオCDプレイヤーには必ず「プログラム」モードがあって、カレンダーボタンで簡単に操作できます。この辺りの操作はWindowsのMediaplayerやUbuntuのRythmboxのプレイリスト機能でも許容範囲なのですが、それでもリストからマウスで選択して行くのはやはり面倒です。 dcdのインストールDave's CD playerというCD playerを見つけました。ダウンロードはこちらからできます。これはCUIのCDplayerです。似たようなプロダクトにcdplayがありますが、ずっと高機能です。これはコマンドラインでトラックリストを渡すことができるため、希望している機能に近いようです。 しかし、どうした訳か、単純に"dcd 3 4 5"のように再生することができません。"dcd 3 4 5 quit"や"dcd loop 3 4 5"のようにはできます。"dcd start 3 4 5"ができないのは仕様としても不思議です。 そこで、少しイジってみました。このパッチdcd-0.99.2-1.patch.gzで、以下の処理を加えました。 localhost% dcd 3 5 7 トラック3,5,7を連続で再生してから、再生を止める。 これで快適。しばらく、こちらを使ってみようと思います。 |
ブログ管理 |