MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

ミラクル・リナックス株式会社営業・マーケティング部所属。

Linux, OSSに関するマーケティング情報から英語のニュースまで、幅広いトピックを扱っていきます。

ミラクル関連リンク

採用情報

サイト検索

最近のトラックバック

2008年8月

          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            

2008年3月 5日 (水)

ブログ閉鎖のお知らせ

この度、当ブログ「拓かれた世界へ向かって」を閉鎖することになりました。

今までご愛読いただき、ありがとうございました。

閉鎖することが決まり自分の文書を読み返しているのですが、なかなかよい文書を書くのは難しいとあらためて感じました。話が飛んでいたり、いろいろと前提条件が抜け落ちていたり。

いい機会なので、「ロジカル・シンキング―論理的な思考と構成のスキル」や「考える技術・書く技術―問題解決力を伸ばすピラミッド原則」あたりを読んで自分の文章構成能力を鍛え直そうかと思っています。

このブログ以外は引き続き更新されますので、これからもよろしくお願いします。

2008年2月28日 (木)

AXS3でCakePHPを使うための備忘録5

前回まででDBにデータをためることができるようになったので、今回はCSVファイルの出力の仕方を書きます。

CSVファイルというとExcelで処理する場合が多く、そのため出力はShift-JISで行うケースが多いでしょう。PHPでは普通 mb_convert_string() を通してエンコーディングを変換しますが、結構この処理を忘れてしまう場合も多いですよね。CakePHPではデータベース接続の encoding で sjis を指定すれば内部的にこの変換を行ってくれるので、コーディングする身としては特に意識する必要がありません。

app/config/database.php に、以下の変数を定義します。

 var $csvsrc = array('driver' => 'mysql',
                            'connect' => 'mysql_connect',
                            'host' => 'localhost',
                            'login' => 'dbuser',
                            'password' => '******',
                            'database' => 'bookshelf',
                            'encoding' => 'sjis',
                            'prefix' => '');

次に、app/controllers/users_controller.php で以下のアクションメソッドを追加します。

  function generate()
  {
    $this->autoRender = false;
    $db =& ConnectionManager::getDataSource('csvsrc');
    Configure::write('debug', 0);
    $csv_file = sprintf("pkey_%s.csv", date("Ymd-hi"));
    header("Content-disposition: attachment; filename=" . $csv_file);
    header("Content-type: application/octet-stream; name=" . $csv_file);
    $books = $db->query("SELECT * FROM books");
    foreach ($books as $book) {
      print implode(',', $book['books']);
      print "\r\n";
    }
    return;
  }

簡単に解説すると、まず1行目でレンダリングをオフにします。このおかげで、新たにビュー(app/views/books/generate.thtmlファイル)を作成する必要がありません。

2行目で先ほど定義した、SJISのDB接続へ切り替えます。

3行目でデバッグオプションを最小にして一切警告メッセージを吐かないようにし、ファイルの中にごみデータが入るのを防ぎます。

4~6行目はCSVを吐くためのヘッダーの準備。

7~11行目でSELECTクエリを実行して、戻り値に対して一行ずつ implode() で「,」区切りにしていきます。行末尾の \r\n は Excel で読み込んだときに改行を認識させるためです。

これでCSVを吐けるようになったのですが、ブラウザで「http://localhost/books/generate」とURLを直接指定しなければいけないので面倒です。そこで、トップページにリンクを作ります。

app/views/books/index.thtml の31行目に、以下を追加します。

<ul class="actions">
  <li><?php echo $html->link('New Book', '/books/add'); ?></li>
  <li><?php echo $html->link('Generate CSV', '/books/generate'); ?></li>
</ul>

これにより、トップページからGenerate CSVリンクを押すと、CSVファイルがダウンロードできるようになります。

Cakephp_3

2008年2月27日 (水)

AXS3でCakePHPを使うための備忘録4

前回のエントリで、日本語が化けると書きましたが。今までの設定を見直してみると、テーブルの定義でのエンコーディングにUTF-8を指定すれば問題ないことに気付きました。

さまざまなブログでいろいろな解決方法が紹介されていますが、とりあえずAXS3では、app/config/database.php でのDB接続時のエンコーディング指定と、テーブル作成時の指定さえあれば日本語も通るようです。

というわけで、もうすでにBooksテーブルを作ってしまった人のために、MySQLでテーブルを作り直す方法です。(データの移行は考慮していません。)

$ mysql bookshelf -u dbuser -p
******

mysql> DROP TABLE IF EXISTS books;
mysql> CREATE TABLE books (id INTEGER PRIMARY KEY AUTO_INCREMENT,
                                           created DATETIME,
                                           modified DATETIME,
                                           title VARCHAR(50),
                                           author VARCHAR(50)
                                          ) DEFAULT CHARSET=utf8;
