Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2011年2月27日 日曜日

依存されていない ports の探し方

Filed under: FreeBSD
タグ:, ,
時間:15時30分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

FreeBSD には、ports というパッケージ管理システムがあります。ソースコードのダウンロードし、パッチをあて、コンパイルし、インストールするという手順を簡略化してくれます。package というものもありますが、こちらはコンパイル済みになっています。

昔はコンパイルに時間がかかるために package を利用することが多かったのですが、スペックアップにより余裕ができたため ports に移行しました。必ずしも package で公開されているとは限らないのと、ports のほうが早く公開されるためというのが理由です。

さらに言えば、ports 管理が楽になる portupgrade があるおかげでもあります。このツールによって、毎晩更新のあった ports をメールで通知させることが出来ていますし、更新作業も非常に簡単になりました。

さて、前置きはここまで。

ports で困るのは、依存関係の把握が大変であるということ。数が少ないうちはいいのですが、依存する ports のインストールを繰り返しているうちにどんどん増えてしまいます。昨日の段階では300を超える ports がインストールされていました。

このほとんどは Xorg というGUI環境のための関係。FreeBSD のインストールのときに使うつもりでインストールしてあったのですが、結局使わないまま肥やしとなっていました。依存する ports の把握が出来ないために手をつけられなかったのです。

実は一昨日のメールで Xorg のアップグレードがあり、一気に膨大な ports の更新通知がありました。まとめて更新してしまうことも出来なくはないのですが、ちょうど週末ということもあってよい方法がないか情報収集をしてみることになったのです。

そして、非常にありがたい情報を発見しました。それがこのページ。

pkg_root は、uyota さんが作ったシェルスクリプトの名前。pkg_tree と AWK を使って、どこからも依存されていない ports をリストアップするというもの。スクリプトといっても短いものなので、ワンライナー的な使い方が出来ます。私は次のようにしました。

  1. pkg_tree | awk 'NF == 1{ prog[$1]++ } NF == 2{ prog[$2]-- } END{for(i in prog) if(prog[i] > 0) print i }'

AWK に詳しくないのですが、pkg_tree の実行結果を AWK で受け取り、依存する側の場合はカウントアップし、依存される側の場合はカウントダウン。最終的にカウント数が正のもの(依存されていないもの)だけを表示するという仕組みのようです。

実行結果から必要な ports を取り除くと、1回目は120個以上となりました。これを元に、地道に portupgrade 付属の pkg_deinstall でアンインストールをします。1度終わったら、再び依存されていない ports をリストアップ。依存していた ports が前回の作業でアンインストールされていれば、新たに依存されていない ports が増えます。

これを何度も繰り返し、最終的に必要な ports だけになれば終了です。最終的には100を切るまで減らすことが出来ました。如何に無駄が多かったかということですね。

最後にお決まりの一言。

この記事の内容は無保証です。自己責任で行ってください。

Comments (0)

2011年2月26日 土曜日

『ブギーポップ・アンノウン 壊れかけのムーンライト』

Filed under: 読書中
タグ:, ,
時間:11時54分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

久しぶりのブギーポップシリーズの新作。約1年ぶりです。イラストのほうも絵柄がだいぶ変わって、知らないで見たら気がつかなかったかもしれません。

今回は登場人物の関係が入り組んでいる感じがします。単純に敵と見方というわけではなく、もしかしたら新たな勢力の登場になる予感がします。

Comments (0)

2011年2月19日 土曜日

WordPress の HTTP API

Filed under: WordPress,プログラミング
タグ:, , , , ,
時間:12時49分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

WordPress には、Snoopy という HTTP 通信用のライブラリが以前から使われています。自前で用意するには結構大変なので、拙作の AmazonLink でも利用しています。

WordPress 2.7.0 では、これに変わるものとして HTTP API が導入されました。ライブラリの変更ではなく、WordPress の持つ機能の1つという扱いです。

導入された段階では実験的な扱いでしたが、次第に多くの部分で使われるようになり、WordPress 3.0 でついに Snoopy が非推奨扱いとなっています。HTTP API が十分熟したと判断したのでしょう。

これを機会に、AmazonLink でも導入してみることにしました。現時点では Snoopy と併用するか完全に切り替えてしまうかは検討中ですが、最終的には完全な切り替えを行うことになると思います。

