<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>インコの技術メモ</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/" />
    <link rel="self" type="application/atom+xml" href="http://webinko.com/tech/atom.xml" />
    <id>tag:webinko.com,2011-05-26:/tech//5</id>
    <updated>2011-06-08T06:20:31Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.01</generator>

<entry>
    <title>Amazon EC2</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2011/01/amazon-ec2.html" />
    <id>tag:www.webinko.com,2011:/tech//5.34</id>

    <published>2011-01-17T14:22:23Z</published>
    <updated>2011-06-08T06:20:31Z</updated>

    <summary>■MySQLを外部から接続したい インスタンスを複数立ててMySQLは他のサーバ...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="Amazon EC2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>■MySQLを外部から接続したい<br />
インスタンスを複数立ててMySQLは他のサーバーから接続したい。<br />
結構ハマったこと→セキュリティーグループにMySQLを追加。</p>

<p>■さしあたって使うものの概要<br />
S3 : ファイル置場、ローカルからファイルの上げ下げを行う。S3←→EC2とかのやりとりも。<br />
EC2<br />
├Instances : サーバー本体。<br />
├Volumes : 外付けディスク。EC2からしか見えない。マウントして使う。よくEBSと呼ばれる。<br />
└Snapshots : バックアップイメージ。ここからVolumesを復活できる。</p>

<p>■Instances<br />
インスタンスはリブート、ストップ、スタートがブラウザから出来ます。<br />
ターミネイトは完全削除です。全部消えるので注意。<br />
ec2-ｘｘ-ｘｘ-ｘｘ-ｘｘ.compute-1.amazonaws.com<br />
ｘｘ-ｘｘ-ｘｘ-ｘｘなのが外向きのIPです。リブートしたら変わります。<br />
固定にしたいときにはそういう契約が追加であります。<br />
しないときはあげっぱなしで良いのではないでしょうか。</p>

<p>■Volumes<br />
インスタンスはAMIというイメージでバックアップが取れますが、/dev/sda1の10GB部分だけなので、大量のファイルはVolumesをくっつけて置きます。<br />
ここに置いたものはSnapshotsで簡単にバックアップが取れるし復活できるので便利です。</p>

<p>■S3<br />
ファイルのアップロードはEC2に直接WinSCPからでも出来ますが激重なので、いったんS3にあげてからEC2にコピーします。<br />
S3にはブラウザのメニューからもアップできますが１ファイル辺り最大300MBまでです。<br />
大きなファイルはFireFoxのアドオン「S3 Firefox Organizer」を使うと良いです。</p>

<p>■ツール<br />
ローカルパソコンからEC2に命令できます。<br />
最初に構築したり運用したりするときには、Linuxの中に入っていつものように作業することの他に、ローカルパソコンからEC2専用のコマンドをたたいて作業することになります。（ブラウザから出来ることが増えたので減りはしてます）<br />
手前のLinuxにツールを入れた例。<br />
jre-6u23-linux-i586-rpm.bin<br />
をダウンロードしてWinSCPで手元のLinuxサーバーに置き実行権限を与える。<br />
chmod a+x jre-6u23-linux-i586-rpm.bin<br />
実行<br />
./jre-6u23-linux-i586-rpm.bin<br />
環境変数設定（ターミナル閉じるまで有効）<br />
/home/admin/ec2/に解凍した場合<br />
export JAVA_HOME=/usr<br />
export EC2_HOME=/home/admin/ec2/ec2-api-tools<br />
export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin<br />
export EC2_PRIVATE_KEY=/home/admin/ec2/pk-ｘｘｘｘｘｘ.pem<br />
export EC2_CERT=/home/admin/ec2/cert-ｘｘｘｘｘｘ.pem<br />
ec2ver<br />
でバージョンがでたらＯＫ</p>

<p>キーファイルはブラウザの管理画面から Account → Security Credentials → X.509証明書でダウンロードして置いてください。</p>

<p>■EBSのマウント<br />
ブラウザからVolumesを作ります。<br />
このときくっつけたいインスタンスと同じゾーン（us-east-1cみたいなの）にしないといけません。<br />
容量は任意で。<br />
できたらツールで以下のコマンド。<br />
ec2-attach-volume -d /dev/sde -i i-xxxxxxxx vol-xxxxxxxx<br />
　i-xxxxxxxx : インスタンスのID(EC2 Instance)<br />
　vol-xxxxxxxx : EBSのVolumeID<br />
　↑ブラウザの管理画面で見れます。<br />
　/dev/sde は sdc,sdd,...... などと試して空いているところを探してください。<br />
yes | mkfs -t ext3 /dev/sde<br />
mkdir /data<br />
mount /dev/sdf /data<br />
　/dataというディレクトリを作ってマウントした場合。</p>

<p>■EBSのバックアップ<br />
ブラウザから EC2→Volumes Create Snapshot をしておきます。</p>

<p>■EBSから復旧<br />
ブラウザから EC2→Snapshots Create Volume で新しいディスクを作ります。<br />
できたら上と同じように以下コマンドを実行します。<br />
ec2-attach-volume -d /dev/sdg -i i-xxxxxxxx vol-xxxxxxxx<br />
mount /dev/sdf /data<br />
　mkfsはいりません。</p>

<p>■S3→EC2<br />
rubyでできたツールなので、まずrubyをインストールします。<br />
yum install ruby<br />
s3sync.tar.gz をダウンロードしてきてサーバー（インスタンス）に置きます。<br />
以下/root/の下に置いた例。<br />
cd /root<br />
tar xvfz /some/where/s3sync.tar.gz<br />
mkdir .s3conf<br />
chmod 700 .s3conf</p>

<p>cat > ~/.s3conf/s3config.yml << E-O-F<br />
aws_access_key_id: xxxxxxxxxxxxx<br />
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxx<br />
E-O-F</p>

<p>xxxxxxxxxxxxはブラウザの管理画面から Account → Security Credentials あたりにあります。<br />
いちいちログインしなおさないといけなくて不便。</p>

<p>ディレクトリ構成はこう。<br />
/root/.s3conf<br />
/root/s3sync</p>

<p>◆バケット一覧表示<br />
/root/s3sync/s3cmd.rb listbuckets<br />
　hoge1<br />
　hoge2</p>

<p>◆バケット内リスト<br />
/root/s3sync/s3cmd.rb list hoge1</p>

<p>◆ファイル取得<br />
/root/s3sync/s3cmd.rb get hoge1:hage1.tgz hage1.tgz</p>

<p>　一度使えなくなって、インスタンスを再起動したら直ったことが有ります。勘違いかもだけど。</p>

<p>■インスタンスを作るときの注意<br />
なにとなくクイックスタートから選んでいたら、高機能高額のものになていました。<br />
Community AMIs タブで 32-bit centos とかで検索したら安いのを選べます。<br />
Account → Security Credentials → アカウントアクティビティ でときどき料金の確認をしよう。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>CakePHP1.2</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2010/10/cakephp12.html" />
    <id>tag:www.webinko.com,2010:/tech//5.33</id>

    <published>2010-10-05T14:20:14Z</published>
    <updated>2012-04-01T17:44:43Z</updated>

    <summary>■ラベルをいい感じに #Form label {display:block; f...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="CakePHP1.2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>■ラベルをいい感じに<br />
#Form label {display:block; float:left; width:160px;}<br />
form div {clear:left;}</p>

<p>■セッションに検索条件を保存<br />
$this->Session->write('searchItems', $searchItems);</p>

<p>■セッションに保存された検索条件を読込<br />
$searchItems = $this->Session->read('searchItems');</p>

<p>■セッションを破棄<br />
$this->Session->delete('searchItems');</p>

<p>■店舗にぶら下がっているユーザーにぶら下がっているレコードとか<br />
App::import('Model', 'User');<br />
$User = new User();<br />
$sql = "SELECT id FROM users WHERE shop_id = 104";<br />
$userData = $User-&gt;query($sql);<br />
$user_ids=array();<br />
foreach ($userData as $user_id) {<br />
  array_push($user_ids,$user_id['users']['id']);<br />
}<br />
$searchItems['conditions'] = array($this-&gt;uses[0].'.user_id' =&gt; $user_ids);</p>

<p>■その他 form.php の初期設定<br />
セレクトボックスのセパレーターをスペースにして、月名を数字に<br />
/app/views/helpers/form.php L1700付近<br />
		$elements = array('Day','Month','Year','Hour','Minute','Meridian');<br />
//		$defaults = array(<br />
//			'minYear' => null, 'maxYear' => null, 'separator' => '-',<br />
//			'interval' => 1, 'monthNames' => true<br />
//		);<br />
		$defaults = array(<br />
			'minYear' => null, 'maxYear' => null, 'separator' => '&nbsp;',<br />
			'interval' => 1, 'monthNames' => false<br />
		);</p>

<p>■年月日<br />
もう日本の場合以下で良いと思う。いちいちオプション書くの手間だし。<br />
/app/views/helpers/form.php L764<br />
//&nbsp;&nbsp;$dateFormat = 'MDY';<br />
&nbsp;&nbsp;$dateFormat = 'YMD';</p>

