フォトアルバム

2011年10月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

なかのひと

373news.com

google Search

  • Google
    blog.ganymean.org
    WWW

Google Analytics

« 2006年9月 | メイン | 2006年11月 »

焼酎ファンと長渕ファンにはたまらない

先週の10月28日(土)、NPO法人PANDAの早川さんから紹介された
『桜島プロジェクト■桜島芸術村構想~ここからはじまるアートプロジェクト■』
を見に行こうと、桜島の古里地区まで出かけたものの、休みの様子・・・。
ガーンと一瞬落ち込んだものの、ふと、桜島側に目をやると、
古里公園という公園がある。
気を取り直して、公園への階段を一段一段踏みしめ、
桜島を久しぶりに近くから眺めてみました。

200610281007 公園内には、
「花のいのちはみじかくて 苦しきことのみ多かりき」
という女流作家「林芙美子」の文学碑が建っていて、
芸術の秋をちょっぴり満喫した気分になりました。

ふと、公園の片隅に目をやると、「ふみこの店」という売店があり、
足を運んでみると、店奥の陳列棚に何やら焼酎が鎮座している様子・・・

200610281011 店の中に入って銘柄を確認すると、
吉兆宝山、森伊蔵、魔王、紅椿、月の中、佐藤、黒霧島、兵六など、
マニアが喜びそうな焼酎がずらり。

2006102810112
ふみこの店 鹿児島市古里町1078
TEL 099-221-2045 FAX 099-221-2047


経営者は、岩元正彦さん。物静かな語り口ですけど、
焼酎のことを話始めたらあっという間に30分過ぎていました。
本当に自分が納得いく焼酎を扱っているんだなーと感激しました。
予算に応じて、岩元さんのおすすめを入れてもらうのも面白いと思います。
代引きも可能だそうです。

また、とても気さくなやさしいお婆ちゃんが店の入口で優しい笑顔で
語りかけてくれるんですけど、これまた癒された気分になります。

ちなみに、店主は長渕剛の大ファンのようで、長渕剛のレアグッズも
取り扱っていました。
場所は、こちらです。鹿児島市方面から訪ねていく場合は、
桜島桟橋に到着して、そのまま古里温泉郷に向かって、
車で15分くらいです。

OpenPNE2.4.2

OpenPNEが2.4.2にアップグレードされたので、アップグレードしてみました。
で、情けない、ハマッタ話をひとつ。参考にしてくださいね。

結論:セットアップ時に

config.php と config.inc.php は、UTF-8エンコーディングで保存するな!

です。

UTF-8エンコーディングで、config.php と onfig.inc.php を保存すると、
トップ画面にエラーが出ます。
shift_JISエンコーディングにすると解決できたので、eclipseなど
デフォルトエンコーディングをUTF-8にしている場合は、お気をつけください。

CFCベスト・プラクティス

ColdFusionオブジェクト指向プログラミング・ユーザーのための
「CFCベスト・プラクティス」がPeter Bellのブログで紹介されています。
さくっと意訳してみました。

詳しくは、CF-OOP Wikiを確認してください。

  1. メソッド内のローカル変数には、常に"var"を使え!
    • ループカウンタ
    • テンポラリ変数
  2. パブリックデータへのダイレクトアクセスは厳禁!
    • コンポーネント名.メソッド()でアクセスしろ!
    • パブリックデータへのダイレクトアクセスは、インタフェースの設計に反します。
    • 良い例
      foo = myCFCInstance.getInterestingStuff()
      myCFCInstance.setInterestingStuff(foo)
    • 悪い例
      foo = myCFCInstance.interestingStuff
      myCFCInstance.interestingStuff = foo.
  3. プライベート・データとして、"this"スコープを使用するな!
    • "this"は、"variables"スコープのことです。
  4. "arguments"は、常に明示するか、一切明示しないかのどちらかにしろ!
    • 常時、明示するのがお勧めです。
  5. CFCOMPONENTとCFFUNCTIONタグでは、「OUTPUT="false"」にすること!
    • ファンクションの実行結果をページに書き出したいのであれば、cfmファイルに以下のように記述すること。
      "#myCFC.someHTMLGeneratingMethod()#"
  6. ドキュメントの可読性向上のため、CFCOMPONENT/CFFUNCTION/CFARGUMENTの"hint"属性を必ず使用すること!
  7. CFFUNCTIONのRETURNTYPE属性 と CFARGUMENTSのTYPE属性 は必ず指定しろ。
    • ドキュメントの可読性向上とランタイムによる型式チェック速度向上のためです。
    • ファンクションが何も返さないのであれば、RETURNTYPE="void"を忘れずに!
    • カスタムオブジェクト型を使用する場合、TYPE="any"とすることで、速度パフォーマンスが向上する。
  8. CFC内で外部変数を直接参照しないこと!
    • session変数やapplication変数など
    • 例外は、ウェブサービスやFlashリモーティング用にファザード(facade)を構築するときだけです。
  9. メソッド引数のうち、必須でないものには"DEFAULT"値を指定すること!
  10. CFCタグの"EXTENDS"は、"is-a"として使用しろ!"has-a"やコード再利用目的で使用するな! 

