12月 29

年明けから本気だす為に、WEB制作に便利なチートシート(Cheat Sheet)のまとめです。主に日本語版かつPDFで入手できるものを集めました。日本語版が見つからないものは、非日本語版も掲載しています。

1.CSSのチートシート

from CSS Cheat Sheet 日本語版 | textdrop

2.正規表現のチートシート

from 正規表現 Cheat Sheet 日本語版 | textdrop

3.PHPのチートシート

from PHP Cheat Sheet 日本語版 | textdrop

4.MySQのチートシート

from 漢(オトコ)のコンピュータ道: MySQL Cheat Sheet 1.0

5.SEOのチートシート

from SEO基本技術のチートシート(トラの巻)を作ってみた | Web担当者Forum

6.WordPressのチートシート

from WordPress Help Sheet 日本語版 | textdrop
※その他WordPressの開発用のさまざまなチートシート→WordPressチートシートいろいろ・SEOとかテンプレートタグとか – かちびと.net

7.mod_rewriteのチートシート

from mod_rewrite Cheat Sheet 日本語版 | textdrop

8.Subversionのチートシート

from Subversion Cheat Sheet 日本語版 | textdrop

9.Gifのチートシート

from Git Cheat Sheet 日本語版 | textdrop

以下、英語版です。

10.HTML5のチートシート

from HTML 5 Cheat Sheet (PDF) – Smashing Magazine

11.jQueryのチートシート

from jQuery Cheat Sheet
jQueryは日本語版のチートシートが無かったけど、いずれ誰か作るだろう。とりあえず jQuery 1.3.2 日本語リファレンスがあれば充分。

12.htaccessのチートシート

from the jackol’s den » htaccess Cheatsheet
※htacdessのチートシートの日本語版はどっかにあった気がするんだけどな~

13.PHPの各種演算結果のチートシート

from BlueShoes: PHP Cheat Sheet

14.実体参照文字のチートシート

from XHTML Character Entity Reference

15.adobe Flash CS4 キーボードショートカットのチートシート

from

16.Unix/Linuxのコマンドのチートシート

from Unix/Linuxコマンドリファレンス – よたらぼ 保管庫

17.ActionScript/Tweenerのトランジションのチートシート

from 超訳:Tweenerドキュメント&言語リファレンス

18.ActionScript/Flexのクラス・API相関図ポスター

from Ted On Flash: Cube Wallpaper – AS3 and Flex API Posters

こうやってみると、textdrop – http://www.textdrop.net/さんによる日本語化されたものがおおいですね。ありがたいです。

僕もなにか作ってみようかな。

Popularity: 8% [?]

written by ANN

7月 29

phpにはstrip_tagsという、タグを取り除く関数があるが、特定のタグに挟まれた部分をごっそり削除したい場合、これは該当しない。PEARを探してみたけど、それっぽいのを発見できず。しょうがないので正規表現で書いてみる。(むしろ備忘録)

具体的にどういう時に使うかというと、PHPからの出力時に、

  • <style>~</style>タグの中身を全部削除したい
  • <script>~</script>タグの中身を全部削除したい
  • コメント用の独自タグを、出力時にタグの中身もろとも削除したい。

などなど。テンプレートHTMLの編集時には必要だけど、最終的な出力時にはいらないタグとか。
また、RSSなど、出力先によっては、本文中に含まれるscriptタグが不要な場合などに。

>>>>>続きを読む

Popularity: 21% [?]

written by ANN

5月 22

ニーズが無いだろうけど、書く!

PHPのGDで巨大な画像ファイルを処理すると、負荷がすごい。そこでMacのサーバ限定だけど、sipsコマンドを使うことで低負荷/高速/高画質の画像変換ができるんじゃね?というのが前回のエントリーの内容。

実際に某サーバーの処理を書き換えて試してたところ、うまくいく場合と、いかない場合があることに気づいた。なかなか原因がわからなかったが、やっとわかったので、sipsコマンドをPHPから呼び出す際の注意点について書いてみたい。