<p>■ラジオボタンの初期値<br />
e($form->radio('status',array('0'=>'使用可','1'=>'使用不可'),array('default' => 1)));<br />
又は<br />
e($form->input('status',array('type' => 'radio', 'options' => array('0'=>'使用可','1'=>'使用不可'), 'default' => 1)));<br />
上記の場合、<br />
DBから取り寄せたデーターが0のとき、default値へ強制的に1が代入されてしまう。<br />
これはcakeのバグ（emptyで判定しているので値が0の時におかしくなる）なので、以下を修正。<br />
appの下にコピーして使うかどうかは任意。<br />
/cake/libs/view/helper.php L598<br />
if (is_array($options)) {<br />
//&nbsp;&nbsp;if (empty($result) && isset($options['default'])) {<br />
&nbsp;&nbsp;if (is_null($result) && isset($options['default'])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;$result = $options['default'];<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;unset($options['default']);<br />
}</p>

<p>■文字化け<br />
CakePHPだけの問題ならこれ。<br />
/app/config/database.php<br />
var $default = array( とかに以下の１行を追加。（例はUTF8の場合）<br />
'encoding' => 'utf8',</p>

<p>■携帯サイトで、ログインできない<br />
正確には、ログインできたかのように見えて、他のページに遷移したらログインページに戻される、という感じです。<br />
結論から言うと core.php の Session.checkAgent を false にすると良いです。<br />
◆調べ方<br />
app以下で解決しなかった場合、セッション関係なら以下の場所を調べます。<br />
なにかしら推測できることがあれば怪しい場所を重点的に調べますが、皆目検討が付かないときは、もう片っ端から error_log を挟んでしらみつぶしに調べます。<br />
/cake/libs/session.php <br />
/cake/libs/controller/components/auth.php<br />
/cake/libs/controller/components/session.php<br />
◆今回の原因<br />
Session.checkAgent を true にしていると、ユーザーエージェント情報が途中で変わったらセッションを切ります。<br />
ユーザーエージェントが途中で変わるなんてことが普通に有り得るの？<br />
と思いますが、何故かありました。犯人は以下。なぜかこいつが割り込んできます。</p>

<p>Nokia6820/2.0 (4.83) Profile/MIDP-1.0 Configuration/CLDC-1.0 (compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)</p>

<p>エラーになるパターンには Google AdSense を貼り付けているページがあったらしいので、何かしら影響を及ぼしているのだと思う。設置した人が何をしたのか、Googleの仕様がどうなのか、を調べ上げるより core.php の設定を変えるほうが手っ取り早いのでそうしようそうしよう。<br />
変なサイトへのリンクが設置されていなければ大丈夫だろう。<br />
セッションジャックが怖ければこのへんに任意のカスタマイズをすれば良いです。</p>

<p>■$this->redirect ちゃんとリダイレクトしない<br />
携帯で他サイトにあるリンクから戻ってきたときに、しばらくの間はセッションを維持しようと思い、$this->MOBILE_DATA['uid']を利用して実現しようと思ったら、どうもリダイレクトのところで上手くいかない。<br />
URLを直接入力したらOKだったのだけど。<br />
調べて見たら、/cake/libs/session.php L433 で、セキュリティーレベル medium 以上だと外からのリファラは強制的にセッションを切られていました。<br />
switch&nbsp;($this-&gt;security)&nbsp;{<br />
&nbsp;case&nbsp;'high':<br />
&nbsp;&nbsp;$this-&gt;cookieLifeTime&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;if&nbsp;($iniSet)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;ini_set('session.referer_check',&nbsp;$this-&gt;host);<br />
&nbsp;&nbsp;}<br />
&nbsp;break;<br />
&nbsp;case&nbsp;'medium':<br />
&nbsp;&nbsp;$this-&gt;cookieLifeTime&nbsp;=&nbsp;7&nbsp;*&nbsp;86400;<br />
&nbsp;&nbsp;if&nbsp;($iniSet)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;ini_set('session.referer_check',&nbsp;$this-&gt;host);<br />
&nbsp;&nbsp;}<br />
&nbsp;break;<br />
&nbsp;case&nbsp;'low':<br />
&nbsp;default:<br />
&nbsp;&nbsp;$this-&gt;cookieLifeTime&nbsp;=&nbsp;788940000;<br />
&nbsp;break;<br />
}<br />
ここらへんをコメントで止めるか、low にします。<br />
或いは任意のカスタマイズを行います。<br />
/cake/以下に手を加えるのは好ましくないのですが、どうしても触らないといけない時もありますので、バカの一つ覚えにならないように。<br />
もしバージョンアップがあればチェックし直すのは言うまでもありません。</p>

<p>■正規表現<br />
右辺だけで「AとBいずれにもマッチしない」みたいなもの。<br />
テキストエリアのバリデーションの例。<br />
var $validate = array(<br />
&nbsp;&nbsp;'title' =&gt; array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;'rule' =&gt; 'notEmpty',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'message' =&gt; 'タイトルを入力して下さい',<br />
&nbsp;&nbsp;),<br />
&nbsp;&nbsp;'content' =&gt; array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'rule' =&gt; 'notEmpty',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'message' =&gt; '内容を入力して下さい',<br />
&nbsp;&nbsp;&nbsp;&nbsp;),<br />
&nbsp;&nbsp;&nbsp;&nbsp;"custom" =&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array("rule" =&gt; array("custom", '/(?=^(?:(?!submit).)*$)(?=^(?:(?!javascript).)*$)/si'),"message" =&gt; "不正なコードが含まれています。(submit,javascript等)", "allowEmpty" =&gt; true),<br />
&nbsp;&nbsp;),<br />
);</p>

<p>■画面がまっしろ<br />
Fatal error: Call to undefined function<br />
データーベースの接続がおかしいなら以下を疑う。<br />
・MySQLが起動しているか。<br />
・/app_gal/config/database.php が間違ってないか。<br />
・MySQLにgrant でユーザー・パスワード等を設定しているか。<br />
　（例、GRANT SELECT , INSERT , UPDATE , DELETE ON *.* TO username@"%" IDENTIFIED BY 'passwd' WITH GRANT OPTION;）<br />
・yum install php-mysql したか。<br />
・Apache、MySQL 再起動。</p>

<p>■conditions で同じカラムをANDで繋ぐ<br />
スペースを入れます。<br />
$shop_id_array=(1,2,3,4,5);<br />
$shop_id_array2=(2,4,6);<br />
$ShopObj = ClassRegistry::init("Shop");<br />
$shop_data = $ShopObj->find("all", array(<br />
&nbsp;&nbsp;"fields"     => array('id','name','domain'), // 後ろのidの前にスペース<br />
&nbsp;&nbsp;"conditions" => array('id' => $shop_id_array2, ' id' => $shop_id_array),<br />
&nbsp;&nbsp;"order"      => array('name'),<br />
&nbsp;&nbsp;)<br />
);</p>

<p>■belongToとかをコントローラーで使う直前に宣言する。<br />
function&nbsp;anotherAction()&nbsp;{<br />
&nbsp;//&nbsp;leader.php&nbsp;モデルファイル内には<br />
&nbsp;//&nbsp;Leader&nbsp;hasMany&nbsp;Principle&nbsp;がないのでここでは<br />
&nbsp;//&nbsp;Leader&nbsp;のみ取得します。<br />
&nbsp;$this-&gt;Leader-&gt;findAll();<br />
&nbsp;//&nbsp;bindModel()&nbsp;を使用して&nbsp;Leader&nbsp;モデルに新しい関連を<br />
&nbsp;//&nbsp;追加しましょう:<br />
&nbsp;$this-&gt;Leader-&gt;bindModel(<br />
&nbsp;&nbsp;array('hasMany'&nbsp;=&gt;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;'Principle'&nbsp;=&gt;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;'className'&nbsp;=&gt;&nbsp;'Principle'<br />
&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;)<br />
&nbsp;&nbsp;)<br />
&nbsp;);<br />
&nbsp;//&nbsp;正しく関連付けされたので<br />
&nbsp;//&nbsp;１回の&nbsp;find&nbsp;関数で&nbsp;Leader&nbsp;を取得すると<br />
&nbsp;//&nbsp;関連する&nbsp;Principle&nbsp;も取得されます:<br />
&nbsp;$this-&gt;Leader-&gt;findAll();<br />
}</p>

<p>■belongToとかをコントローラーで使う直前に宣言する。（ページネイト）<br />
$this-&gt;Model-&gt;unbindModel(array('hasOne'=&gt;array('Model_2')),false);<br />
$this-&gt;Model-&gt;bindModel(array('hasOne'=&gt;array('Model_3')),false);<br />
$result&nbsp;=&nbsp;$this-&gt;paginate('Model');</p>

<p>■CSSの変更<br />
/app/webroot/css/cake.generic.css</p>

<p>■DBからにランダム表示（３件）する<br />
$home_theme&nbsp;=&nbsp;$this-&gt;Theme-&gt;find('all',&nbsp;array(<br />
'limit'=&gt;3,<br />
'order'=&gt;'rand()',<br />
));<br />
'order'=&gt;'rand()'はCakePHPではなくMySQLの実装（"order&nbsp;by&nbsp;rand()"）です。</p>

