CakePHPで携帯サイト構築(Ktai Library)の場合のGPLライセンスについて
Wednesday February 17th, 2010GPL,Wordpress,CakePHPWordpress,CakePHP
以下のサイトでCakePHPで携帯サイト構築をするためのヘルパー・コンポーネントを公開されています。 ありがたく、今度試させてもらおうと思います。
携帯サイトを構築する場合の、各キャリア対応をサポートするライブラリと、それをCakePHPで利用するためのヘルパー・コンポーネントを公開いたします。ライブラリ本体はCakePHPだけでなく他の環境でも使用することが出来ます。
なお、ライセンス形態はGPLライセンスのようです。
GPLライセンスといえば「コピーレフト」。「コピーレフト」といえばGPLライセンス、と切っても切れない関係で、その「コピーレフト」の感染力がしばしば話題になりますが、
ここで、疑問。
ヘルパー・コンポーネントとしてGPLライセンスを使った場合、自分の成果物もGPLライセンスにしなければいけないのか?
想定されるライセンス形態は以下のような感じです。
- MITのCakePHP
- 自分の成果物(Appフォルダの中)
- GPLライセンスのKtai Library/ヘルパー・コンポーネント
いろいろ調べた結果、自分のなかでは「自分の成果物もGPLライセンスにしなければいけない」のではないか、という考えです。 ただ間違っている可能性大です。
理由としては以下のとおりです。
CakePHPではないですが、
以下にWordPressのテーマはすべてGPLライセンスにしなければならないか?といった内容の記事があります。GPL の専門のソフトウェア・フリーダム・ロー・センターの回答ということで、大変興味深い内容になっています。その中で、
CSS ファイルや “default” テーマの画像ディレクトリに含まれるものは、WordPress コードとは分離しているといえるでしょう。一方、WordPress のコードと混じり合い、影響を受ける PHP や HTML コードは、WordPress の派生物といえます。
[中略]
結論として、提示された WordPress テーマは WordPress の著作権の元にあるコードの派生物を含んでいます。それぞれ独自の作品である画像、CSS、PHP ファイルをまとめたこれらのテーマは、全体的を GPL ライセンスにする必要はありません。むしろ、PHP ファイルは GPL ライセンスの要件に制約されるが、画像や CSS はそうではないと言えます。サードパーティのテーマ開発者は、希望するなら制限付きの著作権を適用することができます。
最後に、WordPress の著作権に制限されない合法な WordPress テーマを作成することも可能ということを言っておきます。しかしそのようなテーマはこのソフトを有益なものにしている WordPress 関数をまったく使わないものである必要があります。
と結んでいます。
WordpressのWordPress関数はGPLなのでそのコードを呼び出したり、混じり合い、影響を受けるPHPはWordpressの派生物である(画像、CSSは混じり合ってないのでそうでない)
ということらしいです。すると、
Ktai Libraryはコンポーネントなので、自分のコードから読出したり、影響を受けたりするわけだから、「コピーレフト」の影響をうける。よって、自分の成果物もGPLライセンスにしなければならない。
であろう、という考えにいたりました。
間違っていたら是非指摘して下さい。
すでにあるPHPのサイトからSSOでWordpressにもログインさせる方法
Friday February 12th, 2010CakePHP,WordpressCakePHP,SSO,Wordpress
自分の会員制のサイトで利用者にブログを提供できるオプショナルサービスを考えていてSSO(Single Sign On)をどうしたものかと思い調べてみました。
すでにあるPHPのサイトからSSOでWordpressにもログインさせる方法として、以下のサイトのコードが流用できそうなのでブックマーク。。。
In my setup, the main site has role-based permissions and the WordPress setup only has one account for each role (i.e. admin, editor, user etc…). The plugin first checks the role of the user logged in to the main site and then simulates a WordPress login anytime the user navigates to the blog. You should be able to customize this method for your own needs.
まぁ~、うちのサイトではまだまだ対応はあとになるだろうけど・・・
CakePHPでreCAPTCHAによる画像認証
Saturday January 23rd, 2010CakePHPCakePHP,Web Service
自作のポータルサイトシステムのお問い合わせにCAPTCHA機能の認証を付ける際に参考にさせてもらいました。
GWからCakePHPでつくりはじめたWebサービスで、画像認証を実装したいと思って、以前から気になっていたreCAPTCHAを導入した。びっくりするくらい簡単だったけど、意外とreCAPTCHA実装の記事が少ないので、丁寧に解説します。
実際、reCAPTCHAのようなWEBサービスは開発者にとってかなりの時間の削減になるので、これからもいいサービスがあれば積極的に導入していきたいです。
CakePHP リンク連打や読み込み中に再アクセスするとセッションが切れる問題
Saturday January 2nd, 2010CakePHPCakePHP
CakePHPを使ったプロジェクトでデザイナーの友達から「管理画面を使っていたらよくログアウトしてしまう。」という指摘を受けたので調べてみたら以下のフォーラムで解決策が載っていました。
CAKE_SECURITYを"high"で運用中に勝手にログアウトされる現象が多発!リンク連打等、読み込み中に再アクセスするとセッションが切れる様子。いろいろと原因を探してると、ここの記事にたどり着きました。現在は、CAKE_SECURITYを"medium"で運用しています。アクセス毎session_idを書き換えてセキュリティを高める目的なんでしょうかね?しかし、毎回読み込みが完了するまで、ユーザに触らせないようにしないと使えないですね。
引用元: "cake1.1.18にversionアップしたらSessionが使えない?" フォーラム - CakePHP Users in Japan.
実際に、ページの読み込み中に他のリンクを押すと十中八九再現が可能だったので、セッカチな人はログアウトしまくってしまうみたいです。
CakePHPのデフォルトセキュリティでは、セッションハイジャックを防ぐなどの意味で、こういう対応になっているみたいなのですが、一般ユーザに公開するようなサイトだと、これはちょっと実用的ではないので、CAKE_SECURITYを"medium"で運営するか、読み込み中はリンクを押させないような工夫が必要になってくるのではないかと思います。
GETメソッドのパラメータからxPageの挙動をコントロールする方法
Tuesday December 29th, 2009Notes/Domino,XPages アプリケーション開発,Lotus Domino DesignerLotus Domino Designer,XPages アプリケーション開発
他のページからジャンプしてきた時に、xPageの表示内容を変更したい時などに役立つ知識だと思います。
引用元のブログではGETメソッドのパラメータを使って表示するカテゴリのフィルタリングを行っています。
What this code does is before the page has loaded it looks at the URL and finds the location= part and if it exists it puts whatever the value is into a sessionscope variable called 'locationfilter'. Session Scope is a special scope where you can add variables that only last for the duration of the users session. As soon as they close their web browser the session scope variables are lost. There is also an Application Scope and a Page Scope that you can use to store these values. Heres how the code will look in the source view of your xpage, you can see the resource for the server side script library and the beforePageLoad script. As you get more advanced in XPages you may find yourself writing code directly in the source view.
引用元: Dec's Dom Blog :: Learning XPages Part 20 : Restricting The Repeat To A Single Category.
実際、GETメソッドのパラメータをbeforePageLoadイベントでチェックするのに
var cgi = new CGIVariables(); var param = cgi.getURLParam("Location"); if (param) { if (param != "" ) sessionScope.locationfilter = param; }引用元: Dec's Dom Blog :: Learning XPages Part 20 : Restricting The Repeat To A Single Category.
というサンプルコードがあるのですが、Louts Notes/Domino 8.5に付属してくるディスカッションテンプレートにあるxpCGIVariables Script Libraryではcgi.getURLParam()というファンクションがないため上手く動きません。
そこで、taskjam.netからTaskJam V1.0とうテンプレートをダウンロードしてもってきます。
ここで、とても興味深かったのが、ブログで寄せられているコメントなんですが、
There is also a MUCH easier way to get the parameter instead of including the script library (although it's probably good that you showed that).
Use the global "context" JavaScript object:
context.getUrlParameter("Location")
という書き込みがあり、「context.getUrlParameter("Location")を使うともっと簡単にパラメータが取ってこれるよ」、と言っています。
で、ブロガーのDec自身が
I was thinking the exact same thing but have come to realise over the past couple of days that context.getUrlParameter() is not available in certain contexts, such as described above, and when programmatically getting the document id.
と返事してます。
実は自分も同じように
context.getUrlParameter("Location")
をbeforePageLoadイベントで使おうとしたんですが、なぜか値を取得しなくて、調べている内に彼のブログに辿り着きました。
興味ある方は、TaskJam V1.0テンプレートのxpCGIVariablesを覗いて頂ければ分かるとおもうのですが、
自分の結論としてはbeforePageLoadイベントでは
context.getUrlParameter()
はまだ値が格納されておらず、
facesContext.getExternalContext().getRequest()
には格納されている。
ということにしておきました :-)(自分はIBMの人間じゃないので間違っている可能性大です><)
さらに突っ込むと、同じコメント欄で
パラメータを渡すようなことをしなくてもリンク元でsessionScopeを使って予め設定しておけばいいんじゃないの?
というコメントも寄せられていて、
実際、自分もそれをまず試したのですが、結論としては(自分の環境では)動きませんでした。
リンクが同じデータベース内にあって、リンクをクリックされたとき、onclickイベントなどでsessionScopeを使って値を設定する場合は、正常に動作するとおもうのですが、
自分の場合は、他のデータベースに貼ってあるリンクからジャンプさせていたので、onclickイベントでsessionScopeの値を設定しても、リンク先のデータベースではsessionScopeの値を取得出来ませんでした。
ここで、悩んだのが、sessionScopeっていったい、どこの保存されているのか?
これも、自分の憶測と断って書かせてもらうと、
sessionScopeはUserがログインしている間保存されるが、その値自体は、定義したデータベースが持つ。なので、2つのデータベースで同じ変数のsessionScopeの値が違うということはありえる。
ということです。 検証しようと思えば簡単なので、時間が出来たときにやってみたいと思います。もしくは答えを知っているかたがおられたら教えてください(><)
【CakePHP】CakeFestで発表された「Media Plugin for CakePHP」のスライドを翻訳してみました | ECWorks Blog
Sunday December 13th, 2009CakePHPCakePHP,CakePhp Plugin
ヴァージョン管理、Webroot以外でのアップロードファイルを保存というところに激しく興味を覚えたので、時間があるときに試してみたいと思い、とりあえずブックマーク。
【CakePHP】CakeFestで発表された「Media Plugin for CakePHP」のスライドを翻訳してみました | ECWorks Blog.
Lotus Notes 8.5.1のためLotus Expeditor ToolkitをEclipseに設定する時の注意点
Wednesday November 25th, 2009Lotus Domino Designer,Lotus Expeditor,Notes/Domino,Notes/DominoComposite Application,Lotus Domino Designer,Lotus Expeditor,Java
Lotus Notes 8.5.1の埋め込みブラウザをSSO(Single-Sign-On)対応させるために、Lotus Expeditor Toolkitを使ったEclipseの設定をしようとしたのですが、Lotus Notes 8.5.1のVMが見当たらないので、ググッてみると以下のように構造に変更があったみたいです。
There's no longer a JRE stored in the plugin directory way down in the directory structure. Now you simply use the JVM in /jvm - simple right?!
This is nice but it means that your Eclipse configuration needs to be a little different JVM wise. I have therefore updated my Eclipse configuration guidelines to work with Notes 8.5.1.
引用元: Configure Eclipse 3.4 for Notes 8.5.1 - lekkimworld.com.
以前は、
<Notes install dir>/framework/rcp/eclipse/plugins/com.ibm.rcp.j2se.win32.x86_1.5.0.SR4-200707311521/jre
などとなっていたのですが、Lotus Notes 8.5.1では引用元の紹介にもあるように、
<Notes install dir>/jvm
に変更になっていました。
詳しくは Eclipse configuration guidelines to work with Notes 8.5.1に書いてあります。
これは、自分の設定した場合、
なお、Lotus Expeditor Toolkitの設定自体は以下のリンク等にかいてあるのが参考になるとおもいます。
http://www.ibm.com/developerworks/lotus/library/expeditor-notes-sametime/
http://www.ibm.com/developerworks/lotus/library/expeditor-browser/
Notes ClientでxPageをオープンするための?OpenXPages
Tuesday November 24th, 2009Notes/Domino,XPages アプリケーション開発,Composite Application,Lotus Domino DesignerLotus Domino Designer,Notes/Domino,XPages アプリケーション開発
前回の投稿に続き、Lotus Notes 8.5.1からxPagesをComposite ApplicationにComponentsとして追加できる機能がついたので、早速試してみたのですが、Dblookupで他のデータベースからドキュメント情報を取得することは出来るけど、いざ、そのドキュメントをオープンさせようとしたときに、上手いこといかない、という問題に躓いたので記しておきます。
実際、なにが上手いこと行かなかったかというと、
- http:// のプロトコルでリンクを手前で生成しているような場合に、Lotus NotesはWebブラウザで開けようとするが、認証をもう一度求められてしまう。
- リンクを参照パスにしても、Proxyエラーや、404エラーとなってしまって開くことが出来ない。
で、どうするのかな~と思い調べてみると、答えはxPagesのブログに有りました。
?OpenXPage has been added as a supported parameters for the notes:// protocol to launch an XPage in the Notes client.
引用元: What's New For XPages in 8.5.1 - XPages Blog - The XPages Blog.
Lotus Notes 8.5.1 のxPagesの新しい機能紹介の投稿なんですが、
Notes ClientでxPageをランチするために notes:// プロトコルの?OpenXPages というパラメータをサポートしました。
ということらしいので、自分の探していたのはこれかも?!と思い試してみたら見事に動きました。
自分の例では、
Link Core ControlのOptionsで「Link type」を「URL」にして、以下のようなComputed Valueで上手くいきました。
return "Notes:///88257656006337D3/content.xsp?OpenXPage"
余談ですがxPagesをComposite ApplicationのComponentとして使いたい場合は、極力xPagesで用意されたCore Controls等を使って作っていくのが近道っぽいです。もちろんThemeなども。
自分はxPagesのSourceタブからhtmlコードやCSSファイルをガツガツ埋め込んでいっていたので、Componentにしたとき、ほとんど動かず、結局かなり作り直すはめになっちゃいました・・・(涙)
追記:12月16日2009年
Domino Designere URLs for xPgages というエントリーがDomino Designer Wikiに追加されてます。
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Domino_Designer_URLs_for_XPages
xPages Component(Notes 8.5.1)でDblookup()使用時の注意点
Wednesday November 11th, 2009XPages アプリケーション開発,Lotus Domino DesignerLotus Domino Designer,Notes/Domino,XPages アプリケーション開発
xPages Componentを使ってLotus Notes Client 8.5.1上でxPagesを表示させる新しい機能を試したときに、自分のxPagesを以下のようにチューニングしないと上手く動かなかったので、注意が必要になります。
症状
xPagesをブラウザで見るとうまく表示されるのに、Notes Clientで見るとDblookup()でエラーが発生する。
状況
サーバのComposite Applicationを直接開いたときにエラーが発生するが、ローカルレプリカを開いたときは発生しない。
原因
@Dblookup()の1st パラメータの dbName が正しく設定されていなかった。
詳細
以下のコードではDblookup()が正常に値を返しません。
<![CDATA[#{javascript:var db = ["" ,"folder/cms.nsf"];
var viewName = "(vwTestLookup)";
var key ="Keyword";
var value = "";
var value = @DbLookup( db , viewName , key , 6 );
var retValue = "";
if(!@IsError(value)){
for( var i=0; i< value.length && i < maxEntry; i++){
retValue += "<li>"+value[i]+"</li>";
}
}
else{
retValue = "Error happened in DbLookup(). ";
}
return "<ul>"+retValue+"</ul>";}]]>
原因は一行目の
var db = ["" ,"folder/cms.nsf"];
にありました。 Webブラウザから見る場合はサーバ自身のfolder/cms.nsf データベースを参照してくれるので、問題なく期待した動作をするのですが、Notes Clientで開くと、ローカルPCのfolder/cms.nsfを参照しにいってしまうため、レプリケーションがない環境ではエラーが発生してしまいます。
対処法
Dblookup() のdbName Arrayの 1st elementにサーバネームを渡すようにする。
var db = [database.getServer() ,"folder/cms.nsf"];
としてやれば、どちらも動くようになります。
ちなみに、xPages Componentと同じDBを参照する場合は、
var db = @DbName();
としてやるだけでOKです。
複雑な処理をしている既存のxPagesをComponentで動かす言った場合、このようなケースではただエラーが発生するので、丁寧なコードを書いていないとデバッグ作業は思いのほか時間がかかってしまいます。
mod_rewrite サンプル集のメモのメモ
Saturday November 7th, 2009Apache,CakePHPApache,CakePHP,mod_rewrite
使いこなせばスイス製のアーミーナイフのような切れ味を発揮すると説明されている、apacheのmod_rewrite。
わかっちゃいるけど、正規表現と同じで、いつも必要なところだけサラッとかっさらって、いつまでも使い方をちゃんと理解していない。 いつか腰をすえて習得しないといけないなぁ~と思ってはいるんだけど・・・
ってことで、サンプルのメモ
mod_rewrite サンプル集
mod_rewrite はすげー色んなことができて楽しい。
でもけっこう難しい。
そこで、オイラ用メモで簡単なサンプル集をば。
引用元: mod_rewrite サンプル集/楽.