CakePHPの勉強会にいってきた。

久々にPHP話題。
福岡で行われたCakePHPとPostgreSQLの勉強会。
CakePHPは正直あまり触れたことはない。それは魅力がいまいちわかんなかったから。なので、今回の参加は勉強しに・・・という感じではなく、どちらかというと「CakePHPどないやねん!」という感じで行った。

その感想。

「Viva CakePHP!」(~うん単純)

あそこまで開発が簡単になるなら、もっと触ってみようと思った。というか触らせてみようと。
でもCakePHPを触るには、いろんなコアな部分をしっておくとさらに驚異的な力を発するんじゃねーの?ってことも感じた。と同時に、おれまだ上辺だけじゃんって思った。
みんなすげーよ。まったく。

んで、そのあとの懇親会も参加。
実は花粉症が喉に来ていて、最近声もカレガレ。壊れかけのオルガンみたいな声で参加した。
(あ、あの壊れかけオルガンの声が俺です)

そこでいろんな人に出会った。みんなすげーなぁ。と。

同い年連中で集まり、ホボホボ初対面だったのに、意気投合。

これからも情報交換したいものです。

また何かの機会で飲めたらいいな~。
今回のような感じの仕組みはあまり今の仕事では関係のないことだが、必要な分野だと思うので、ちょっとは分かるようにしておいて、今回作ったネットワークをうまく生かしながら、仕事とのつながりを作りたいね~と思ったんす。

カラーチップを作る。

コリスさんのブログの記事に、画像からカラーパレットを作成できるオンラインサービスというタイトルでのエントリーがあった。
以前自分が作ったカラーチップ作成のプログラムによく似ている。

Photoshop用のカラーチップデータをダウンロードできるのがこっちのすごいところ。

なるほどね。

□以前作ったプログラム
imagetips v2 http://sevenstyleweb.com/labo/imagetips/

このごろよくやったPHPで気づいた関数

ここ最近、ずーっと仕事でPHPを触っていた。
プログラマーと化したおれはいろいろ勉強してたので、ちょびっとばかしメモしておこう。
ということで久々のPHP

普段PHPとの連携で俺が使っているのは、MYSQLだったけど、
今回は普通のSQLサーバだったので、それ用の関数をつかった。
基本的に、mysql_query()みたいな関数をmssql_queryとするだけなんだけどね。

なので、以下の関数はmssql系で行きますので、あしからず。

データベースからデータを取得するとき、mssql_queryで結果リソースを取得し、
mssql_fetch_rowとかmssql_fetch_arrayでデータを取得していくが、
個人的感想としては、mssql_fetch_arrayがいい。

以前は、処理スピードの問題で、mssql_fetch_arrayはあまり使われていなかったらしいが、最近処理スピードがあがったりしたせいか、別に遜色ない。
機能的にも、mssql_fetch_arrayのほうがすばらしい。

mssql_fetch_arrayは結果リソースを

連想配列・数値添字配列・あるいはその両方で結果の行を取得する

これはデータの取得・処理の際に大変役立つ。今回もすごい役になった。

データベースとのやり取りには、mssql_fetch_array()をこれからはバシバシ使いそうだ。

PHPでPNG画像をリサイズする。

PHPで画像をリサイズするという作業をよく行う(個人的に)のだけど、これまではjpeg画像でよくやってた。実際このサイトのphotoの部分も自作したPHPプログラムでサムネイルの作成を行っている。

ちなみに画像のリサイズをやるには、以下の方法(プログラムではなく概念)

1.画像を取得する
2.サイズを決める
3.imagecreatetruecolor(width,height)でキャンパスを用意する
4.用意したキャンパスにサイズを指定して、貼り付ける(表現が正しいかは不明)
5.保存する。

こんな方法で、jpeg画像ならすんなりいける。
しかーし!PNG画像、特に透過PNGの画像をこのやりかたでやってしまうと、透過部分が黒くなる。という現象がおきる。
なぜか?この理由は・・・

imagecreatetruecolor()関数で用意したキャンパスの背景は黒

というものあるからだ。
ほんじゃ、どうするかということだけど、色々調べたり質問したりしたら次のようなプログラム(おおまか)でいける。

$ori = imagecreatefrompng(“hogehoge.png”);
$ori_x = imagesx($ori);
$ori_y = imagesy($ori);

$new = imagecreatetruecolor($new_w,$new_h);
imagealphablending($new,false);
imageSaveAlpha($new,true);
$fillcolor = imagecolorallocatealpha($new,0,0,0,127);
imagefill($new,0,0,$fillcolor);
imagecopyresampled($new,$ori,0,0,0,0,$new_w,$new_h,$ori_x,$ori_y);

以上。
今までとの違いは、

imagealphablending($new,false);
imageSaveAlpha($new,true);
$fillcolor = imagecolorallocatealpha($new,0,0,0,127);
imagefill($new,0,0,$fillcolor);

この4行。
何をやっているのかというと、

imageSaveAlpha()関数を使えるように、描画モードをアルファチャネルが使えるように設定して、
実際にimageSaveAlpha()関数の実行で、保存できるように設定
$newに対して、透明色を用意して
$newキャンパスを透明色で塗りつぶす。

