鹿駆動勉強会に参加しました

鹿駆動勉強会に参加しました。

初のLTということで緊張しましたが、スタッフ・ご参加の皆さんのおかげで楽しい勉強会となりました。

私が発表したのは「PHPフレームワークKohana」についてです。スライドをアップしました。
PHPフレームワークKohana

PHPフレームワークKohana:ビューに変数をセットする

Kohanaのビューを表示するにはテンプレートファイルを作成してコントローラーに以下のように記述します。

$view = View::factory('index');  // テンプレートファイルが view/index.php
$this->response->body($view);

さらにビューの中に変数の値をセットしたい場合はこう書きます。

$view = View::factory('index')
   ->set('user','太郎'); // 変数$userに'太郎'をセット

ビューファイルには$userという変数名になります。

<?php echo $user; ?>

set()と同様にbind()も使えます。
set()が値渡しであるのに対して、bind()は参照渡しです。

$view = View::factory('index')
   ->set('user','太郎'); // 参照渡しで$userに'太郎'をセット

bind()は参照渡しなので以下のように定数を渡したりするとエラーになります。

$view = View::factory('index')
   ->set('result',true); // trueは参照渡しできないのでエラーになる

MySQL勉強会in大阪(第2回)

MySQL勉強会in大阪(第2回)に行ってきました。

高可用性を実現するシステム
レプリケーション
 ・マスター・スレーブ構成で参照性能を向上させる
 ・バックアップにも使える。但し、スレーブをそのままバックアップにするのはNG。スレーブを止めてフルバックアップをとる。
 ・MySQL5.5からは準同期レプリケーションが使える。

mySQL+DRBD
 ・linux専用・・・ノード間データコピー

3rdベンダー製HAソフト使用
 ・共有ディスクにデータを保存

4.MySQL Cluster
 ・マルチサイト・クラスタリング
   データセンターを跨いだレプリケーション
   同期レプリケーション(ネットワーク品質はかなり高いものが必要)
 ・シェアードナッシング型クラスタ・・・共有ディスクを使わない
   データをデータノードに分散&ミラーリングすして格納する。
 ・MySQL Cluster 7.2はJoin性能もアップ
 ・NoSQL memcachedAPI対応
   トランザクション対応キーバリューストア
   MySQLに対応&レプリケーション対応のKVSとして使える

mysqlnd_ms
mysqlnd(MySQL native driver for PHP)
 ・PHPのmysql(i)拡張PDO_MySQLより早い
 ・商用OKなライセンス

mysqlnd_ms
MySQL向けロードバランサ
PHPから送られてきたクエリを更新か検索かで判断してマスター・スレーブに自動的に振り分ける

CentOS6.2にPHP5.3.9とMySQL5.5を導入
http://myhome.munetika.mydns.jp/ossdbwiki/index.php/CentOS6.2%E3%81%ABPHP5.3.9%E3%81%A8MySQL5.5%E3%82%92%E5%B0%8E%E5%85%A5

—-
TODO:
NoSQL memcachedAPI使ってみる
kohanaでmysqlndが使えるか確認する

macOS : Lionにemacs 23.3bをインストール

先日書いたDropboxでemacsの設定を共有ですが、もう1台のmacとも設定を共有しようとしたらエラーが出ました。

emacsのバージョンが合っていないと駄目みたいなので、brewで23.3にアップデートします。

brew install --cocoa emacs

これでいけるはずが、何故かこんなエラーが・・・。

curl: (22) The requested URL returned error: 404
Error: Failure while executing: /usr/bin/curl -f#LA Homebrew\ 0.8\ (Ruby\ 1.8.7-249;\ Mac\ OS\ X\ 10.7.2) http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3.tar.bz2 -o /Users/nakau/Library/Caches/Homebrew/emacs-23.3.tar.bz2

原因はここで解りました。
homebrewにバグが合ったようです。

cd `brew --prefix`
git reset --hard FETCH_HEAD

homeberwをバグの無い状態にして再度実行します。

brew install --cocoa emacs
・・・
==> Summary
/usr/local/Cellar/emacs/23.3b: 3583 files, 94M, built in 5.8 minutes
# インストールが終わったらアプリケーションフォルダにコピーする 
cp -a /usr/local/Cellar/emacs/23.3b/Emacs.app /Applications/

Dropboxでemacsの設定を共有

Dropboxでemacsの設定を共有する方法です。

ユーザディレクトリの.emacs.dには以下のファイルを作成します。

/.emacs.d (~/.emacs.d)
  init.el

