2011年10月27日木曜日

ImageMagickの活用、ノーマライズ編


携帯電話などで撮影した画像は比較的暗めに撮影されていることが多いです。
特にユーザにアップロードしてもらうツールなどでは、出来れば補正してあげたくなる場合も多々です。
Picasaの[I'm Feeling Lucky]的に画像補正をしてあげたいですよね。

ソフトウェアで1点ずつもできますが、出来れば一括でやってしまいたいもの。
あるいは、プログラム上から制御したくなることもあると思います。

そんなときはimagemagickを使用しています。

ImageMagick(イメージマジック)は画像を操作したり表示するソフトウェアスイートで、ライセンスはGPL互換の独自ライセンスとなっています。
また、プログラムから利用するために各種ライブラリも公開されています。

C言語:MagickWand
Java:JMagick
PHP:IMagick
等々

今回は、ノーマライズ(normalize)による画像補正を試してみます。
ノーマライズをすると、ヒストグラムの度数分布が広がります。・・・分かりにくいですね。
コントラストが小さい画像を修正する場合には有効です。(全ての画像でノーマライズするとよくなる、わけではありません)

■元画像
 
 

■ノーマライズ(-normalize)
 
 

convert -cnannel ALL -normalize a.jpg b.jpg

■レベルの自動補正(-auto-level)
 
 

convert -auto-level ALL -normalize a.jpg b.jpg

ある一定の変換をサービスや仕組み上で設けるのであれば、こういう機能の利用もいいかもしれません。

2011年10月26日水曜日

JavascriptでJSONを処理

APIを利用していると、『JSON』使うことありますよね。
いやでも、そもそもJSONって何だろう、どうやってWEBサイトに反映するのか?ということがあるかもしれません。JSONを使って手軽に動的なサービスも実現することができます。

■そもそもJSONって何だ?

JavaScript Object Notationの略で、JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語である・・・とWikipediaでは記載されているけどなんのこっちゃというならば、JavaScriptでパースしやすいデータ形式、というとらえでいます。

HttpRequestで返されるデータがJSON形式ってことも結構ありますよね。

■JSONはどんな形式なのか?

何パターンか存在します。

//{"プロパティ名":"値"}
{"hensu1":"value1","hensu2":"value2"}

区切りは「,(カンマ)」で区切ります。
ただ、1対1で定義されることもありますが、階層で定義されることもあるでしょう。

{"team":[
{
"sebango":15,
"name":"沢村",
"position":"ピッチャー"
},
{
"sebango":6,
"name":"坂本",
"position":"ショート"
},
{
"sebango":7,
"name":"長野",
"position":"センター"
},
]}
■どうやってパースするの?

<script type="text/javascript">
function test(){
var str = '{"ary":"hogehoge"}';
var obj = JSON.parse(str);
alert(obj.ary);
}
</script>

パース関数でカンタンにパース出来ます。

例↓

次回は天気予報APIを使ってJSONをパースしてみようと思います。

2011年10月25日火曜日

fgetcsvを使って、CSVからXMLを作ったが・・。

fgetcsvはCSVデータを処理するのに便利な関数ですが、Excelから書き出したCSVデータをXMLにマップしなおす中ではまった事例を少し。

PHPのマニュアルにもありますが、

$row 1;
if ((
$handle fopen("test.csv""r")) !== FALSE) {
    while ((
$data fgetcsv($handle1000",")) !== FALSE) {
        
$num count($data);
        echo 
"<p> $num fields in line $row: <br /></p>\n";
        
$row++;
        for (
$c=0$c $num$c++) {
            echo 
$data[$c] . "<br />\n";
        }
    }
    
fclose($handle);
}
http://php.net/manual/ja/function.fgetcsv.php

こんな感じでCSVを読み出していくと思うのですが、Excelで書き出したCSVが以下みたいな感じだったとき、

ヘッダ1,ヘッダ2,日付,項目
ほげほげ,だよだよ,2011/10/25,ああああああ

コレがなぜか一文字目が文字化けしてしまう!
まずは文字コード(SJIS,SJIS-win,UTF-8の組み合わせ)を疑ってみたものの解決せず。

ほげほげ→wげほげ
みたいな形で表示されちゃうんですよ。
CSVの文字コードはSJIS、プログラムはUTF-8。んー。CSVを以下に変更。

"ほげほげ","だよだよ","2011/10/25","ああああああ"


ダブルコーテーションで囲ってみたところ・・・

ほげほげ
きちんと表示されるようになりました。SJISのCSVの場合、そのまま読み出してmb_convert_encodingでechoしてもうまくいかない模様。EUCもだめっぽいようで、fgetcsvでうまく使えるのはUTF-8の時だけのようだ。

・ダブルコーテーションで囲む。
または
・SJISで保存しない、UTF-8で保存。

が解決のポイントかも。意外に基礎っぽいところで躓きます。

2011年10月21日金曜日

cakePHPでPEARを使う

cakePHP1.2系。
レンタルサーバーなどだと、

「標準のPEARは入っているけど、ちょっとこだわったPEARライブラリは入っていない」
「そもそもPEAR入ってないんだけど」

といったことがあるかと思います。
前回のお話で任意のフォルダでPEARを動かす、ことは出来ました。しかし、これをcakePHPで実現するには少し躓いたので、メモ。

vendersを使う方法は結構出てきますね。

Cakephp 備忘録 PEARを使う時
http://www.gloriouslife.sakura.ne.jp/blog/?p=432

cakephpで個別にpearライブラリをインストールする方法
http://php-tips.com/php/cakephp-php/2010/03/cakephp%E3%81%A7%E5%80%8B%E5%88%A5%E3%81%ABpear%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

前回の内容から、.htaccessで解決したかったので、以下の方法で実現しました。

予め
/libs/PEAR
に必要なファイルをアップロードしておきます。

/app/.htaccessの内容に以下を追加します。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
 </IfModule>
<IfModule mod_php5.c>
    php_value include_path .:/home/xxx[自分のディレクトリ]xxxx/public_html/libs/PEAR
</IfModule>
これで、PEARの場所が認識され動くようになりました。
cakePHPも便利だけど、PEARも結構便利ですしね、どちらも捨てがたい存在です。

2011年10月19日水曜日

cakePHP2.0.0リリース、新機能をまとめてみた!

2011/10/16にPHPのWebアプリケーションの開発フレームワークcakePHPの2.0.0がリリースされましたね!
cakePHPと言えば、RubyOnRailsを模して造られた(と言われる)MVCフレームワーク。
以下リリースノートから(勝手)翻訳した新機能 。

・We have dropped PHP 4 support and we have refactored all the code to be strictly compliant with PHP 5.2+.
PHP4のサポートはやめて、PHP5.2以上にりファクタリングし直したよ。
・Use of native features like exceptions, PDO, SPL, json_encode and much more.
そのため、PDO(PHP Data Object)やSPL(Standard PHP Library),JSON_ENCODEなどが利用できるようになった。
・Embraced the PSR-0 recommendation for file naming. Now all your classes map to a file with the same name. Less things to remember!
ファイルの命名規則をPSR-0の命名規則に則ったんだ、それにより同じ名前でファイルにマッピングされるよ。
・New Error and Exception handlers provide easier to configure, and ease working with errors such as page not found, unauthorized error and lots more.
エラーや例外ハンドラがより設定しやすくなったよ。
・Improved I18n functions for easier multilingual development.
カンタンに多言語化がしやすくなった。
・Support for injecting your own objects to act as CakePHP libraries, such as component, helpers and behaviors, no more excuses for modifying core files.
cakePHPをイイ感じで動かせるように、独自のオブジェクトを追加できるようになったよ。
・Console libraries rebuilt from scratch, automatic help generation, parameter checking, and colors!
コンソールライブラリも再構築され、自動的にヘルプを生成したり、パラメータチェックやカラー表示などに対応したよ。
・New Request and Response objects for easier handling of HTTP requests.
HTTPリクエストのための新しいリクエストやレスポンスの機能を!
・Better session handling for easier custom engines. Put your sessions into storage systems like Memcache with less effort.
よりよいセッション機能を提供!
・Completely refactored Auth system. It is now easier to configure and plug in your own implementations for external login services or your permissions system.
認証システムを一新!外部連携などを容易におこなえるように。
・Brand new email library with support for multiple transports. With easy to use global configuration, logging, and charset support.
メール送信ライブラリも一新、文字セットやログ、設定などがより楽になったんだ。
・Dropped SimpleUnit in favor of PHPUnit. PHPUnit is the defacto testing framework for PHP with support for more options, better mock objects, and improved console output [16]
テストはSimpleUnitからPHPUnitを採用したよ。
・Reworked the SecurityComponent to not suck less, now you can more easily protect your apps against CSRF and form tampering attacks while having fun.
セキュリティコンポーネントを作り直した。これにより、これまで以上に意識することなくCSRF「Cross Site Request Forgeries(クロスサイトリクエストフォージェリ)」対策が出来る。
#Webサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、閲覧者に意図せず別のWebサイト上で何らかの操作(掲示板への書き込みなど)を行わせる攻撃手法。 
・ Improved support for PostgreSql, SQLite and SqlServer, they are now first class citizens along with Mysql datasource.
PostgreSQL、SQLite、Microsoft SQL Serverのサポートが強化され、MySQLとおんなじように利用できるようになった。
・HTML 5 form inputs support in form helper.
フォームヘルパーで、HTML5のフォームをサポート!
・A Sexier default look taking advantage of new CSS 3 features.
CSS3の機能も利用できる!
・A lot faster, almost everything is now lazy-loaded, and even on debug mode you will feel your applications flying.
これまで遅いと感じていたアプリケーションは飛ぶように高速で動作するだろう!

結構適当訳ですが・・・。
かなり高速化と効率化を図れているようですね!期待しちゃいます。・・・すぐに2.0系を利用したアプリケーションの引き合いはないけど・・。

1.2系→2.0系に作り直したいなぁ。

■cakePHP2.0リリースノート
http://bakery.cakephp.org/articles/lorenzo/2011/10/16/cakephp_2_0_released

■cakePHP
http://www.cakephp.jp/

2011年10月18日火曜日

PCの無料回収、パソコンファームを利用してみた。

自作PCは魅力的ですが、いざ廃棄を考えると大変面倒です。
バラして不燃で捨てることもできませんし、粗大ごみとしても扱ってくれません。

そうすると、リサイクルに出すしかないわけですが、けっこうお金もかかる。

...ということで、「パソコンファーム」を利用してみました。






基本的には、元払いで不用品を送るだけ。
実にシンプル。

サイト内ではHDの完全消去も謳っていましたが、これは少し心配なので(大丈夫だとは思いますが)、HDは別の用途で使おうと思い、取り外して配送。

テレビも21インチ以下のブラウン管を受け付けてくれていたり、これはこれで少しありがたいかも。。

町を車で回っていて無料を謳っているおじさんよりは信憑性があるような気がします。
・・・・気持ちの問題ですが。。

2011年10月16日日曜日

NHKネットラジオが聴けるアプリ、らじる★らじる

在京(あるいは関西圏)だとラジコでJ-WAVEなどをインターネットを介して聴くことができますが、NHKもネットラジオ、IPサイマルラジオをを聴くことが出来ます。・・・出来れば高校野球のときに欲しかった!けど、結構便利そうです。

CMのない、NHKを聴けるってのがかなりポイントかも。


アプリケーションは大変シンプルで、普通に使いやすい感じ。
いやこれ、大相撲のときでも使えるかも。

http://www3.nhk.or.jp/netradio/

ラジオ第1、ラジオ第2、FMいずれも聴くことが出来て、番組表は7日間まで見ることが出来ます。第2の語学なんかもいいかも~

2011年10月15日土曜日

バッチファイルは意外に便利*.bat

業務の効率化、作業の効率化という観点でどうしても欠かせないのがバッチファイル。
いわゆるコマンドで処理してしまおう、というのがあります。

・・・といっても、そんなに複雑な仕様ではなく、もっとピンポイントな・・・ 

「大量に存在するファイルのファイル名を一括でリネームする。」
 「大量に存在するファイルを各フォルダにコピーする。」 

ピンポイントで事例が発生することがあるでしょう。 その場合、フリーのリネームソフトを使ったり、あるいは手で個別にこつこつと変えていくこともあると思いますが、僕は割りとバッチファイルを作って実行する、ということが多いです。

リネームなら
ren hogehoge.txt hoge.txt

ren [変換元] [変換先名称*パスは含めない。]

コピーなら
 copy hogehoge.txt hoge/hogehoge.txt

という感じでしょうか。 いずれも対して難しくないコマンドです。さて、たくさんのファイル、が存在したとき手でひとつずつ処理の構文を作っていく、って言うのは少しナンセンスで、効率化とは対極に位置する項目だと思います。

なので、割とこの手のバッチファイルを作る場合は僕はExcelを使用します。あらかじめわかっているファイル名に対して計算式でパスなどを与えておきます。その後、テキストエディタにコピー、あっという間にバッチファイルが出来ます。


この方法なら、いちいち書き換える必要もないので、ルールが決まっている処理ならかなりスピーディに効率化を図れると思います。

Excelを使う、というところでは実際batで組むことで相当処理時間が軽減されています。

2011年10月13日木曜日

Paypalの決済機能がかなり使える件

「Eコマースはやりたいけど、決済機能とか難しいよね。」
そういう中小企業は多いかもしれません。

「ウチのホームページでも商品売ろうよ」

っていう感じで無茶言う社長さん、上司も多いでしょう。

そういう時Paypalが意外に有効です。


いわゆるカート機能をサイトの任意のページに張れるほか、請求書の実装、定額支払いの実装がカンタンに作ることが出来ます。

複雑な処理を入れることも出来て、

・成功時の戻りURL
・失敗時の戻りURL
・戻り引数

等も設定できる優れもの。

初期投資もなく、金額にかかるパーセンテージ3.6%(利用額により異なります)+40円だけということで、ECなどで発生するクレジットカードの手数料やトランザクション費用よりも場合によっては抑えることが出来たり、割とリスクなくスタートできるかもしれません。


Sign up for PayPal and start accepting credit card payments instantly.

2011年10月12日水曜日

GoogleWebFontsでいい感じを魅せる。

サーバー上で公開されているフォントを利用してサイトを彩ることが出来るWebFont。
Googleでは多数のWebFontが無料で公開されており、ユーザーは任意のFontを利用できます。


タイトルなど、これまで画像で再現していたものをWebFontに置き換えて表現することも出来ます。

使い方はカンタン。

任意のフォントのCSSを読み込みます。
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Condensed' rel='stylesheet' type='text/css'>
あとは、通常のCSSと利用の方法は一緒、IDやCLASSに充ててあげるだけ。
font-family: 'Ubuntu Condensed', sans-serif;
ためしに↓

<link href='http://fonts.googleapis.com/css?family=Ubuntu+Condensed' rel='stylesheet' type='text/css'>
<style type="text/css">
.dividclass{
font-size:15pt;
font-family: 'Ubuntu Condensed', sans-serif;
}
</style>

充ててみました。


Generalworks with google web fonts

リンクも反映できますし、テキストであることがわかると思います。 近頃、SEOや検索エンジンからは、<h1>タグなどの背景に画像を充てる手法(-9999px等)があまりよろしくない、ということも聞きます。そんな時、環境に依存しないWebFontで代用する、というのもありかもしれません。

jQueryでIDを付与したhiddenの値を取得・設定

<input type="hidden" name="hoge" id="hoge" />
Formでhidden値を指定することがありますよね。まれに、hidden値を取得または設定することもあります。

そんな時、便利なのがjQueryでの処理です。

//取得
var str;
str = $("#hoge").val();

//設定
$("#hoge").val("hogehoge");

jQueryはたいへん扱いやすいため重宝します。
ajaxを実現するには欠かせない存在になってきているような気がします。

2011年10月10日月曜日

【Excel】行の挿入、列の挿入

エクセルを利用しているとどうしてもマウスを触るのが煩わしくなる時があります。

そんなときに利用しやすいショートカットです。

■行の挿入

作業中に行を挿入したくなる場合、以下のショートカットで挿入されます。
上に挿入されますのでご注意ください。また、複数行を選択した場合は、その分上に挿入されます。

Alt(Altキー)+I+R(を順番に)

■列の挿入

作業中に列を挿入したくなる場合、以下のショートカットで挿入されます。
左に挿入されますのでご注意ください。また、複数行を選択した場合は、その分左に挿入されます。



Alt(Altキー)+I+C(を順番に)

2011年10月9日日曜日

【Excel】セルのソート

エクセルを利用しているとどうしてもマウスを触るのが煩わしくなる時があります。

そんなときに利用しやすいショートカットです。

■セルのソート

数値による並び替えや、名前順など並び替えに使用するのがソートです。
該当のエリアを事前に選択しておくとよりよいです。




Alt(Altキー)+D+S(を順番に)

2011年10月8日土曜日

【Excel】オートフィルタ

エクセルを利用しているとどうしてもマウスを触るのが煩わしくなる時があります。

そんなときに利用しやすいショートカットです。

■セルのオートフィルタ(データ抽出)

セルの条件を指定してデータを抽出することありますよね。
項目が横に並んでいて、見出しをつけておくことが事前のポイントです。




Alt(Altキー)+D+F+F(を順番に)

うまくいかない場合は、ヘッダ行でクリックする、または該当箇所を選択するとうまくいくことがあります。
また、解除も同じコマンドで実行できます。

2011年10月7日金曜日

【Excel】セルのグループ化

エクセルを利用しているとどうしてもマウスを触るのが煩わしくなる時があります。
そんなときに利用しやすいショートカットです。

■セルのグループ化

提出物として出力する場合、見せたくないセルなどありますよね。
セルを縮めたり、印刷範囲を指定したり・・・と色々方法がありますが、僕は割とグループ化を多用します。


該当の列や行を選択して、グループ化をします。

Alt(Altキー)+D+G+G(を順番に)

こうしておけば、後から同じExcelを触る人も安心して使えます。

2011年10月6日木曜日

【Excel】セルの書式設定ショートカット

エクセルを利用しているとどうしてもマウスを触るのが煩わしくなる時があります。
そんなときに利用しやすいショートカットです。



■セルの書式設定

数値の3桁区切りや、 日付、パーセンテージの設定などで重宝しますよね。
見やすくするための設定を行うことができます。

【ショートカット】Ctrl(コントロール)+1



マウスの右クリックでも書式設定は出すことができますが、キーボードのみで完結するので相当数作業量を削減することができるショートカットだと思います。

2011年10月5日水曜日

XAMPPでSOAPがうまくいかない場合。

Windows版XAMPPでSOAP接続がうまくいかない場合、


SOAP-ERROR: Parsing WSDL
などと表示されていたとき以下の解決法で解決できる場合があります。

php.iniに対して、

extension=php_openssl.dll

が入っていない場合があるかもしれません。これを設定することで、接続がうまくいくことがあります。

2011年10月3日月曜日

Yiiフレームワーク 使ってみる?

PHPのフレームワークはcakePHPを愛用しているのですが、ちょっと重めなのが気になるところ。
パフォーマンスを重視するなら、オレオレFWなんでしょうけど、開発の速度を優先するなら既存のフレームワークを使っておきたいところ。


パフォーマンスがそこそこ早く、リリース頻度も高いらしい。。。(と2chで)
となると、少し試してみる価値はあるかもと思いつつ。。



Yii Framework: Best for Web 2.0 Development