2014年10月18日土曜日

cakephp 中間テーブルの命名規則

中間テーブルの命名規則で右往左往したのでメモ

cakephpの中間テーブルの命名規則


複数形をアンダースコアでつなぐ
順番はabc順

「ユーザー」と「趣味」を多対多の関係で表現する場合

interests_usersとなる

modelの命名規則

複数形 + アンダースコア + 単数でつなぐ
順番はabc順

modelは単数なのでモデル名の末尾は単数にする
中間テーブルの一つ目の名称は複数のままにする
interests_user.php

インスタンスの命名規則

アッパーキャメルで複数 + 単数
InterestsUser




2014年10月14日火曜日

cakephp saveAllの仕様

オプションでvalidate onlyとした時、IDの補完はしない

save Allの便利な機能の中に、リレーションを張るとidを保管してくれる機能があります。
しかし、確認画面を挟むなどの理由でバリデーションだけをしたい時に、validatesをonlyとしてしまうと、idの補完は行われません。

なので、そのIDに依存するバリデーション条件が設定されている場合は、必ずエラーに成ってしまうので気をつけないといけません。

User hasone UserInfo

$data = array(
    'User' = array(
        'name' => 'waldo',
        'tel'     => 0123456789,
    ),
    'UserInfo' = array(
        'prefecture' => 'hokkaido',
        'city'           => 'sapporo',
    ),
);
       
$this->User->saveAll($data, $options);

この場合、UserInfo.user_idにinsertしたデータのUser.idが補完されてsaveされます。

$options = array('validates' => 'only');
$this->User->saveAll($data, $options);
とした場合は、上記の補完が適用されないため、user_idの存在の確認や、市外局番と住所の不一致などのバリデーションをuser_id経由で行えなくなります。(user_idが無いというエラーが出ます)

同様のことは
$options = array('validates' => 'first');
とした時にも一度onlyでバリデーションチェックをするので発生しますので注意してください。

解決方法

saveAllを使わない

idを補完したいということならsave後に$this->User->idでinsertしたIDを取得できるので、自前でsaveAll的なメソッドを作ってしまう。
逐一、unsetなどができて自由度が高い。

atomic => false で外部トランザクションをかけて毎回ロールバックする

楽ちんだが、オートインクリメントされていくので、IDが飛び飛びになってしまう

UserInfoバリデーション時にUserのPOST値を見に行く作りにする

UserInfoだけ追加でinsertしたい、updateしたいなどの時に、別途バリデーションを作らないといけない。冗長な作りになってくる



2014年10月13日月曜日

マージしたコミットを戻す git revert -m 1 と git revert -m 2 の違い

マージコミットのrevertで後ろにつける引数について、ネット上を探してもなかなかまとまっているページがなかったので、まとめます。

参考
http://blog.toshimaru.net/git-revert-mainline/

そもそもマージしたコミットの逆差分を作るには?
オプションで -m を指定します。今回はその後ろにつける1,2の引数についてです

git revert -m 1

マージをした側に戻すように差分をつくる
基本的に使うのはこっちが多い

git revert -m 2

マージされた側に戻すように差分をつくる

実際にやってみる

