mPDF5.xでTTFフォント使用時に一部の文字が四角で出力

Written in 2012年04月23日 by | コメントする( 2件 )

mPDF5.4を使って、PDFのレポートを出力していたが、TTFフォントで日本語を出す際に一部の文字が四角の形で出力されてしまう原因不明の不具合がでた。フォントのサブセットを埋め込む際の問題らしいが、散々検証してようやく解決できた。。。結構みんな困ってるんじゃなかろうか。。。

その四角をコピーして、秀丸とかに貼ると、復元される。間違いなく、文字コードの埋め込みではなく、フォント自体の埋め込みの問題です。

これはTTFフォントのサブセットをPDFに埋め込む際に、
Supplemental Ideographic Plane (SIP i.e. U+20000 to U+2FFFF)を扱うメソッドの方が動作してしまうかららしい。

http://mpdf.bpm1.com/forum/comments.php?DiscussionID=470&page=1#Item_11

が参考となりました。

mPDFがフォントのサブセットを埋め込む際に、そのフォントファイルを調べ、そのフォントにSIP(またはSMP U+10000+1FFFF)が含まれている場合、問題の原因となっているその第二のメソッドが使われるのである。それはドキュメント内でそれらの文字が使われているか否かに関わりません。(mPDFが水面下で融通をきかせてしまうのです。) しかしながら、該当フォントをconfig_fonts.phpの$this->BMPonly配列にくわえることによって、この挙動を上書きできます。こうすることでmPDFに第一のメソッドを使うように強制することができます。ただし、SIPの文字は表示されなくなります。

この設定をするとUnicode Basic Multilingual Plane (BMP i.e. U+0000 to U+FFFF)内の文字だけが利用可能な状態となります。

/mpdf54/config_fonts.phpの307行の
$this->BMPonly に、使用したいフォント名を追加してやる。(”mspgothic”など。)

例)

$this->BMPonly = array(
    "mspgothic",
    "msgothic",
    "mspmincho",
    "msmincho",
    "ipagothicp",
    "ipagothic",
    "ipaminchop",
    "ipamincho",
    "dejavusanscondensed",
    "dejavusans",
    "dejavuserifcondensed",
    "dejavuserif",
    "dejavusansmono",
);

MySQLで「Host ‘hogehoge.com’ is blocked because of many connection errors」が発生

Written in 2012年04月21日 by | コメントする( 0件 )

たとえばPHPなどでは以下のようなエラーメッセージが出力される。

Warning: mysql_connect() [function.mysql-connect]: Host 'hogehoge.com' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' in /home/hoge/public_html/somedir/somescript.php on line 50

■原因

MySQLがそのホスト(hogehoge.com)から多くの接続エラーを受けた場合に発生します。接続エラーの大量発生後、MySQLサーバは何か問題(クラッカーからの攻撃など)が発生したと判断し、このホストからの接続を拒否するようにします。

デフォルトでは、接続エラーが 10 回発生すると、mysqld はそのホストを拒否します。この数はMySQLのmax_connect_errors変数によって変更できます。

参照URL: http://dev.mysql.com/doc//refman/4.1/ja/blocked-host.html

 

■対処

①シェルで以下のコマンドを実行する

# mysqladmin flush-hosts

②以下のSQLを実行する

FLUSH HOSTS;

 

■事象発生の確認

上記エラーメッセージが出力されることが事象発生を知らせるものであるが、MySQLサーバ側でその状態を確認することはできないのか。ある程度はできる。

接続エラーが発生するとそれはホストキャッシュ(host cache)に記憶される。このホストキャッシュとは、MySQLがDNSからIP、ホスト名を正引き、逆引きした結果をキャッシュしておくもので、同時に、この接続エラーの状況を記憶しておくものでもあります。それでこのキャッシュを上記のコマンドでフラッシュしてやれば解決するのである。ホストが拒否された場合、これが唯一の解消方法です。

さて、このホストキャッシュを閲覧できるなら状況を把握できるのだが、閲覧するためのコマンドは存在しません。確認できるSQLコマンドを追加するパッチを開発した方もおられるようだが。

しかし、いくつか得られる情報はある。

①error log と general query log

–log-warningsオプションをつけてサーバを起動すると、error logに以下のようなエラーメッセージが記録される。

010301 14:38:23  Aborted connection 854 to db:
'users' user: 'josh'

また、general query logが有効にされていると、問題の原因の種類が書き込まれる。

②ステータス変数「Aborted_clients」「Aborted_connects」

以下のSQLを実行するとこのステータス変数を取得できる。

SHOW GLOBAL STATUS WHERE `Variable_name` IN ( 'Aborted_clients', 'Aborted_connects' );

ホスト拒否の根拠とされるのは、どちらのステータス変数なのか、あるいは両方なのかはわからないが、それぞれの変数の意味は以下の通りです。

Aborted_clients

