5月 2010 のブログ記事

a-blog cmsをためした。
 
ここで試した。
以下おんなじ記事が、試したサイト内でも書かれてる。
 
ちなみにこの記事は「a-blog cmsを試してiPadをもらおうキャンペーン」にエントリーするための下心見え見えの記事であることを先に断っておく。
 
 

インストール
超簡単。

PHPの製品は、インストーラーが整備されていても、
たとえば、PEAR_DBやPEAR_MDB2を使っていて、
接続メソッドへ渡すdsnに不備があったりして、
PHPを直でいじらなければならないことがあったりするけど、
a-blog cmsに関してはそういったことはない。
(もしかするとクララオンラインを使ってるから??)

私がよくつかうWPなんかも整備されているものの、
最初のDB接続の設定はPHPの設定ファイルを書き直してから
インストーラーを走らせる必要がある。
つまりWPより簡単!
 
 
 
管理画面
やはり独自の言い回しやページ遷移に戸惑いがあるのは否めないけど、
それを言い出したら全てのソフトウェアに当てはまるので、
気にならない。
(気になるならどっかのASP使ってろ!←個人的意見)
 
 
直感的というところでいえば、
concreat5にゆずるところがあるが、
concrea5はテンプレート編集が難解。
a-blog cmsはちょうどいいランディングポイントに落ち着いていると言えるかも。
特に、HTMLテンプレート編集で、管理画面も作り替えられるというのは素晴らしいし、もしかすると、新しいんじゃ?
 
 
エントリー
クロスカテゴリーができないのが、ほかのシステムから(っていうかWPから)移ってきた者としては、少し戸惑いを覚える。
 
 
ほかのCMSやブログよりタグに重点を置いてコンテンツ作りが必要そう。(既存サイトの移行においては、ツール移行というより、リニューアルするという心構えが必要?)
 
標準でエントリー入力にWYSIWYGがないのが????と思ったけど、使ってみたら、基本的にブロックを積み上げていくような作りになっているので、実際はないほうが、崩れとか心配しないでいいので、デザイナー的に「まる!」ってことなんでしょうね。
(必要なら追加はできるんですよね?たしか)
 
 
WPと違って投稿とページの分類がないので、頭の切り替えがいる。
 
 
 
使いどころ
納入先がエントリー管理などを行う場合においては、
a-blog cms以外に選択肢がないといっていいかも。
個人的にそういう場面においては、concrete5が最強と思ってたんだけど、覆された。
 
 
私が働く会社においては、
無茶な拡張をすることが多いので、
(それに対応するため自作のCMSを持っているくらいです)
使う機会はかなり限定的かもしれない。
 
カスタマイズプラグイン用のAPIなどがあれば、
一気に使う可能性がひろがるかもしれない。
↑めっちゃプログラマ目線ですみません。
でも、実は一番そうなってほしいところです。
SOY CMSのSOY APPみたいなやつ。
 
 
テンプレート編集
テンプレート編集は本当に驚いた。
私がよく使うCMSは自作のを除けばWPと(畑が違うCMSですが)EC-CUBEなんですが、WPはテンプレートに生PHPが入るので、非常にプログラム然とした作法が求められる。
EC-CUBEはテンプレートエンジンにSmartyを採用している。Smartyは非常に強力なテンプレートエンジンだが、かなり独特の作法があって悩まされるところもある上に、EC-CUBEの場合は独自作法も追加されているので、やはりこちらもプログラム脳ができていない人には使いづらい。
たぶん、MTなんかもそうだと思う。(MTは独自タグが多すぎて、涙目な人もおおいと思う)
 
 
a-blog cmsのテンプレートエンジンはどうかというと、やはり独特の作法が求められ、100%プログラム脳ができてませんというひとには苦しいかなとは思うけど、感覚的にはHTMLの仕様を拡張したという感じを受けるので、ほかのCMSに比べるとかなり敷居は低いのかなと思った。
 
 
DWのスニペットがおまけでついてるけど、これはかなりいいアイデア!
 
 
その他
たしか公開が昨年の夏でしたっけ?
現在Ver1.3なので、一年弱で3回のちょっと大きめのバージョンアップがあったということでいいのかな?結構な頻度ですね。こういうとき気になるのが、バージョンアップの大変さ。自動アップデートはないんでしょうか?ユーザーが増えていって、様々な要望を取り入れていくと、結構重要なポイントになると思うのですが。
 
 
表の部分とは関係ないですけど、DBの構造を勝手に覗きました。CMSの出来とは裏腹に、すごくシンプルなテーブル構造で、しかもインデックスも綺麗にまとめられていて、ぶっちゃけ、ここが一番すばらしいと思っちゃいました。同じ開発者として若干嫉妬。
 
 
 
二日ほどつかった感じではこんなところです。

PEARのMDB2を利用して、たとえば、

$str = ”;
$ret = $db->extended->getAll(
‘SELECT * FROM tablename WHERE name = ?’,
NULL,
array( $str ),
NULL,
MDB2_FETCHMODE_ORDERED/
);
こんなふうにパラメータを渡すとき、
MDB2のデフォルトの状態のまま接続すると、
$strは空の文字列ではなくNULLとして扱われます。
結構これ困ることがあります。
 
 
NULLと空文字列?一緒じゃねぇか?
とか思うかもしれませんが、データを扱う上でははっきりと定義が異なりますので、
そう思う方は調べてください。
(まぁ私も厳密に使い分けてはないですが)
 
特に↑のクエリの場合「name = NULL」という検索を行うことになるので、
とってもまずいです(よね?SQLの基本中の基本)
 
 
この問題を解決するには、接続時にオプションを指定します。