Snoopy の場合は別のライブラリということで、ファイルのインクルードを行い、Class のオブジェクトを取得し、実際に使用するという3段階の作業が必要です。

  1. include_once(ABSPATH.'wp-includes/class-snoopy.php');
  2. $Snoopy = new Snoopy();
  3.  
  4. $url = 'http://www.example.com';
  5. $Snoopy->fetch($url);
  6. $content = $Snoopy->results;

これに対して、HTTP API の場合は自動的にオブジェクトを取得してくれるので、いきなり実行することができます。WordPress に組み込まれているおかげです。

  1. $url = 'http://www.example.com';
  2. $result = wp_remote_get($url);
  3. $content = $result['body'];

ほかにもいろいろな機能が含まれています。残念ながら本家 Codex でもドキュメントが充実しているとは言えない状況ですので、興味のある方は実際のコードを参照してみてください。ファイルは wp-includes/http.php です。Codex 以上の説明があり、かなり参考になると思います。

ちなみに、自動的にオブジェクトを取得してくれる仕組みですが、内部でそのための関数を呼び出しています。

  1. /**
  2.  * Retrieve the raw response from the HTTP request using the GET method.
  3.  *
  4.  * @see wp_remote_request() For more information on the response array format.
  5.  *
  6.  * @since 2.7.0
  7.  *
  8.  * @param string $url Site URL to retrieve.
  9.  * @param array $args Optional. Override the defaults.
  10.  * @return WP_Error|array The response or WP_Error on failure.
  11.  */
  12. function wp_remote_get($url, $args = array()) {
  13.     $objFetchSite = _wp_http_get_object();
  14.     return $objFetchSite->get($url, $args);
  15. }

その関数の定義はこちら。プライベート関数なので直接利用するのは厳禁です。

  1. /**
  2.  * Returns the initialized WP_Http Object
  3.  *
  4.  * @since 2.7.0
  5.  * @access private
  6.  *
  7.  * @return WP_Http HTTP Transport object.
  8.  */
  9. function &_wp_http_get_object() {
  10.     static $http;
  11.  
  12.     if ( is_null($http) )
  13.         $http = new WP_Http();
  14.  
  15.     return $http;
  16. }

注目するべきは、10行目の static $http; という部分。関数から出てもこの変数は維持され、再利用が可能になります。このような手法をメモ化と言うようです。10年以上プログラムを扱ってきましたが、単語自体知りませんでした。まだまだです。

PHP のメモ化については、次のサイトを参考にしました。

ベンチマーク結果を見るとかなりの高速化が期待できそうです。HTTP 通信を行うプラグインが複数動く場合には効果的かもしれません。最近はコアでも通信を行っているようですし。

Comments (0)

2011年2月11日 金曜日

『ブレイドライン4 アーシア剣聖記』

Filed under: 読書中
タグ:, ,
時間:19時57分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

3巻に続き、4巻も長編構成です。

前巻で強敵の存在に気がついて本気で修行を始めることになった主人公のところへ巫女がやってきたことをきっかけとしていろいろと動き出します。中心となるのは神霊戦。西洋ファンタジーでいう魔法戦ですね。

Comments (0)

2011年2月6日 日曜日

zenbackを試しに導入

Filed under: WordPress
タグ:,
時間:15時51分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

最近多くのブログで、同じような表示を見かけるようになりました。記事の下に、関連した記事やキーワードやはてなブックマークの情報を表示しているあれです。

気になったので調べてみると、zenbackというサービスによるものでした。同じような機能はそれぞれでは存在しましたが、1つのサービスでできるというのは便利そうです。無料で導入も簡単そうでしたので、試しということでこのサイトでも導入してみることにしました。

ちなみに、このサービスを運営しているのは、かつて世界中で人気だったブログソフトの Movable Type を開発・販売し、それを利用したブログサービスの TypePad を運用しているシックス・アパートです。

基本的な導入方法は、規約をよく読み、メールアドレスとパスワードと設置するサイトを申請し、提供されたコードをサイトに張るだけ。必要に応じて、表示したい項目の選択などもできます。最近のウェブ系サービスでは一般的な流れですね。

WordPress ではテーマファイルにコードを追記するだけですが、ASP型のブログサービスを利用している場合は個別に案内がありますのでそれを参考にするといいでしょう。

Comments (0)

HTML convert time: 7.738 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo