GoogleMaps利用例「お散歩マニア」
日替わりeカードの上に、なにげにBlogに貼る地図登場!というリンク・・・
クリックしてみると、GoogleMapsを使った「お散歩マニア」という神奈川県湘南の
地域ポータルサイトのようです。
GoogleMapsの位置情報をブログタイトルに貼り付け、トラックバック欄にこの
サイトのトラックバックURLを貼り付けてくださいということだが、
地図表示用タグをHTMLに貼り付けるだけでもちょっとは使えるかも・・
« 2005年9月 | メイン | 2005年11月 »
日替わりeカードの上に、なにげにBlogに貼る地図登場!というリンク・・・
クリックしてみると、GoogleMapsを使った「お散歩マニア」という神奈川県湘南の
地域ポータルサイトのようです。
GoogleMapsの位置情報をブログタイトルに貼り付け、トラックバック欄にこの
サイトのトラックバックURLを貼り付けてくださいということだが、
地図表示用タグをHTMLに貼り付けるだけでもちょっとは使えるかも・・
タイプリストに他人のブログやホームページのリンクをテキストで表示するのは、
おもしろくないと考え、Webイメージのサムネイルを生成してくれないかと
googleで検索したら・・・
Open ThumbShots.org
がありました。
このサービスには、3つのプランがあるんだけど、個人や一般企業が使うんだったら、
以下の2つのプランになると思います。
無料:Free DMOZのオープンディレクトリーに登録済のサイトをサムネイル表示
有料:Simple 25$/月・10万ヒット~、任意URLのサムネイルを動的生成
ちなみに、シナプスさんのホームページをFree版を使って表示すると、
のような感じになります。
私のブログをサムネイル表示したくて、トライしてみたいのですけど、
と”ドット”だけが表示されるだけで、サムネイルは表示されませんでした。
最後に、注意事項を補足しておきます。
スクリプト埋め込み用URLは、必ずURLエンコーディングが必須です。
ModelGlue1.0.01の新機能について、ドキュメントの該当部分を和訳したので紹介しておきます。
1.ステートフルResultリダイレクト <result name="xxx" do="yyy" redirect="ture" append="zzz" />
2.ステートフルフォワーディング arguments.event.forward( )
■クイックスタート: ステートフルResultリダイレクト
しばしば、あるフォームがポストされたときに、"Reload"によってユーザがフォームをリポストすることを防ぐために、新しいページへのCFLocation を行うことが定例化しています。Model-Glue1.0 では、ModelGlue.xml ファイルを通じてこの動作を模倣することが可能になりました。
どのような<result>タグにも、REDIRECT属性を追加することができるようになりました。REDIRECT="true"にセットされている場合、フレームワークはすぐ現在の要求を停止し、すべての変数値を維持しながら、あらかじめ設計された<event-handler>へのサーバーサイドリダイレクトを実行します。
URL のparamaters を含んでいるページにリダイレクトしたいと思うことはかなりありうることです。例えば、誰かがコンテンツ管理システムのあるセクションに新しい記事をポストしたら、"index.cfm?event=showSection§ionId=12345" のようなURL に遷移することを望むはずです。しかしながら、resultタグ上のREDIRECT属性は、url に追加すべきの"sectionId" 変数の値を知る方法がありません。この理由のために、オプションとしてAPEND属性が今回サポートされました。それは、変数コレクションをURLに追加するために、コンマ区切りの変数リストを含まなければなりません。フレームワークはURL に自動的にこのリストの単純変数すべてを追加します。
オーケー、それでは簡単なサンプルを見てみましょう:
<result name="articleAdded" do="showSection" redirect="true" append="sectionId">
全然OKでしょう?
■クイックスタート: ステートフルフォワーディング
行くためにどうしてもどこに知らない時があります。例えば、"ポッド" の中にあるフォームは、何かを行い、そしてどんなイベントから来たかユーザに示すことが必要になるでしょう。<result>タグを書くとき、"do"属性を動的にセットする方法はありません。
このような特別な事例のために、(arguments.event として知られている) EVENTオブジェクトは、Forward()メソッドを実装しました。このメソッドの使用方法は、次のようになります:
arguments.event.forward(<event-handler>名) - 直ちに指定された<event-handler>へのステートフルリダイレクトを実行する。arguments.event.forward("showSection ") は、index.cfm?event=showSection と同等です。
arguments.event.forward(<event-handler>名, append) - 直ちに、appendで与えられる変数コレクションをURLに追加しながら、指定された<event-handler>へのステートフルリダイレクトを実行します。arguments.event.forward("showSection" , sectionId )は、"12345" という値を有するsectionIdという変数コレクションを与えられた、index.cfm?event=showSection§ionId=12345と同等です。
SeanのModelGlue+ColdSpringサンプルアプリケーションGGCC9における
ColdSpringのAOP機能をチェックしてみます。
ggcc.xmlを眺めてみると・・・task関連処理におけるセキュリティチェックに
AOP機能を適用しているようです。
Target:
taskDAOTarget(class->ggcc9.model.taskDAO)
taskGatewayTarget(class->ggcc9.model.taskGateway)
Advice:
checkIdentity(class->ggcc9.aspects.checkIdentity)
Advisor:
securityAdvisor(Advice->checkIdentity MappedNames->*)
Service:
taskDAO:Target->taskDAOTarget InterCepternames->securityAdvisor
taskGateway:Target->taskGatewayTarget InterCepternames->securityAdvisor
このことによって、event-handlerの定義からセキュリティチェックの前処理がなくなって
います。
ggcc9->ModelGlue.xml->event-handler:showManager
<event-handler name="ggcc.showmanager">
<broadcasts>
<--
<message name="checkIdentity"/> <--- AOP化したことにより、コメント化
-->
<message name="needMembers"/>
<message name="needMembersByID"/>
<message name="needTasks"/>
<message name="needStatii"/>
<message name="needStatiiByID"/>
</broadcasts>
<views>
<include template="dspShowTaskList.cfm" name="content">
<value name="XFA.AddTask" value="ggcc.newtask"/>
<value name="XFA.ChangeIdentity" value="ggcc.identify"/>
<value name="XFA.TaskDetail" value="ggcc.showtask"/>
</include>
<include template="layGGCC.cfm" name="final"/>
</views>
</event-handler>
また、DAOとGatewayをビーン化したことにより、コントローラーtaskManager.cfcの
内部が非常にシンプルになっています。
■GGCC7->taskManager.cfc->saveTask
<cffunction name="saveTask" returntype="ModelGlue.Core.Event" access="public" output="false">
<cfargument name="event" type="ModelGlue.Core.Event" required="true"/>
<cfset var taskID = arguments.event.getValue("taskID") />
<cfset var ownerID = arguments.event.getValue("ownerID") />
<cfset var statusID = arguments.event.getValue("statusID") />
<cfquery datasource="#variables.dsn#" username="#variables.dbUser#" password="#variables.dbPass#">
UPDATE ggcctask
SET ownerID = <cfqueryparam value="#ownerID#" cfsqltype="cf_sql_varchar"/>,
statusID = <cfqueryparam value="#statusID#" cfsqltype="cf_sql_varchar"/>,
lastUpdated = <cfqueryparam value="#now()#" cfsqltype="cf_sql_date"/>
WHERE taskID = <cfqueryparam value="#taskID#" cfsqltype="cf_sql_varchar"/>
</cfquery>
<cfreturn arguments.event />
</cffunction>
■GGCC9->taskManager.cfc->saveTask
<cffunction name="saveTask" returntype="ModelGlue.Core.Event" access="public" output="false">
<cfargument name="event" type="ModelGlue.Core.Event" required="true"/>
<cfset var task = createObject("component","ggcc9.beans.taskBean").init(argumentCollection=arguments.event.getAllValues()) />
<cfset variables.taskDAO.update(task) />
<cfreturn arguments.event />
</cffunction>
次回は、Javaのlog4Jをロギングに使う場合のサンプルについて解説します。
ColdSpringsの 正式サイトがオープンしました。
SpikeのCFCDOCによるColdSpringのコード参照機能、
Raymond CamdenのGalleonによるフォーラム機能、
Daemonの FarcryによるCMS機能を使っているようです。
ColdfusionMX用フリーソフトを使ってここまでできるんですねえー。
Springの概要を以下のサイトを参照しながら、まとめてみた。
もともとはJava/J2EEアプリケーション用に開発されたフレームフレームなので、
非常にシンプルな考えに基づいている。
概要とキーワードは以下のとおりだろうか・・・
Java / J2EE アプリケーション用フレームワーク(オープンソース)
MVC フレームワーク
JDBC抽象化フレームワーク
既存フレームワークの利活用
トランザクション管理
AOP (アスペクト指向プログラミング)
すべての層をカバー
プレゼンテーション層、ビジネス層、パーシスタント層
IoC ( Inversion of Control )コンテナ
コンテナ上でコンポーネントを管理するための技術
XML で記述された Bean 定義ファイルを使用
オブジェクトの生成、オブジェクト同士の関連を生成
既存フレームワークへの統合アクセスを実現Struts
Hibernate
WebWork
JDO
以下のサイトが参考になります。
Spring-Java/J2EEアプリケーションフレームワークリファレンスドキュメント
徹底解剖! Spring Framework の実力を探る
ModelGlue+Tartanで当面はアプリケーションを作っていこうと思っていたら、
今月、Dave Ross & Chirs ScottによるColdSpringAOP0.2.1がリリースされ、ModelGlueとの連携も
あっという間に、Seanが作り上げてしまった。
しばらく、ColdSpringAOP関連を追っかけて、
Model-Glueとの連携についても整理したので、まとめておきます。
ColdSpringAOPのまとめ ColdSpringAOP.txtをダウンロード
Model-Glue + ColdSpringAOP連携アプリケーション ggcc9
次回から数回にわたって、ColdSpringAOPの解説してみます。
FLV MAKERのテスト
最近のコメント