<p>■find('all')とpaginate()の違い<br />
find('all)の引数はハッシュ、paginate()の引数は配列みたいな。<br />
例）<br />
$conditions&nbsp;=&nbsp;array("Entry.contents&nbsp;LIKE"&nbsp;=&gt;&nbsp;"%".$contents."%");<br />
$this-&gt;paginate($conditions);//1つめの引数が条件文というルール。<br />
if($conditions){$where['conditions']=$conditions;}<br />
$list&nbsp;=&nbsp;$this-&gt;Entry-&gt;find('all',$where);//'conditions'という文字列で条件文とする。</p>

<p>■URLとプログラム<br />
ドメイン/コントローラー名/アクション名/<br />
例えば<br />
http://hoge.net/hoge/index/だと<br />
/controller/hoge_controller.php内のindex()が処理をします。ビューは/views/hoge/index.ctpになります。</p>

<p>■既存のデーターで認証ができない<br />
CakePHPのAuthコンポーネントはパスワードを自動的に暗号化してしまうので、既存のパスワードはそのまま使えません。解決方法は以下の２点。<br />
・パスワード暗号化を無効化する。<br />
・既存のパスワードを暗号化する。</p>

<p>■コンディションズ<br />
$conditions=array();<br />
$conditions=array("EditorBlogComment.editor_blog_id in (select id from editor_blogs where editor_blog_category_id =$kind and del_flg='0')","del_flg"=&gt;0);<br />
$comments = $this-&gt;EditorBlogComment-&gt;find('all',array('conditions'=&gt;$conditions,'limit' =&gt; 10, 'order' =&gt; array('EditorBlogComment.id' =&gt; 'desc')));<br />
--------------------<br />
$this-&gt;paginate&nbsp;=&nbsp;array('order'&nbsp;=&gt;&nbsp;array('Hoge.ranking_pv_pc'&nbsp;=&gt;&nbsp;'desc'));&nbsp;<br />
--------------------<br />
$conditions&nbsp;=&nbsp;array("Entry.editor_blog_category_id"&nbsp;=&gt;&nbsp;1,"Entry.del_flg"&nbsp;=&gt;&nbsp;0);<br />
$orders&nbsp;=&nbsp;array("Entry.id&nbsp;DESC");<br />
$e_blog&nbsp;=&nbsp;$this-&gt;Entry-&gt;find('all',array('conditions'=&gt;$conditions,'order'&nbsp;=&gt;&nbsp;$orders,'limit'&nbsp;=&gt;3));<br />
--------------------<br />
$conditions&nbsp;=&nbsp;array("or"&nbsp;=&gt;&nbsp;array&nbsp;(<br />
&nbsp;"name&nbsp;LIKE"&nbsp;=&gt;&nbsp;"%".$keyword."%",<br />
&nbsp;"telephone&nbsp;LIKE&nbsp;"&nbsp;=&gt;&nbsp;"%".$keyword."%",<br />
&nbsp;"post_address&nbsp;LIKE&nbsp;"&nbsp;=&gt;&nbsp;"%".$keyword."%"<br />
),&nbsp;"id"&nbsp;=&gt;&nbsp;$form_shops);<br />
$this-&gt;set('shoplists',&nbsp;$this-&gt;paginate($conditions));<br />
--------------------<br />
$conditions&nbsp;=&nbsp;array("hoge_id"&nbsp;=&gt;&nbsp;$hoges,&nbsp;"Fuga.order_no"&nbsp;=&gt;&nbsp;1,&nbsp;"Fuga.del_flg"&nbsp;=&gt;&nbsp;0);<br />
$proshots&nbsp;=&nbsp;$this-&gt;Fuga-&gt;find('all',array('conditions'=&gt;$conditions));<br />
--------------------<br />
$orderby&nbsp;=&nbsp;'Hoge.'.$this-&gt;params['form']['orderby'];<br />
$this-&gt;paginate&nbsp;=&nbsp;array(&nbsp;'limit'&nbsp;=&gt;&nbsp;18,&nbsp;'order'&nbsp;=&gt;&nbsp;array($orderby&nbsp;=&gt;&nbsp;'desc'));&nbsp;<br />
$res&nbsp;=&nbsp;$this-&gt;Hoge-&gt;find('all',array('conditions'=&gt;$conditions));<br />
--------------------<br />
unset($conditions['personality'][$key]);</p>

<p>■コントローラーからビューに変数を渡す<br />
コントローラー側<br />
$this-&gt;set('hoge',&nbsp;$hoge);<br />
ビュー側<br />
echo&nbsp;$hoge;<br />
連想配列とかも可です。</p>

<p>■コントローラーが無いとき<br />
&nbsp;&nbsp;//既に作成済みのコントローラーを配列に納めとく。<br />
&nbsp;&nbsp;$reservednames=array('members',&nbsp;'posts',&nbsp;'entries',&nbsp;'tags');&nbsp;</p>

<p>&nbsp;&nbsp;//リクエストされたコントローラ名を取得<br />
&nbsp;&nbsp;if(!&nbsp;empty($fromUrl))&nbsp;list($request_controller)&nbsp;=&nbsp;explode("/",&nbsp;$fromUrl);&nbsp;</p>

<p>&nbsp;if(!&nbsp;empty($request_controller)){<br />
&nbsp;&nbsp;//リクエストされたコントローラ名がサイトで使用されてなければ、、、<br />
&nbsp;&nbsp;if(array_search($request_controller,&nbsp;$reservednames)&nbsp;===false){<br />
&nbsp;&nbsp;&nbsp;//リクエストされたコントローラ名をユーザ名として、<br />
&nbsp;&nbsp;&nbsp;//マイページ用のコントローラとアクションにアクセスする<br />
&nbsp;&nbsp;&nbsp;Router::connect('/*',&nbsp;array('controller'&nbsp;=&gt;&nbsp;'users',&nbsp;'action'&nbsp;=&gt;&nbsp;'index'));<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>

<p>■コントローラーの最初で宣言するもの<br />
class&nbsp;HogessController&nbsp;extends&nbsp;AppController&nbsp;{<br />
var&nbsp;$name&nbsp;=&nbsp;'Hogees';&nbsp;//自分の名前<br />
var&nbsp;$uses&nbsp;=&nbsp;array('Hoge',&nbsp;'User');&nbsp;//使用するテーブル名（頭大文字の単数形）複数選択可<br />
var&nbsp;$helpers&nbsp;=&nbsp;array('Html',&nbsp;'Form');&nbsp;//使用するヘルパー名<br />
var&nbsp;$components&nbsp;=&nbsp;array('Confirm');&nbsp;//使用するコンポーネント名<br />
$users,&nbsp;$helpers,&nbsp;$commponents&nbsp;はいらないなら無くても可。<br />
テーブル名に添った形のコントローラーでテーブルを読まないときは以下。<br />
public&nbsp;$uses&nbsp;=&nbsp;null;</p>

<p>■コントローラー名以外のビューとかレイアウトとか<br />
public&nbsp;$layout&nbsp;=&nbsp;'custom';&nbsp;//&nbsp;コントローラー全体<br />
function&nbsp;index()&nbsp;{<br />
&nbsp;$this-&gt;layout&nbsp;=&nbsp;'custom';&nbsp;//&nbsp;レイアウト変更<br />
&nbsp;$this-&gt;render('index2');&nbsp;//&nbsp;ビュー変更<br />
&nbsp;$this-&gt;render('index',&nbsp;'custom');&nbsp;//&nbsp;ビューまで変えるとき。<br />
}</p>

<p>■コンポーネント<br />
コントローラーの部品は以下に置きます。<br />
/app/controllers/components/<br />
ビューの部品<br />
/app/views/helpers/</p>

<p>■チェックボックスの作り方<br />
echo&nbsp;$form-&gt;input('exclusion_shop',&nbsp;array('options'&nbsp;=&gt;&nbsp;$shoplists,&nbsp;'type'&nbsp;=&gt;&nbsp;'select',&nbsp;'multiple'&nbsp;=&gt;&nbsp;'checkbox',&nbsp;'selected'&nbsp;=&gt;&nbsp;$selectedshops,&nbsp;'label'&nbsp;=&gt;&nbsp;'対象外の個店'));<br />
selectedをlabelの後ろに書いてたらエラーになっていて悩んだ。</p>

<p>■ディレクトリ構造<br />
/app/以下の部分だけ触ります。<br />
/cake/lib/以下に各機能の基ネタがありますので、同じ位置関係にあるファイルを/app/以下にコピーしてくればそちらを優先して見ますので、必要があればコピーしたものに手を加えます。<br />
以下よく触る順番です。<br />
/app/controllers　プログラム<br />
/app/views　HTMLテンプレート　とりあえずこの２つが無いと何も表示されません。<br />
/app/models　DBとバリデーション　DBの読み書きが有る場合。<br />
/app/webroot　ブラウザから見える領域です。デザイン素材とかcssとかjsはここに置きます。<br />
/app/config　基本設定　変わったことをしなければ最初に触るだけです。<br />
/app/vendors　cake以外のプログラムを取り込むときなどはここに置きます。</p>

<p>■データーベース<br />
テーブル名は英単語の複数形にする必要があります。<br />
自分のシークエンス番号の名前は　id　。<br />
別テーブルと関連付けられているシークエンス番号は、対象テーブルの英単語名を単数形にしたもの＋id。（リレーション設定時に自動検出してくれます）<br />
作成時間は　created　。（自動更新してくれます）<br />
更新時間は　updated　。（自動更新してくれます）<br />
名前は　name　。（自動で太字にしてくれたりします）<br />
タイトルは　title　。（自動で太字にしてくれたりします）</p>

<p>■データベースを使わない、DBを使わない<br />
var&nbsp;$uses&nbsp;=&nbsp;null;</p>

<p>■デザインの変更<br />
/app/views/コントローラー名/　各ページの中心部分<br />
/app/views/layouts/　共通で使用する枠。<br />
/webroot/css/　スタイルシート</p>

<p>■デザインの変更<br />
以下を<br />
/cake/console/libs/templates/skel/views/layouts/default.ctp:<br />
以下にコピーして変更すると上書きされます。<br />
/app/views/layouts/default.ctp:</p>

<p>■トップページを変更する。<br />
以下のディレクトリとファイルを作って置きます。<br />
/app/views/pages/home.ctp</p>

<p>■ビューでモデルを呼ぶ<br />
&lt;?php<br />
App::import('Model',&nbsp;'Shop');<br />
$shp&nbsp;=&nbsp;new&nbsp;Shop();<br />
e($form-&gt;input('shop_id',array('options'=&gt;$shp-&gt;selectbox())));<br />
?&gt;</p>

<p>■ページネイト<br />
１ページに表示されるレコード数<br />
$this->paginate = array(<br />
&nbsp;&nbsp;'limit' => 6,<br />
&nbsp;&nbsp;'conditions' => array(<br />
&nbsp;&nbsp;&nbsp;'status' => 1<br />
&nbsp;&nbsp;)<br />
);<br />
$this->set('tablenames', $this->paginate());</p>

<p>■ページネイト<br />
&lt;p&gt;<br />
&lt;?php&nbsp;echo&nbsp;$paginator-&gt;prev('&lt;&lt;&nbsp;'.__('previous',&nbsp;true),&nbsp;array(),&nbsp;null,&nbsp;array('class'=&gt;'disabled'));?&gt;<br />
&lt;?php&nbsp;echo&nbsp;$paginator-&gt;numbers();?&gt;<br />
&lt;?php&nbsp;echo&nbsp;$paginator-&gt;next(__('next',&nbsp;true).'&nbsp;&gt;&gt;',&nbsp;array(),&nbsp;null,&nbsp;array('class'&nbsp;=&gt;&nbsp;'disabled'));?&gt;<br />
&lt;/p&gt;<br />
↓<br />
&lt;?php<br />
if($paginator-&gt;numbers()){<br />
$pagenum=preg_replace('/\|/','',$paginator-&gt;numbers());<br />
$pagenum=preg_replace('/&lt;span&gt;/','&lt;li&nbsp;class="left"&gt;',$pagenum);<br />
$pagenum=preg_replace('/&lt;\/span&gt;/','&lt;/li&gt;',$pagenum);<br />
$pagenum=preg_replace('&lt;span&nbsp;class="current"&gt;','&lt;li&nbsp;class="left&nbsp;firstChild"&gt;',$pagenum);<br />
e($pagenum);<br />
}<br />
?&gt;</p>

<p>■ページネイトした後のパラム<br />
こんなのが付いてきますのでオリジナルのページャーを作ることも可能です。<br />
&nbsp;&nbsp;&nbsp;&nbsp;[paging]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Album]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[page]&nbsp;=&gt;&nbsp;2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[current]&nbsp;=&gt;&nbsp;12<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[count]&nbsp;=&gt;&nbsp;2358<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[prevPage]&nbsp;=&gt;&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[nextPage]&nbsp;=&gt;&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[pageCount]&nbsp;=&gt;&nbsp;197<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[defaults]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[limit]&nbsp;=&gt;&nbsp;12<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[step]&nbsp;=&gt;&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[order]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[id]&nbsp;=&gt;&nbsp;desc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[conditions]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[options]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[page]&nbsp;=&gt;&nbsp;2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[limit]&nbsp;=&gt;&nbsp;12<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[order]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[id]&nbsp;=&gt;&nbsp;desc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[conditions]&nbsp;=&gt;&nbsp;Array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p><br />
■ページネイトに条件<br />
public&nbsp;$paginate&nbsp;=&nbsp;array(<br />
&nbsp;'MyModel'&nbsp;=&gt;&nbsp;array('limit'&nbsp;=&gt;&nbsp;20,<br />
&nbsp;'order'&nbsp;=&gt;&nbsp;array('week'&nbsp;=&gt;&nbsp;'desc'),<br />
&nbsp;'group'&nbsp;=&gt;&nbsp;array('week',&nbsp;'home_team_id',&nbsp;'away_team_id'))<br />
);</p>

<p>■ページネイトに他のデーターを付加<br />
//&nbsp;ページネイト<br />
$conditions&nbsp;=&nbsp;array("Hoge.id"&nbsp;=&gt;&nbsp;$hoges,&nbsp;"portal_show_flg"&nbsp;=&gt;&nbsp;1,&nbsp;"Hoge.del_flg"&nbsp;=&gt;&nbsp;0);<br />
$hogelist&nbsp;=&nbsp;$this-&gt;paginate('Hoge',$conditions);<br />
//&nbsp;ページネイトしたデーターに他のデーターを付加<br />
$i=0;<br />
foreach&nbsp;($hogelist&nbsp;as&nbsp;$val)&nbsp;{<br />
&nbsp;$res&nbsp;=&nbsp;$this-&gt;Fuga-&gt;find('first',&nbsp;array('conditions'=&gt;array('hoge_id'=&gt;$val['Hoge']['id']),&nbsp;'order'=&gt;array('order_no')));<br />
&nbsp;$hogelist[$i]['Fuga']['large']&nbsp;=&nbsp;$res['Fuga']['large'];<br />
&nbsp;$i++;<br />
}<br />
$this-&gt;set('hoges',&nbsp;$hogelist);<br />
$this-&gt;render('hoge_result');</p>

<p>■ページネイトの数を指定<br />
&lt;?php<br />
if($paginator-&gt;numbers()){<br />
$options&nbsp;=&nbsp;array('modulus'=&gt;7);&nbsp;<br />
$pagenum=preg_replace('/\|/','',$paginator-&gt;numbers($options));<br />
$pagenum=preg_replace('/span/','li',$pagenum);<br />
$pagenum=preg_replace('/current/','selected',$pagenum);<br />
e($pagenum);<br />
}<br />
?&gt;</p>

<p>■ページネイト時のパラメーター値<br />
GETはビューに以下を書きます。<br />
$paginator-&gt;options(array('url'&nbsp;=&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;array('?'&nbsp;=&gt;&nbsp;array('kind'&nbsp;=&gt;&nbsp;'2'))<br />
));</p>

<p>■モデルとコントローラーとビュー<br />
hogesというデーターベースに対する処理を行う一連のセットは基本的に以下になります。<br />
【モデル(対象のDBとバリデーションの設定)】/app/models/hoge.php、<br />
【コントローラー（プログラム（或いは各処理へのリンク集））】/app/controller/hoges_controller.php、<br />
【ビュー（HTMLテンプレート）】/app/views/hoges/index.ctp等<br />
モデルのファイル名だけ単数形です。</p>

<p>■モデルの紐付け<br />
エントリーにひもづくカテゴリーを１つ一緒にひっぱってくる。<br />
&lt;?php<br />
class&nbsp;Entry&nbsp;extends&nbsp;AppModel&nbsp;{<br />
&nbsp;var&nbsp;$name&nbsp;=&nbsp;'Entry';<br />
&nbsp;var&nbsp;$belongsTo&nbsp;=&nbsp;array(<br />
&nbsp;&nbsp;'EntryCategory'&nbsp;=&gt;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;'className'&nbsp;=&gt;&nbsp;'EntryCategory',<br />
&nbsp;&nbsp;&nbsp;'foreignKey'&nbsp;=&gt;&nbsp;'entry_category_id',<br />
&nbsp;&nbsp;&nbsp;'conditions'&nbsp;=&gt;&nbsp;array('EntryCategory.del_flg'&nbsp;=&gt;&nbsp;0),<br />
&nbsp;&nbsp;&nbsp;'fields'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'order'&nbsp;=&gt;&nbsp;''<br />
&nbsp;&nbsp;)<br />
&nbsp;);<br />
}<br />
?&gt;<br />
↑の相方で、この場合、カテゴリーにひもづくエントリーを無数にひっぱってきます。<br />
&lt;?php<br />
class&nbsp;EntryCategory&nbsp;extends&nbsp;AppModel&nbsp;{<br />
&nbsp;var&nbsp;$name&nbsp;=&nbsp;'EntryCategory';<br />
&nbsp;var&nbsp;$hasMany&nbsp;=&nbsp;array(<br />
&nbsp;&nbsp;'Entry'&nbsp;=&gt;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;'className'&nbsp;=&gt;&nbsp;'Entry',<br />
&nbsp;&nbsp;&nbsp;'foreignKey'&nbsp;=&gt;&nbsp;'entry_category_id',<br />
&nbsp;&nbsp;&nbsp;'dependent'&nbsp;=&gt;&nbsp;false,<br />
&nbsp;&nbsp;&nbsp;'conditions'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'fields'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'order'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'limit'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'offset'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'exclusive'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'finderQuery'&nbsp;=&gt;&nbsp;'',<br />
&nbsp;&nbsp;&nbsp;'counterQuery'&nbsp;=&gt;&nbsp;''<br />
&nbsp;&nbsp;)<br />
&nbsp;);<br />
}<br />
?&gt;</p>

<p>■リダイレクト<br />
$this-&gt;redirect('/orders/confirm');<br />
$this-&gt;redirect('/orders/thanks'));<br />
$this-&gt;redirect('http://www.example.com');<br />
$this-&gt;redirect(array('action'&nbsp;=&gt;&nbsp;'edit',&nbsp;$id));<br />
$this-&gt;redirect($this-&gt;referer());</p>