[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git checkout -b merged
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ git add .
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ git commit -m 'このブランチをマージする'

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git checkout master
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git checkout -b base
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git add .
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git commit -m 'このブランチでマージコマンドを打つ'
 
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git merge merged
Auto-merging test.php
Merge made by the 'recursive' strategy.
 test.php | 4 ++++
 1 file changed, 4 insertions(+)
 
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    25605e9  (HEAD, base) Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする    (<= 2に相当)
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ   (<= 1に相当)
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$


git revert -m 1でrevertする

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 1 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    fe81bcd  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 4e1dfd0       baseブランチ側とは差分がない
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 5e19ce5      mergedブランチ側と差分がある
 test.php | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

git revert -m 2でrevertする


[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 2 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    1b77f6a  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 4e1dfd0   baseブランチ側と差分がある
 test.php | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 5e19ce5    mergedブランチ側とは差分がない

git reset のオプションについて --soft --hard --mixedの違い

rd : 差分は破棄される(indexとworking treeも戻る)
mixed : add前の状態で保持されている(working treeが保持)
soft : add状態で保持されている(indexも保持)

参考

http://d.hatena.ne.jp/murank/20110327/1301224770


用語の補足

HEAD:コミット状態
index:addした状態
working tree:add前の変更分

[uenoryouichi@ueno-MacBook-Air:git_study](master)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git add test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git status
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ glog
*       Ryoichi Ueno    f410859  (HEAD, master) second                ←HEAD
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)                                   ←index
 
     modified:   test.php
 
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
 
     modified:   test.php                                                                    ←working tree



http://d.hatena.ne.jp/murank/20110327/1301224770 より引用


この状態でそれぞれどのような動きになるか試してみましょう
git reset --soft HEAD
git reset --soft HEAD^
git reset HEAD
git reset HEAD^
git reset --hard HEAD
git reset --hard HEAD^

git resetとgit revertの基本

コードを過去に戻すgit resetとgit revertの違いについて解説します。

ソースを切り戻す時、resetなのか?revertなのか?gitに慣れていないメンバーが多いこともあり、しっかり理解することで安心して切り戻しなどの作業をみんなができるようになると良いなと感じたことから記事にさせていただきました。

はじめに

コードの中にこちらのaliesが使われていますので記載します。

alias glog='git log --graph --all --format="%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta)%d%Creset %s"'


resetとrevert

利用シーン
過去に戻る。
コミットした差分を修正したい

resetの基本

「指定したコミット位置までHEADの位置を戻す」

revertの基本

「指定したコミットの逆差分を作成する」

よくある切り戻しのシーン

バグが有るコードをリリースしてしまった。orz
リリース前のコードに戻したい!!

どちらが正しいでしょう?
git resetを使って、前回リリースした位置まで戻す!
git revertを使って逆差分で上書きする!


正解はもちろん「git revertする」です。

revertによる切り戻し手順

revert -m 1 <commit hash>でマージコミットの逆差分を作ります(-m と 1 については下方で解説します。)
 ※切り戻し自体はgithubのwebUIによる操作もできるようになりました(下方に記載)

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 1 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    fe81bcd  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit

reset使っちゃいけない理由

gitの概念として歴史を改変してはいけない。
誰かが誤ったコミットの歴史を間違って保有している可能性がある。→デグレのリスクが生じる。
存在しないコミットから分岐したブランチが作られる可能性がある。→PRを送れないorデグレのリスク

例)
master_resetで7d71e00 をリリースしました。前回リリースは cdf4505
修正するためにresetで戻した場合(ダメなパターンです)
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ git reset --hard cdf4505
HEAD is now at cdf4505 hogehogehogehoge
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ glog
*       Ryoichi Ueno    7d71e00  (master_reset) miss!!!!!
*       Ryoichi Ueno    cdf4505  (HEAD, recover_reset) hogehogehogehoge
*       Ryoichi Ueno    b3bd9c4  hogehogehoge
*       Ryoichi Ueno    44515ea  hogehoge
*       Ryoichi Ueno    1b4f700  hoge
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ git push -f origin master

おさらい

resetの基本
「指定したコミット位置までHEADの位置を戻す」
revertの基本
「指定したコミットの逆差分を作成する」

2014年7月14日月曜日

GAS のgoogle analytics API で正規表現のフィルターをかける


連投となりますが
analytics APIを使う時に正規表現をどうやって使うかに困ったので記しておきます。

前回の投稿
google apps scriptのAnalytics APIでページのURLで絞り込む方法

やりたかったこと

  1. analytics APIのフィルターを正規表現で表現したかった

参考にしたページ





やり方

正規表現は`==`ではなく`=~`でマッチさせる