RIAForge

Adobe製品によるRIA(Rich Internet Application)支援サイトが
立ち上がっています。 その名も、 RIAForge

Coldfusion, Flex, Flash, DreamWeaver, Livesycle, PhotoShop

Coldfusionだけではなく、その他Adobeプロダクト用の
オープンソースが入手できるのは大変ありがたい。

Model-Glue:Unityドキュメント意訳

Model-Glue:Unity公式ドキュメントの意訳をmediawikiで立ち上げました。

具体的なプログラミング方法やサンプルプログラムも随時アップしていく予定です。
ご質問や間違いなどがあれば、このブログの左サイドバーのメールフォームからご連絡ください。

どうぞよろしくお願いします。

幻想的な朝日

幻想的な朝日
錦江湾と桜島に朝日が舞い降りています。幻想的・・・

ColdSpring in MG:Unity No.3

ColdSpringの公式ドキュメントのAutoWiringを意訳してみました。
前回紹介したpropertyチャイルドタグ/constructor-argチャイルドタグは、依存性の注入方法を規定していましたが、beanタグのautowire属性はColdSpringが注入先のCFCをどのようにして発見するかを規定していて、autowire属性が指定されていれば、セッターメソッドは不要であることが記述されています。
また、autowiringの設定には、"byName"および"byType"の2つがあるようです。

"autowire"とは、Bean定義用xmlファイルでお互いの依存性を定義せずに、ColdSpringのbeanFactoryが依存する相互のオブジェクトを自動的に結合する能力のことを指します。

ColdSpring beanFactoryの中でCFCsを定義すると、ColdSpringは各CFCのメタデータを点検して、他のCFCにpropertyかconstructor-argで指定するものがあるかどうかを探します。

autowiringはBeanFactory内で、デフォルトで'オフ'にされていますが、'オン'にセットすると(bean全体かbeanの要素毎にセットできます)、ColdSpringは自動的に、依存性の注入(と自動的にオブジェクト結合)を行います。

autowiringの設定には、"byName"および"byType"の2つがあります。

推測できると思いますが、"byName"は、beanのname属性つまりCFC内にsetSomeService(...)メソッドか"SomeService"をコンストラクタ引数に持つCFCとColdSpring.xmlでid="SomeService"がある<bean/>内のCFCを結合し、"SomeService"を該当するCFCにいつでも注入します。

"byType"は、ColdFusionコード内に"type"属性、つまり、セッターメソッドの引数(または、コンストラクタ引数に) type="type.of.SomeService"を使用することによって、ColdSpring.xmlにclass="type.ofSomeService"があるbeanがあれば、そのbeanを該当するCFCにいつでも注入します。

benaタグのエンティティ全体にautowiringをセットするには、default-autowire属性を使用してください:

<beans default-autowire="byName">
    <bean id="cfc1" class="..."/>
    <bean id="cfc2" class="..."/>
...
</beans>

各々のbean(default-autowire設定をオーバライドすることになります)にautowiringをセットするには、autowire属性を使用してください:

<beans>
    <bean id="cfc1" class="..." autowire="byType"/>
    <bean id="cfc2" class="..."/>
    <bean id="cfc3" class="..." autowire="byName"/>
...
</beans>

ColdSpring in MG:Unity No.2

前回に引き続き、Nandoのブログを紹介してみます。
Nando曰く、ModelGlue:UnityでColdSpringについて学ぶべきことは、最低3つとのことです。

最初に専念したほうがよいことは、Bean FactoryリファレンスのうちのBeanタグ属性Beanチャイルドタグチャイルドタグのconstructor-argとpropertyの3セクションです。

これらを理解すると、ModelGlueでColdSpingを使いこなすことができると思います。

なお、個人的には、Bean FactoryリファレンスAutoWiringDeveloping w/ColdSpringService Layers and ColdSpringも一読したほうがよいと思います。

beanのチャイルドタグであるpropertyタグとconstructor-argタグについて、Nandoは次のように解説しています。

1.propertyタグ

constructor-argと全く同様です。しかしながら、この場合、ColdSpringはname属性で特定されるセッターメソッドへの引数として何らかの単純変数かオブジェクトをBeanに渡します。

したがって、CFCには、propertyタグのname属性に合致するセッターメソッド名がなければなりません(例えば、propertyが"foo"なら、CFCはsetFoo()メソッドを必要とします)。

2.constructor-argタグ

constructor-argタグは、(CFCがinit()メソッドを通して)CFCが初期化されるときに、name属性で指定された引数を渡すことによって単純変数かオブジェクトへの参照をbeanに対して提供することを、Coldspringにもたらします。

以上の2つのチャイルドタグを使って、あるファクトリクラスの初期化の際にパラメータを注入する方法が、次のように紹介されています。