<p>■リンク<br />
$html-&gt;link('リンク先の名前',&nbsp;'/pages/hoge')<br />
&lt;?=$html-&gt;link('hoge',&nbsp;'/ddd/eee.html'&nbsp;array('piyo'&nbsp;=&gt;&nbsp;123))&nbsp;?&gt;<br />
http://aaa.co.jp/bbb/ccc/<br />
&lt;a&nbsp;href="/bbb/ccc/ddd/eee.html"&nbsp;piyo="123"&gt;hoge&lt;/a&gt;</p>

<p>■ルートディレクトリ<br />
以下になります。ブラウザから見えるところです。<br />
/app/webroot/</p>

<p>■下の階層でセットしたセッションが上の階層で見えない<br />
/data/hoge/cake/libs/session.php<br />
//&nbsp;ひとまずここに書けば確実ですが推奨できません。<br />
ini_set('session.cookie_path',&nbsp;'/');<br />
ini_set('session.cookie_lifetime',&nbsp;0);<br />
ini_set('session.cookie_domain',&nbsp;'hoge.net');</p>

<p>■可変長任意のURL<br />
通常の階層構造を持ったようなURLにしたい。<br />
下記の『■複数のアプリを配下に付ける』と似たような感じで、ウェブルートに任意のデ<br />
ィレクトリ構造を作成し、index.phpと.htaccessを置くだけで実現可能です。<br />
階層構造自体が引数になる場合は$_SERVER['REQUEST_URI']を解析する部品を作って噛ま<br />
せてやれば良いと思います。</p>

<p>■定数の作り方<br />
色々あると思いますが、一箇所にまとめたかったので以下になります。<br />
/home/hoge/app/config/bootstrap.phpに以下の一行を書きます。<br />
config('const');<br />
/home/hoge/app/config/const.phpを作って以下のような感じに書きます。<br />
&lt;?php<br />
&nbsp;&nbsp;define("IMGURL",&nbsp;"http://img.hoge.tes/");<br />
&nbsp;&nbsp;define("IMGDIR",&nbsp;"/home/hoge_img/public_html/");<br />
?&gt;</p>

<p>■複数のアプリを配下に付ける<br />
SSL申請料を節約する為にワンドメインで運用することとします。<br />
なので、親アプリの配下に子アプリを複数設置します。<br />
親のアプリ（hoge）<br />
　ウェブルート　→　/home/hoge/app/webroot/<br />
　アプリ　→　/home/hoge/app<br />
　cake　→　/home/hoge/cake<br />
子のアプリ（hage）<br />
　ウェブルート　→　/home/hoge/app/webroot/hage<br />
　アプリ　→　/home/hoge/app_hage<br />
　cake　→　/home/hoge/cake（親のと共用）<br />
　修正箇所<br />
　子のウェブルートにあるindex.phpに以下の修正。<br />
&nbsp;if&nbsp;(!defined('ROOT'))&nbsp;{<br />
//----------------------------------------------------------------------change<br />
//&nbsp;&nbsp;define('ROOT',&nbsp;dirname(dirname(dirname(__FILE__))));<br />
&nbsp;&nbsp;define('ROOT',&nbsp;DS.'home'.DS.'hoge');<br />
&nbsp;}<br />
/**<br />
&nbsp;*&nbsp;The&nbsp;actual&nbsp;directory&nbsp;name&nbsp;for&nbsp;the&nbsp;"app".<br />
&nbsp;*<br />
&nbsp;*/<br />
&nbsp;if&nbsp;(!defined('APP_DIR'))&nbsp;{<br />
//----------------------------------------------------------------------change<br />
//&nbsp;&nbsp;define('APP_DIR',&nbsp;basename(dirname(dirname(__FILE__))));<br />
&nbsp;&nbsp;define&nbsp;('APP_DIR',&nbsp;'app_hage');<br />
&nbsp;}<br />
/**<br />
&nbsp;*&nbsp;The&nbsp;absolute&nbsp;path&nbsp;to&nbsp;the&nbsp;"cake"&nbsp;directory,&nbsp;WITHOUT&nbsp;a&nbsp;trailing&nbsp;DS.<br />
&nbsp;*<br />
&nbsp;*/<br />
&nbsp;if&nbsp;(!defined('CAKE_CORE_INCLUDE_PATH'))&nbsp;{<br />
//----------------------------------------------------------------------change<br />
//&nbsp;&nbsp;define('CAKE_CORE_INCLUDE_PATH',&nbsp;ROOT);<br />
&nbsp;&nbsp;define('CAKE_CORE_INCLUDE_PATH',&nbsp;DS.'home'.DS.'hoge');<br />
&nbsp;}</p>

<p><br />
ウェブアクセスは&nbsp;hoge/hage&nbsp;になります。<br />
各リンクは&nbsp;"/controller/action"&nbsp;等とすると、ドメイン直下のところに飛んでしまうので、相対パスにするか、<br />
"/hoge/controller/action"　とするか、定数を作って<br />
"/&lt;?php&nbsp;e(HOGE)&nbsp;?&gt;/controller/action"　としてください。<br />
cssやjsがおかしくならないのは、CakePHPのヘルパーを使って指定しているからだろう。<br />
フォームもヘルパーを使っているところは何もしなくても期待通りのリンクになっています。</p>

<p>■超簡単に作るとき<br />
cd ルート/cake/console<br />
./cake bake<br />
M<br />
エンター → ＤＢの数字 → n → n → y → n<br />
C<br />
ＤＢの数字 → n → y → n → y → n<br />
V<br />
ＤＢの数字 → y → n<br />
Q<br />
/app/以下にファイルが出来るので必要なら任意の場所にmv</p>]]>
        
    </content>
</entry>