/*
 * 参考にしたページの8-10行目
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:keyword==keywords'   // 取得したいキーワード
};

/*
 * フィルタをページにする
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath==/2014/03/iclustaphpmyadmin.html'   // 指定のページ
};

/*
 * フィルタを正規表現にする 
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath=~/2014.*'   // 2014投稿のページ
};



GASのAnalytics APIでページのURLで絞り込む方法



久しぶりの更新です

最近GASことgoogle apps scriptにはまっています。
analytics APIを使う時にページのURLを指定して抽出条件を絞る方法を紹介します

やりたかったこと

  1. analyticsのデータを取得する際に特定のページの情報を取り出したかった

参考にしたページ


やり方

特定のページの情報はfilterにpagePathで指定する

/*
 * 参考にしたページの8-10行目
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:keyword==keywords'   // 取得したいキーワード
};

/*
 * フィルタをページにする
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath==/2014/03/iclustaphpmyadmin.html'   // 指定のページ
};


オプション設定で正規表現を使う方法も書きましたので参考にしてください
google apps script のgoogle analytics API で正規表現のフィルターをかける

2014年3月2日日曜日

iCLUSTAサーバーでphpmyadminを導入する

iCLUSTAサーバーでphpmyadminを導入する

iCLUSTAでデータベース管理のために便利なphpmyadminを導入する手順です。

cakephp絡みでmySQLをiCLUSTAで使用するための方法は以前に書いていますのでそちらを参考にするとよいと思います。
iCLUSTAサーバーでcakephpを使ってMySQLに接続
今回はphpmyadminの設定部分加筆しました。

はじめにまとめ

MySQLを使うには?

標準ではDBサーバー使用できないので、
アカウントマネージャーでデータベースを申し込む(無料です)

phpMyAdminをインストールするには?

公式サイトからダウンロードしてサーバーにup
configでログインの設定をする

1、MySQLを使用可能にする

  • そのままでは使えません
  • GMOクラウドのアカウントマネージャーに行く
  • 右上にあるログイン画面からログインする
  • 各種手続き=>サービスに関する手続き=>オプション申込み=>契約してるプランを選択
  • 追加項目の「無料データベース(MySQL)」を選択=>次へ
  • この後、案内にしたがって進むと申し込みができる。

注意点

  • 一度に一つのデータベースしか申し込めないので、複数個作る時には上の操作を何回か行う必要がある
  • 申し込みから開設まで1日くらい時間がかかる

2、phpMyAdminのインストール

  • phpMyAdminの公式サイトから最新版をダウンロードする
  • 解凍してFileZillaなどを使ってphpmyadminフォルダをサーバーの直下に配置
  • config.inc.phpを作成する。(config.sample.inc.phpからコピー)

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/*
 * phpMyAdmin configuration storage settings.
 */

/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';


  • こちらの値をを書き換えます。
  • 値については プランマネージャー=>ユーティリティ=>データベース設定を参照してください

/* 
 * ホストを設定
 * データベースサーバーに続けてポート番号
 * 例 サーバー名:mysql500.in.shared-server.net
 *    ポート番号:5555
 */

$cfg['Servers'][$i]['host'] = 'mysql500.in.shared-server.net:5555';


/*
 * ホスト、ユーザー、パスワード設定
 */

$cfg['Servers'][$i]['controlhost'] = '上と同じ';
$cfg['Servers'][$i]['controluser'] = 'データベース名';
$cfg['Servers'][$i]['controlpass'] = '自分で設定したパスワード';

  • 作成したconfig.inc.phpをphpmyadminフォルダにup
  • ブラウザからサーバーにアクセスする(www.*******.jp/phpmyadmin)
  • ログイン
これでphpMyAdminが使えるようになります。自分は、ローカルではmampを使っているのでこれが一番使いやすいです。
wordpressのDBも生データを取得するときはmyadminがあると便利です

2014年2月16日日曜日

jQuery チェックの有無でテキスト入力のdisabledを制御する


チェックボックスやラジオボタンでその他にチェックが付いている時のみテキストへの入力を許可する


前提

<input type="radio" value="1" id="PayDescription1" name="data[Pay][Description]" />
<label for="PayDescription1">食費</label>
<input type="radio" value="2" id="PayDescription2"name="data[Pay][Description]" />
<label for="PayDescription2">交通費</label>
<input type="radio" value="3" id="PayOther" name="data[Pay][Description]" />
<label for="PayOther">その他</label>
<input type="text" name="data[Pay][OtherText]" id="PayOtherText" />

$(function(){
    $("#PayOther").change(function(){                                                                                                                  
        if ($("#PayOther").is(':checked')){                                                                                                            
            $("#PayOtherText").prop('disabled', false);                                                                                                
        } else {                                                                                                                                                                                        
            $("#PayOtherText").prop('disabled', true);                                                                                                 
        }                                                                                                                                                                                               
    }).change();                                                                                                                                                                                        
})