$dsn = array(
‘phptype’ => ‘mysqli’,
‘hostspec’ => ‘hostname’,
‘database’ => ‘databasename’,
‘username’ => ‘username’,
‘password’ => ‘password’,
‘charset’ => ‘UTF-8′
);
$option = array(
‘portability’ => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL,#←空文字列がNULLになるのを回避
);

$db = MDB2::connect( $dsn , $option );

 
↑このようにオプション「portability」の値を変更して接続すると、
パラメータに渡される値が空文字列でもNULLとして扱われることはなくなります。
 
ちなみに、↑の例では接続時「charset」を指定して、キャラクターセットを指定していますが、
この方法は古いドライバを使うと脆弱性につながるので注意してください。

 

AIR(HTML)でアプリケーションを作らなくてはならなくなったので、いろいろ勉強中。
 
AIRはHTML/CSS/JSでスタンドアロンアプリケーションが作れる夢の技術(?)
jQueryとかも問題なく使えるので、
マークアップエンジニアや昔でいうところのHTMLコーダーでも
スタンドアロンアプリが作れるし、
私みたいに「は?C++?」「は?JAVA?」「Perl!Perl!」というおめでたいPGでも
スタンドアロンアプリが作れるんだねー!
(てめぇ、Filemakerプラグイン作ってるじゃねぇか!?ゴルァ!!というツッコミはスルーします)
 
ということで、喜んで飛び込んでみたものの、
やはり通常のHTML+JSの感覚で作ると、
うまくいかないところが多い。
Adobeが頭をフル回転させて出た知恵なのか、
めんどくさくなってなんとなく作った仕様なのか
知る由もないが、
独特のセキュリティ制限がかかっている。
 
ということで、今後、AIR(HTML)を作ってく上で、
ハマったところをメモっていくので、読みたい人は勝手に読んでください。
間違ってたら、こちらも仕事で使ってて問題になっては困るので突っ込んでください。
 


今日のハマりポイント。

AJAXを利用して取得した別ファイルのHTMLをinnertHTMLで表示させた場合、
別ファイルのonclickなどのイベントは無効になってしまう仕様。
 
 
↓メインのHTMLファイル

<html>
	<head>
		<script src="AIRAliases.js" type="text/javascript"></script>
		<title>test</title>
		<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
		<script type="text/javascript">
			$(document).ready( function(){
				$.get(
					'load.html',
					{},
					function( html ){
						$('#test').html( html );
					}
				);
			});
		</script>
	</head>
	<body>

<div id="test">
</div>

</body>
</html>

 
 
↓読み込むHTML(ファイル名はload.htmlとする)

<input type="button" name="button" id="button" value="ボタン" onClick="alert('動け!);">

 
jQeuryをつかってDOMがreadyになったとき、「load.html」の内容をメインのHTMLのID「test」のブロックに表示させるという仕組みです。
で、ID「test」のブロックに表示されたボタンをクリックすると「動け!」というalertが発動するという仕組みですね。
 
HTML+JSやったことある人なら、なんとなくわかると思います。
そして、AIRでやったときも、ボタンをおしたとき「動け!」って出る。そんな気がします。
 
が、そうは問屋が卸さないようです。
 
AIRの親衛隊が発動して、別ファイルやサーバーから読み込んだ内容については、
clickなどのイベントが無視されて動かないのです。
(私はそれで半日ハマりました。泣)
 
じゃ、どうしたらいいか。
 
結論を先にいうと、
読み込まれる側のHTMLからonclickなどのイベント属性をすべてとっぱらって、
メインのHTML側で、読み込みと表示が終了したあと、イベントリスナを設定する必要があります。
 
じゃぁ例を。

↓メイン

<html>
	<head>
		<script src="AIRAliases.js" type="text/javascript"></script>
		<title>test</title>
		<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
		<script type="text/javascript">
			$(document).ready( function(){
				$.get(
					'load.html',
					{},
					function( html ){

						$('#test').html( html );

						//↓イベントリスナを設定
						$('#button').click(
								function(){
									alert('動け!');
								}
						);

					}
				);
			});
		</script>
	</head>
	<body>

<div id="test">
</div>

</body>
</html>

 
↓読み込まれるファイル(load.html)

<input type="button" name="button" id="button" value="ボタン">

読み込まれる方からイベントがなくなって、
メインのHTMLでイベントリスナを登録しているのが分かります。
 
こうしないと動いてくれないのです。めんどくせー!!!!
 
まぁセキュアなものをつくるのには必要ですがの。
 
ひとつ気になるのが、こうやってイベントリスナを増やしていく度に、メモリはどうなるのか?ということ。
もしかすると都度すてなきゃだめ??
 
 
今日はここまで。

私はPerlで仕事を始めたので、扱っている言語の中では一番Perlが得意。
 
なので、スタンドアロンアプリはもとより、DLL(COM)もPerlで作る。
ActiveStateのPerlDevKitを使えば、こんなことができてしまうんだ!
 
先日、仕事のWin環境を7(64bit)に移行した。
もちろんPDKもインストール。
 
XPの感覚でショートカットでPDKの各ツールを起動しようとすると、、、、起動できない。

えー。自分でショートカット作っても動かない。
 
えー。どうしたもんかと、インストール時自動で作られた各ツールのショートカットのプロパティを覗いて、「リンク先」をコピーして、コマンドラインから起動したらうまくいった。
 
うわー。いちいちコマンドから起動せなあかんのか・・・。
 
ということで、私は、得意のなでしこからコマンド起動するアプリを作っておいて、それをランチャーとスタートメニューに登録することで解決。
コマンドランチャーに登録してもいいかもね。
 
ActiveStateの公式を読むと、ショートカットをVista互換モードで起動するといいよみたいなこと書いてあったけど、嘘っぱちでしたので注意。