<entry>
    <title>参考サイトリンク集</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2010/07/post-4.html" />
    <id>tag:www.webinko.com,2010:/tech//5.32</id>

    <published>2010-07-05T14:19:39Z</published>
    <updated>2012-02-07T23:22:23Z</updated>

    <summary>SiteAlexa RankColorsCategoriesTagsRating...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<table style="border-collapse: collapse" border="1" bordercolor="#88888888" cellpadding="3" cellspacing="0"><tr><td><strong>Site</strong></td><td><strong>Alexa Rank</strong></td><td><strong>Colors</strong></td><td><strong>Categories</strong></td><td><strong>Tags</strong></td><td><strong>Ratings</strong></td><td><strong>RSS</strong></td></tr><tr><td><a href="http://www.cssbeauty.com/" target="_blank">www.cssbeauty.com</a></td><td>10,432</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.cssdrive.com/" target="_blank">www.cssdrive.com</a></td><td>14,303</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.stylegala.com/" target="_blank">www.stylegala.com</a></td><td>15,819</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssmania.com/" target="_blank">www.cssmania.com</a></td><td>22,686</td><td>Yes</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssremix.com/" target="_blank">www.cssremix.com</a></td><td>23,294</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>Full Image</td></tr><tr><td><a href="http://www.alvit.de/css-showcase/" target="_blank">www.alvit.de/css-showcase/</a></td><td>26,557</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.cssvault.com/" target="_blank">www.cssvault.com</a></td><td>27,285</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.w3csites.com/" target="_blank">www.w3csites.com</a></td><td>28,078</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.bestwebgallery.com/" target="_blank">www.bestwebgallery.com</a></td><td>30,382</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csselite.com/" target="_blank">www.csselite.com</a></td><td>33,948</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.screenalicious.com/" target="_blank">www.screenalicious.com</a></td><td>36,114</td><td>Yes</td><td>No</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.unmatchedstyle.com/" target="_blank">www.unmatchedstyle.com</a></td><td>42,269</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Full Image</td></tr><tr><td><a href="http://www.designlinkdatabase.net/" target="_blank">www.designlinkdatabase.net</a></td><td>48,086</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.screenfluent.com/" target="_blank">www.screenfluent.com</a></td><td>51,014</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.designsnack.com/" target="_blank">www.designsnack.com</a></td><td>51,904</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.cssheaven.com/" target="_blank">www.cssheaven.com</a></td><td>53,491</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssimport.com/" target="_blank">www.cssimport.com</a></td><td>57,960</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssglobe.com/" target="_blank">www.cssglobe.com</a></td><td>65,660</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.cssreboot.com/" target="_blank">www.cssreboot.com</a></td><td>67,768</td><td>No</td><td>No</td><td>Yes</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.mostinspired.com/" target="_blank">www.mostinspired.com</a></td><td>68,025</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.thebestdesigns.com/" target="_blank">www.thebestdesigns.com</a></td><td>68,614</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td><a href="http://thesis.veracon.net/" target="_blank">http://thesis.veracon.net</a></td><td>76,844</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssbloom.com/" target="_blank">www.cssbloom.com</a></td><td>79,672</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csscollection.com/" target="_blank">www.csscollection.com</a></td><td>92,579</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td><a href="http://www.csstux.com/" target="_blank">www.csstux.com</a></td><td>98,129</td><td>No</td><td>No</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.cssbased.com/" target="_blank">www.cssbased.com</a></td><td>101,834</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.css-website.com/" target="_blank">www.css-website.com</a></td><td>102,923</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.designshack.co.uk/" target="_blank">www.designshack.co.uk</a></td><td>109,656</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.ceeses.com/" target="_blank">www.ceeses.com</a></td><td>124,001</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://anjo.dekiteharu.jp/" target="_blank">http://anjo.dekiteharu.jp</a></td><td>135,146</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.cssclip.com/" target="_blank">www.cssclip.com</a></td><td>135,730</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.my3w.org/" target="_blank">www.my3w.org</a></td><td>151,235</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csshazard.com/" target="_blank">www.csshazard.com</a></td><td>167,525</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>Full Image</td></tr><tr><td><a href="http://www.artnetz.de/" target="_blank">www.artnetz.de</a></td><td>173,234</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.css-design-yorkshire.com/" target="_blank">www.css-design-yorkshire.com</a></td><td>177,077</td><td>No</td><td>No</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.css11.com/" target="_blank">www.css11.com</a></td><td>182,520</td><td>No</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td><a href="http://www.cssimpress.com/" target="_blank">www.cssimpress.com</a></td><td>188,219</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.e-motionaldesign.com/" target="_blank">www.e-motionaldesign.com</a></td><td>202,826</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssprincess.com/" target="_blank">www.cssprincess.com</a></td><td>210,811</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td><a href="http://www.cssgaleri.com/" target="_blank">www.cssgaleri.com</a></td><td>220,224</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssblast.ru/" target="_blank">www.cssblast.ru</a></td><td>224,048</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.creative-pakistan.com/" target="_blank">www.creative-pakistan.com</a></td><td>233,247</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.netzfruehling.de/" target="_blank">www.netzfruehling.de</a></td><td>237,645</td><td>No</td><td>No</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.najdizajn.com/" target="_blank">www.najdizajn.com</a></td><td>256,885</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.edustyle.net/" target="_blank">www.edustyle.net</a></td><td>274,750</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>No</td></tr><tr><td><a href="http://www.csssmoothoperator.com/" target="_blank">www.csssmoothoperator.com</a></td><td>290,827</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.coolsitecollection.com/" target="_blank">www.coolsitecollection.com</a></td><td>313,655</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.cssgalaxy.com/" target="_blank">www.cssgalaxy.com</a></td><td>348,352</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.per.fectio.net/" target="_blank">www.per.fectio.net</a></td><td>357,030</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>No</td></tr><tr><td><a href="http://www.cssflavor.com/" target="_blank">www.cssflavor.com</a></td><td>364,755</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.onepixelarmy.com/" target="_blank">www.onepixelarmy.com</a></td><td>369,312</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.piepmatzel.de/" target="_blank">www.piepmatzel.de</a></td><td>418,803</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.cssbrain.hu/" target="_blank">www.cssbrain.hu</a></td><td>438,074</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.w3c-compliance.com/" target="_blank">www.w3c-compliance.com</a></td><td>461,674</td><td>No</td><td>No</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.stylegrind.com/" target="_blank">www.stylegrind.com</a></td><td>484,645</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.submitcss.com/" target="_blank">www.submitcss.com</a></td><td>523,147</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td><a href="http://inspirace.dobrestranky.com/" target="_blank">http://inspirace.dobrestranky.com</a></td><td>549,529</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Full Image</td></tr><tr><td><a href="http://www.cssgallery.ro/" target="_blank">www.cssgallery.ro</a></td><td>553,463</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.cssgreen.com/" target="_blank">www.cssgreen.com</a></td><td>600,815</td><td>No</td><td>Yes</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="http://www.csszengarden.com/" target="_blank">www.csszengarden.com</a></td><td>13,878</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Url</td></tr><tr><td><a href="http://www.webcreme.com/" target="_blank">www.webcreme.com</a></td><td>21,564</td><td>Yes</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.prowebart.net/" target="_blank">www.prowebart.net</a></td><td>324,625</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>Full Image</td></tr><tr><td><a href="http://www.designexpanse.com/" target="_blank">www.designexpanse.com</a></td><td>340,762</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csssnap.com/" target="_blank">www.csssnap.com</a></td><td>360,300</td><td>No</td><td>Yes</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.menthe-fresh.fr/" target="_blank">www.menthe-fresh.fr</a></td><td>427,757</td><td>Yes</td><td>No</td><td>No</td><td>Yes</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csscoosite.com/" target="_blank">www.csscoosite.com</a></td><td>548,693</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Url</td></tr><tr><td><a href="http://www.csscool.cn/" target="_blank">www.csscool.cn</a></td><td>681,511</td><td>No</td><td>Yes</td><td>Yes</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://morpheed.com/css/" target="_blank">www.morpheed.com/css</a></td><td>2,313,992</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Thumbnail</td></tr><tr><td><a href="http://www.csstown.com/" target="_blank">www.csstown.com</a></td><td>3,463,368</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>No</td></tr></table>
<a href="http://web.aqua-create.com/web/" target="_blank">aquacreate+web:webデザイン集</a>]]>
        
    </content>
</entry>

<entry>
    <title>Google App Engine を使おうと思うんだ</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2010/04/google-app-engine.html" />
    <id>tag:www.webinko.com,2010:/tech//5.31</id>

    <published>2010-04-27T14:18:47Z</published>
    <updated>2011-05-26T14:48:26Z</updated>

    <summary>Adobe Air はどうなったんだ、って言われそうなんだけど、FlashSC4...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>Adobe Air はどうなったんだ、って言われそうなんだけど、FlashSC4買ったらそのままAir形式で保存とかできたので、それまでFlashを使えていれば新しく覚えることは無いじゃんか、ってことでテンション下がりましたとさ。</p>

<p>で、<font color="#ff4400">タダで500MBも使えるレンタルサーバーがある</font>って聞いたんで使ってみようそうしようということになりました。<br />
その名は<strong>『Google App Engine』</strong>。<br />
これは具体的に何かっていうと、Googleが「タダでうちのサーバー使っていいよ、データベースもね、おまけにローカルで動く開発環境も持ってけドロボー」って言うもんだから猫もしゃくしも使え使えってなっているものなんだ。<br />
ロリポップも真っ青。<br />
ちょうど負荷の高くなりそうな個人サービスをしたくなっていたところなので調度良かったよ。</p>

<p>ただ、普通のレンタルサーバーみたいにFTPでアップしたら終わりってもんじゃなくて、Google独自の形式に則って書いたりアップしたりしないといけないんだ。<br />
というわけで、以下に開発環境の手順を記します、って思ったんだけど、<a href="http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/" target="_blank">Googleのチュートリアル</a>があまりにも丁寧なので書くことありませんｗ。</p>

<p>ちょっと本屋で関連書籍立ち読みしたんだけど、ほんとにネットのチュートリアルで足りる感じです。<br />
あとは、難しいことするんだったら専用言語のPython(パイソン)か最近使えるようになったJAVAに慣れないといけないんだけど、ここで言語の講座をまるまるするのも不可能なので他所でお願いするとして、さて何を書きましょうかね。</p>

<p>では補足というかメモみたいなものを。</p>

<p>■google_appengine/dev_appserver.py helloworld/ ってしたのに表示しない。<br />
環境にも寄りますが、私の場合以下のような感じでした<br />
ディレクトリの場所<br />
C:\Program Files\Google\helloworld/<br />
正解<br />
cd C:\Program Files\Google\<br />
dev_appserver.py helloworld/<br />
http://localhost:8080/<br />
もしパスが通って無かったら以下みたいな感じですかね<br />
cd C:\Program Files\Google\google_appengine<br />
dev_appserver.py ../helloworld/</p>

<p>■環境設定したのにパスが通らない。<br />
windows 7 なのですが、いろいろ試した結果、後ろではなく前に描き足したらいけました。</p>

<p>■mod rewriteちっくにURLを引数にしたい<br />
()でくくると行けました。具体的には以下のような感じ。<br />
application = webapp.WSGIApplication(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[('/(.*)/(.*)',  MainPage)],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug=True)<br />
受ける方はこう<br />
class MainPage(webapp.RequestHandler):<br />
&nbsp;&nbsp;def get(self, val1, val2):<br />
&nbsp;&nbsp;?</p>

<p>■Googleアカウント無い人のログインチェックは？<br />
自分で作るよろし。</p>

<p>う?ん、またカテゴリーつくって書き足してゆくかな。<br />
そのときは Google App Engine にしたらよいのか Python にしたらよいのか、どうしよう。(-_-)</p>]]>
        
    </content>
</entry>