sipsコマンドの使い方としては、こんな感じ。

/usr/bin/sips --resampleHeight 100 変換前ファイル --out 変換後ファイル

php内では、ふつうにsystem()でOK.

PHP:
  1. $srcfile = "/var/home/hoge/fuhihi.jpg";
  2. $dstfile = "/var/home/hoge/fuuu.jpg";
  3. system("/usr/bin/sips --resampleHeight 100 $srcfile --out $dstfile");

このとき、出力側のファイルとなる$dstfileのパスに、シンボリックリンクが含まれていると、sipsが書き出しに失敗する。

なぜか、入力側($srcfile)にシンボリックリンクが含まれていても問題ない様子。

画像変換した後のファイルの出力において、なぜ区別する必要があったのだろうか。単純にバグだろうか。
いや、普通に考えて画像変換程度で、区別する必要はないだろう。

しかし、そうなってる以上、考えてもしょうがないで対策。

PHP:
  1. $srcfile = realpath("/var/home/hoge/fuhihi.jpg");
  2. $dstfile = realpath("/var/home/hoge/fuuu.jpg");
  3. system("/usr/bin/sips --resampleHeight 100 $srcfile --out $dstfile");

単純に、sipsに渡すパスに対して、realpath()を通してやることで、シンボリックリンクが実体のパスになるので、これで問題なし。

便宜上、PHPで使う場合…という感じで書いたが、system()からはshell経由で呼ばれるはずなので、shell上でも同じ問題が発生します。

ただし、あくまで出力ファイルのパスにシンボリックリンクが含まれているのがまずいだけであって、たとえば、カレントディレクトリにシンボリックリンクが含まれていても、sipsコマンドのパスに含まれてなければOKです(ややこしい。だからなかなか原因がわからなかった)

最近は、OS X Serverを使ったりしてるので、その周りも後ほど書いてみたい。

Popularity: 11% [?]

written by ANN

4月 16

phpで画像処理する定番といえば、組み込みのGD(PHP: GD - Manual)が定番なのだけれど、どうも処理元の画像が大きいと、非常に処理が重たい気がする。

とある画像データベースサイトでは、デジカメで撮影した画像を大量にアップロード・リサイズする必要があり、GDで処理していたのだが、最近のデジカメは1ファイルが12~15Mバイトもめずらしくなく、コレを何十枚と処理していくと、結局、apacheさんの負荷およびCPUの負荷がハンパなく、すぐにLoad avgが急上昇してしまう。

なんとか改善できないかと考えて、サーバがMac(OS X)だから、sipsコマンド【Scriptable Image Processing System(スクリプト可能イメージ処理システム)】が使えないかと考えた。変換処理をコマンドに任せることでapache(httpd)の負荷も減らせるかもしれないし。

- sips 公式テクニカルノート Technical Note TN2035: ColorSync on Mac OS X
- SIPS コマンド - 画像をコマンドラインで - その1 (リサイズ / 回転 / 反転 など) --- --- 脳みその中身-

試しにいくつかリサイズしてみたところ、体感的にはPHP/GDのリサイズより早い気がした。

気がしただけでは面白くないので、実際に簡単なサンプルを作ってベンチマークをとってみた。
つまり、SIPS vs GDである。

>>>>>続きを読む

Popularity: 19% [?]

written by ANN

4月 14

PHPでプログラムの処理速度を調べたりするのに、xdebugを使ったりするのもよいけど、手軽で簡単なのものに、PEARのbenchmarkというのがあります。

benchmarkそのものが入ってない場合は、

$ pear install Benchmark

でOK.(必要に応じてsudoで)

使い方はググればすぐサンプルがでるが、だいたいこんな感じ。

