C-limber's highへようこそ。
C-limber's highは山登りのサイトではなく、福岡システム開発WEB制作会社 C-limber(クライマー)株式会社の技術メモブログです。
福岡システム開発ホームページ制作をお探しの方はお気軽にご相談下さい。

2013年7月29日月曜日

2013年7月17日水曜日

2013年7月16日火曜日

YiiFrameworkでPDFを作成

23:46 Posted by Unknown No comments
ほぼ公式サイトと同じ内容だけど、日本語化に対応させる必要があります。

公式サイトからyii-pdf-0.3.2.zipをダウンロードし、/protected/extensionsにyii-pdfとし配置。
また、今回はmPDFを使用するので、公式サイトからmPDF version5.7をダウンロード。
/protected 配下にvendorsディレクトリを作成し、ダウンロードしたファイルをmpdfとリネームして配置した。

/protected/vendors/mpdf

/protected/config/main.php に以下の内容を追加。

'ePdf' => array(
    'class'         => 'ext.yii-pdf.EYiiPdf',
    'params'        => array(
    'mpdf'     => array(
        'librarySourcePath' => 'application.vendors.mpdf.*',
        'constants'         => array(
            '_MPDF_TEMP_PATH' => Yii::getPathOfAlias('application.runtime'),
        ),
        'class'=>'mpdf', // the literal class filename to be loaded from the vendors folder
        )
    ),
),

日本語に対応させるために、mpdf.phpを編集。
1146行目の以下の内容をコメントアウト。

/* if (preg_match('/([\-+])aCJK/i',$mode, $m)) {
preg_replace('/([\-+])aCJK/i','',$mode);
if ($m[1]=='+') { $this->useAdobeCJK = true; }
else { $this->useAdobeCJK = false; }
}*/

また、以下の1行を追加。

$this->useAdobeCJK = true;

これでOK。

Controller側

$model = $this->loadModel();
$mPDF1 = Yii::app()->ePdf->mpdf();
$mPDF1 = Yii::app()->ePdf->mpdf('ja', 'A4');
$mPDF1->WriteHTML($this->renderPartial('index', array('model'=>$model), true));
$mPDF1->Output();

これでPDFが作成される。



2013年7月11日木曜日

スマホ用画像の圧縮について

14:33 Posted by 匿名 No comments
サイトのレスポンスの良さ、これは特にスマートフォンサイトでは求められてくる部分だと思います。

画像のクオリティを許容範囲まで維持しつつ、ぎりぎりまで画像容量を減らす。

そんな作業にばっちりのサイトを見つけました。

PNG Minimizer

300kの画像が50kぐらいまで容量落ちます。

すごいツールです。感謝。



2013年7月10日水曜日

ubuntuのapt-getとaptitudeの違い

23:28 Posted by 匿名 No comments
aptitudeで構築したサーバとapt-getで構築したサーバが混在してきて、気持ち的に超めんどくさくなったので調べました。

apt-getとaptitudeの違い

とてもわかりやすい解説
2.2.1. apt-get/apt-cache と aptitude の比較

aptitudeの方がapt-getより便利にパッケージの依存関係を解消してくれるみたいですが、
メモリの消費量が多く、重いとのこと。
あとaptitudeでエラーが出るようだったら、apt-getを使うようにと書いてあります。
それで最も大事な事は、
apt-getとaptitudeはlenny以降混在OK!
との事。

なるほど。すっきりした



2013年7月9日火曜日

gitのブランチのpushで本番環境とテスト環境への反映を切り替える

11:27 Posted by 匿名 , No comments
gitの自動デプロイの話

[作業目標]
pushされたものに対して、
branchで判別して処理を分岐、
テスト環境、本番環境へのデプロイを自動化します

レモートのbareリポジトリの直下にhooksというディレクトリが生成されているので、中身を見ます。

pushに対して処理する時は、
post-receive
post-update
というファイルを作ってその中にシェルスクリプトを書いて処理します。

処理の順序は、
1. post-receive
2. post-update
の順番で処理されます。

それぞれのファイルの使い方は、

branchによる分岐が無い場合、
post-receive に処理を記述。

branchによる処理分岐がある場合、
post-update に処理を記述。
(分岐しない処理もpost-updateにはかけます)

今回はbranchで処理を分岐するのでpost-updateに処理を記述する。

[概要]
git push origin master => テスト環境のみに反映
git push origin master:product => 本番・テスト両方に反映

[前提]
本番・テスト環境にgit のリポジトリを生成済

[注意]
それぞれの環境がpullする際のディレクトリ構造は適宜に変更してください
作成したpost-update, post-receive は かならず実行権限を与えてください(これで結構はまりました)