この作業をおこなって、該当PNG画像を貼り付ける(表現は勘弁)。

そうするとPNG画像でもちゃんと透過してくれるのです。よかったよかった。

PHPでExif情報を取得する

デジカメでとった写真は、Exif情報という諸々の情報を持っている。これを自分のサイトとかに反映させると、それなりにそれなりになる。ような気がしたので、そいつを取得する方法を探してみたら、意外と簡単に取得できるので、メモ。

使う関数は、exif_read_data()関数一発。使い方は
$exif = exif_read_data(“ファイルパス”);
みたいに書く。そしたら、変数$exifに諸々入ってくる。そいつを例えば、print_rとかで観る。ぶわーって配列になるので、必要な要素名をそこで判断して、取得する。

ちなみに、オレがほしい情報は、F値と露出時間と撮影日の3つくらいだったので、以下のようなコードになった。

$exif = exif_read_data($file);

echo(“FNumber:”.$exif[‘COMPUTED’][‘ApertureFNumber’].”<br />”);
echo(“ExposureTime:”.$exif[‘ExposureTime’].”<br />”);
echo(“Date:”.$exif[‘DateTimeOriginal’].”<br />”);

このコードを書いた結果は

FNumber:f/13.0
ExposureTime:1/100
Date:2007:10:28 13:38:47

となった。

一度、

$exif = exif_read_data($file);
print_r($exif);

してみることをオススメします。

PHPメール送信

メールフォームみたいなのを作って、メールを送信したいと思って作成していたら、文字化けで引っかかった。基本的にテキストメールの受信だけでよかったので、PHPのmail関数を使う。

mail関数は、以下のようなやり方。

mail(“あて先”,”タイトル”,”本文”);

これで送ったら、日本語のやつがバケバケのバケラッタ。(ふるい)
なので調べていたら、なーんだマルチバイト版あるんじゃん。ってことで、mb_send_mail関数を使う。
使い方はほぼ同じ。

mb_send_mail(“あて先”,”タイトル”,”本文”);

ちょっとここで、「あーそういえば、返信できるようにしないといけないなー」ってことで、
返信用のメアドを登録してもらって、それも加味させる。上記mb_send_mail関数の引数にひとつ追加。

mb_send_mail(“あて先”,”タイトル”,”本文”,”ヘッダ情報”);

これでOK。・・・のはずだったけど、思いのほか、文字化けの魔術にはまる。うー。どうしたらいいもんだ?ってことでネットを走る。だだだだっと。

文字コードEUC-JPで書いたスクリプトであれば、
mb_language(“Japanese”);
mb_internal_encoding(“EUC-JP”);
SHIFT-JISで書いたスクリプトであれば、
mb_language(“Japanese”);
mb_internal_encoding (“SJIS”);
UFT-8で書いたスクリプトであれば、
mb_language(“Japanese”);
mb_internal_encoding(“UTF-8”);
と記述。
サーバー側のデフォルトはEUC-JP。何も設定しないと、この値が設定。

とあった。
ということで、今回プログラム自体は、UTF-8で書いているので、

mb_language(“Japanese”);
mb_internal_encoding(“UTF-8”);

と、mb_send_mail関数の前に記載。
そしたらうまくいった。なるほどー。これでメールアンケート系の送信はホニョニョってできるな。

PHP グローバル変数

PHPのプログラミングにおいて、グローバル変数のことでメモ。
PHPはグローバル変数を基本的に使わないような運びになっていそうです。
しかし、値の受け渡しをするときじゃないときでも、なんとなく、グローバル変数をフラグ代わりに使いたいってなときもあったりするわけで。

ちなみにPHPでは、

$test =”sample”;
function hogehoge(){
    echo($test);
}
hogehoge();

としたとき、$testはなんとなくグローバルな雰囲気をかもし出していますが、実はこいつグローバルではない。なので、この結果は、何も表示されないことになります。(だって、hogehoge()関数には$testになにも値が入っていないもん)

でも先にかいたように、グローバル変数として使いたいときもあるのだー。ということで、どうやるんかい!ってことになるわけです。
やりかたはいくつかあるみたいですが、

変数をグローバル変数化すること

をします。

やり方は、

$test =”sample”;
function hogehoge(){
    global $test;
    echo($test);
}
hogehoge();

この一行を加えるのです。
そうすると、簡単にいうと、

この処理で変数$testをグローバル変数として使うように設定する

ことになります。

これで使えるようになる。。っていうかなった。

今PHPを色々いじっているので、これから思いつくままに書くと思います。気づいたものをどんどん書くことになるかと思います。

昨日のベクトル計算式。

手書きで申し訳ないけど、昨日書き込んだRGBからHSBを求める際の計算。
結果だけじゃなくて、考え方も含めて・・・ということで。手書きです。

shiki.jpg

最終的には、PHPでは
$h = atan2(y,x);
で計算しました。

参考まで。。。

今回この計算をしてみて、今更ながら色相ってこういうことか!ってピコーン!した感じです。

違ったら指摘してしちょ。お願いします。。