PHP:
  1. require_once 'Benchmark/Timer.php';
  2.  
  3. $t = new Benchmark_Timer();
  4. $t->start ();
  5. $t->setMarker( 't1' );
  6. for($i=0;$i&lt;10000;$i++){
  7.     // 処理
  8. }
  9. $t->setMarker('m2');
  10. $t->stop();
  11. $t->display ();

これを、ブラウザ上から実行すると、HTMLのtableにフォーマットされた結果が表示される。
↓こんな感じ

  time index ex time %
Start 1239674031.65831000 - 0.00%
m1 1239674031.65838100 0.000071 0.59%
m2 1239674031.67032200 0.011941 99.03%
Stop 1239674031.67036800 0.000046 0.38%
total - 0.012058 100.00%

で、今日のTipsとして、普通にBenchmark_Timer::display()を使うと、画面上に結果が表示されてしまうので、結果を表示せずに取得する方法。

簡単。Benchmark_Timer::getOutput()もしくは、Benchmark_Timer::getProfiling()を、displayの替わりに使えばOK。

getOutput()は、上記tableと同様のHTMLコードを取得できる。
getProfiling()は、上記tableと同様のデータを連想配列として取得できる。
↓こんな感じ

PHP:
  1. (
  2.     [0] => Array
  3.         (
  4.             [name] => Start
  5.             [time] => 1239674550.91492500
  6.             [diff] => -
  7.             [total] => -
  8.         )
  9.     [1] => Array
  10.         (
  11.             [name] => m1
  12.             [time] => 1239674550.91499700
  13.             [diff] => 0.000072
  14.             [total] => 0.000072
  15.         )
  16.     [2] => Array
  17.         (
  18.             [name] => m2
  19.             [time] => 1239674550.92797600
  20.             [diff] => 0.012979
  21.             [total] => 0.013051
  22.         )
  23.     [3] => Array
  24.         (
  25.             [name] => Stop
  26.             [time] => 1239674550.92806900
  27.             [diff] => 0.000093
  28.             [total] => 0.013144
  29.         )
  30. )

なぜかPear/Benchmarkにはドキュメントが無くて、ソースを読むしかないので、Benchmark使えなねー!と思ってる人がいるかもしれないので書いてみました。

…と思ったら、結構getOutput,getProfilingの解説してるページがあった(///
重複してるだけでなく、こちらにはそれ以上の情報が無いのが辛いが、せっかくなので公開。

Popularity: 17% [?]

written by ANN

11月 26

例)hoge.pdfの表紙(1ページ目)から解像度72dpiのout.pngを作成

Ghostscriptの場合

CODE:
  1. #gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -r72 -dFirstPage=1 -dLastPage=1 -sOutputFile=out.png hoge.pdf

解像度とかを指定したりできるしねー。

ImageMagickの場合

CODE:
  1. #convert hoge.pdf[0] out.png

こりゃ楽だなぁ。

PHP + ImageMagick ⇒ pecl :: Imagick の場合
※最新バージョンを利用するにはPHP5.1.3以上、ImageMagick6.2以上が必要です。
インストールはpecl install imagick

PHP:
  1. $img = new Imagick('hoge.pdf');
  2. $img->setImageIndex(0);
  3. $img->writeImage('out.png');
  4. //$img->writeImages('out.png');とすると全ページを画像にしてくれる
  5. $img->destroy();

もちろんリサイズとかもOK。

ImageMagick以外にもGraphicMagickとかあるのね。ImageMagick2もあるらしい。

Popularity: 32% [?]

written by joy-pop

11月 08

MOONGIFT: » 必見!怖くなるくらい優秀なCMS「concrete5」:オープンソースを毎日紹介

具体的にどのへんが怖くなるのか書いてないので解らないけれど、とにかくすごそうなので、concrete5を試してみた。
concreteって、コンクリート??でいいの??