<input type="checkbox" value="1" id="PayDescription1" name="data[Pay][Description]" />
<label for="PayDescription1">食費</label>
<input type="checkbox" value="2" id="PayDescription2"name="data[Pay][Description]" />
<label for="PayDescription2">交通費</label>
<input type="checkbox" value="3" id="PayOther" name="data[Pay][Description]" />
<label for="PayOther">その他</label>
<input type="text" name="data[Pay][OtherText]" id="PayOtherText" />

$(function(){
    $("#PayOther").change(function(){                                                                                                                  
        if ($("#PayOther").is(':checked')){                                                                                                            
            $("#PayOtherText").prop('disabled', false);                                                                                                
        } else {                                                                                                                                                                                        
            $("#PayOtherText").prop('disabled', true);                                                                                                 
        }                                                                                                                                                                                               
    }).change();                                                                                                                                                                                        
})



2014年2月15日土曜日

ruby on rails導入(1) macportsのエラー 「configure: error: Can't find Tcl configuration definitions」


ruby on railsの勉強をするためにインストールをしようと思ったのですが、
Ruby Version Manager (RVM) を使ったインストールで詰まった場所があったのでメモ
ちなみにruby on railsのインストールはこちらのページを参考にしています。

ruby on railsチュートリアル

エラーはこれです。
マックポート(3段目からのmacports......)のインストールでエラーになっているようです。
configure: error: Can't find Tcl configuration definitions

$ ueno-MacBook-Air:~ uenoryouichi$ rvm install 2.0.0 --with-openssl-dir=$HOME/.rvm/usr
Checking requirements for osx.
Installing macports.....................
Error running 'requirements_osx_port_install_port',
showing last 15 lines of /Users/uenoryouichi/.rvm/log/1392450974_ruby-2.0.0-p353/port_install.log
checking for fgetln... yes
checking for lockf... yes
checking for flock... yes
checking for setmode... yes
checking for strcasecmp... yes
checking for strncasecmp... yes
checking for strlcpy... yes
checking for copyfile... yes
checking for clearenv... no
checking for sysctlbyname... yes
checking if readlink conforms to POSIX 1003.1a... yes
checking CommonCrypto/CommonDigest.h usability... yes
checking CommonCrypto/CommonDigest.h presence... yes
checking for CommonCrypto/CommonDigest.h... yes
checking for Tcl configuration... configure: error: Can't find Tcl configuration definitions
Requirements installation failed with status: 1.
ueno-MacBook-Air:~ uenoryouichi$ Downloads - Developer Tools - Xcode 3.2.1 Developer Tools
-bash: Downloads: command not found


調べました。英語のページですが同じような質問していました。
http://stackoverflow.com/questions/19622337/cant-update-macports-with-mac-os-x-mavericks

ここで書いてあることは、
まず、Command Line Toolsを導入する
$ sudo xcode-select --install

そしてポートをアップデートする。
$ sudo port -v selfupdate

これで、OKです。

2014年2月10日月曜日

sugarsyncからの移行先について ランサーズ×Questantでアンケートを取ってみた

なぜアンケートとるか

有償版のみとなってしまうsugarsyncからの移行先を決めたい

前の記事
sugarsyncが2/8を持って無料版終了します

ランサーズってなに?

フリーランスと発注者を結ぶプラットフォーム
今回はタスク形式で依頼しました。

Questantってなに?

株式会社マクロミルが提供するアンケート作成・集計ツール100件まで無料なので
こちらを利用しました。操作性やデザインなどイケてます


ランサーズでのタスク依頼作成

1、会員登録
2、仕事を依頼するボタン押す
3、タスク→アンケート・モニター→タスク方式
4、必要事項記入(依頼金額や件数など)
5、(難しい)テンプレート作成
ここが難しいです。HTML書くって裏ワザは有りますが、時間かかります。
自分は確認のための文字列を入れてもらうテキスト入力画面、確認事項のチェックボックス、Questantへのリンクを作りました。


*注意点
ランサーズでは依頼内容が明らかにならない依頼は禁止されているので、内容を出来る限り明らかにして依頼をする。

Questantでのアンケート作成

