調査したい

http://www.phpactiverecord.org/

http://framework.zend.com/manual/ja/zend.db.table.html
を使って
それっぽい業務モデルをActiveRecordパターンとTableDataGatewayパターンで実装してみて比較したい

mac で iTerm や emacs を自分的に快適に使う設定

※screenのための設定なども追記しています。


自分はemacsユーザ。
コントロールキーは配置的にfnキーにしたい。
メタキーは配置的にcommandキーにしたい。
(optionキーはどうも慣れなかった)
ただし普通にcommandキーを潰してしまうと、
command+tab(アプリ切り替え)
command+v(ペースト)
command+space(ひらがななどの変換)
などの基本的なショートカットまで使えなくなってしまうのでそれは避けたかった。
ネットに埋もれる先人たちの知恵を拝借した結果、
以下のように設定することにした。

KeyRemap4MacBookを使ってコントロールキーとfnキーを入れ替える

  • Change Control_L Key (Left Control)
    • Control_L to Fn にチェックを入れて有効に
  • Change Fn Key
    • Fn to Control_L にチェックを入れて有効に

iTerm のキーボード設定を追加する

ブックマーク > プロファイルの管理 > キーボード設定 から

キーの組み合わせ 動作 メモ
cmd-shift-hex code 0x25 ^[を送信 % (!) emacs Query replace
cmd-shift-hex code 0x3c ^[を送信 < (!) emacs ページ一番上への移動
cmd-shift-hex code 0x3e ^[を送信 > (!) emacs ページ一番下への移動
cmd-hex code 0x62 ^[を送信 b (!) emacs 後の単語への移動
cmd-hex code 0x64 ^[を送信 d (!) emacs 単語の削除
cmd-hex code 0x66 ^[を送信 f (!) emacs 前の単語への移動
cmd-hex code 0x67 ^[を送信 g (!) emacs Goto line
cmd-hex code 0x6c ^[を送信 l (!) emacs lowercaseへ変換
cmd-hex code 0x75 ^[を送信 u (!) emacs UPPERCASEへ変換
cmd-hex code 0x77 ^[を送信 w (!) emacs リージョンコピー
cmd-hex code 0x78 ^[を送信 x (!) emacs コマンド入力
ctrl-num-← ^[を送信 [5D (!) screen 右のスクリーンへ切り替え
ctrl-num-→ ^[を送信 [5C (!) screen 左のスクリーンへ切り替え
ctrl-shift-num-← ^[を送信 OD (!) 別のscreen 右のスクリーンへ切り替え
ctrl-shift-num-→ ^[を送信 OC (!) 別のscreen 左のスクリーンへ切り替え

commandキーをメタキーに変えてしまうのではなく
よく使う組み合わせのみ登録する方針にしました。

.screenrc

bindkey "^[[5C" next
bindkey "^[[5D" prev

別の.screenrc

bindkey "^[OC" next
bindkey "^[OD" prev

256色対応

http://d.hatena.ne.jp/milk1000cc/20090205/1233792728
をやりました。

array_chunk_pad的な

array_chunkって便利ですよね - てつじんにっき


なるほどー。この使い方は初めて見ました。
これは便利そう。

ただ一つ気になったのが、 array_chunk と array_pad で分割数の 2 が重複して出てくるところ。
調べてみたら array_chunk には足りない要素を埋めるための引数、機能がないんですね。あってもよさそうなのに。。
まぁでも以下のように簡単なラッパ関数を書けばいいかな。

<?php
function array_chunk_pad(array $input, $size, $pad_value, $preserve_keys = false)
{
    $chunks = array_chunk($input, $size, $preserve_keys);
    $chunks[] = array_pad(array_pop($chunks), $size, $pad_value);
    return $chunks;
}
$fruits = array(
    'apple', 'orange', 'strawberry', 'banana', 'cherry',
);
?>
<table border="1">
<?php foreach (array_chunk_pad($fruits, 2, '&nbsp;') as $chunk): ?>
 <tr>
<?php   foreach ($chunk as $fruit): ?>
  <td><?php echo $fruit ?></td>
<?php   endforeach ?>
 </tr>
<?php endforeach ?>
</table>

macbook pro 買ったよ。届いたよ。

なんか思ったよりでかかったけど開発環境として使いたかったのでこれで正解だったかな。

スペックは

ディスプレイ
15.4 inch, 高解像度, アンチグレア
CPU
2.53GHz Intel Core i5
MEMORY
4GB
HDD
500GBシリアルATA、5,400 rpm


で、とりあえずやった作業は

  1. chrome 入れた
    1. chromeroboform の extention を 入れた
  2. KeyRemap入れた - http://pqrs.org/macosx/keyremap4macbook/document.html.ja
    1. fn キーと control キーの配置を逆にした
  3. ランチャー(alfred) 入れた
  4. システム環境設定 > 共有 > コンピュータ名の変更
  5. mail の設定
  6. cocoa emacs 入れた - http://www.emacsformacosx.com/
  7. .bashrc, .emacs の設定
  8. homebrew の install
  9. iCal の設定(google calender との同期)

zsh, screen とかの設定はまだ全然できてない。。
地道にやっていこーっと。

phpで関数やメソッドの引数が配列でもそうでなくてもいいみたいなやつ

そういうのを実装するときに、
与えられた変数が配列じゃなかったときに配列に詰め込みなおす関数

<?php
function force_array($var)
{
    if (!is_array($var)) {
        return array($var);
    }
    return $var;
}

上記のようなものを実装してそれを使っていたのだが、
単に

<?php
(array) $var

とキャストすればいいだけってことにさっき気づいた。(某ソースを眺めていて)


おお、私はなんと無駄なことをしていたのか・・。


ただ微妙に挙動が違うので表にまとめる。

元の値 キャスト後の値 上記のforce_array()後の値
NULL NULL array() array(NULL)
bool true array(true) array(true)
int 1 array(1) array(1)
float 1.1 array(1.1) array(1.1)
string "string" array("string") array("string")
array array(1, 2) array(1, 2) array(1, 2)
array array('k1'=>'v1', 'k2'=>'v2') array('k1'=>'v1', 'k2'=>'v2') array('k1'=>'v1', 'k2'=>'v2')
object new stdClass() array() array(new stdClass())


上記のように NULL と object のときの挙動が違った。
NULL を array にキャストすると 要素0、つまり空の array() になり、
object を array にキャストすると そのプロパティを持った連想配列になる。
詳しくは PHP: 配列 - Manual

objectを1つ、もしくは複数どちらでも引数に取れるような関数を作る場合は
キャストだと問題が起こりそうだな。

phpmatsuri

#phpmatsuri - Google 検索 で少し追っていただけなんだけどすごく面白そうだった。

見つけたスライドを貼っておく。
なんかうまくslideshareが埋め込めなかったのでリンクです。

webアプリでのデザイナとプログラマの分業にまつわるエトセトラ

2010年の今。今更感あふれる話題。
でもぜんぜん自分の中で解決してなかった。
完全無欠な答えがないのは分かってる。(うそ!ほんとは分かってるフリだけどね)
でもどういった場合にどういう手法をとるのが有効なのか?
みんないったいどうやっているの!?
ネット上での事例を調べて咀嚼したい。
そんなエントリ。

ネット上で見つけた参考になるリンク


上記を参考に、

  • テンプレートエンジンによって本当に完全に分離できるのか?
    • DreamWeaverなどのツールとの相性
    • if文は?for文は?name属性は?ボタンは?(ビューではaタグがいいけどロジック的にはPOSTにしたいのでinput type="submit"がいいなど)
    • テンプレートのフラグメント化はどう対応する?
  • webサービスは仕様が凍結するのか?
    • 運用フェーズでの問題点

といったところを切り口にしていろいろまとめたい。
ところだけどちょっと時間がないのであとで・・。