(3)先週覚えたけどブログにする程ボリューム無いから全部まとめてメモ
Tool
ILSPAY
duコマンド
- サーバ内で使うと一時的に負荷がかかるのであまり良くない
- http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230748/
- ディレクトリ内のファイル容量を調べられる
DB
Mysqlのパーティショニングについて
- テーブルをmysqlの任意のルールにそって分類し、分散させれるらしい
- 検索する範囲が限られるので高速化に繋がる
- レコードを削除する時は、パーティション側で指定して消しても元のDBのレコードからよしなに削除してくれる
- パーティションの分類に使えるのはprimary_keyのみらしい(idを日付毎にでパーティション分けたい場合はidとcreated_atにpromay_keyをつける)
historyに入れる手順
- 昔はdeleteの処理が重かったので、friend_requestテーブルにstatusカラムを入れて毎回チェックそれをしていた
- その名残もあるし、分かりやすいのでhistoryテーブルに移動する前のplayerとtargetの順でhistoryテーブルに格納する
mysqlのエイリアス
mysql> select pfr.player_id, per.target_id from player_friend_request per where player_id = $player_id;
の様に、FROMステートメントで宣言したテーブル名をエイリアスにして使い回す事が出来る
Perl
perlのワンライナーでモジュール内の関数を呼び出したい場合
- perl -Ilib -MFugu::Models -E 'create_player;'とかすれば、ResultSetに定義されているplayerをDBに作成する関数が実行されたりできる
DBIx::Querylog
- ORMが発行してるクエリ文や速も表示してくれる
- use DBIx::Querylogeも良いが、require DBIx::Querylogして指定の範囲内だけのクエリ発行を見たい場合はDBIx::Querylog->enable, DBIx::Querylog->disableで囲めば良い
Get::Opt::LongとPod::Usage
- perlで手軽にコンソールアプリが作れるモジュール
selectのクエリを投げる処理もトランザクションで囲う
- デッドロックとか、DBのエラーはselectであっても起こる可能性はあると考えた方が良い
Excetionについて
- 本当はエラーオブジェクトだけど, Exception::Tinyがgetする時のみoverloadしてas_stringしたオブジェクトを返してくれるので、文字列比較が出来る
- でもテストでは、like $@->as_stringとか明示的に文字列だと指定した方が良いかも
新しいExeptionクラスを作る時は
- 特殊な場合のみ作成した方が良い
- javaみたいに全ての例外クラスを作るのは複雑な気がする
- サービスが他言語化されてエラーメッセージを変更しても、例外のオブジェクトでテストを書いてればテストを書き直す事も無い
Class::Method::Modifire
- メソッドの処理前と後に処理を追加出来る(オリジナルと同じ引数を取得した状態で)
findとsingleメソッドについて
- findはprimary_keyで一つのrowをselectする場合に使って、その他はsingleメソッドを使用する
なんでfindとsingleを使い分けるか?
- DBIxでそうだったから
- promary_keyが見つからなかった場合に例外を投げる様にする予定だから
- pkにidは絶対にあって欲しいので、それを確かめるため?
- 例外を投げて欲しくない時や、その他のケースでsingleをつかう
- マスターデータ用のテーブルのidはpkである必要が有るから
- selectでデータとって来れないと、$rowにはundefが返るので、$row->nameとかするとエラーが出て、このエラーが追いにくいから
publicなDB操作メソッドも、呼び出し元でトランザクションしててもトランザクションで囲う
- 単体で呼び出される可能性があるから
constant
- 定数宣言する為のpragma
- use constant {life => 1,};の様に宣言する
- sub fugu(){ life => 1 };と同じ様な意味
- fugu()の「()」は引数がいらない事を明示的に宣言している
- 定数だからgetしか許可しない挙動なので同じだ
- http://perldoc.jp/docs/modules/constant-1.17/constant.pod
Vim
- gfでクラス宣言に飛びたい時に、gfはpath通ってる場所にしかジャンプ出来ないので、local.perl.vimrcに{project_name}/lib以下にpathを通してあげる必要が有る(.gitignoreでcommitしない様にして。
- vimはzshrcを観に行ってくれないからvimのコマンドで!perl -vとかやってもpathで指定しているperlバージョンを観に行ってくれないのでoh-my-zeh以外のpathはzshenvに書く
- shift-kでモジュールのドキュメントを見れる
- ctr+u,dで上下高速移動
gitcommitする時のfiletypeのせいで日本語が文字化けしてた
- gitcommitというファイルタイプになってる事を
setl ft?
で調べられるので便利だった - vimrcで
autocmd FileType gitcommit setl fileencoding=utf8
したら大丈夫っぽい
参考:@soh335 memo
Github
hubコマンド
- コマンドラインからgithubの操作が出来る
- http://qiita.com/yaotti/items/a4a7f3f9a38d7d3415e3