拍手ボタン(もどき)を作ってみました

ここseesaaには拍手ボタンなるものが用意されていませんので、何となく作ってみました。
気に入った記事や公開ソフトウェア等がありましたら、是非ポチッとしていただけると(^^;

無料で公開されているブログサイトに、こういったパーツを付けるのはとても難しいです。自前サーバなら、PHP等で気軽にプログラムを置いたり出来ますけど、ブログサイトでは自前で用意したサーバサイドプログラムを置くことが出来ません。また、このプログラムはJavaScript(Ajax)を使っていますが、JavaScriptはクロスドメイン問題というのがありまして…つまり、異なるドメイン(サブドメインも含む)からデータを入手することが出来ないため、別のサーバに設置したプログラム処理を利用してデータを表示することは出来ません。この辺はAjaxプログラミングをやると必ず解かなければならない難題なので、興味あったら是非調べてみてください。しばらくナイショにしておきます。

一応作ったものは人様にお見せできないようなソースの汚さなんですが、一応seesaaに限らずたいていのブログサイトに設置できると思います(JavaScriptが無効にならず、かつ記事IDが入手できるブログシステムならOK)。希望者が多いようなら、改良して公開することも考えます(ほかにやることがいっぱいで手が回らないのが実情です)。

なぜSilverlightかというと…

珍しく連続投稿しています。

Silverlightでセルフ盛り上がり(???)の当ブログですが、何故かと言いますと、コンテンツデータとして、バイナリデータではなくてXMLベースのXAMLを使っているからです。

なんか以前の記事で真逆のことを書いているのですが(大汗)、それはそれとして、XAMLの場合もかなりメリットがありまして、Cake等でXAMLを作りだして、動的なコンテンツができる可能性があるのです。
例えば、XAMLでUIのテンプレートを作って、これをCakeに通せば、DBから入手した各個人の情報を反映したUIなどが簡単にできるのです(運用上問題があるかどうかは置いといて)。これがFlashだと、ユーザ情報のXML等を別のリクエストで受け取り、AS内で加工しなければなりませんから、仕組みも複雑になり、手間も増えると思います。こういった使い方なら、テキストベースのコンテンツデータの方がありがたいですね。
Adobeの方も、似たようなことをFlexでやっているようなのですが、ちょっと勉強不足なのでこちらのコメントは控えるとして…

問題なのは、このXAMLの扱いでして…
一応記述はXMLに近いのですが…最初のXML宣言が無いんですよね。JavaScriptのパーサーに通したりすると不具合が起きるとか起きないとか。PHPのXML関連のライブラリに通すとどうなるんでしょうかね。この辺を実験してみないと何とも言えません。

ちなみに、今分かっている時点で最大の敵になりそうなものは2点。一つはクロスドメイン問題、もう一つは、リロードでもXAMLを再取得しない点です。
クロスドメインに関しては、もう諦めるしかないです。Silverlightオブジェクトを作り出す関数内で、XAMLのファイル指定をしているため、JSONPでなんとかする、なんて方法はとれないです。
リロード云々に関しては、動的XAMLにキャッシュ制御(ヘッダにno-cacheを入れる)して回避できそうな気もしますが、試してないのでなんとも。Ajaxの場合、この辺の挙動はどうなるんでしょう?

とりあえず、この2点を克服できると、いろんなことが出来ると思うのです。

あとは…XAMLをサーバに返す方法がなんとかならないかなーと模索中。
例えば、JavaScriptで増やしたオブジェクトをXAMLに書き出してサーバに上げるAjaxなんかできると、これでサービス作れちゃったりするんですけど(笑)。

そんなわけで、当方はいま夢が膨らんでいるのであります。

Silverlightの動作テスト

Silverlightがブログで動くかのテスト。

追記

残念ながら、ここ(Seesaa)では出来ませんでした。

原因は、Silverlight側からXAMLを読み出す際、クロスドメイン問題に引っかかるようです。

すっかり忘れていました。AjaxをはじめとするJavaScriptにはクロスドメイン問題があることを。

やっぱり現時点ではFlashの方が上かなぁ……

Silverlightなかなか面白い

 タイトルの通りで、Silverlightはなかなか面白いです。

 今はXAMLで書いたオブジェクトを多少JavaScriptで動かして遊んでいる(?)段階ですが、Ajaxを組み合わせればいろんなことが出来そう。少なくとも、画像ビュアー系は、いろんなエフェクトを追加できそうです。
 ちょっと面白いサービスのアイデアが浮かんだので、作ってみたいと思うのですが…JavaScriptではちょっと苦い思い出があって、マウスイベント系ではまってお蔵入りしているサービスを思い出してしまいます(涙)。でもなんかマウスイベントの種類が増えているので、その時の不具合は解決出来そうな気がしています(といっても、お蔵入りしているサービスはSilverlightで実現できないのが残念)。

 制作していく上で注意点が。
 XAMLを編集した場合、ブラウザをリロードしても更新されないみたいです。ブラウザを立ち上げ直さないと、新しいXAMLを取りに行かない模様。注意されたし。
 それから、マウスイベントをCanvasに置いても、オブジェクトがない部分でイベントが発生しないのも注意。イベントをCanvas全体で取りたい場合は、Canvasを覆ったレクタングル等を配置する必要あります。そしてイベントを受け取るのはCanvasで。レクタングルの方にしてしまうと、ほかのオブジェクトを配置した場合に、その覆われた部分でイベントがとれません。
 Silverlightで描画した部分は、プリントアウトしてもちゃんと印刷されます。ただ、フォントはビットマップ化されてしまい、アンチエイリアスがかかっているとはいえギザギザします。まあこの辺は仕方がないですかね。

Flash player10の新機能も気になるところですが(CS4が出るのは間違いなさそうですね)、Silverlightも負けていないようです。Flash player10が出るまで、ちょっと使ってみたいなと思っています。

縦書きアプリケーションの難しさ

 たまにはPHPやCakePHPとは違う話題でも。

 現在、とある案件でで縦書きの入力フォームが必要になり、いろいろと研究しています。

 横書きに慣れてしまっているため、あまり気にしていなかったのですが、やはり日本語を扱う日本人としては、縦書きの入力が分かりやすい場合もあり、今回はそんなニーズに応えるためのUI改善ということで研究しているのですが……

 いや、世の中にIE7しかないのであれば、この問題はとても簡単です。CSSに縦書きに関する設定があり、それをテキストボックス等に指定するだけで縦書き対応になります(多少並びが汚いですが)。
 少し前なら、FirefoxやMacのシェアがそれほどでもなかったので、ばっさりと切り捨てることも出来たのですが、今ではばっさりというわけにはいきません。つまり、現状この方法を使うことが出来なくなってしまっているのです。

 そこで思いつくのが、ブラウザにプラグインとして導入できる、クロスプラットホームな「何か」です。

 真っ先に思い浮かぶのはFlashでしょう。PCだけではなく、携帯やPSPなんかでも動く、非常に幅広い対応が可能なプラグインです。最近では「Flex」という、プログラミングでの扱いが容易なプラットホームが出ていて、XMLでオブジェクトを編集することで最終的にswfファイルになり、大変に良い感じです。
 ところが残念なことに、Flashには肝心の縦書きの仕組みが備わっていません。ネットで検索すると、かなり強引な方法で仕組みを作っている方(会社?)もいらっしゃるようですが、利便性が損なわれていたり(縦書きフォントでないと使えなかったり、ちょっとした改変でコードまで変えなければいけなそうだったり)、複雑なコーディングをしていそうだったりで、実用的ではない印象です。

 次に注目したのがSilverlight。
 Windows+IEでしか動かないのかなと思っていたのですが、MacはもちろんFirefox, Safariもプラグインが出ていて、意外にターゲットが広い! モバイルもそのうち対応らしく、あと携帯に載れば言うこと無しというレベルにまで来ています。
 そして、Silverlightは現在バージョン2がベータ版になっているようですが、バージョン2から縦書き対応とのこと!
 こっ、これはっ! と思ったのですが…でもベータ版を使うわけにはいかないか。即戦力にはならず。う~ん、残念。
 さらに残念なのは、Silverlightは基本的にXAML形式の可読性のあるファイルをやりとりするため、ソースコードを隠せないという難点が。バイナリコードをはき出せれば言うこと無かったのですが…… あと、フォントの埋め込みとかも出来なそうなのも。
 逆に利点としては、VisualStudioと連携すれば、かなりあっけなくexe形式のファイルになり、ローカルアプリの開発には便利、ということでしょうか。データのやりとりだけサーバを介し、処理そのものをローカルでやらせてサーバ負担を減らす、なんて技も可能かも。

 もう少しこの案件が遅かったのなら、Silverlightを使っていたかもしれません。でも、今回は仕様そのものを諦めてもらうことになりそうです。期間的にも、コスト的にも難しい……
 でも、将来的にはSilverlightは面白そう。グラフィカルに編集するにはVisualStudioのバージョンを上げてExpressionStudioを購入しなければなりませんが。Vistaアプリケーションを作る機会があるのなら、これもいいかな。
 でも現実的には、Adobeにも頑張ってもらって、Flashが縦書き対応になってもらうのが一番良いのかも。所持しているPhotoshop7とFlashMXのバージョンをCS3に上げる口実になるし。

 まあツールのアップデート云々は置いておくとして、縦書きUIの実現は本当にハードルが高いですね。結構需要はあると思うんですけどね。

#追記
Silverlight2の縦書きについては幻想だったようです。
MSは将来的に縦書き対応を検討しているものの、実装には至っていませんでした。
なおSilverlight2では、外部フォントの使用が出来るので、埋め込みと同じような、ローカル環境に依存しない表示が出来るようです。

逆に、FlashについてはFlash Player 10で縦書き対応をするとのこと。現在ベータ版らしいので、近い将来で縦書きが出来そうです。
そうなると問題はツールですね。FlashCS4とか出るんでしょうか? Flex3でプロパティがいじれるのであればそれでなんとかなりそうですが、とはいえグラフィカルツールが欲しいところ。ところが、手持ちのPhotoshopやFlashのバージョンを上げないとサポート切れになってしまうため、出来ればCS3のアップデータなどで追加されてくれると嬉しい…でないと10万くらい余分に出費することになってしまうなぁ(涙)。