※auto-saveファイルの保存先など、マシンごとに独立しているべきディレクトリと設定ファイルはここに置きます。

Dropboxの共有ディレクトリに.emacs.dフォルダを作成します。
Dropboxの共有ディレクトリの.emacs.dには以下のファイル/ディレクトリを作成します。

/.emacs.d(Dropbox共有でディレクトリ内)
  /elisp   --- elispインストール用ディレクトリ※
    init.el  --- 共通設定ファイル
    init-windows.el  --- Windows用設定ファイル
    init-macos.el  --- mac用設定ファイル

※異なるアーキテクチャ間でelcを共有すると問題が出るかもしれないが、今のところ使えているので簡単のためにelispディレクトリは1つにする

ユーザディレクトリの.emacs.d/init.elの記述

;; Dropboxの共有ディレクトリにおいた.emacs.dのパスを定義
(setq dropbox-emacs-dir "c:/Users/hoge/Dropbox/.emacs.d")

;; Dropboxのinit.elを読み込む
(load (concat dropbox-emacs-dir "/init"))

Dropboxの.emacs.d/init.elの記述

;; LOAD-PATHとしてDropboxのelispディレクトリを読み込む
(setq load-path (cons (concat dropbox-emacs-dir "/elisp") load-path))

;; OSごとに異なる設定ファイルを読み込む
(cond
 ((eq window-system 'w32)
  (load (concat dropbox-emacs-dir "/init-windows")))
 ((or (eq window-system 'ns) (eq window-system 'mac))
  (load (concat dropbox-emacs-dir "/init-macos"))))

;; install-elisp.el
;; install-elispのディレクトリ先をDropboxのelispディレクトリにする
(require 'install-elisp)
(setq install-elisp-repository-directory (concat dropbox-emacs-dir "/elisp/"))

; auto-install.el 
;; auto-installのディレクトリ先をDropboxのelispディレクトリにする
(require 'auto-install)
(setq auto-install-directory (concat dropbox-emacs-dir "/elisp/"))

mac OS X:LoginHookとLogoutHookを使って起動音を消す

mac OS X 10.7 Lionでジャーンという起動音を消す方法。
厳密にはログアウトするときに音量をミュートし、ログインしたときにミュートを解除する。

まずLoginHookとLogoutHookが設定されているが確認する
sudo defaults read com.apple.loginwindow LoginHook
sudo defaults read com.apple.loginwindow LogoutHook

何かHookが設定されていればHookスクリプトのパスが表示されます。
何も設定されていないときは
The domain/default pair of (com.apple.loginwindow, LoginHook) does not exist
と表示されます。

既にLoginHook,LogoutHookに何か設定されていたら、それぞれスクリプトに以下の記述を追加します。
※scriptは#!/bin/bashを想定しています。違う場合は適宜変更する。

LoginHookに追記

osascript -e 'set volume with output muted'

LogoutHookに追記

osascript -e 'set volume without output muted'

これで完了。

LoginHook,LogoutHookに何も設定されていなければ、ログイン用とログアウト用のスクリプトを作成します。
ファイルの位置はどこでもよい。

vi /path/to/login.sh

#!/bash/bin
osascript -e 'set volume without output muted'

vi /path/to/logout.sh

#!/bash/bin
osascript -e 'set volume with output muted'

それぞれ保存して保存して実行権限をつけます。
chmod +x /path/to/login.sh
chmod +x /path/to/logout.sh

ログイン・ログアウトのHookを設定します。
sudo defaults write com.apple.loginwindow LoginHook /path/to/login.sh
sudo defaults write com.apple.loginwindow LogoutHook /path/to/logout.sh

WordPress:Zen-Codingプラグイン

昔はTextile入力が嫌いだった(データに余計な文字が入るので)けど、もういろいろ面倒なのでマークアップしたい。
Wiki記法プラグインを入れようと思った。

WordPressのWiki記法プラグインは沢山あるけれど、私として外せないポイントはシンタックスハイライターと干渉しないこと。
まあそれ以外はなんでもいい。

シンタックスハイライターはSyntax Highlighter for WordPressを使っています。
何個か試したんだけど、ぴったりなのが無い。。。

[]で囲むタイプはSyntax Highlighterと干渉するし、そうじゃないのは投稿とは別にWiki固定ページを作るタイプが多い。
([]で囲むものでもPHP MarkUp方式ならSyntax Highlighterのタグを

をで囲むことで上手く動く。けどそれも面倒)

捜すのに疲れたので、方向転換してWP Zen-Codingを入れてみた。

これはとても素晴らしい。

Zen-Codingをもっとマスターしたくなった。

WordPress:SSHでWordPressを更新する

WordPress3.1.1/CentOSです。

WordPressで画面からプラグインのインストールを行うのにFTPとFTPS接続が使えるのですが、サーバの都合でSSHが使いたかったので、その設定メモ。

phpからssh2が使えれば、wordpressの設定画面にSSHが使えるようになるらしい。
そのためにpeclでssh2をインストールする。

pecl install ssh2

エラーが出た。
Failed to download pecl/ssh2 within preferred state “stable”, latest release is version 0.11.3, stability “beta”, use “channel://pecl.php.net/ssh2-0.11.3” to install
install failed

言われる通りにchannnelを指定してもエラーになるのでwgetで取ってくる。

wget http://pecl.php.net/get/ssh2-0.11.3.tgz
pecl install ssh2-0.11.3

またもエラー
checking for ssh2 files in default path… not found
configure: error: The required libssh2 library was not found. You can obtain that package from http://sourceforge.net/projects/libssh2/
ERROR: `/var/tmp/ssh2/configure –with-ssh2′ failed

libssh2を入れる。
yum install libssh2 libssh2-devel

もう一度pecl install。これでやっとインストールされた。
pecl install ssh2-0.11.3

Build process completed successfully
Installing ‘/usr/lib64/php/modules/ssh2.so’
install ok: channel://pecl.php.net/ssh2-0.11.3
configuration option “php_ini” is not set to php.ini location
You should add “extension=ssh2.so” to php.ini

ライブラリを読み込むようにする
echo “extension=ssh2.so” > /etc/php.d/ssh2.ini
/etc/init.d/httpd restart

SSHのキーを作成する。このキーはWEBからアクセスできないところに置く。
cd /var/www/
mkdir wp-ssh-key
ssh-keygen -b 2048 -t rsa -f wp-ssh-key/id_rsa # パスフレーズは入れても入れなくても良い
chown -R apache.apache wp-ssh-key/ # apacheからアクセスできるように

authorized_keysに登録
cat wp-ssh-key/id_rsa.pub >> ~/.ssh/authorized_keys

WordPressの設定に追記。 wp-config.php

// SSH Settings
define('FS_METHOD', 'ssh2');
define('FTP_PUBKEY', '/var/www/wp-ssh-key/id_rsa.pub');
define('FTP_PRIKEY', '/var/www/wp-ssh-key/id_rsa');
define('FTP_USER', 'username');
//define('FTP_PASS', 'passphrase'); // パスフレーズを付けたときはここに書く
define('FTP_HOST', 'www.example.com:22');

第2回大阪Jenkins勉強会

第2回大阪Jenkins勉強会に参加してきました。

メモ。

@kiy0taka ソースコードレビューシステムGerritとの連携

Gerritの読み方はゲリット。Android界隈で使われているらしい。

レビューとベリフィケーション管理が出来る。チームで使う前提なのかも知れない。

@ikikko 中規模プロジェクトでのJenkinsの運用を支える技術

ライブラリ管理ツールにGradle

プロジェクトに対する一括変更スクリプトコンソール

Jenkinsアドベントカレンダー要チェック

@tamagawa_ryuji Amazon EC2でJenkinsを使ってみる

EC2使ってみたい。課金は1時間単位。

スレーブへのビルドが簡単にできる。

@kohsukekawa Building Jenkins plugin with Ruby

RubyだけでJenkinsプラグインを作るツール

@haradakiro Arduino でつくる XFD のつくり方とその効果

Jenkinsのステータスを読み取り、Arduino経由でランプを光らすデモ。

Arduino買ったままになっていたことを思い出した。

PHPフレームワークkohana:URLを書き換える

kohanaをインストールしたままの状態ならば、各ページへは

/index.php/コントローラー名/アクション名

という形式でアクセスするようになっているでしょう。
ここからindex.phpを取り除くにはmod_rewriteを使います。
.htaccessに以下の記述をします。

RewriteEngine On
RewriteBase /
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT]

これで”/コントローラー名/アクション名”の形式でページにアクセスできるようになります。

でもまだkohanaが生成するurlにはindex.phpが付いていますね。
ここからもindex.phpを取り除きたい場合はapplication/bootstrap.phpを編集します。
Kohana::init()の呼び出し部分をこのように変更します。

Kohana::init(array(
	'base_url'   => '/',
  'index_file' => '',
));