<entry>
    <title>その他</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2010/04/post-3.html" />
    <id>tag:www.webinko.com,2010:/tech//5.30</id>

    <published>2010-04-03T14:17:55Z</published>
    <updated>2011-10-01T13:18:41Z</updated>

    <summary>■全角空白で壺った メール本文の全角スペースとかを消したかったんだけど、以下。 ...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="その他" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>■全角空白で壺った<br />
メール本文の全角スペースとかを消したかったんだけど、以下。<br />
ISO-2022-JPではなくSJISにしていた。＿ノ乙(、ン、)＿<br />
$diary_body = mb_convert_encoding($diary_body, "UTF-8", "ISO-2022-JP");<br />
$chkName = $diary_body;<br />
$chkName = preg_replace('/　|\s|\t|\n|\r|\0|\x0B/u', '', $chkName);</p>

<p>■postfixから外部に送信できない<br />
以下のようなエラーが出る場合。<br />
Connection timed out (port 25)<br />
さんざん悩んだ結果。さくらVPSでは仮登録中にメール送信できません。<br />
いくら調べても分からないわけだｗ。<br />
お金振り込んでもらったら難なく動いた。</p>

<p>■ムームーＤＮＳカスタム設定からロリポップを指定する方法<br />
ムームーＤＮＳカスタム設定してしまったドメインに後からロリポップを追加するには以下の手順。<br />
1)（ムームー管理画面）カスタム設定を解除<br />
2)（ムームー管理画面）ロリポップＤＮＳに変更<br />
3)（ロリポップ管理画面）ドメインやサブドメインの設定<br />
4)（ムームー管理画面）ムームーＤＮＳに設定<br />
5)（ロリポップ管理画面）ムームーＤＮＳに移行<br />
6)（ムームー管理画面）再びカスタム設定を設定<br />
　※ 3) で設定したサブドメイン等が 6) で選択可能に。<br />
　※ＤＮＳの切り替えに１時間程度かかるのでその間はサイトが見えない。<br />
　※カスタム設定の内容が全部消えてしまうので入力し直し＋テスト。</p>

<p>■ワイヤーフレームを作ってくれるブックマークレット<br />
↓を見ているサイトのURL欄に貼ります。<br />
javascript:(function(){wf_bookmarklet={ver:'1.5',ka:86400000,to:7000};if(typeof%20wfInit=='undefined'){var%20s=document.body.appendChild(document.createElement('script')).src=(document.location.protocol=='https:'?'https:':'http:')+'//www.wirify.com/client/wirify.min.js?'+parseInt(new%20Date().getTime()/wf_bookmarklet.ka);window.setTimeout(function(){if(typeof%20wfInit=='undefined'){alert('Wirify%20is%20still%20processing%20or%20temporarily%20unavailable,%20please%20try%20again%20in%20a%20moment\n\nVisit%20%20twitter.com/wirify%20%20and%20%20www.wirify.com/blog%20%20for%20latest%20announcements');}},wf_bookmarklet.to);}else{wfInit();}})();</p>

<p>■ロリポップのウェブメールにある「送信済みメール」を取り出す方法<br />
メールサーバーを引っ越ししようと思って調べたのだけれども。<br />
パソコンのメーラーから送信した分は、ウェブメールの「Sent」で同期がとれていますが、ウェブメールから送信した分の「送信済みメール」は同期がとれていません。<br />
今までウェブメールから送信した文を取り出したいのだけどどうしても方法が分からない。<br />
なので、ロリポップにメールで質問しました。そしたら。<br />
「その方法はありません」<br />
とのこと。<br />
＿ノ乙(、ン、)＿<br />
一通一通コピペするか転送するしかないのか......</p>

<p>■ムームードメインから自前のサーバーに設定<br />
1) ムームードメインログイン<br />
2) 任意のドメイン→詳細→表示する<br />
3) ムームーDNS→セットアップ（カスタム設定にしておく）<br />
4) 例）↓な感じ<br />
<img alt="20110425.png" src="http://webinko.com/tech/20110425.png" width="448" height="204" /><br />
※ぼやけてるところはIPアドレス。MXの指定でけっこうハマった。</p>

<p>■Google検索のリミッター解除<br />
http://www.google.co.jp/setprefs?submit2=%E4%BF%9D%E5%AD%98+&hl=ja?=all&num=10&q=&prev=http%3A%2F%2Fwww.google.co.jp%2F&safe=off</p>

<p>■今まで見聞きしたサーバーがダウンする感じの現象<br />
例(1)アクセスが異常発生。<br />
対処(1-1)特定のIPからのアクセスを禁止する。<br />
対処(1-2)どうしようかと考えているうちにアクセスが止んで復旧。</p>

<p>例(2)閲覧できるけど更新できない。<br />
対処(2-1)アクセス解析用のデーターが溜まりまくってハードディスクの容量を使い切っていた。<br />
要らないデーターを削除＆溜まらないような仕組みに変更。</p>

<p>例(3)アクセスが増えるとダウン。<br />
対処(3-1)メモリを喰い過ぎているのが分かったのでメモリを増やす。<br />
対処(3-2)根本的にはＤＢのクエリで遅いものがあり、プロセスが山のように溜まり、その１個１個のプロセスがメモリを食いつぶしていたのが分かった。<br />
SQL文の見直し等を行う。<br />
応急処置：ある程度プロセスが溜まってメモリが無くなってきたらＤＢ再起動。（良くは無いけどダウンよりはマシということから）</p>

<p>例(4)メール配信が止まった<br />
対処(4-1)スパムメールに対しても全部エラーメールを返していたために固まっていた。エラーメールは返さないようにした。（本当の打ち間違いに対しても返せなくなるので、このポリシーは状況によって判断すべき）<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Macintosh</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2010/03/macintosh.html" />
    <id>tag:www.webinko.com,2010:/tech//5.29</id>

    <published>2010-03-10T14:16:39Z</published>
    <updated>2011-05-26T14:42:59Z</updated>

    <summary>■リストア(OS9) ノートンでディスクチェックしていたらフリーズしたのでどうし...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="Macintosh" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>■リストア(OS9)<br />
ノートンでディスクチェックしていたらフリーズしたのでどうしようもなくなって電源長押しで再起動。<br />
再起動できなくなった。<br />
CD起動(cを押し続けながら電源ON)してハードディスク確認すると使用不能。(-_-;<br />
ノートン先生大爆発。<br />
ハードディスクはマウントする為にとりあえず初期化。<br />
被害は最小限に抑えるため、その状態で補完。後は修復ツール頼みとしよう。<br />
新しいハードディスクを買ってくる。<br />
ハードディスクの裏に書いてある図を見てコネクタをマスターに切り替える。<br />
ひとまず旧ハードディスクから線を抜いて(激堅)新ハードディスクに刺してみる。<br />
リストアCDからCD起動。<br />
ユーティリティーのドライブ設定からハードディスクを認識してマウント。<br />
これにOS9をインストール。<br />
終わったら再起動&設定。<br />
ハードディスクから起動出来たのを確認出来たのでシステム終了。<br />
ハードディスク置き場を整理。<br />
また線を抜く(激堅)。<br />
手前中央にあるネジを一本抜く。<br />
台座ごと少し手前にズらして外す。<br />
横のネジを外す。<br />
買ってきた方を下に、もとのやつを上にしてネジで止める。<br />
ネジがなかったのでもとの4本を2本ずつ分けて使う。<br />
ここで問題。<br />
旧ハードディスクにはジャックピンの説明図が無い。<br />
ググってこんな画像を見つけたけど該当のが無いような。<br />
<img alt="3050-1.gif" src="http://webinko.com/tech/3050-1.gif" width="328" height="287" /><br />
<img alt="3050-3.jpg" src="http://webinko.com/tech/3050-3.jpg" width="378" height="472" /><br />
なぜなら、もともとのやつはマスターで<br />
135 8<br />
24679<br />
のピンの1-2と3-5にコネクタが付いていたのだ。<br />
しかし、おそらく3-5は意味がないものだと考え、全外しか3-4の２択というかどっちでも良い感じなので、部品を捨てるのももったいないから3-4に刺して再起動。<br />
ドライブ設定で見るとマスターが0、今のが1になって認識できていたのでオッケー。<br />
これでひとまずマシン自体は復旧出来た。<br />
あとはスレイブになった旧ハードディスクからどれだけデーターを救出できるか。<br />
以上。</p>

<p>■CD起動が出来ない(OS9)<br />
同じOS9のCDに見えても、購入時そのマシンに付属していたCDでないと出来ない場合がある。<br />
（別途中古で買ったMac付属のCDで死ぬ程失敗したけど差替えたら一発で起動した）</p>

<p>■コピーの仕方<br />
ローカルでコマンド。<br />
これは下記「トンネルの仕方」をした状態でサーバーからローカルにコピーする例。<br />
scp -r hostname2:/var/www/user/local/ ./ </p>

<p>■トンネルの仕方<br />
/Users/username/.ssh/config<br />
に以下を記述</p>

<p>Host *<br />
 ForwardAgent yes<br />
 GSSAPIAuthentication no</p>

<p>Host hostname1<br />
 User root<br />
 Hostname 111.111.111.111</p>

<p>Host hostname2<br />
 User root<br />
 Hostname 222.222.222.222<br />
 ProxyCommand ssh hostname1 nc %h %p</p>

<p>/Users/username/.ssh/<br />
にキーを置く</p>

<p>サーバーの.sshにもこっちのキーを書き足しておく。</p>

<p>ssh hostname2</p>

<p>■ターミナルの開き方<br />
Mac HDD → アプリケーション1 → ユーティリティー → ターミナル</p>]]>
        
    </content>
</entry>

<entry>
    <title>ubuntsのeclipseでeuc-jpを使えるようにする</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/06/ubuntseclipseeuc-jp.html" />
    <id>tag:www.webinko.com,2011:/tech//5.28</id>

    <published>2009-06-08T14:16:03Z</published>
    <updated>2011-05-26T14:42:15Z</updated>

    <summary>javaのjdkをインストール % sudo apt-get install o...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>javaのjdkをインストール<br />
% sudo apt-get install openjdk-6-jdk<br />
% sudo apt-get install sun-java6-jdk</p>

<p>デフォルトで使用される JDK を選択してみます。openjdk-6-jdk と sun-java6-jdk をインストールした状態ではまだ OpenJDK が使われているので、<br />
% which java<br />
/usr/bin/java<br />
% java -version<br />
java version "1.6.0"<br />
OpenJDK Runtime Environment (build 1.6.0-b09)<br />
OpenJDK Client VM (build 1.6.0-b09, mixed mode, sharing)<br />
%</p>

<p>以下で、/usr/lib/jvm/java-6-sun/jre/bin/java を選択する。<br />
java-6-sun をデフォルトに設定してみます。<br />
% sudo /usr/sbin/update-alternatives --config java<br />
  選択肢       alternative<br />
-----------------------------------------------<br />
*+        1    /usr/lib/jvm/java-6-openjdk/jre/bin/java<br />
          2    /usr/lib/jvm/java-6-sun/jre/bin/java</p>