1、会員登録
2、アンケート作成
3、質問事項の記入
ビジュアル的にも操作感的にもイケてます。直感的に出来ました。
質問を追加で質問入力画面に

色々な入力フォームから選んで
質問事項と回答項目を記入する。これで作成できます。

4、フォームの確認


回答の集計と確認

マイアンケートの結果から集計結果をビジュアル的に見ることができます。


わかったこと

よく使われているクラウドストレージはDropbox



ほとんどの人は無料で使っている



大容量のクラウドストレージはあまり使われていない

自分の移行先方針

研究室のデータが必要なくなったので、取り敢えず必要な分をまずDropboxへ
ドキュメントとか残りの分はSkyDriveへ
書くファイルはevernoteでも保存ですかね。

DropBoxは広く使われているだけあってソフトが充実している。決め手はここですね

まとめ

ランサーズを使うことで寝てる間に30件、途中から速度が落ちたけど4日で約50件のデータ集められました。かかった費用は750円(15円×50)で安いものです。
ちなみにQuestantでアンケート作成してSNSで拡散させれば費用は無料!ただ、幅広い層にアンケート回答して欲しい場合はランサーズのようなサイトで依頼するのが賢いでしょう。

それにしてもみんな課金していないんですね。ちなみに自分はevernoteは年間プランで契約しているので4000円支払っています

2014年2月8日土曜日

sugarsyncが2/8を持って無料版終了します

2009年から長らくお世話になっていたsugarsyncが無料版を終了して、 有料版のみの提供となります。期限は2/8まで、 オンラインストレージにお金を使うほどでは無いので、 別のサービスに乗り換えたいと思って調査しています。 ちなみに日本のsugarsyncユーザーで2010/12/13以降に登録した人は本社に直接ではなく、 日本の代理店を通じた契約になっているみたいで、対象外だそうです。 ここでログインする人はまだ無料で使えます。
さてどうしようかな~

2014年1月21日火曜日

github導入まで

以前は、Eclipseのプラグインでgitを使っていましたが、vimを使い始めるにあたりgit本来の使い方を復習したのでまとめます。

参考にしたのは
Git-使いはじめる-Gitのインストール
開発ツール徹底攻略(技術評論社)
最速で Git を Mac にインストールして基本的なコマンドを使う方法

手順
インストール

まずはここからDownload the installers hereというリンクをクリック!
GUIインストーラーをダウンロード
チョメチョメと進んでいくとインストール完了

初期設定
gitさんにこんにちは。お名前とメールアドレス登録教えてあげます。
ホームディレクトリ( ~/* )で有効にしたいので --global オプションを使っています。

$ git config --global user.name "********" 名前
$ git config --global user.email "********" メールアドレス
cat ~/.gitconfig 
[user]
 name = ********
 email = ********@******

git管理の対象のディレクトリに移動してリポジトリ作る

$ cd ~/aaa/bb/ccc/   リポジトリを作るディレクトリへ
$ gut init
これで.gitという隠しディレクトリが生成されます
コミットする

$ git add 
$ git commit -m "コメントを書いてください" 

変更確認する

$ git diff

差分が見れるようになるので楽しいですね。
+が追加されたもの(正確には変更後?)
ーが削除されたもの(正確には変更前?)

簡単ですがこんなところです。

他にgit logコマンドとか.gitignoreファイルとかは使ってますが、
まだまだブランチ-マージは使えてないです。

次回はここからGitHubを設定したのでそこちょっと触れていきます

2014年1月19日日曜日

iCLUSTAはphp-5.3.17 配列構造の短縮構文は使えない

久しぶりの更新です。
現在は家計簿アプリのcakephp化を実施しています。

ホームページのサーバーとしてiCLUSTA+を使っていますが、バージョンを意識することがあったので、メモとして記しておきます。

「phpのバージョンはphp-5.3.17」

なぜ調べたかって言うとcakeに書き換えている時に配列構造を

array(
    配列を記述
)


ではなく

[
     配列を記述
]


の短縮構文で書いていて、エラーが出たから。ちなみに配列構造の短縮構文はphp-5.4から使えます。array()に慣れてるわけじゃないから自分としては見やすいので、こっちで書きたいんだけどな。 次回以降、cake関連でいろいろ更新再開します。 あとvim使い出したのでその設定とか