linux」タグアーカイブ

Inkscape Output CMYK

outputpro_extension_i

概要

Inkscape は標準でCMYKに対応していません。RGBからCMYKに変換するにはGimpのプラグインを使ったり、Scribusで変換させたり、ウェブサービスで変換する方法があります。印刷などで業者に依頼する場合は、殆どの場合CMYKでの入稿です。RGBで入稿できるところもあるかもしれませんが、業者さんで変換されています。Windowsには対応していないのですが、Linuxで動くCMYKで出力できるエクステンションがあるので紹介します。

追記 2012/07/03

Windowsでも変換可能なエクステンションもあります。ImageMagickもインストールする必要がありますが、これについてはまた気が向いた時に書きます。

続きを読む

PHP get_browser() ユーザのブラウザの機能を取得

概要

標準では使えないget_browser()関数を使うために、browscap.iniファイルをダウンロードし、php.iniの設定を行う。

最近ボットのアクセス頻度が多くなったため、ボット判定のために何かないかなと思っていたところ、この関数を見つけたのでメモ。

参考URL

PHPマニュアル

ダウンロード

browscap.ini
ここからphpのものをDLする。
/etc/php.d/browscap.ini
に配置する。

どこか適当な場所に配置する。

設定

/etc/php.ini
browscap = /etc/php.d/browscap.ini
browscap = 配置したパス
※httpdの再起動
/etc/rc.d/init.d/httpd restart

ファイルの更新

browscap.ini は PHP にはバンドルされていません。 しかし、ここで最新の » php_browscap.ini を入手することができます。

browscap.ini は多くのブラウザに関する情報をもっていますが、 データベースを最新に保つのはユーザーによる更新に依存しています。 ファイルのフォーマット自体を見ればおおよそのことがわかります。

上記のようにマニュアルに書いてある。
i.e.古くなったら自分で更新してねってこと。。。

You shall not mirror the files without prior authorization.

※自動化すると、アクセスを拒否されるおそれがあるのでしないほうがいいです。

[訂正]自動化するのはOKだけど、24時間以内に10回以上のアクセスをすると、アクセス制限がかけられます。

403-6 Errorが表示されたので、google先生に翻訳の相談をしながら、問い合せてみました。
つくったShellをテストするために何度か実行したら上のエラーが表示されたとういうのは内緒。。。

Bot判定のサンプル

	// member var
	public $_bots = array(
	    'Googlebot',
	    'bingbot',
	    'NHN Corp',
	    'MLBot',
	    'SurveyBot',
	);

	// method
	/**
	 * Botを判定する
	 * @return boolean
	 */
	function isBot($isBrowsercap = true, $ua = null){
		if($isBrowsercap == true){
			$browser = get_browser(null, true);
			if($browser['crawler'] == true){
				return true;
			}
		}
		if ($ua == null) {
			$ua = $_SERVER['HTTP_USER_AGENT'];
		}
		$botlist = "/(" . implode("|", $this->_bots) . ")/";
		if (preg_match($botlist, $ua)) {
			return true;
		}
		return false;
	}

get_browserを使った場合でも弾けなかったものを、自分で追加して弾くようにする。

判定方法

判定方法は、ipアドレスではなく、User Agentからキーワードが含まれていないかを検索することにした。
なぜなら、ipアドレスの管理は大変だから。。。
使われていたものが急に使われなくなったり、使われていなかったものが急に使われたりするようになることもあるから。

Linux Apacheの設定 [MaxRequestsPerChild]

概要

Web Serverのレスポンスが時間が経つにつれて遅くなる現象に見舞われていた。
でもhttpdをリスタートすると、また早くなる。
そこでmuninをインストールしサーバの状態を監視してみることにした。
その結果、時間経過とともに、iowaitが増え、さらにswapも増えていることが分かった。
レスポンスが遅くなった原因は、おそらく使用メモリが増え続けて、メモリリークのような状態になっていたことだろう。。。
ってことで、apacheの設定をいじって、改善したことをメモ。

MPM(Multi Procesing Module)

  • リクエストの処理部分。
  • preforce, workerなどがある
  • PHPを使うならpreforceがいいとのこと

httpd.confの設定

/etc/httpd/conf/httpd.conf

MPMのpreforkの設定に
MaxRequestsPerChild
がある。
これは、子プロセスが扱うリクエスト数の制限数を設定する。
設定した値までプロセスが存在し続けるようだ。
したがって、メモリの割に大きな値を設定してしまうと、swapの領域までメモリを食い続けてしまうってことらしい。

そこで、この値を少なくすることにした。
とりあえず4000に設定されていたものを1000に変更すると、
swapの領域がかなり減った!!
200とか100に設定している人もいたので、様子を見ながら変更しようと思う。

PHPで作る携帯サイトデベロッパーズガイドを参考に、以下のツールもインストールして速度を向上させた。

Alternative PHP Cache

  • APCと略される
  • PHPのextension
  • 実行コードをキャッシュしてくれる

インストール等は書籍を参考に。。。

これらの設定で、ロード時間も今まで、
最小1秒
だったのが、
最小0.5秒
ぐらいにまで減った。

もっと早くに対策をするべきだった。。。