2011年11月29日火曜日

データベース定義の差分



開発環境、本番環境の差分をとる
サンプルコードによるPerl入門
MySQL-Diff





mysqlコマンドメモ



参考


MySQLとシェルスクリプト


テーブル定義をダンプ --no-dataオプション


省略系は-d



mysqldump -u hoge -p --no-data db_name > dumpfile




Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]



データだけダンプ



  • t オプション



ダンプファイルを読み込む



mysql -u hoge db_name < dumpfile



テーブルが破損してないかチェック



check table table_name





2011年11月28日月曜日

dieをシグナルでフックしたいが、evalは例外にしたい。



evalで囲っているけど、$@が出力されてない、コード全部直すの面倒!ってときに

evalの中で起こったエラーを検出する



$SIG{__DIE__} = sub {
# ログ出力
}



eval内の例外をキャッチするコードはちゃんと書いているので、eval内のdieはフックせず無視したい場合

evalと$SIG{__DIE__}とcaller



  • eval内でdieされたときは $^S == 1(perlvar参照)



$SIG{__DIE__} = sub {
return if $^S;
# ログ出力
}





2011年11月20日日曜日

xcodeショートカット



バージョンは3.2.6


編集


現在行の定義場所へジャンプ


  • cmd-ダブルクリック

    • 飛べないときは、cmd-opt-D で。




文頭、文末にジャンプ


  • cmd-矢印


保存前に戻す


  • cmd-u


コード折り畳み


  • 全折り畳み

    • Ctrl + Cmd + ↑



  • 全展開

    • Ctrl + Cmd + ↓



  • 単体折り畳み

    • Ctrl + Cmd + ←



  • 単体展開

    • Ctrl + Cmd + →




ウインドウ


エディタ最大化


  • opt-cmd-E


対になっている.mと.hファイルを切り替え


  • opt-cmd-↑

  • マウスパッドで3本指で上にスライド


前後の編集場所に戻る?


  • マウスパッドで3本指で左右にスライド

    • 定義場所にジャンプしてから、元のファイルに戻りたいときに使っている




デバック画面に切り替え


  • opt-Y

  • もとに戻すのはどうやるんだ、、、



ビルド


ビルドと解析


  • cmd-A


ビルドと実行


  • cmd-RET

  • cmd-y


クリーニング


  • cmd-K

    • make cleanを行う。インターフェースビルダー変更後に必要。






環境設定を開く


  • cmd-,





2011年11月16日水曜日

Objective-C入門 メソッドとクラス




  • 基本的にC言語と同じ。

    • 大きく異なるのはメソッド呼び出しくらい。





メソッド呼び出し


メッセージ式

メッセージ式(角括弧[])でメソッド呼び出し。
コロンの前後で1セットという感じだが、最初だけ異なっている。
[object method:引数1 ラベル:引数2 ラベル2:引数3]


Perlでいうと、



$self->method(arg1, { ラベル => 引数2, ラベル2 => 引数3, })


って感じか。



  • 引数なしのメソッド呼び出し

    • [string length]



  • 引数1つ

    • [string characterAtIndex: 0]



  • 引数2つ

    • [string rangeOfString:@"hogehoge" options:NSCaseInsensitiveSearch]





メソッド名はラベルと末尾のコロンも含める

上記の引数2つのメソッド名は、rangeOfString:options: になる。


メソッドの宣言


C言語と同じく、最初に返り値の型を書き、あとは、各引数の型を書くだけ。型は()で囲む。



(NSRange)rangOfString:(NSString*)string options:(NSStringCompareOptions)mask



IDE上の+と-

-がインスタンスメソッド
+がクラスメソッド


クラス宣言(インタフェース)


ヘッダーファイルでクラス宣言する。クラス名は先頭大文字。



@interface クラス名:親クラス名
{
//インスタンス変数
//インスタンス変数はメソッド内の変数と区別するために先頭をアンダーバーにする規則もある
int hoge;
NSString* foo;
}

-(BOOL)isHoge //メソッド宣言
@end


クラスにスコープがない

このため、NS、UI、CAなどの接頭辞がある。



  • NS

    • Mac OS Xの前身、NEXTSTEPの略







型はCと同じものと、Objective-Cのものがある。Objective-Cの型は*を付ける。当然ポインタ参照なわけですね。
クラスはすべてヒープメモリに確保されるので、そのインスタンスをあらわす変数は実体ではなくポインタ。


クラス実装


hoge.mファイルに実装を書いていく。



#import "インタフェースのあるヘッダファイルパス"

@implementation クラス名
-(BOOL)isHoge
{
.......
return .....;
}
@end





wordbreak.jsでforefox8でデザインが崩れた。



JQueryで連続した半角英数字を任意の場所で改行するプラグイン
これを使わせていただいてたのですが、Firefox8でデザインが崩れてしまいました。


原因



  • インデントの部分がtextContentで取得されてしまう




以下では、pとspanの間がtextNodeとして取得されてしまいました。



<p class="wordbreak">
<span>hoge<span>
</p>



修正



$(h).each(function(){
if ( /^\s*$/.test(this.textContent) ) {
elm.append(this);
}
else if ( this.nodeType == 3) {
elm.append($.trim(this.textContent.split('').join($.wb.sep)));
}
else {
elm.append($.wb.remake($(this)));
}
});



空白だけか、空の時は何もしない。
this.nodeTypeのところは、this.textContentの中身を調べるって条件ではダメなのかな。
(JavascriptおよびDOMがわかってない)





2011年11月5日土曜日

Excel列名変換問題



Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編)


とりあえず書いてみたら、print reverse $str とかやってしまった。(リストの順番を逆順にするので、この場合なんら変化なし)
問2が難しいのは、問1の成功体験が足かせになるところか。問1が基数変換で解けるものだから、そのまま問2にいくとはまる。例えばZ(=26)の次のAA(27)で、2桁目のAが1で、一桁目のAが0になる。


問1の場合、僕は2位の人と同じように、ordを使用してましたが、
1位の人みたいにループごとに現在の累積値に26をかけて桁をひとつ上げていくのがスマートでした。


ただ2点、Perlらしくないなーと思うのが、



  • ハッシュを手書きで登録している

    • ハッシュはハッシュスライスで、 @table{'A'..'Z'} = (1..26); とすべき。



  • C言語風のループ


好みかもしれませんが、無駄に長いので、、、。
あとC言語風ループなら $i < ($#input+1) じゃなくて $i < scalar @input か$i <= $#inputかなー。



for (my $i=0; $i < @input; $i++)

for my $i (0..$#input)




ソースは書いてみたけど、mooseの練習に書き直してみようと思う。仕事でよく使うようになってきたので。