mysql> \q

AXS3でCakePHPを使うための備忘録2」も修正しておきました。

ここまでだけだと物足りないので、http://localhost でアクセスしたときに表示されるデフォルトのページの変更の仕方を紹介します。

app/config/routes.php の46行目、$Route で始まる行を以下のように修正します。これは、ブラウザがルートディレクトリを指定したときに接続する先を指定する行であり、Booksコントローラのindex()というメソッドを呼ぶようにします。

$Route->connect('/', array('controller' => 'books', 'action' => 'index');

これにより、http://localhost でBook一覧を表示するページが表示されるようになります。今回のプログラムにはありませんが、認証が必要なページを作る場合にはこの機能を使うと良いのではないでしょうか。

2008年2月26日 (火)

AXS3でCakePHPを使うための備忘録3

前回まででDBの設計はしたものの、コードの部分は手つかずでした。Ruby on Railsな方はScaffoldするんでしょうが、CakePHPのScaffoldはあまり性能がよくないようです。もっとも、現在開発中の1.2.x系列では改善されるようですが…

しかし、CakePHPにはbake.phpというコードを自動で生成してくれるスクリプトがありますので、こちらを使用したいと思います。

詳細を説明する前に、簡単なMVCの扱いについて。

Bookというモデルを作成し、一覧参照、詳細参照、作成、編集、削除という標準的な機能を実装したい場合、以下のようなファイルを作成します。

モデル: app/models/
 book.php

コントローラ: app/controllers
 books_controller.php

ビュー: app/views/books
 index.thtml、view.thtml、edit.thtml、add.thtml

モデルでデータ型の定義、コントローラでモデルに紐付いたアクションの定義、ビューでアクションに対応した画面表示の定義という具合です。なおビューに削除がないのは、レンダリングする必要がないからです。

それではさっそくターミナルを起動して、コマンドラインから bake.php を実行します。(警告を煩わしいと感じる方は、/etc/php.d/oci8.ini と /etc/php.d/ を「;」でコメントアウトしておくと警告が出なくなります。)

ソースコードの生成先を指定します。自動で認識してくれるので、ここでは「y」を選びます。

$ php /var/www/html/bookshelf/cake/scripts/bake.php

(略)
Bake -app in /var/www/html/bookshelf/app (y/n)
[y] > y

まずはモデルから作成します。

[M]odel
[C]ontroller
[V]iew

What would you like to Bake? (M/V/C)
> M

スクリプトはデータベースを参照し、モデル名を自動で割り出します。ここでは、Bookを選択。

Possible Models based on your current database:
1. Book

Enter a number from the list above, or typein the name of another model.
> 1

モデルで入力検証をする機能がありますが、ここでは有効にしません。

Would you like to supply validation criteria for the fields in your model? (y/n)
[y] > y

モデルのアソシエーションを行うかを聞かれます。ここでは、モデルが一個しかないのでNoです。

Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n

モデルを生成します。

Look okay? (y/n)
[y] > y

Cake test suite が入っていないので、テストは入れません。

Cake test suite not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n

次はコントローラをBakeします。先ほどMでモデルを選んだ部分でCを選びます。

$ php /var/www/html/bookshelf/cake/scripts/bake.php

(略)
Bake -app in /var/www/html/bookshelf/app (y/n)
[y] > y

[M]odel
[C]ontroller
[V]iew

What would you like to Bake? (M/V/C)
> C

Possible Models based on your current database:
1. Book

Enter a number from the list above, or typein the name of another model.
> 1

インタラクティブにコントローラを生成するか聞かれます。ここでnを選ぶと全て自動で作成されます。ここではnを選びます。

Would you like bake to build your controller interactively>
Warning: Choosing no will overwrite controller if it exist. (y/n)
[y] > n

基本的なアクションメソッドを定義するかを聞かれますので、yと答えます。

Would you like to include some basic class methods (index(), add(), view(), edit())> (y/n)
[y] > y

管理者専用のルーチンを実装するか聞かれます。ここでは、とくにユーザ認証を求めているわけでもないので、必要ありません。

Would you like to create the methods for admin rounting? (y/n)
[y] > n

モデルの時と同じく、Cake test suite が入っていないので、テストは入れません。

Cake test suite not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n

最後にビューをBakeします。先ほどCと選んだ部分でVを選びます。

$ php /var/www/html/bookshelf/cake/scripts/bake.php

(略)
Bake -app in /var/www/html/bookshelf/app (y/n)
[y] > y

[M]odel
[C]ontroller
[V]iew

What would you like to Bake? (M/V/C)
> V

Possible Models based on your current database:
1. Book

Enter a number from the list above, or typein the name of another model.
> 1

インタラクティブにビューを生成するか聞かれます。ここでnを選ぶと全て自動で作成されます。ここではnを選びます。

Would you like bake to build your views interactively>
Warning: Choosing no will overwrite views if it exist. (y/n)
[y] > n

管理者専用のルーチンを実装するか聞かれます。ここでは、とくにユーザ認証を求めているわけでもないので、必要ありません。

Would you like to create the methods for admin rounting? (y/n)
[y] > n

これで、自動生成は完了です。ブラウザで「http://localhost/books」にアクセスすると以下の画面が表示され、本の追加や修正、削除、一覧参照ができるようになります。

Bookshelf_2



ところが。

システムの調整だけやればコードが自動生成されるから楽、と思ったら日本語が通りませんでした。次はテンプレートのいじる方を軽く。

2008年2月22日 (金)

AXS3でCakePHPを使うための備忘録2

前回の続きで、今回はDB設計から。CakePHPはMVCモデルを採用していますので、モデル名を決めてから対応するテーブルをDB上に作成します。データベースを「Bookshelf」という名前にしたので、モデルは「Book」ということにします。

CakePHPでは何個からの決まりがあって、テーブルの内「id(integer型)」、「created(datetime型)」「modified(datetime型)」はそれぞれ各アイテムの識別子・作成日・更新日として、データを作成したり修正したりするときに、CakePHPがこれらのフィールドを内部で更新します。よって、これらのフィールドは定義しておく必要があります。この三つ以外に、書籍の題名として「title varchar(50)」、著者として「author varchar(50)」を加え、テーブルを定義します。

このテーブル名ですが、Bookというモデルの複数形、Booksという名前になります。CakePHPの複数形を判断するルーチンはそれなりに賢く、例えばCategoryというモデルの場合はCategoriesといった具合に、正しい複数形を使わなければいけません。Criterion/Criteriaはどうなんだろ?

それはおいといて、いつものSQLコマンドを実行してBooksテーブルを作ります。

$ mysql bookshelf -u dbuser -p
Enter password: ******

mysql> CREATE TABLE books (id INTEGER PRIMARY KEY AUTO_INCREMENT,
                                          created DATETIME,
                                          modified DATETIME,
                                          title VARCHAR(50),
                                          author VARCHAR(50)
                                         ) DEFAULT CHARSET=utf8;

mysql> \q

※追記(2008/02/26):auto_incrementとdefault charsetを記述忘れていたので修正

あとは前回の設定で忘れていた、CakePHPの参照DB先をlocalhostのbookshelfに変更します。まずは /var/www/html/bookshelf に行き、app/config/database.php.default を app/config/database.php としてコピーした後、次のように変更します。passwordはdbuserのパスワードを指定し、encoding行を追加して下さい。

var $default = array('driver' => 'mysql',
                          'connect' => 'mysql_connect',
                          'host' => 'localhost',
                          'login' => 'dbuser',
                          'password' => '******',
                          'database' => 'bookshelf',
                          'encoding' => 'utf8',
                          'prefix' => '');

ブラウザで再度接続すると、今度はDBへの連携がうまくいっている旨のメッセージが出てきます。

Cakephp_configured

次回は今回作ったDBをもとに、MVCのファイルを自動生成する方法を書く予定です。

2008年2月21日 (木)

AXS3でCakePHPを使うための備忘録1

一番最初にすることは、公式サイトからCakePHPを入手することです。ここではStableの1.1x系を選択します。現段階のcake_1.1.19.6305.zipが最新のものです。ダウンロードしようとすると寄付を求められますが、タダで使用することもできます。もし使ってみて満足のいく内容だったら、ぜひ寄付してあげて下さい。

http://cakeforge.org/frs/?group_id=23&release_id=343

ダウンロードしたファイルを/var/www/html以下に展開します。ここではホームディレクトリに置いたzipファイルを、bookshelfという名前に変えて運用することにします。

# cd /var/www/html
# unzip cake_1.1.19.6305.zip
# mv cake_1.1.19.6305 bookshelf
# chown -R apache:apache bookshelf
# chmod -R 777 bookshelf/app/tmp

CakePHPは、Apache+PHP+MySQLが標準的な構成のようです。もっとも、DBに関してはPostgreSQLでもOracleでもいけるようですが。ApacheにしろMySQLにしろ、AXS3のインストール直後の状態だと両方とも自動起動しないようになっていますので、ApacheとMySQLが自動起動するように変更します。

# /sbin/chkconfig httpd on
# /sbin/chkconfig mysqld on

さて、まずはApacheの設定です。/etc/httpd/conf/httpd.conf を設定します。

280行目の"DocumentRoot"を以下のように編集します。

DocumentRoot "/var/www/html/bookshelf/app/webroot"

305行目の<Directory "/var/www/html">も修正。

<Directory "/var/www/html/bookshelf/app/webroot">

CakePHPではmod_rewriteが使えますので、292、326行目の"Allow Override None"をAllに変えておきます。

Allow Override All

設定したら、Apacheを起動します。

# /sbin/service httpd start

次に、MySQLの調整です。まずはサービスを起動します。

# /sbin/service mysqld start

インストール直後だとrootユーザのパスワード無しでMySQLにアクセスできてしまいますので、mysqladminで変更しておきます。******は適当なパスワードを入力して下さい。

# mysqladmin password ******

次に、CakePHPでつなぐデータベースを作ります。こちらもmysqladminで作ることが可能です。データベースの名前は、bookshelfにしておきます。

# mysqladmin create bookshelf -p
Enter password: ******

DB接続用のユーザを作ります。

$ mysql mysql -p ******

mysql> GRANT ALL PROIVILEGES ON bookshelf.* TO dbuser@localhost IDENTIFIED BY '******';
mysql> \q

作成したユーザで、DBに接続できるか確認します。

$ mysql -u dbuser -p ******

mysql> \q

ブラウザでローカルホストに繋げると、以下のような画面が出ます。まだDBとの連結をしていないのでエラーがでています。

Cakephp1_2

こんなところで、一回目は終わり。今回はCakePHPうんぬんより基本的なLAMP構成についてでしたが、二回目はDBの中身を設計します。

2008年2月 7日 (木)

iMindMap

今週の東京IT新聞を読んでいたら、iMindMapという、マインドマップ作成ツールの紹介がされていました。

http://www.imindmap.jp/

Mindmap考案者のTony Buzanが唯一公認したMindmapツールだそうです。(全然関係ないですが、Tony Buzan氏は私が卒業した大学院の教授なので、Mindmapには個人的な思い入れがあります。)

値段もスタンダードで\19,800とそれなりにしますが、他のツールと比べてどこがいいのか気になるところではあります。一番目を引いたのが次バージョンからサポートされるグループ化機能であり、これを使えばブレーンストーミングのような用途にも使えるようになるのでしょうか。

本家であるhttp://www.imindmap.comでは評価版も入手できるようなので、ご興味のある方は試してみてはいかがでしょうか。

2008年1月29日 (火)

シンクフリーてがるオフィス

日経のIT+PLUSでオフィス互換のソフトウェア特集をしています。

http://it.nikkei.co.jp/pc/column/owc.aspx?n=MMIT2o000025012008&cp=3

読んでみると、Asianuxに参加しているハーンソフトのオフィススイート、ウェブ版シンクフリーも評価されていて、なかなか高い互換性を持っているようです。

リナックスデスクトップ普及の最大の障壁となっているオフィススイートも、徐々に充実してきているのでしょうか。ネット経由ならシンクライアント上でも使えますしね。

2008年1月16日 (水)

CakePHPを触ってみました

いまさら感がありますが、先日友人からCakePHPがいいという噂を聞いたため、週末ちょっと試してみました。

感想としては、なるほどこれがアジャイルプログラミングと言うものかと、なかなか感心。簡単なウェブアプリケーションが、少ないコード量で書けるのは驚きです。個人的に馴染みのあるPHPでできるため、Ruby on Railsに挫折したぬるプログラマでも心地よい感じです。デフォルトでもキャッシングしているのでパフォーマンスも速い気がするし。

お試しコーディングで参考になったのは以下のページ。少しずつ開発が進展し、かつ全ての答えが公開されているわけではないので、同じものを作るにしても足りない部分を随時補填していくパズル感覚でコードが組めます。

http://www.ideaxidea.com/archives/cakephp/

ただ、最大の弱点は私のデザインセンスのなさ。例えフレームワークを使っても、CSSから開放されるわけではないのですね。精進します。

2007年12月25日 (火)

NHKがプレミアリーグ放送

ご無沙汰しております。今回はサッカーの話題ですので、興味のない方は?かもしれませんが、大目に見て下さい。

最近、NHKでサッカーのプレミアリーグの試合を放映しているのに気付きました。どうやら、11月から放映開始とのことです。知っていれば最初から見ていたのに。

個人的に今一番おもしろいと思っているプレミアリーグの魅力は、そのスピード感です。攻守の切り替えの早さは迫力があります。リーグ自体はロングボールが多いという指摘もありますが、私はテクニカルかつスピーディーなサッカーをするアーセナルが好みです。名古屋グランパスで監督をしていたヴェンゲル監督が育てた若手で、イギリス国内のみならずヨーロッパを席捲するのは見ていて爽快です。シーズンが始まる前は完全なアンダードッグでしたが、実績を出してクリティックを完全に黙らせましたね。

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.