◆bean.xml
<!-- "samasati.model.appFactory"クラスを"appFactory"として定義 -->
<bean id="appFactory" class="samasati.model.AppFactory">
   <!-- appFactory.init()に対して、appConfigを引数として渡す -->
   <constructor-arg name="appConfig">
      <!-- AppConfigビーンを参照 -->
      <ref bean="AppConfig" />
   </constructor-arg>
</bean>

<!-- "ModelGlue.Bean.CommonBeans.SimpleConfig"クラスの"AppConfig"として定義 -->
<bean id="AppConfig" class="ModelGlue.Bean.CommonBeans.SimpleConfig">
   <!-- Bean"AppConfig"の引数の実体は、property"config" -->
   <property name="config">
      <map>
         <entry key="dsn"><value>samasati</value></entry>
         <entry key="imagePath"><value>images/</value></entry>
      </map>
   </property>
</bean>


◆someContoroller.cfc
<cffunction name="init" access="public" output="false">
   <cfargument name="appConfig" required="true">
   <!--- Instansiated by setAppConfig Method passed through arguments.appConfig --->
   <cfset setAppConfig(arguments.appConfig) />
</cffunction>

<!--- autowire setters and getters for bean id:AppConfig --->
<cffunction name="setAppConfig" access="public" returntype="void" output="false">
   <cfargument name="appConfig" required="true">
   <cfset variables.appConfig = arguments.appConfig />
</cffunction>
   
<cffunction name="getAppConfig" access="private" output="false">
   <cfreturn variables.appConfig />
</cffunction>
   
<!--- autowire setters and getters for bean id:AppFactory --->
<cffunction name="setAppFactory" access="public" returntype="void" output="false">
   <cfargument name="appFactory" required="true">
   <cfset variables.appFactory = arguments.appFactory />
</cffunction>

<cffunction name="getAppFactory" access="private" output="false">
   <cfreturn variables.appFactory />
</cffunction>

ColdSpring in MG:Unity

ModelGlue:Unityを使って本格的なアプリケーションを考えようと、過去の記事やModelGlue、ColdSpring、Reactorの公式サイトのドキュメントを眺めていました。

そんなところに、Sean CorfieldがNandoのブログを紹介しているのが目に留まりました。
彼は、ModelGlueやColdSpringのメーリングリストにおいて、NewBie的なアプローチから大きな貢献をしているので、彼の書く記事は私と同じ目線、つまり独学でColdFusionやオブジェクト指向(OO)を学んでいるため、非常に共感できるものがあります。

彼の記念すべき第一回目の記事は、The Mystery of AutoWiring in Model-Glue Unity
つまり、ModelGlue:UnityにおけるAutoWiringに関するものです。

AutoWiringは、ColdSpringの公式ドキュメントにおいて、以下のように定義されています。

"autowire"は、Bean定義用xmlファイルでお互いの依存性を定義せずに、ColdSpringのbeanFactoryが依存する相互のオブジェクトを自動的に結合する能力のことを指します。

このことをNandoも、最初のころはなんのこっちゃ全然わからんかったと言っています。

MGを学ぼうとする人々を困らせるように思えるものの1つは、autowiring機能です。

多くの人々が、ドキュメンテーションでまだそれほど明確に説明していないので、それが存在するのを知ってさえいないかもしれません。

autowiringを使いこなすには、ColdSpringを少しいじくる必要があります。

ColdSpringがColdFusionと異なった名称を使うので、最初は外国に行ったみたいな感覚になります。

ColdSpringでは、CFCをBean、structをmap、arrayをlist などと呼びます。

しかし、あなたがいったん使用される用語を翻訳して、少しそのやり方に慣れると、突然として、とても簡単に使用することができるようになります。

そして、Nando曰く、ModelGlue:UnityにおけるAutoWiringとは、次のようなことであると・・・

簡単に言うと、AutoWiringは、ColdSpringを使用してModelGlueのコントローラに記述されたCFCに初期化パラメータを注入する非常に便利な方法です。

そのことを、EmailServiceを例にとって、以下のように説明しています。

アプリケーション規模が大きくなると、おそらくModelGlueコントローラ内でサービスレイヤのCFCを初期化する必要が生じるでしょう。

そして、おそらくアプリケーションを論理的な単位に分割するため、複数のコントローラを使用し始めるでしょう。

そうなると、例えば、EmailService自身を初期化する代わりに、EmailServiceを必要とする各々のコントローラのinit()メソッドで、ColdSpringが作成するEmailServiceのインスタンスに初期化パラメータを注入する際に、AutoWiringを使えばいいのです。

うーん、こういう風に説明されると、とてもしっくりと頭に入ります。

以前の記事で紹介したように、第三世代のMVCフレームワーク、即ちModel層における単調なコードの繰り返し記述を回避するため、Modelをビジネスロジック、サービス、パーシスタントという複数レイヤに分割することを支援してくれるんだなーという実感です。

ログイン

  • コントロールパネルへのログイン
    アカウント:

    パスワード:

更新ブログ

最近のトラックバック

Google

ブログ powered by TypePad
Member since 04/2005