#!/bin/sh
#ブランチ名の取得
branch=$(git rev-parse --symbolic --abbrev-ref $1)
# 本番・テスト環境へ反映
if [ "$branch"  = "product" ]
then
        cd /home/product_user/public_html
        git --git-dir=.git pull ../repo/repo.git product:master
        # テスト環境にも反映
        cd /home/test_user/public_html
        git --git-dir=.git pull ../repo/repo.git product:master
        # リモートのbareリポジトリのmasterブランチとproductブランチを入れ替える
        cd /home/repo_user/repo/repo.git
        git --git-dir=../repo.git symbolic-ref HEAD refs/heads/product
        git --git-dir=../repo.git branch -d master
        git --git-dir=../repo.git branch -m product master
fi

# テスト環境のみへ反映
if [ "$branch" = "master" ]
then
        cd /home/test_user/public_html
        git --git-dir=.git pull ../repo/repo.git master
fi

exec git update-server-info


[ちょっと補足説明]
●bareリポジトリはディレクトリ自体が、○○.gitとなっていて、内部に.gitファイルと持ちませんので、
git --git-dir=../repo.git symbolic-ref HEAD refs/heads/product
として、gitディレクトリにrepo.git自身を指定してgit 命令を実行しています。

●bareリポジトリのbranchの切り替えはcheckoutが使えない
bareリポジトリはworking treeではないらしく、checkoutつかってブランチを切り替えようとするとエラーがでます。
そこで、直接参照を切り替えています。
git symbolic-ref HEAD refs/heads/product
これでbareリポジトリのmasterブランチからproductブランチにcheckoutする事が出来ました。


2013年7月8日月曜日

EC2で標準時間の変更(UCT -> JST)

18:55 Posted by 匿名 No comments
標準ではUCTに設定されています。

それをUCTかJSTに変更する場合、

# 初期設定はUTC
$ date
Mon Jul  8 8:31:49 UTC 2013
 
# 日本の zoneinfo をコピー
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
 
# 確認
$ date
Mon Jul  8 17:31:49 JST 2013

webのソースをコピペする場合

10:46 Posted by 匿名 No comments
コピペしたものに改行が含まれている場合、

設定ファイルが読み込めない場合があるので要注意

vsftpdでpasv_modeが動かなくてvsftpd.confを見ても異常なし。

もしかしたらコピペした際の改行コードが影響して、
その行を読み込めてないかもしれないと思って、
その行をvimで直接手打ちしてみたら、pasv_modeが見事通りました。

webからソースをコピペして、それをvimで貼り付けたりする場合、注意が必要です。


2013年7月6日土曜日

git fetchの使い方

19:03 Posted by 匿名 No comments
備考録です。
参考:transitive.info - git fetch 使い方

■リポジトリから変更を取得してマージしない

○マージしないで変更を取得だけしたい場合
git fetch

○細かく制御したい場合は引数を与える
git fetch  


■リモートリポジトリから変更を取得する

○リモートリポジトリ remote_rep から変更を取得するには
git fetch remote_rep

○すべてのリモートリポジトリから変更を取得するには「–all」オプション
git fetch --all


■他のリポジトリのブランチを取得してローカルのブランチにする

にあるブランチ branch を 取得し、ローカルのブランチ local_branch として保存する
git fetch git://example.com/rep.git branch:local_branch


■fetch で取得したコミットを扱う

git fetch で入手したコミットの先頭は FETCH_HEAD で扱える。

○ログを見る
git log FETCH_HEAD

○diffをとる
git diff FETCH_HEAD

○調べて問題がなければマージ
git merge FETCH_HEAD

phpでcurlを有効にする

16:57 Posted by 匿名 No comments
Call to undefined function curl_init()ってエラーが出たらcurlが有効になっていません。

cURLはカールって読みます。

そもそもcURLって何か?
====================
PHP PRO: CURLのセッションを引き継ぐ方法
WebサイトのHTML情報を取得する際にcurlを使用することがあります。curlとはWebブラウザのコマンドライン版のようなもので、与えられたコマンドを元にページ情報を取得する機能です。curlを使用すれば、ログインフォームにPOSTでデータを渡してログイン 処理を行い、ログイン後のページ情報を取得するようなことも可能です。
====================
コマンドラインからのURL=>ページ情報の取得に使うということですね。

インストールコマンド
$ sudo apt-get install php5-curl

使う場合はphp.iniに
extension=curl.so
を追記。

セッションを引き継いで、ログイン後のページ情報を抜き取る事まで出来てしまうようですね。


2013年7月2日火曜日

apache2でphpを有効にする

4:14 Posted by 匿名 No comments
AddTypeとかをhttpd.confに書き込むんではなく、 /etc/apache2/mods-available/php5.confの

<ifmodule mod_userdir.c="">
    <directory home="" public_html="">
#        php_admin_value engine Off ←この行をコメントアウト!
    </directory>
</ifmodule>

です。