ウェブ用のディレクトリに適当にコピーして、DBを作っておいて、
設置したパスにアクセス。インストールするための画面がでるのて、適当に入力してサブミット。
(詳しくはこの方を参考→☆CMS「concrete5」を試してみた - toytools log

で、実際に使ってみようとおもったら、インストールでコケた。
そこで、インストールする際の注意点を書いてみる。

 

>>>>>続きを読む

Popularity: 74% [?]

written by ANN

6月 06

テーブルの追加等もあり、久しぶりにPEAR::DB_DataObjectのcreateTables.phpを実行したら、なにやらErrorがでまくる。あれれ?前にErrorが出たときにはDBをアップグレードしたらOKだったのでDBのアップグレードを試みるとまたまたErrorが...。なんで?ということでPEAR自体をアップグレードしようとしてみたら、

$ pear upgrade PEAR
PEAR_Remote: unexpected HTTP response

ということで、もう完全におかしい。人を疑ってはいけないけど、先日鯖屋に設定してもらったup2dateを疑う。まあ、疑っても仕方ないので対処方法をググる。

同じエラーが出てる書き込みが
http://pear-forum.org/topic1855.html
にあって、その対処方法の参考になりそうなページがリンクしてあった。

Bug #12990 Issues with PEAR Upgrade News Item from 1/3/08
http://pear.php.net/bugs/bug.php?id=12990

どうも2008.3.1から古いPEAR::Console_Getoptだとv2 package.xmlが読み込めないので、新しいPEARにしてねってことのようだ。

pearのバージョンを確認すると1.3.2。あれえ?前にアップグレードした気がするんだけどなあ...。まあ、順を追って対処していくしかない。

$ pear upgrade --force http://pear.php.net/get/Archive_Tar
http://pear.php.net/get/XML_Parser
http://pear.php.net/get/Console_Getopt-1.2.2

$ pear upgrade --force http://pear.php.net/get/PEAR-1.3.3
(※↑これはpearのバージョンが1.3.2以下の人のみ)

$ pear upgrade --force http://pear.php.net/get/PEAR-1.4.3
$ pear upgrade PEAR

ん、これで一応、OKになった。
いやでも、これ前にやっぱりやった覚えあるぞ。うーむ。

Popularity: 16% [?]

written by joy-pop

4月 28

某社に限ったことなのかもしれないが、営業の人はExcelが好きのようだ。納品書や請求書などサーバーのデータを利用して出力する際、アウトプットするファイルをPDFにしたりすると不評のようだ。とにかく普段、取り扱いになれているExcelだと喜ばれる。

PHPでExcelファイルを出力するには、Spreadsheet_Excel_Writer、WindowsのサーバーならばCOMを利用する方法、Excel2007に限った話ならPHP Excelなんてのがある。入力に関しては前にSpreadsheet_Excel_Readerっていうのがあったような気がしたけど、見つからないな...。

で、以前、Spreadsheet_Excel_Writerを使って、PHPでシート追加して、セルの書式を設定して、セルに文字や数値をして...ということ延々繰り返し出力するということはやっていたけど、Spreadsheet_Excel_Readerがあるなら、Spreadsheet_Excel_Writerと組み合わせてExcelファイルを読み込んで、必要なところを書き換えて出力することができないかなーと考えていたら(考えてみただけ...)、もうやってくれている人がいたー!!やっほーい。

Excel_Reviser

Excel_Reviser便利です。今のところ複雑なファイル(グラフや画像オブジェクトが含まれたりしたファイル)は生成したりしていないので、問題もない。使い方はいたって簡単。

ベースとなるExcelブックを用意して、

require_once 'reviser.php';
$er = new Excel_Reviser();  

//シートに文字列を挿入
//シート番号、行番号、列番号は0から始まる数値
$er->addString(シート番号,行番号,列番号,'文字列');

//シートに数値を挿入
$er->addNumber(シート番号,行番号,列番号,数値);

//出力
$er->outfile('ベースとなるExcelブックpath', '出力ファイル名');

もちろん細かく書式を設定したり、シートをコピー・削除・リネームしたり、ファイルに出力することも可能。サンプルファイルを参考にすれば、すぐ利用することができる。changeStr()という既存の文字列を置き換えるメソッドが存在するけど、空文字で置き換えようとすると出力するファイルが壊れるので注意。
計算式の挿入できるのかな?分かんね。addFomulaRecordというメソッドが存在するけど、binary-recordってどういうこっちゃ?教えてくださいエロい人。

元ファイルのVBAを引き継ぐことは無理のようだ。また、開発環境などdisplay_errors Onでerror_reporting E_ALLだとNoticeがでまくるので注意。error_reporting E_ALL ^ E_Noticeで使った方がいいみたい。

関連してExcel_Peruserというのもある。これはExcelファイルを読み込み、各セルの値を取得可能にする。ExcelファイルをHTMLに出力することができるなど、こちらも素晴らしい。

Popularity: 31% [?]

written by joy-pop

4月 07

自分はxmlアレルギーというか、xmlってパッと見て意味フな印象があるので、極力使うのを避けてきた。 まあ、しかし、今必要なわけでもなんでもないけど、何気に感動したのでメモ。

インストール(PHP5以上)

pear install --alldeps XML_Query2XML

依存してるパッケージが2つくらいあったので--alldeps入れておいた方が無難。

PEAR::XML_Query2XMLはPEAR::DBやPEAR::MDB、PDOといったデータベース抽象化ライブラリをエンジンとして利用し、データを取得してxmlを吐くという感じのようだ。んでもって、今回はPEAR::DB_DataObjectと無理矢理あわせて使ってみる。

< ?php
include 'XML/Query2XML.php';
include 'DB_DataObject初期化用読み込みファイル';
try{
/*
* 都道府県情報を入れてあるprefectureテーブルを利用
*/
//DB_DataObject
$dbo = DB_DataObject::factory('prefecture');
$dbo->find();

//DB or MDB
$db =& $dbo->getDatabaseConnection();
$sql = $db->last_query;

//Query2XML
$q2x = XML_Query2XML::factory($db);

/*
* rootタグ(rootTag)の名称を'japan'にする
* idフィールドをidカラム(idColumn)にする
* rowタグ(rowTag)の名称を'prefecture'にする
* 要素(elements)は'name'(フィールド名と同一)と'order_num'フィールドを
* 'number'にリネームして利用
*/
$option = array('rootTag' => 'japan',
'idColumn' => 'id',
'rowTag' => 'prefecture',
'elements' => array('name','number' => 'order_num'),
);
$xml = $q2x->getXML($sql,$option);

//Output
header('Content-Type: text/xml');
$xml->formatOutput = true;
echo $xml->saveXML();
} catch (Exception $e) {
//Error
echo $e->getMessage();
}
?>

XML_Query2XML::factory()メソッドにはPEAR::DBなりPEAR::MDBなりのオブジェクトを渡せばいい。DB_DataObjectの場合、PEAR::DBとかをそのまま使った場合と違って、sql文を書く手間は省けるけるけど、内部エンジンを取得する手間が必要になる。

というわけで以下のようなxmlが出力される。 ※DBやPHPソースはUTF-8

<?xml version="1.0" encoding="UTF-8"?>
<japan>
<prefecture>
<name>北海道</name>
<number>1</number>
</prefecture>
<prefecture>
<name>青森県</name>
<number>2</number>
</prefecture>
...
<japan>

rootタグの名称なんかを気にせず、テーブルからフィールド名をそのままにxmlで出力する際にはgetXML()メソッドでなくてgetFlatXML()メソッドを使うといい。出力結果のrootタグが'root'、rowタグが'row'に、取得したフィールドがそのまま、まるごとelementsになる。引数はsql文だけだ。

Popularity: 14% [?]

written by joy-pop