クライアントが接続できたものの後で不適切に切断されたり終了されたりした場合、MySQLはこのステータス変数を増加させます。また、error logにAborted connectionメッセージが書き込まれます。このステータスになる原因は以下の通りです。

  • クライアントプログラムがmysql_close()をコールせずに終了した
  • クライアントが何のリクエストもしないままwait_timeoutまたはinteractive_timeoutの秒数を経過してスリープしている場合
  • クライアントプログラムがデータ転送中に突然に終了した場合

Aborted_connects

クライアントがコネクトすらできなかった場合にサーバはこのステータス変数を増加させます。コネクション試行の失敗は以下の理由で発生します。

  • クライアントがデータベースへの接続権限を持っていない
  • クライアントが正しくないパスワードを使用している
  • コネクションのパケットに正しい情報が含まれていない
  • コネクションのパケットの取得にconnect_timeout秒以上を要した

これらの種類の問題が起きている場合、誰かがサーバに侵入しようとしていることを意味しているかもしれません。これらのタイプの問題に関するメッセージは(有効にさていれば)genral query logに記録されます。

そのほかにもAborted_clientsやAborted_connectionsになる理由はあるが詳細は以下のURLを参照してください。

参照URL: http://dev.mysql.com/doc/refman/5.0/en/communication-errors.html

洋食ディナー

Written in 2012年02月04日 by | コメントする( 0件 )

2012-0204-1927160332012-0204-1942139152012-0204-195100423

2012-0204-2020203222012-0204-204755398


うちから車で40分くらいのところにある洋食屋カレントでディナーしました。本当に仕事が丁寧なシェフです。こんな田舎でこんな料理をいただけるのは本当に感激です。記念日に使ったり、誰かを連れて行ったりできるお店です。お気に入り。

アボガド・マグロ・イクラを使った前菜、パプリカのスープ、メダイのソテー、豚肩ロースのパイ包み。ワインを一本あけました。

なんちゃって鈑金

Written in 2012年01月31日 by | コメントする( 0件 )

2012-01-30 13.03.472012-01-30 15.26.172012-01-30 16.41.26

うちの軽自動車の右後部を駐車場で派手にへこませた。(私ではない。。。)

それで、年末年始にかけて、少しずつ自分で鈑金やってみた。へこんだ状態の写真が無くて残念だが、左の写真が内側のカバーを開けて、ハンマーでたたいてある程度整えた後に、グラインダーにべベルを取り付けて磨いて、パテを盛った様子。ドア付近の角は相当盛りました。。。。

真ん中の写真は、パテを紙やすりで整えた後、アスクルのカタログのページをはぐって、マスキングテープで張って、マスクした状態。後程取っ払ってぼかしを入れることになったが。

右の写真が完成図。塗料は、タッチペンにエアー缶をつけてスプレーにしたもので、量に限りがあるため、大胆に広範囲をハンマーでたたけなかったせいもあり、妥協のへこみが残っているのが悲しい。塗装したら小さなへこみが目立つようになった。。。。

次回はもう少しうまくできるでしょ。。。

シャトー・シッフル・メルル2005年

Written in 2011年12月21日 by | コメントする( 0件 )

2011-12-21 19.51.542011-12-21 19.58.42

出資している会社の忘年会に欠席したので、その分、Amazonの商品券をいただきました。それでワインを購入。フランスの「シャトー・シッフル・メルル2005年」。

2011-12-21 19.52.18

ワインはあまり詳しくないのでどんな料理と合うかわかりませんが、イタリアンを作りました。

パスタはズワイガニのクリームソースでコンキリエ、セコンドは豚肉のシチリア風。ワイン自体はコクはありますが酸味のしっかりしたワインで、渋みは少ないワインで、とても飲みやすかったですね。

ワインもいろいろ知りたいですが、数も多く、値段の割にすぐに飲んでしまわないといけないので、こだわり出すと危ない趣味になりそうなので、適度に楽しむ程度にしたいですね。

オイルサーディーン

Written in 2011年12月18日 by | コメントする( 0件 )

2011-12-18 11.02.38

お向かいのカフェあずきのマスターが干してくれたイワシでオイルサーディーンづくりに挑戦。(作り方も教わりました。多少アレンジ。)にんにく、ローリエ、ローズマリー、イタリアンパセリ、赤唐辛子、粒黒こしょうを入れてオリーブオイルで15分ほどゆっくり加熱しました。

おいしくできました。塩分は控えめな感じでしたが、やっぱり数を食べるとのどが渇きますね。

俺のイタリアン八重洲店に行ってきた

Written in 2011年12月07日 by | コメントする( 0件 )

2011-12-07 20.24.572011-12-07 20.39.39

新橋で見つけた「俺のイタリアン」というバール。三ツ星レストランで修業したシェフが料理するのだが、お値段が超お得。開店三か月ほどのころに新橋の本店に行って驚いた。お通しのパルミジャーノ・レッジャーノの塊だけでかなりお酒飲める。安くてグラスワインもたっぷり。ボトルでなら原価に近いお値段設定なので高いワインほどお得みたいです。何人かで行ったら、絶対ボトルがおすすめ。