<p>デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: <font color="#ff0000">2</font><br />
Using '/usr/lib/jvm/java-6-sun/jre/bin/java' to provide 'java'.<br />
%<br />
% java -version<br />
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)<br />
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)<br />
% </p>

<p>eclipseのコンフィグに以下を追加<br />
vim /etc/eclipse/java_home<br />
/usr/lib/jvm/java-6-sun/ をいちばん上に追加</p>

<p>eclipseのプロジェクト→プロパティーでEUC-JPを選択。</p>]]>
        
    </content>
</entry>

<entry>
    <title>apxsが入ってないからApacheをソースからインストール</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/apxsapache.html" />
    <id>tag:www.webinko.com,2009:/tech//5.26</id>

    <published>2009-04-23T14:13:24Z</published>
    <updated>2011-05-26T14:14:09Z</updated>

    <summary>なにとなくLinuxをインストールするとapxsが入ってないことが多い。yum ...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[なにとなくLinuxをインストールするとapxsが入ってないことが多い。<br />yum install httpd-devel,up2date instal httpd-devel,aptitude apache-develなどで入る場合は良いけど、そうでないこともある。<br />というわけでApacheをソースからインストール。<br /><br />1) &lt;a href="http://www.apache.jp/misc/download.html"&gt;apacheのサイト&lt;/a&gt;からhttpd-2.2.11.tar.gzとかをダウンロード。<br />tar zxf httpd-2.2.11.tar.gz<br />解凍したらその中にはいって以下<br /><br />./configure --enable-modules=all --disable-dav --enable-so --with-ssl --enable-rewrite --enable-mods-shared=all<br />make<br />make install<br /><br />64bitのLinuxだったら --with-expat=builtin を追加<br />&nbsp;./configure --enable-modules=all --disable-dav --enable-so --with-ssl --enable-rewrite --enable-mods-shared=all --with-expat=builtin<br />make<br />make install<br /><br />※./configure でエラーになるときは、Linuxのインストール時にcのコンパイラが入ってない時が多い、インストールし直しで、インストール内容をカスタマイズして開発を選択するように。<br /><br />/etc/init.d/httpd の中を新しいほうに書き換える。<br />apachectl=/usr/local/apache2/bin/apachectl<br />httpd=${HTTPD-/usr/local/apache2/bin/httpd}<br /><br />今までの場所を使いたいんだったら、昔のやつは名前を変えてとっておいて、以下のようなシンボリックリンクを作るなり何なり。<br />ln -s /etc/httpd/conf /usr/local/apache2/conf<br />ln -s /var/log/httpd /usr/local/apache2/logs<br />ln -s /usr/bin/modules /usr/local/apache2/bin/modules<br /><br />httpd.confのLoadModuleあたりも漏れなく書き直すと無難。 ]]>
        
    </content>
</entry>

<entry>
    <title>Fedora Core 10 に VMWare Server</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/fedora-core-10-vmware-server.html" />
    <id>tag:www.webinko.com,2009:/tech//5.25</id>

    <published>2009-04-23T14:12:43Z</published>
    <updated>2011-05-26T14:41:44Z</updated>

    <summary>ちょっと複数のLinux環境でオリジナルのアパッチモジュールをコンパイルをする用...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>ちょっと複数のLinux環境でオリジナルのアパッチモジュールをコンパイルをする用事があったのでメモ。<br />
というわけで、てきとーなマシンにLinuxをいれてVMWareServerをいれてそのなかに他のLinuxをいれるとす。<br />
土台は Fedora Core 10。redhatに近いのでクライアントのサーバーに行った時にとまどわなくてすむ。と思う。<br />
Fedora Core 10<br />
Firefox3</p>

<p>■準備</p>

<p>Fedora Core 10 は本屋で日経Linuxを買ってきてふろくのDVDからインストール。<br />
めんどくさいのでSELinuxとファイヤーウォールは無効。セキュリティはルータに任せておこう。<br />
VMwareのサイトで会員登録してダウンロード。<br />
このときのシリアルを後で使います。<br />
http://www.vmware.com/download/server/<br />
http://register.vmware.com/content/registration.html</p>

<p>Fedora Core 10 でrootログインできるようにする。<br />
以下ファイルの該当箇所をコメントアウトする。<br />
/etc/pam.d/gdm<br />
#auth required pam_succeed_if.so user != root quiet </p>

<p>rootでログインする。<br />
（rootでログインしないと後でブラウザからアクセスできない）</p>

<p>Fedora Core 10 でアパッチの起動。<br />
なんとかマネージャーみたいなのはオフ。<br />
システム→管理→サービス→httpd</p>

<p>■VMWareServerを使う</p>

<p>VMWare Server に必要な xinetd をインストール。 <br />
yum -y install xinetd<br />
/etc/rc.d/init.d/xinetd start<br />
chkconfig xinetd on</p>

<p>VMWare Server をインストール。<br />
rpm -Uvh VMware-server-2.0.1-156745.i386<br />
/usr/bin/vmware-config.pl<br />
全部「y」かデフォルト値。<br />
準備で得たシリアルを入力。</p>

<p>ブラウザでアクセス。<br />
https://localhost:8333/<br />
root/rootのパスワード<br />
httpsだからFireFox3で警告が出ますが例外扱いにしてスルー。<br />
というか、このへんで１回繋がらなかったので再起動したら繋がった。</p>

<p>右上の「Create Virtual Machine」をクリック。<br />
Name:に任意の名前を入力して「Next」。<br />
インストールするOSの種類を選んで「Next」。<br />
割り当てるRAMのサイズと、CPUのコア数を選択して「Next」。<br />
「Create a New Virtual Disk」を選択して「Next」。<br />
容量などを設定して「Next」。<br />
「Add a Network Adapter」を設定して「Next」。<br />
つなぐネットワーク（デフォルトはNAT）を選択して「Next」。<br />
インストール方法を選択して「Next」。<br />
　DVDやCDなら「Use a Physical Drive」。<br />
　ダウンロードしたファイルからなら「Use an ISO Image」。<br />
上で分岐しますが、ドライブやファイルを指定します。<br />
Floppy Drive は無かったので「Don't Add a Floppy Drive」を選択して「Next」。<br />
USBは一応「Add a USB Controller」選択して「Next」。<br />
「Finish」して設定完了。</p>

<p>左端の「Inventory」から今のをクリック。<br />
画面上中央の再生ボタンをクリックすると、右の「Status/Power Status」が「Powered On」に。<br />
再生ボタン下の「Console」をクリック。<br />
初回は「Install plug-in」をクリック。<br />
許可してアドオンをインストール。再起動。<br />
画面が真っ白。<br />
理由は分からないけどアドオンを無効にしたり有効にしたりしているうちに表示されるようになった。<br />
謎。表示された時のURLは「https://localhost:8333/ui/#」。<br />
気を取り直して左端の「Inventory」から今のをクリック。<br />
画面上中央の再生ボタンをクリックすると、右の「Status/Power Status」が「Powered On」に。<br />
再生ボタン下の「Console」をクリック。<br />
「Open the console in a new window.」画面をクリックすると仮想窓が開くので、その前にOSのＤＶＤ等を入れておいてインストール。<br />
カーソルが窓の中にとりこまれるので、こっちに戻すには「Ctrl+Alt」。<br />
なんでかしらんけど、アンダーバーが入力できない。そのつどコピペして対応。とてつもなく不便。アンダーバー様の偉大さを思い知る。アンダーバーを笑うものはアンダーバーに泣く。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Adobe Air で目立とうと思うんだ その４</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/adobe-air-3.html" />
    <id>tag:www.webinko.com,2009:/tech//5.24</id>

    <published>2009-04-08T14:12:02Z</published>
    <updated>2011-05-26T14:27:29Z</updated>

    <summary>Adobe AIR アプリのアンインストール方法 Windows だと普通に「ス...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>Adobe AIR アプリのアンインストール方法</p>

<p>Windows だと普通に「スタート→コントロールパネル→プログラムの追加と削除」でできるんだけど、Ubuntu(Linux)ではどうすんの、ってちょっと迷ったので記すことにしようそうしよう。</p>

<p><font color="#ff0000">root@masumoto-desktop:/opt# dpkg -S /opt/*</font><br />
adobeair1.0: /opt/Adobe AIR<br />
com.adobe.example.passwdgc.a6ba28f144513ff9214613f74810fd6452bda18a.1: /opt/passwdGC<br />
<font color="#ff0000">root@masumoto-desktop:/opt# dpkg -P com.adobe.example.passwdgc.a6ba28f144513ff9214613<br />
f74810fd6452bda18a.1</font><br />
(データベースを読み込んでいます ... 現在 110270 個のファイルとディレクトリがインストールされています。)<br />
com.adobe.example.passwdgc.a6ba28f144513ff9214613f74810fd6452bda18a.1 を削除しています ...<br />
root@masumoto-desktop:/opt#</p>

<p>アプリじゃなくて本体のほうはGUIの　アプリケーション→アクセサリ→Adobe AIR Uninstaller　でいけるよ。<br />
いじょ。今日はここまで。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Adobe Air で目立とうと思うんだ その３</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/adobe-air-2.html" />
    <id>tag:www.webinko.com,2009:/tech//5.23</id>

    <published>2009-04-07T14:11:30Z</published>
    <updated>2011-05-26T14:26:47Z</updated>

    <summary>ゆるく書いてゆくことにしたよ。 では、Aptanaを実行して下さい。 HTMLと...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>ゆるく書いてゆくことにしたよ。<br />
では、Aptanaを実行して下さい。<br />
HTMLとJavaScriptで作ってゆきたいと思います。タダだし。</p>

<p>新規作成方法。<br />
プロジェクトの空白で左クリック→新規→プロジェクト→Adobe AIR Project→次へ→プロジェクト名(Test)→次へ→次へ→Window widthとWindow heightを300 200くらいにして（後で変更できる）次へ→次へ→完了</p>

<p>するとプロジェクトに「Test」というフォルダーが出来ますので、その中の「Test.html」をダブルクリックします。<br />
ここにプログラムを書くのですが、とりあえず以下をコピペして下さい。</p>

<p>&lt;html&gt;&lt;head&gt;&lt;title&gt;Hellow World!&lt;/title&gt;&lt;body&gt;Hellow World!&lt;/body&gt;&lt;/html&gt;</p>

<p>そして、実行をクリック。<br />
<img alt="200904071.png" src="http://webinko.com/tech/200904071.png" width="212" height="140" /><br />
Hellow World! と表示された窓が出ましたね。<br />
これはプログラムというかHTMLです。けっこうテキトーみたいなんで文字を表示するだけならタグを全部とって以下でもおｋです。実行して下さい。</p>

<p>Hellow World!</p>

<p>もはやHTMLですらないですね。<br />
&lt;title&gt;の指定が無いので窓上部にはプロジェクト名の「Test」と表示されますが。<br />
こんな感じでブラウザーちっくに動きます。<br />
ではもう少しプログラムっぽいものを、以下をコピペして実行して下さい。</p>

