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'));
}

ハッカーって日本の文化に興味あるの?

自分が比較的チェックしている、Hacker Newsという名のハッカー向け記事のランキングを表示させるサイトがあるのだが、今日チェックしたら、日本の草食男子に付いてのU.K.での記事がトップに来ていた。そのリンクをクリックすると、ページには草なぎ君の写真と、草食男子についての説明がびっしり書かれていた。普段は、プログラミングの話や、スタートアップに関する話題が多いHackNewsなのであるが、日本の草食男子文化に、ハッカーが興味を持っている事にビックリ。なんでだろう?これが今日のなぞ。

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が正常に作動しています。おめでとうございます!

MITのオタク写真

ボストングローブのウエブサイトboston.comを見ていたら、おもしろいというか、懐かしい気持ちにさせてくれる写真を見つけた。MITの建物の回りを、ボストンの地下鉄の模型らしき物が回っている写真。7年前は、このレッドラインにのって会社に通勤してました。たまに、電車に飽きたら、会社から家まで、MITの建物を横目に、家に歩いて帰ったものでした。マサチュセッツ州に住んだ事がある人が見ると楽しめると思います。Hackers delight — A history of MIT pranks

New Year Resolution 2009

毎年、新年の抱負(New-Year Resolution)を決めても、なかなか行動が伴わないのであるが、今年変えたい、生活習慣や、達成したい物事を考える事によって行動を起こせる場合もあるので、2009年の抱負に付いて考え書き出しました。

1)健康・食習慣

  • ソーダ(コーラなど)を会社で飲まない。ソーダ類は糖分が高いので。
  • 6階のオフィースに向かうのに階段を使用する。一日最低2回。
  • ジムに週1回は行く。

2)ライフ・ハック

  • 大きなゴールを達成する為に、小さな達成しやすいマイルストーンを設定するよう習慣化する。小さいマイルストーンの達成の積み重ねによって、より大きいゴールを達成する方が達成度が上がるので。

3)学習

  • 最低6冊の技術書及び6冊のビジネス書を丁寧に読む。
  • Information Retrieval (情報検索)に関して理解を深める
  • Machine Learning (機械学習)に関して理解を深める
  • Perlプログラミングスキルを向上させる
  • Pythonプログラミングスキルを向上させる

4)サイド・プロジェクト

  • 2個目の個人ウエブ・サービスを開発する。(予定:レシピ・献立検索エンジン)

2008年の達成度確認

今年(2008年)に実践するべき事リストというエントリーに2008年にやる事リスとを書いたのだが、その達成度を確認してみる。

ウエブサービスを作る

  • RSSリーダーを作る。← やらなかった
  • ラインマーカー・サービスを作れたら作る。← やらなかった

上記2つのサービスは作らなかったが、その代わりブックマークサービスを作った。ちょっと中途半端な出来ではあるが。

新しいプログラミング言語を覚える

  • Perl:昨年、仕事で使う為に勉強を始めたがそれきりになっていたので、勉強再開。Learning PerlとIntermidiate Perlを読みきる。← Learning Perlは読んだが、Intermediate Perlは手つかず。しかし、Perlのコースを終了。仕事上でのテキスト処理にPerlを使える用になった。
  • JavaScript:仕事を通してのみJavaScriptを理解しているので、JavaScriptの全体を理解する。JavaScript:The Definitive Guideを読みきる。← JavaScript:The Definitive Guideはまったく読まなかった。しかし、仕事でも引き続きJavaScriptを使用し、トレーニングにも参加したので、JavaScriptに関する知識は広がったと思われる。

今年はブックマークサービスを通し、Pythonを覚えた。エキスパートレベルとは言えないが。仕事でもプロトタイピングにPythonを使用。

Javaのフレームワークを覚える

  • Spring Framework
  • Struts 2

体系だっては学んでいないが、上記フレームワークを仕事で使用しながら覚えた。

健康に気をつける

  • 会社のビル内にジムが出来るので、エキササイズを始める。← 数える程しか行かなかった。
  • 胃腸が弱く頻繁に食あたりになるので、食事に気をつける。← 前年と比較すると食中りなどになった回数は激減した。

エキササイズを習慣化する必要あり

本を読む

  • 買ったけど読んでいない本が本棚にたまってきた。読むぞ

かなり読んだと思う。しかし、読み残した本も多数あり。

今振り返ってみると、想像していたより多くの事に取り組めた一年であったと思う。上記リストに出てこないプロジェクトなどもあるので。出来ていない部分としては、習慣化する事が苦手であるように思う。エキササイズの習慣や早起きの習慣など。来年は生活習慣を改善していこうかとおもう。

数学公式:(a + b) (a – b) = a^2 – b^2

昨日、数学の本を読んでいて下記の内容が気になったので

数学の基本的な公式

(a + b) (a – b) = a^2 – b^2
^2は2乗

上記の公式を使って下記の問題を解くと?

35*25の答えは?

35*25 = (30 + 5)(30 – 5) = 30^2 – 5^2 = 900 – 25 = 875

暗算で解けるじゃん。鉛筆片手にガリガリ計算する必要もないし、電卓も必要ない。

本に出ていた例 35^2は?

(35 + 5)(35 – 5) = 35^2 – 25 
なので
35^2 = (35 + 5)(35 – 5) + 25 = 40 * 30 + 25 = 1200 + 25 = 1225

ちょっとした応用の仕方を思いつけば、結構色々な計算が暗算でできそうだ。