CakePHPノート2:自己参照モデルの定義方法

下記の用な自己参照するデータベーステーブルがある場合どのようにして、cakephpのモデルを定義するの?

CREATE TABLE `nodes` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(40) NOT NULL ,
`parent_id` INTEGER NOT NULL ,
PRIMARY KEY (`id`),
);

注)parent_idは、親Nodeと子Nodeを結びつける為のForignKey。

解決方法としては、親ノードとして参照する為の$belongsTo、及び子ノードを参照する為の$hasManyを定義する必要があります。モデルは下記の用になります。

class Node extends AppModel {
   var $name = 'Node';
   var $belongsTo = array('ParentNode' =>
      array('className' => 'Node','foreignKey' => 'parent_id'));
   var $hasMany = array('ChildNode' =>
      array('className' => 'Node','foreignKey' => 'parent_id'));
}

CakePHPノート1: Modelを使わないControllerの書き方

最近CakePHPをサイド・プロジェクトで使っているので、メモを残していこうと思います。

ControllerでModelを使いたくないケースはどのようにコードを書けば良いのか?
解決方法: var $uses = array();をControllerの中に追加する。

class MyController extends AppController{
   var $uses = array();
   function index(){
   }
}

これを付けないと、Modelがないとのエラー・メッセージが表示される。

CakePHPをUbuntuにインストールする方法

(翻訳)CakePHP Tutorial:Installing CakePHP on Ubuntu

  1. Apache Server, MySQL, PHPをインストール
    sudo apt-get install apache2 mysql-server php5
    
  2. CakePHP 1.2をダウンロード
    http://cakephp.org から最新のcakephpをダウンロード。私はcake_1.2.3.8166.tar.gzをダウンロードしました。
  3. Web rootにパッケージをコピーし、展開する。
    ターミナルをcakephpをダウンロードした所で開く。

    sudo cp cake_1.2.3.8166.tar.gz /var/www/
    cd /var/www
    sudo tar -xvf cake_1.2.3.8166.tar.gz
    sudo mv cake_1.2.3.8166 cakephp
    
  4. tempフォルダーのパーミッションの変更
    sudo chmod -R 777 cakephp/app/tmp
    
  5. mod-rewriteを有効化する
    sudo a2enmod rewrite
    
  6. /etc/apache2/sites-enabled/000-default ファイルを開き、AllowOverride None を AllowOverride Allに変更
    sudo vim /etc/apache2/sites-enabled/000-default
    
    
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    
    

    から

    
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    
    

  7. Apacheの再起動
    sudo /etc/init.d/apache2 restart
    
  8. ブラウザを開いて、アドレスバーに http://localhost/cakephp/ を入力。CakePHPの文字がブラウザーに表示されている。

もしCakePHPの文字がカラーで表示されていたら、CakePHPが正常に作動しています。おめでとうございます!

ブックマークサービスを作りました。

ブックマーク・サービスを作りました。このサービスの基本的な機能として、ウエブ上でブックマークを管理する事が出来ます。まだまだ、機能が不十分であったり、ちょっとした問題があったりするのですが、使ってあげても良いよという方がいたら使ってみて下さい。

URL: http://www.you29.com/bookmarks

使い方:

  1. ページ右上の「ユーザー登録」からアカウントを作成して下さい。
  2. ページ中央(下)に「ブックマークを追加」リンクがあるので、Firefox、Opera、Safari、Chromeをお使いの方は、ツールバーに、ドラッグ&ドロップして下さい。IEのかたは、右クリック、お気に入りに追加を選択し、そしてリンク・カテゴリーに追加して下さい。
  3. 面白いと思った記事やブログを見つけるたびに「ブックマークに追加」ボタンを押すと、ブックマークがウエブ上に保存されていきます。ブックマークはデフォルトで共有されます。[Share]チェック・ボックスをオフにするとブックマークは共有されません。
  4. 共通ブックマークを見ると他の人のブックマークを見ることが出来ます。

質問、コメントはhttp://www.you29.com/contact/からお願いします。

Hive, Hadoop and Facebook

下記のプレゼン資料によると、Facebookでは、Hadoop上でHiveを動かし、データーベースのような、データへのアクセスビリティーを実現している。Hadoop File Systemは、KeyとValueによる、Hash/Dictionaryタイプのファイルシステムなので、データベースのようなデータへのアクセスビリティーがない。しかし、Hiveによりリレーショナル・データベースのようなアクセスビリティーを開発者に提供できる。これから、Hive – Hadoopなどを利用した、分散環境上でのデーターベースを利用するケースが増えてくるのだろう。

2008 Ur Tech Talk Zshao

View SlideShare presentation or Upload your own. (tags: hadoop hive)

Erlang, Delicious, and Yahoo!

僕はあまりErlangの事を正確には理解していないのであるが、友人からの情報では分散処理に適したすぐれた言語であると聞いている。

最近自分のブックマーク・サービスを自分で作っているので使わなくなってしまったが、Del.icio.usは多分世界で一番ユーザー数が多いソーシャル・ブックマークサービスである。ちょうど数ヶ月前に新しいバージョンをリリースしたばかりだ。数年前にYahoo!に買収され、現在ではYahoo!のサービスの一つとして運営されている。

Erlang is Delicious, CUFP slides
Developing Erlang At Yahoo (PDF)

上記のパブリックに公開された資料を読むまで知らなかったのであるが、新しいDel.icio.usにはErlangを使用しているようだ。Erlangはすぐれた言語であるが、利用者数という意味で比較的マイナーな言語である。しかし、Yahoo!のDel.icio.usチームはメジャーな言語であるかどうかに関わらず、適材適所に言語を選び、Erlangを選択した。その判断がすばらしい。Paul Grahamが、彼のスタートアップ(ViaWeb: Yahoo! Storeの前身)にLISPを選んだことにつうずるものがある気がした。この様な、チャレンジ精神を持ったYahoo!が好きである。

今日までGVimでコードからHTMLを出力できる事を知らなかった。

GVimの機能で、編集中のソースコードをカラースキームを保持したままHTMLフォーマットで出力する機能を見つけたので、ブログに張りつけてみたくなった。それで、このエントリーを書いています。方法:メニュー・バーから「Syntax」メニューを選択、そして「Convert To HTML」をクリック。あら不思議、HTMLフォーマットでコードが出力されます。下記の、コードは Pythonのコードです。コードをブログに張りつけてたいと思っている人は試してみてください。

1 def main_page(request):
2     logging.debug("lang_code: %s" % request.LANGUAGE_CODE);
3     if request.user.is_authenticated():
4         #return user_page(request, request.user.username)
5         return HttpResponseRedirect(‘/bookmarks/user/%s/’ %
6                 request.user.username)
7     else:
8         return HttpResponseRedirect(‘/bookmarks/public/’)

The Zen of Python

今日まで知らなかったのだが、Pythonのインターラクティブ・モードで”import this” と入力すると、Pythonの禅の教えが表示される。読んでいると色々と面白いのであるが、その中でもNow is better than never.の文が印象に残る。後でやるというカテゴリーに入り、実行されなかったプロジェクトがいくつあることやら。。。

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
>>>

http://www.python.org/dev/peps/pep-0020/