Tag Archives: チュートリアル

SketchupとCADの連携

このエントリーをはてなブックマークに追加
はてなブックマーク - SketchupとCADの連携
Share on Facebook

公式チュートリアル(上級)で紹介されているシリーズ。

AutoCADで作成した図面を元にSketchupで書き起こすチュートリアルです(英語)。Sketchup単体で素早く作るヒントも学べます。

簡単な要約

Importing and Preparations: CADデータのインポートと下準備

  • バラバラになって邪魔なレイヤーはLayer0に集約する
    • [レイヤーウインドウ]で不要なレイヤーを選択して、「-」アイコン
  • レイヤーとシーンを連動させ、フロアプラン図のON/OFFを切り替えるようにするとかなり便利
    1. フロアプラン図が描いてある「Floorplan」レイヤーを作成する
    2. 「Floorplan」レイヤーを非表示にする
    3. 「Floorplan ON」シーンを新規作成
      • プロパティは「レイヤー表示」以外のチェックボックスをすべてOFFにする
    4. 「Flooplan」レイヤーを表示する
    5. 「Floorplan OFF」シーンを新規作成
    6. 完了。これでシーンを切り替えるとレイヤーのON/OFFが切り替わる

Creating Walls: 壁を仕切る

  1. トレース対象のレイヤーをロックしておいて、[長方形]ツールをいくつもつなげることで簡単に外装を作ることが出来る
    • 不要な線は後で[消しゴム]ツールで消す
    • 下書きがロックしてあるので、消しゴムツールをいくらかけても消えない。安心
  2. 部屋割りは[直線]ツールで行う
    • 壁同士の境界線は消しておく
  3. [プッシュ・プル]ツールで壁を持ち上げ、完成

Doors and Windows: ドアと窓の作り方

  1. [長方形ツール]をドアの位置に配置する
    • 最初の1個を配置したら、あとはそれをコピー&ペーストしていくと早い
    • サイズの違うドアは[縮尺]ツールで調整
  2. 長方形を[プッシュ・プルツール]で押し出すことで、ドアがはめ込む穴が出来る
  3. 同じ要領で窓を配置していく
    • ドアと違い地面から離れているため、設置する高さを調整する必要がある
    • 1個目の窓を正確に設置したら、あとはマウス操作だけでガイドを使ってその高さに合わせることができる
      • 長方形のドラッグ&ドロップ中に1個目の窓の1辺にカーソルを合わせれば、高さのガイドが出る

CakePHPを使ったアプリ構築手順

このエントリーをはてなブックマークに追加
はてなブックマーク - CakePHPを使ったアプリ構築手順
Share on Facebook

いろいろPHPフレームワークを触っていると、どういう手順でアプリを構築するか忘れてしまいます。メモしておきます。

1. アプリのスケルトンをbakeする

cd /path/to/cakephp_dir
cake/console/cake bake

.
Welcome to CakePHP v1.3.2 Console
---------------------------------------------------------------
App : ecstats
Path: /path/to/cakephp_dir
---------------------------------------------------------------
What is the full path for this app including the app directory name?
 Example:/path/to/cakephp_dir/myapp
[/path/to/cakephp_dir] > y
...

2. 必要なDBを作成しておく

  • テーブル名は複数形
  • どんなテーブルにも必要なカラム
    • id
    • created
    • modified

3. 設定を行う

  • database.php
  • .htaccess
    • app/.htaccess
    • app/webroot/.htaccess

4. モデル・ビュー・コントローラーをbakeする

Bakeする順番は Model→Controller→View。(Controllerより先にViewを作ろうとしても「そんな名前のControllerは無い」と言われてエラーになる)

cd /path/to/cakedir
cake/console/cake bake -app myapp


Welcome to CakePHP v1.3.2 Console
---------------------------------------------------------------
App : myapp
Path: /path/to/cakephp_dir/myapp
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)

# M->C->Vの順にbakeしていく
# ...

5. アクセスしてみて、うまく表示されれば成功

設定が正しければ、下のような文字がブラウザに表示されます。

Sweet, "SalesReport" got Baked by CakePHP!

Your tmp directory is writable.

The FileEngine is being used for caching. To change the config edit APP/config/core.php

Your database configuration file is present.

Cake is able to connect to the database.

参考

Qdmailを使ってCakePHP1.3.2のコンソールからメールを送信する

このエントリーをはてなブックマークに追加
はてなブックマーク - Qdmailを使ってCakePHP1.3.2のコンソールからメールを送信する
Share on Facebook

QdmailはCakePHPを初めとしたフレームワークで簡単にメールを作成・送信できるライブラリです。CakePHP1.2 で利用するサンプルは見つかったのですが、1.3で使っている例をあまり見かけず、少しつまづいたのでメモしておきます。

手順

1. Qdmailをダウンロードし、/app/controllers/components に解凍する

