スタッフブログ
openpear.orgは、四季の変化と関係なく、順調にパッケージ数を増やしているようで、
すでに100個前後のプロジェクトが公開されています。
今回は、その中から、Services_HTML2PDF ( http://openpear.org/package/Services_HTML2PDF ) を紹介します。
Services_HTML2PDFは、名前の通り、HTMLをPDFに変換するライブラリです。
アシアル株式会社が提供しているHTML2PDF.BIZ ( http://html2pdf.biz ) というサービスを利用して、指定したサイトのサムネイルをPDFで出力します。
実は、サービス名にHTML2PDFとついているので、PDF出力しかできないと思われがちですが、PDFの他にPNGとして出力する機能があるので、これを利用すると、ウェブサイトのスクリーンショットを集める事もできます。
Services_HTML2PDFをインストールして以下のコードを実行すると、RYUSウェブサイトのトップページのサムネイルをpngとして保存します。
require_once 'Services/HTML2PDF.php';
//PNG
function example_png()
{
$pdf = Services_HTML2PDF::convert("http://ryus.co.jp/", 'PNG');
if (PEAR::isError($pdf)) {
print($pdf->getMessage() . "\n");
exit();
}
file_put_contents(dirname(__FILE__) . '/hoge.png' , $pdf);
}
example_png();
このライブラリで利用しているのは、無料版のAPIなので、機能制限があります。
本格的に利用する場合は、HTML2PDF 機能比較 ( http://html2pdf.biz/comparison.php ) を参考に、有料版を検討してみるのもよいでしょう。
なおとです。
メールをPOP3で受信するプログラムを書いていて気づいたことをメモしておきます。 今回はPEARライブラリのNet_POP3を使いました。
loginメソッドはマニュアルの記述が古くて、 誤りがあるようでした。
boolean Net_POP3::login (string $user string $pass boolean $apop)
このようなシグネチャとともに、
string $user - 使用するユーザ名。 string $pass - 使用するパスワード。 boolean $apop - APOP を試みるかどうか。
という説明が見えます。
私はこれを見て、APOPを使わないという意図で3番目のパラメータにはfalseを指定しました。 しかしこのとき予想に反して、「サポートしていない認証方式」という意味のエラーとなってしまいました。
そこでソース(Net/POP3.php)を確認しました。
/** * Performs the login procedure. If there is a timestamp * stored, APOP will be tried first, then basic USER/PASS. * * @param string $user Username to use * @param string $pass Password to use * @param mixed $apop Whether to try APOP first, if used as string you can select the auth methd to use ( $pop3->login('validlogin', 'validpass', "CRAM-MD5"); * Valid methods are: 'DIGEST-MD5','CRAM-MD5','LOGIN','PLAIN','APOP','USER' * @return mixed true on Success/ PEAR_ERROR on error */ function login($user, $pass, $apop = true)
どうやら3番目のパラメータは用法が違っているようです。 実際には、認証方式を文字列で与えるか、もしくtrueを受け取ります。 falseあるいはnullでは上記のエラーになります。 なお、3番目のパラメータを省略することはできて、その場合はtrueもしくは'USER'を指定したときと同じ動作になります。
私はここまでで問題解決できたのですが、他に気になる部分がありました。
//Disabling DIGEST-MD5 for now
検証していないのですが、どうもDIGEST-MD5は使用不可の状態になっている模様です。 APOP認証したいときは、チャレンジ・レスポンス方式のCRAM-MD5を選択することになりそうです。
またついでにエラーハンドリングのための豆知識をひとつ書いておきます。
Net_POP3のメソッドは、loginを除いて、失敗したときに返り値falseを返します。 そしてloginだけはPEAR_Errorオブジェクトを返します。
実際のコーディングでは、loginの返り値だけPEAR::isErrorでチェックして、他は
$ret = $pop3->getSize(); if ($ret === false) { throw new Exception('POP3: cannot get mailbox size.'); }
といったように、返り値をチェックして例外をthrowしなおすという繰り返しにしました。
エラーハンドリングのやり方には種々あると思いますが、もうすこしうまい書き方ができないものかとおもいつつ、こんな形で妥協しています。
今回も、私がopenpear上で公開しているライブラリについて紹介します。
Services_Prowl ( http://openpear.org/package/Services_Prowl ) は、iphoneアプリケーションのProwlに通知を送る為のAPIをラップしたものです。
これを利用すると、以下のように、PHPからiPhoneやiPod Touchに対してメッセージを送れます。
メールの新着通知や、IRCなどのキーワード反応、Twitterのdirect messageやmentionなど、
リアルタイムに把握していたい情報をProwlに送信する事で、パソコンを開いていない時でも
最新の情報を知る事ができるようになります。
Services_Prowlは、現在の所、エラーハンドリングの実装待ち状態で公開されていません。
利用するには、svnからダウンロードする必要があります。
$ svn export http://svn.openpear.org/Services_Prowl/trunk Services_Prowl
と実行する事で、エクスポートできます。使い方は以下のようになります。
require_once 'Services/Prowl.php';
$api_key = 'あなたのAPI KEY';
$prowl = new Services_Prowl($api_key);
$result = $prowl->push('Test message from Services_Prowl at ' . date('Y-m-d H:i:s'));
var_dump($result);
通知系のアプリケーションはパソコンにもありますが、作業中にずっとチカチカされると
集中力が削がれるので、こういったものを外のデバイスに逃がすという使い方もありだと思います。
アイデア次第でいくらでも便利になると思うので良い使い方があれば教えてください。
Services_Photozouは、フォト蔵 ( http://photozou.jp/ ) という写真共有サービスが
提供しているAPIをPHPで使いやすいようにしたライブラリです。
フォト蔵は、無料で毎月1GB-3GBまで写真をアップロードできるので、
写真の保存先としてはかなり優秀なのですが、
自分が写真を保存するだけでなく、他のユーザがクリエイティブコモンズライセンスで登録した写真を検索できるのもメリットです。
今回は、Services_Photozouでクリエイティブコモンズ画像を探すサンプルコードを紹介します。
$photozou = new Services_Photozou($user, $password);
$results = $photozou->photo_list_public(array(
'type' => 'cc',
'license' => 'by',
'limit' => '30',
));
$items = "";
foreach ($results as $photo) {
var_dump($photo);
}
var_dump($items);
?>
綺麗な写真がたくさん公開されているので、素材として利用するのもアリだと思います。
前回はRPMを作成する所まで書いたので、今回はその続きのYUMリポジトリを作成しようと思います。
まず、必要なパッケージをインストールします。
% sudo yum install createrepo
次にApache等のウェブサーバで公開する為のディレクトリを作成し、RPMファイルを置きます。
% mkdir -p {DocumentRoot}/yumrepository/centos/5/i386
% cp RPMS/i386/php5-5.2.10-0.i386.rpm {DocumentRoot}/yumrepository/centos/5/i386/
RPMファイルを置いたら、createrepoコマンドでリポジトリを作成します。
% createrepo {DocumentRoot}/yumrepository/centos/5/i386
yumコマンド実行時に作成したリポジトリを見にいくように/etc/yum.repos.d/test.repoにファイルを作成します。
[test]
name=test yum repository
baseurl=http://localhost/yumrepository/centos/$releasever/$basearch
enabled=1
gpgcheck=0
とりあえずテスト用のリポジトリなので、gpgcheckはOFFにしてあります。
ちゃんと設定が出来ているか確認します。
% yum list | grep php5
2189:php5.i386 5.2.10-0 test
ここでちゃんとパッケージが表示されていればOKです。
他のリポジトリにあるRPMの方がバージョンが新しい場合そちらのRPMが表示されるので、パッケージ名を変えるとかしないと面倒なことになるかもしれません。
まあ、CentOSは基本的にバージョンが古いので問題ないですが……
こんにちわ。なおとです。
自宅用のPCとして、ネットトップを購入しました。 ネットトップとは、最近satoさんが話題に取り上げましたが、ようするに小型のパソコンです。
私が選んだのは、マザーボードにASRock製のものを使った、OEMブランドのベアボーンキットです。 ハードウェアの構成は、以下のようになります。 モニタなしOSなしで、総額約5万円でした。
- CPU Intel Atom 330 1.6GHz
- チップセット NVIDIA ION
- メモリー DDR2-800 4GB
- ディスク SSD 64GB
OSはUbuntuにしました。
使ってみるとこれがすばらしく、何もかもが速い気がします。 DVD品質の動画再生もまったくスムーズです。 ディスプレイはもっていた17インチ液晶モニタを使います。 いままでアナログの口だけ使っていたのですが、DVI-Dで接続して無駄なく使います。
体感速度ですが、インストールにもあまり時間がかからず、それにスイッチ入れると1分以内で起動するのがうれしかったです。
さてOSのインストール。はじめに日経LINUX 7月号の付録の「Ubuntu 9.04 Desktop 日本語 Remix CD」を使ってインストールしました。 ここでちょっと思いたち、64bit対応のCPUということで「Ubuntu 9.04 Desktop amd64」も試しにインストールしました。
こちらのインストールには、Ubuntuの公式サイトからディスクイメージを入手して使いました。 これも問題なく、快適に動きます。
しかしながら64bitという満足感もそれほどでもなく、用途としても不必要だったこともあって、結局もとの32bit版を入れなおしました。
WebブラウザのFirefoxを、バージョン3.5系を使いたいので追加でインストールしました。 名称がShiretokoというコードネームになっています。 また、サイトの表示は日本語でも問題ないのですが、UIが一部を除いて英語表記になっています。 設定を確認すると日本語用の言語パックが互換性の問題で無効になっていました。 ちょっといじっただけでは改善する見込みがなさそうなので、追及するのは諦めました。
エディタはEmacs 22 Gtk、日本語変換にPrime、ターミナルのROXTermを追加しました。 今のところ使わないですがLXDEもインストール。 仕事のPCと同じアプリをつかえて、快適度もアップです。
またsource.listにMedibuntuのリポジトリも追加しました。
さてこのPC、この先5年は使いたいと思っています。 SSDの場合は物の性質として寿命が短いという話があります。 それでもディスクは1年もてば問題ないと考えているので、それも気になりません。 念のため、ディスクの約半分の領域を空けた状態で、半分だけ使ってUbuntuを入れてあります。 エラーが多くなるなどなった段階で残りの半分の領域を使うようにすれば、倍長持ちするということを狙っています。 でもその前に、Windows 7が発売されたら、それをインストールするのに使うと思います。
subversionの.svn内のファイルは、バージョン毎の互換性が低いです。最新のsubversionでcheckoutしたものを古いバージョンのもので操作しようとすると、操作できないことがよくあります。マイナーバージョンの変化時によく起こります。
私はVMのUbuntuをsambaで接続して、WindowsからTortoiseSVNで操作する時と、Ubuntu上からsvnコマンドで操作することの両方を行うことが多いのですが、ここでTortoiseSVNをうっかり最新の1.6系にしてしまうと、Ubuntu(jaunty)のパッケージは1.4系なので、Ubuntu上での操作ができなくなります。
ここでUbuntu側のsubversionを最新にする必要がありますが、ソースからインストールは避けたいところです。
どこかのリポジトリからaptでインストールするのが綺麗です。
リポジトリを探してみたところ、launchpadに、1.6のUbuntu用パッケージがありました。
「Install packages:」のところの、「Display sources.list entries for:」から、自分のUbuntuのバージョンを選択し、その下の
deb http://ppa.launchpad.net/mdiers/svn16/ubuntu jaunty main
deb-src http://ppa.launchpad.net/mdiers/svn16/ubuntu jaunty main
launchpadは、sourceforge等のような、オープンソースプロジェクト管理向けサービスで、Ubuntu自体もlaunchpadで管理されています。
また、launchpadにはPPA(Personal Package Archive)という機能があり、上記のsubversionのように独自で作ったパッケージを簡単に配布できるようになっています。
subversionの他にも、OpenOffice.orgや、Firefoxなどの最新のものとかが、探せば出てきます。
ただし、多くのものは公式のパッケージではないことに注意してください。
今日は、掲題のとおりrsyncに関連した記事を書こうと思います。
複数台のサーバを管理していると、所有者がrootのファイルを別のサーバにrsyncする必要が出てきたりします。
このとき、SSHなどでrootがログイン出来るように設定されているサーバの場合は特に面倒はないのですが、セキュリティの関係などもあってrootがSSHログイン出来る環境は早々ないと思います。
ググってみたところ、こちらのブログのように「同期元のサーバ(以下、元サーバ)から同期先のサーバ(以下、先サーバ)にファイルを送る」形で同期させれば何とかなりそうだったのですが、幾つかの理由から「先サーバから元サーバにファイルを受け取りに来る」形だったので、ちょっとばかり手こずってしまいました。
最終的に、mixiでマイミクの方にアドバイスを頂いたりしながら色々と試したところ、何とか実現出来たので書いてみます。
普段使用しているLinuxがCentOSなのでYUMでインストールできるパッケージが古く、一々最新のバージョンをソースからインストールするのが面倒になってきたのでRPMを作る環境を整えてみました。
今日は、mod_rpafというapacheモジュールについて書こうと思います。
セキュリティや負荷分散を目的に、リバースプロキシを利用することがあると思います。
リバースプロキシを利用する場合に困りやすい点として代表的なものの一つが、「アクセス元のIPアドレスが全てプロキシのIPになってしまう」ことです。
この状態だと、アクセス解析や、IPアドレスによるアクセス制限、あるいは携帯振り分けなどが正常に動作しません。
そこで、サーバを管理している人にお勧めしたいのが、mod_rpafです。