<p>&lt;script language="JavaScript"&gt;&lt;!--<br />
Line = 4;<br />
Mess = new Array(<br />
  "昨日は大吉でした",<br />
  "あと５時間はかるく鬱になるぐらい不運です",<br />
  "そこそこでまあまあ",<br />
  "自動装填の拳銃でロシアンルーレットをしても当たらないぐらい吉"<br />
);<br />
function omikuji(){<br />
	Rnd = Math.floor(Math.random() * Line);<br />
	answer=document.getElementById('answer');<br />
	answer.innerHTML=Mess[Rnd];<br />
}<br />
// --&gt;&lt;/script&gt;<br />
&lt;FORM&gt;<br />
&lt;INPUT TYPE=button value="おみくじ" onclick=omikuji()&gt;<br />
&lt;div id="answer"&gt;&lt;/div&gt;<br />
&lt;/FORM&gt;</p>

<p>簡単なおみくじです。<br />
これでやっとミニミニガジェットぐらいにはなりましたね。<br />
このソースのLineの数とMessの中身を増やすだけでバラエティーに富んだおみくじのようなものが作ることができると思うんだ。</p>

<p>ではでは、今日はこのへんで。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Adobe Air で目立とうと思うんだ その２</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/adobe-air-1.html" />
    <id>tag:www.webinko.com,2009:/tech//5.22</id>

    <published>2009-04-04T14:10:49Z</published>
    <updated>2011-05-26T14:41:03Z</updated>

    <summary>とりあえず、adobe air 開発環境を整える手順も書こうと思うんだ。 既に解...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>とりあえず、adobe air 開発環境を整える手順も書こうと思うんだ。<br />
既に解説しているサイトもあるので、なんなんだけど、それでも私の場合下の 4),8),9),10) でどうしたらよいのか少し悩んだので、同じような目に合う人のために書き記しておこう。</p>

<p>1) adobe air をインストール<br />
　まずこれがないと何も動かないです。Adobeの公式サイトから問題なくできます。<br />
2) adobe air sdk をインストール<br />
　開発をする人はこれも必須です。Adobeの公式サイトから問題なくできます。<br />
3) aptana をインストール<br />
　HTML、JavaScriptを使ってAdobeAirのプログラムを作るのに非常に便利です。<br />
　もともとはサイト制作に使うものですがAdobeAirにも対応されたのでこれを使います。<br />
　ただし激重。というかマシンによります。<br />
4) aptanaのトップページからairのプラグインをインストール<br />
　AdobeAirのプラグインをインストールしないといけないのですが、Aptanaを起動してすぐの「マイ Aptana」の画面左下ぐらいにある「AdobeAIR」をクリックしてインストールします。<br />
5)Aptanaの日本語化<br />
　必須ではないですが、日本語化したほうが分かり易いのでして下さい。<br />
　<a href="http://mergedoc.sourceforge.jp/">http://mergedoc.sourceforge.jp/</a><br />
　ここから 安定版 1.3.0 をＤＬしてaptanaのbinにfeaturesとPluginsの中身を追加する。<br />
　ノーマルインストールなら以下<br />
　C:\Program Files\Aptana\Aptana Studio 1.2\features<br />
　C:\Program Files\Aptana\Aptana Studio 1.2\plugins<br />
6) Adobe AIR SDKをCの直下にでも置く<br />
　別にどこでもいいんですが、私はここに置きました。<br />
　C:\AIRSDK　以下にbinとかlibとかがある感じで。</p>

<p>7)何かしらプロジェクトを作成してテストして完成。<br />
　どこのサイトでも Hellow World! 的なもの作っているだろうのでとりあえずそれでおｋです。</p>

<p>8) AptanaでAdobeAIRSDKの場所を指定する。<br />
　ウィンドウ→Aptana→AIR SDKs→追加<br />
9) 証明書を作成。<br />
　ウィンドウ→Aptana→AIR Certificates→追加<br />
　Certificate Name：テキトー、Create new certificate選択、パブリッシャー名：テキトー<br />
　Country：JP、パスワード：テキトー<br />
　これをしとかないと、インストール用のファイルを作れません。（作れるけどインストールできない）<br />
　企業から正式配布するときはベリサインにお金を払ってちゃんとした証明書を作って登録しないといけないんだろうけど、とりあえず個人で配布する分にはこれでおｋです。<br />
　パスワードはインストールファイルを作るときに毎回聞かれるので覚えておくこと。<br />
10) インストール用のファイルを書き出し。<br />
　画面左上の.airをクリック。マウスオーバーで「Export Adobe AIR Package」とでるやつ。<br />
　SDK、証明書パスワードは上記で設定したものを使用。</p>

<p>これが開発環境の構築から配布用のインストールファイル作成までのまとめです。<br />
肝心の 7) の部分をはしょりましたが、ここでゆるく解説すべきか、<a href="http://higashiosaka.webinko.com/">じょいんこ</a>にでも特設ページを作って本格的に解説すべきか悩み中なんだ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Adobe Air で目立とうと思うんだ</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/adobe-air.html" />
    <id>tag:www.webinko.com,2009:/tech//5.21</id>

    <published>2009-04-04T14:10:14Z</published>
    <updated>2011-05-26T14:25:46Z</updated>

    <summary>こ、これは使える。 まずAdobeAirについて。 一言で言うと、プログラムのこ...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>こ、これは使える。<br />
まずAdobeAirについて。<br />
一言で言うと、プログラムのことなんだけど、以下のような特徴があるんだ。</p>

<p>・使う人側→AdobeAirランタイムをインストールすることで使用可能になるプログラム。<br />
・作る人側→AdobeAirSDKを使うことによって簡単に作れるプログラム。</p>

<p>作る人側から便利というのは、まったくもってどうでも良い話で、使う人がいちいちランタイムをインストールする必要があるというデメリットは毒以外の何者でもない。<br />
はっきり言って普通にインストールするだけで普通に動く普通の.exeファイルの方が良いに決まっているのだけれど、これには１つだけその不便さをカバー出来るかもしれない大きなメリットがある。<br />
それはデバイスを選ばないということ。<br />
つまり、使う側はAdobeAirのラインタイムをインストールしておけば、WindowsでもMacでもLinuxでも同じプログラムが使えるということ。<br />
「このソフト面白そうなんだけどWindows版がないんだよな?」なんてことはないんだ。<br />
これは作る側にとっても非常に便利。<br />
ちょうど同じAdobeが提供しているFlashPlayerといっしょだね。あれがブラウザの中だけではなくてデスクトップでも動くようになったもんだと思ってもらえればとりあえずＯＫなんだ。</p>

<p>で、一応作る側でもある私が触ってみたところ、非常に簡単に作れる感じ。<br />
いや、簡単なプログラムは簡単に、難しいプログラムはそれなりに、なんだけど、プログラムを作のに使える言語がActionScript、JavaScript、HTML。<br />
HTMLて。(；゜д゜)<br />
「簡単なプログラムは簡単に」の簡単さ加減が非常識。簡単すぎるのにもほどがあるだろう。<br />
てなわけで早速１つ作ってみたんだ。<br />
これはHTMLとJavaScriptで作ったよ。だから開発環境はタダだよ。</p>

<p>その前に、<br />
これを使うにはAdobeAirランタイムをあらかじめインストールしておく必要があるのでこちら。<br />
<a href="http://get.adobe.com/jp/air/thankyou/" target="_blank">http://get.adobe.com/jp/air/thankyou/</a></p>

<p>インストールが済んだ、或いは既にインストール済みの人はこちら。</p>

<p><a href="http://webinko.com/passg.air">ダウンロード<img src="http://webinko.com/img/passg.png" width="153" height="107"></a></p>

<p>パスワードを作って同時にその強度も判定するプログラムなんだ。<br />
パスワードは自分で入力しても強度を判断してくれる。<br />
って、利用シーンは稀なんで、ほんとに「私が作れたから見てみて」ぐらいの代物なんだけど。<br />
というわけで今日はこのへんで失礼します。</p>]]>
        
    </content>
</entry>

<entry>
    <title>iPhoneアプリ作って一儲けしようと思うんだ その２</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/04/iphone-1.html" />
    <id>tag:www.webinko.com,2009:/tech//5.20</id>

    <published>2009-04-02T14:09:34Z</published>
    <updated>2011-05-26T14:10:04Z</updated>

    <summary>どうやら iPhone 買って Mac　買ったら開発環境が手に入るということを知...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[どうやら iPhone 買って Mac　買ったら開発環境が手に入るということを知った。<br />現在 iPhone も iPod touch も持って無いし、MacもOS9のままで、当分買う予定もないので、この野望は終了とす。<br />日数にして２日。（早っ） ]]>
        
    </content>
</entry>

<entry>
    <title>iPhoneアプリ作って一儲けしようと思うんだ</title>
    <link rel="alternate" type="text/html" href="http://webinko.com/tech/2009/03/iphone.html" />
    <id>tag:www.webinko.com,2009:/tech//5.19</id>

    <published>2009-03-31T14:08:41Z</published>
    <updated>2011-05-26T14:30:37Z</updated>

    <summary>というわけで、何で作るのかを調べてみるとobjective-cという言語で作るら...</summary>
    <author>
        <name>webinko</name>
        <uri>http://webinko.com</uri>
    </author>
    
        <category term="不定期日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webinko.com/tech/">
        <![CDATA[<p>というわけで、何で作るのかを調べてみるとobjective-cという言語で作るらいしいことが分かる。<br />
これはMacOSXで動くものらしい。<br />
windows環境ではCygwinというものをインストールすれば開発できるそうなので早速インストール。<br />
<a href="http://www.cygwin.com/">http://www.cygwin.com/</a> のページ中央付近にある setup.exe をクリックしてダウンロード。<br />
ここを参考にしてインストール後コンパイル失敗。（´・ω・｀）<br />
<a href="http://take-blizzard.cocolog-nifty.com/blog/2009/01/objective-cwind.html">http://take-blizzard.cocolog-nifty.com/blog/2009/01/objective-cwind.html</a><br />
次にここを参考にした。<br />
<a href="http://d.hatena.ne.jp/htz/20080806/1218009392">http://d.hatena.ne.jp/htz/20080806/1218009392</a><br />
Cygwin じゃなしにコンパイルできるみたい。<br />
GNUstep（グニューステップ）というソフト。<br />
以下をダウンロード。結構時間かかる。<br />
ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/<br />
gnustep-system-0.19.2-setup.exe<br />
gnustep-core-0.19.2-setup.exe<br />
SystemPreferences-1.0.2-2-setup.exe<br />
gorm-1.2.4-setup.exe<br />
Calculator-1.0.0-2-setup.exe<br />
また失敗。<br />
でもhome/ユーザー名/にいけばよいことに気づき(cd C:\インストールした場所\home\ユーザー名)、前者の方法でとりあえずコンパイルができた。(worningがでるけど)<br />
その後、後者でもできた。コンパイルのオプションを１行で延々書かないとといけなかった。<br />
こんな感じ↓。<br />
gcc -o hello hello.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import<br />
今日はここまで。</p>]]>
        
    </content>
</entry>

</feed>