2. コンソールプログラムを下記のように作成する

// /app/vendors/shells/uso.php

<?php
class UsoShell extends Shell {
    // 使用するコア
    var $Controller;
    
    // 使用するコンポーネント
    var $Qdmail;
    
    // overrideしてcake起動メッセージを消す
    function startup() {}
    
    // 初期化処理
    function initialize() {
        parent::initialize();
        
        App::import("Core", "Controller");
        App::import("Component", "Qdmail");
        
        $this->Controller =& new Controller();
        $this->Qdmail =& new QdmailComponent(null);
        $this->Qdmail->startup($this->Controller);
    }
    
    // エントリーポイント
    function main() {
        
        // Qdmailの設定
        $this->Qdmail->to('to@uso.uso', '送信先の名前');
        $this->Qdmail->subject('件名');
        $this->Qdmail->from('from@uso.uso' , '送信元の名前');
        $this->Qdmail->text('本文');
        
        // 送信する
        $return = $this->Qdmail->send();
        $this->Qdmail->reset();
        
        if ($return) {
            $this->out("送信完了。");
        } else {
            $this->out("送信失敗...");
        }
    }
}
?>
  1. 実行すれば

補足

何が悪いのかよくわかりませんが、上のコードを実行すると「指定されたパスが見つかりません。」と表示されます。送信するぶんには問題ないのですが、気持ち悪いのでどうにか消せないか方法を探しています。

参考

CakePHP公式のブログ作成チュートリアルをSQLite3でやってみる

このエントリーをはてなブックマークに追加
はてなブックマーク - CakePHP公式のブログ作成チュートリアルをSQLite3でやってみる
Share on Facebook

このチュートリアルの目的

一つのCakePHPコアに複数のアプリケーションを同居させる方法を学べます。DBを作ってdatabase.phpを作成すれば、あとはbakeするだけで基本的な画面が出来上がります。

公式チュートリアルと今回のやり方の違い

公式チュートリアル

  • MySQLでなくSQLite3で作る
  • アプリをCakePHP解凍時のappディレクトリ内に作らず、「{インストールディレクトリ}/blog」内にbakeしたファイルを元に作る
    • 一つのCakePHPコアから複数のアプリを併存させる環境を想定
  • Model/View/Controller はbakeして作る

作成環境

  • CakePHP 1.3.2
  • XAMPP Windows
    用途 場所
    ドキュメントルート c:\xampp\htdocs\
    CakePHPインストールディレクトリ c:\xampp\htdocs\cake
    blogアプリの場所 c:\xampp\htdocs\cake\blog

手順

1. SQLite3を使うための dbo_sqlite3.php を導入する

導入先: {インストールディレクトリ}/cake/libs/model/datasources/dbo/dbo_sqlite3.php

2. コンソールからblogアプリをbakeする

cd c:\xampp\htdocs\cake
mkdir blog
cake/console/cake bake blog

対話式コマンドは↓の通り(Databese Configurationは後で直接いじるので適当でよい)

Welcome to CakePHP v1.3.2 Console
---------------------------------------------------------------
App : sandbox
Path: c:\xampp\htdocs\cake
---------------------------------------------------------------
Bake Project
Skel Directory: C:\xampp\htdocs\cake\cake\console\templates\skel
Will be copied to: c:\xampp\htdocs\cake\blog
---------------------------------------------------------------
Look okay? (y/n/q)
[y] > y
Do you want verbose output? (y/n)
[n] >
---------------------------------------------------------------
Created: blog in c:\xampp\htdocs\cake\blog
---------------------------------------------------------------

Creating file c:\xampp\htdocs\cake\blog\views\pages\home.ctp
Wrote `c:\xampp\htdocs\cake\blog\views\pages\home.ctp`
Welcome page created
Random hash key created for 'Security.salt'
Random seed created for 'Security.cipherSeed'
CAKE_CORE_INCLUDE_PATH set to C:\xampp\htdocs\cake in webroot/index.php
CAKE_CORE_INCLUDE_PATH set to C:\xampp\htdocs\cake in webroot/test.php
Remember to check these value after moving to production server
Your database configuration was not found. Take a moment to create one.
---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:
[default] >
Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase)
[mysql] > sqlite3
Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase)
[mysql] > sqlite
Persistent Connection? (y/n)
[n] >
Database Host:
[localhost] >
Port?
[n] >
User:
[root] >
Password:
>
The password you supplied was empty. Use an empty password? (y/n)
[n] > y
Database Name:
[cake] >
Table Prefix?
[n] >
Table encoding?
[n] >

---------------------------------------------------------------
The following database configuration will be created:
---------------------------------------------------------------
Name:         default
Driver:       sqlite
Persistent:   false
Host:         localhost
User:         root
Pass:
Database:     cake
---------------------------------------------------------------
Look okay? (y/n)
[y] >
Do you wish to add another database configuration?
[n] >