早くも八重洲店ができたというので行ってみた。牛肉のカルパッチョ五百円台、タコと青のりのピッツァ五百円台、グラスビール五百円台、グラスワイン五百円台。しっかり飲み食いして2,500円程だ。とっても幸せになって、東京出張を終えた。また行きたい。

家の中で炭火焼き鳥

Written in 2011年11月27日 by | コメントする( 0件 )

2011-11-27 20.34.12

七輪で炭をおこし、家のガスコンロの上において、換気扇回して焼き鳥やった。鳥レバー、軟骨は塩で焼いて、日本酒とともにいただき、ネギマは自家製のたれで焼いて、どんぶりにのせて焼き鳥丼でがつがついただきました。多少手間がかかったけど、思いのほかおいしかった。またやりたい。

64bitのLinuxサーバにPHPを./configureする際にlibjpeg, libpng, ldapなどがない!と怒られる

Written in 2011年05月20日 by | コメントする( 0件 )

64ビットのLinuxサーバにPHPをソースインストールで./configureする際に、予期せず以下のようなエラーに遭遇したことはないだろうか。

configure: error: libjpeg.(a|so) not found. php 5.2.17

configure: error: libpng.(a|so) not found. php 5.2.17

単にlibjpeg-devel, libpng-develがインストールされていないなら、

yum install libjpeg-devel

yum install libpng-devel

でインストールすればいい。しかし、これはもうやったのに、上記エラーが出る場合、32bit(i386)のライブラリがインストールされていない可能性がある。

# ls -la /usr/lib | grep libjpeg
lrwxrwxrwx   1 root root      17  5月 20 15:58 libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx   1 root root      17  5月 20 15:58 libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x   1 root root  134268  1月  6  2007 libjpeg.so.62.0.0

のように、/usr/lib の中に、ライブラリが入っているか確認するといい。もしかしてなかったりしませんか? 次に64ビット用ライブラリも確認してみよう。

# ls -la /usr/lib64 | grep libjpeg
lrwxrwxrwx  1 root root      17  5月 20 15:17 libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx  1 root root      17  7月  2  2010 libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x  1 root root  138936  1月  6  2007 libjpeg.so.62.0.0

こちらは有ったりしませんか?
なんだ、64bitのしかないなら、

./configure –with-libdir=lib64

のように指定すればいいではないか。でもやってみると、今度は、mysql_clientがないとか言われたりする。今度は32ビット版のライブラリしかないものが見つからなくなってしまう。。。困ったもんだ。

もし、yumでインストールしたlibjpegやlibpngのライブラリが64ビット版はあり、32ビット版がないという状況の場合、yumでi386のパッケージを除外する設定がされている可能性があります。普通、libjpeg, libpngは、yumインストールすると32ビット版、64ビット版の両方がインストールされるはずだからです。以下のように確認してみよう。

# cat /etc/yum.conf

設定の中に、

exclude=*.i386

のような記述があればコメントアウトする必要がある。これでyum install libjpeg-develで、32ビット版のライブラリもインストールされるはずだ。

/etc/yum.repos.d/

の中にあるファイルに関しても確認してみル必要があるかもしれない。

 

弾丸草津温泉ツアー

Written in 2011年04月29日 by | コメントする( 0件 )

草津温泉に弾丸日帰りツアーをしてきた。出発の朝、道ずれにした夫婦と行先を決めた。彼らは草津の温泉がお気に入り。さすがにゴールデンウィーク初日とあり、また、出発が朝7時で早朝というわけではなかったので、関越自動車道が渋滞した。行きに8時間超の時間がかかってしまった。帰りはすいすいで5時間でしたが。そして、滞在が4時間。。。

温泉は硫黄成分で、とてもよかった。温泉に入ったって気分ですね。西の河原、大滝乃湯の2か所に入れました。西の河原は500㎡もある巨大な露天風呂。洗い場はない。解放感がとてもいいですね。大滝乃湯は、施設名の由来となった大きな湯滝のある露天風呂のほか、大浴場・サウナ、そして湯温の異なる浴槽で低温から順に入る「合わせ湯」(時間帯で男性、女性の利用が区切られている。)もあります。

4月末で千葉は新緑の季節に入りつつありましたが、草津は気温が低く、まだサクラが楽しめました。2度春を楽しみつつ温泉につかれて、リラックスできました。4時間ですが。。。私の場合、仕事をしていなければ何をしててもOFF気分なので、渋滞でも楽しめたのですが、やはりこのくらいの距離になってくると疲れますね。猫がいるので宿泊は難しいのですが、次は1泊くらいしたい。。。

おそば屋さんがたくさんありました。舞茸の天ぷら付きのそばを食べました。帰りは道ずれの人に運転してもらえることになったので、群馬の地ビール(ピルスナー)も頼みました。七百円以上した。よく見るとなぜか、「発泡酒」だった。。。地ビールで発泡酒とは。苦みが強めでした。帰りに別の種類の群馬の地ビールを買ってきた。今度は品名「ビール」です。

なかなか楽しく、過酷な弾丸ツアーでしたとさ。