Creating file c:\xampp\htdocs\cake\blog\config\database.php
Wrote `c:\xampp\htdocs\cake\blog\config\database.php`

3. DBファイルを作成し、テーブルとテストデータを作成する

DBの作成先: {インストールディレクトリ}/blog/db/blog.sqlite3

DBファイルを開いて、下記SQLを実行する。

-- テーブルを作成する
CREATE TABLE posts (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

-- テストデータを流し込む
INSERT INTO posts (title,body,created) VALUES ('The title', 'This is the post body.', datetime("now", "localtime"));
INSERT INTO posts (title,body,created) VALUES ('A title once again', 'And the post body follows.', datetime("now", "localtime"));
INSERT INTO posts (title,body,created) VALUES ('Title strikes back', 'This is really exciting! Not.', datetime("now", "localtime"));

4. database.phpを編集する

編集するファイル: {インストールディレクトリ}/blog/config/database.php

<?php
class DATABASE_CONFIG {

    var $default = array(
        'driver' => 'sqlite3',
        'database' => 'C:/xampp/htdocs/cake/blog/db/blog.sqlite3',
    );
}
?>

ここまでやったら、http://localhost/cake/blog にアクセスして、「Sweet, “Blog” got Baked by CakePHP!」という画面が出ることを確認します。画面に赤か黄色で示されるエラーがあれば、どこか間違っているので直してください。

※画像やCSSが表示されない場合、.htaccessの設定が違う場合があります。下記を手がかりに解決してください。

5. Model/View/Controllerをbakeする

チュートリアルだと「/cake/console/にPATHを設定しろ」と書いていますが、面倒なのでやってません。

コンソールから、下記のように入力してbakeします。

cd c:/xampp/htdocs/cake/blog
../cake/console/cake bake

この後、何をするか対話式ダイアログで聞かれるので、「M」→「C」→「V」の順に作成してください。(Controllerより先にViewを作ろうとすると「まだControllerがないから作れません」と言われます)

6. 完成

http://localhost/cake/blog/posts にアクセスすると、画面ができあがってます。

[CodeIgniter] Modelの使い方

このエントリーをはてなブックマークに追加
はてなブックマーク - [CodeIgniter] Modelの使い方
Share on Facebook

Modelの役割

  • ControllerやViewから独立して、DBのデータの取り扱い(CRUD)だけに専念する
  • CodeIgniterでは、Modelクラスを継承することで、直感的なDB操作メソッドが利用できる

簡単な例

下記は「Usersテーブルのデータを取得したり件数をカウントしたりするクラス」の例。 /system/application/models/users_model.phpとする。

<?php
class Users_model extends Model {
    
    function __construct() {
        // ※コンストラクタでは必ず親クラスを継承する
        parent::Model();
        
        // database.php で定義したDBに接続する
        $this->load->database();
    }
    
    function getAllUsers() {
        $query = $this->db->get("users");
        
        if($query->num_rows() > 0) {
            // 結果セットを連想配列として返す
            return $query->result_array();
        }
    }
    
    function getUsersWhere($field, $param) {
        $this->db->where($field, $param);
        $query = $this->db->get("users");
        // 結果セットを連想配列として返す
        return $ruery->result_array();
    }
    
    function getNumUsers() {
        return $this->db->count_all("users");
    }
    
}
/** End of PHP file */

データベースクラスの細かい実装は データベースクラス : CodeIgniter ユーザガイド 日本語版 を参照。以下に挙げるものはよく使うので覚えておいた方が良い。

クエリ 意味
$this->db->get(‘table_name’) table_nameテーブル内の全行を取得する
$this->db->where($field,$param) SQLのWHERE句の要領で行を取得する (WHERE $field = $param)
$this->db->count_all(‘table_name’) table_nameテーブルの行数を取得する
$query->result_array() 結果セット(result set)を連想配列として返す
$query->num_rows() 結果セットの行数を返す

このModelクラスのAPIを使うことで、Controllerから簡単にDBのデータを取得できる。

ControllerからModelのAPIを呼び出す

/system/application/controllers/Users.php を下記のようにすることで、上述のモデルで作成したAPIをロードできる。

<?php
class Users extends Controller {
    
    function __construct() {
        // ※コンストラクタ内では親クラスをロードするお約束
        parent::Controller();
        // Usersモデルをロードする
        $this->load->model("users_model");
    }
    
    function index() {
        // Usersモデルで先ほど作成したAPIを利用する
        $data["users"] = $this->user_model->getAllUsers();
        $data["numusers"] = $this->user_model->getNumUsers();
        
        $this->load->view("users_view", $data);
    }
}
/** End of PHP file */

参考

Building a Database-Driven Application with the Code Igniter PHP Framework

(文字がクレイジーなほど小さくて読みづらいので、「PDF Version Of Article」を見るのがおすすめ)