p_chinのおっぱいブログ

UnityとPerlなど

Unity終了時にSaveされてないAssetがあった時の確認画面を分かりやすくする方法

SaveしてないAssetがある状態でUnityを終了させようとすると、「saveしてないぞ!」っていう確認のdialogが出るは皆さんご存知だ。

f:id:pchin:20130709090035p:plain

 

これをもっと見やすくする方法があった

ただ単にUnityのPreferences(cmd+,)のGeneralにある、Verify Saving AssetsをtrueにすればOK

f:id:pchin:20130709084502p:plain

 

こうすると

 

分かりやすい!!!!!!!!!!

f:id:pchin:20130709090155p:plain

 

まとめ

Unity、持て余してる場合が多いので、定期的に当然の様に使ってる機能を調べ直すと新しい発見があって良さそうだ。

(4)先週覚えたけどブログにする程ボリューム無いから全部まとめてメモ

perl

Data::Validatorの、hashで引数渡さなくても良いStrictSequenceというのもある

リファレンスの例文

sub hoge {
        state $rule = Data::Validator->new(
            foo => 'Str',
        )->with('StrictSequenced');

        my $args = $rule->validate(@_);
}

-----------------------
# hoge('fugu');でValidateしてくれる        

比較の戻り値

        return
            $fugu->name == 'フグ男'
            && $teng->search('fugu_info', { fugu_id => 1 });
  • これだったら、最初の比較が通ったら、最後に比較されたsearchの結果が返ってくる
  • 最初や最後の比較でfalseならfalseを返す

PACKAGE

  • 自身のパッケージ名を返す(Row::Fuguとか)
  • クラスメソッドを呼びたい時につかったりする

バッチプログラムの2つの認識

  • 手動で実行するプログラム
  • cronで定期的に処理を実行させること

テーブルにis_newカラムを付ける場合

  • is_newは新規通知を出したい時に使うが、アイテムBOXに報酬を付与する仕組みの場合は受け取って欲しいのでずっと通知を出し続ける場合もある

historyテーブルに格納する内容

  • deleteクエリが重かった時代にはテーブルにis_deleteフラグを持たせるけど、今はdeleteは軽くなってるので元のレコードを消すのも良い
  • もちろんhistoryテーブルのカラムは出来るだけ元のテーブルを同じ構成にした方が分かりやすい

.proverc

  • --exec "perl -Ilib -MTest:Flatten -MTest::Name::FromLine"みたいなのは、Test::Prettyに実装されてるので、cpanからinstallして--Prettyを.provercに追加すれば良いだけ

 

zsh

oh-my-zshのカスタマイズ情報


 

Unity

Textureの圧縮のベストプラクティス的なの


AssetPostProccessor


MonoのAOTコンパイラについて


Genericsの値型問題

  • ExecutionEngineException: Attempting to JIT compile method 'SometType`1:.ctor ()' while running with --aot-only."と出る
  • http://docs-jp.unity3d.com/Documentation/Manual/TroubleShooting.html#iosRef
    ダミーメソッドで解決とは
  • Dictionary<int, T> で良いんだけどこの Tに取りうるオブジェクトをDictionary<int, Fugu> tmp = new Dictionary<int, Fugu> ()でいけるらしい
  • Tにstruct,enumなどの値型を指定するとiOSでこの問題起こる

浮動小数の誤差によってテストこけた


Mouseを少し使ってみた

初めてMouseを使ったクラス作ったりしたので、その覚え書き

多分ドキュメント読めばOKな内容だ。


使用例

package Fugu::Base;
use Mouse; #Mouseのコード書くぞ(><)

has life => (
    is => 'rw', #get,setを許可
    isa => 'Int', #Validateもしてくれる
    required => 1 #0, 1のbool値でnewする時に値を入れるのが必須か設定
);

has fugu => (
    is => 'ro', #readonly
    isa => 'Fugu',
    lazy => 1 #boolでdefaultの中身を実行するタイミングを変える
    default => sub {
        return Fugu->new;
    }
);

no Mouse; # ここから下はMouseの文法じゃなくていいよ

sub name {
    'フグ男';
}

継承も、もちろん出来る

package Fugu::Big;

use Mouse;
extends Fugu::Base; # 上のコードを継承してるよ(parentじゃダメらしい

has scale => (
    is => 'rw',
    isa => 'Int',
    required => 1
)

no Mouse;

new してみる

# required => 1のプロパティは値を入れないとエラー出るよ
my $big_fugu = Fugu::Big->new(
    life => 10,
    scale => 180
)

# もちろん普通のsubも呼べるよ
my $big_fugu_name = $big_fugu->name; # フグ男

 

解説

  • newした時に、hasで定義したプロパティに値を入れられる(use Mouse;すると、newが勝手に生える)
  • required => 1したら必ずnewした時に値を入れなければいけない
  • lazyは遅延評価の意味なので、実際にgetされた時に始めてdefault内の処理が走る(lazyしないと、newされた時にdefault内が実行されてしまう)
  • hasでプロパティにしていると、値が保存されるので、使い回したい時は便利
  • use Mouseしてるクラスを継承する時は、継承先でもuse Mouseして、extends '親クラスの名前'を宣言する必要が有る
  • isaのvalidateは、newやis => 'rw'などで外部から値を入れられる可能性があると、指定して欲しい

 

MouseのBUILD

  • use Mouseされたクラスにはnewが生える。
  • そのnewの中でBUILDを呼んでるので、newの後に処理を加えたかったらBUILDに処理を書く

 

まとめ

Fugu::BaseのプロパティにFugu->newとか書いたの,例文として分かりづらかったので反省した。

perlでメソッドや関数を作る時に気をつけたい事のメモ

最近一つの機能をガーッと実装して、気付いたら分かりにくいコードを量産してたので、下記に今後から気をつけたい事をメモる


 

そもそも関数にする理由

  • 関数名の先頭にアンダースコアを付けて外部クラスから呼ばれたくないアピールできる
  • 複雑な処理をする場合は分ける。そしたらその関数だけ単体テストが書ける

 

関数を作る時の注意

  • DB操作するメソッドは関数にしないでResultSetやRowに実装したが方が良い
  • 関数にするのは処理の一塊のみで、Utilityの様な、1つ以上の処理から呼ばれる場合に作った方が良い

 

メソッドを作るときに気をつけた方が良い事

  • 引数が3つを超える、もしくはメソッド名と引数の相性が悪く、わかりにくい場合は引数をhashにしてhashのkeyで引数の意味を教えてあげて分かりやすくしよう
  • メソッド内の処理をまた他のメソッドに分割するのは良いが、その本来の目的はコードの可読性を向上させる為なので、読みにくくなりそうなら分けない判断も大事

 

DB操作するメソッドの引数にplayer_idを指定しない方が良い理由

player_idがメソッドで必要な場合でも, PlayerテーブルのRowオブジェクトなりを渡した方が良い。理由が2つある

  • idは数字なので外部から適当に数字を入力しても動いてしまう可能性がある
  • PlayerのRowオブジェクトを渡してれば、そのidがに確実にDB内にある事を保証してくれる

 

英語的におかしくないか調べる

適切なオブジェクトに処理を持たせる

  • He make me happy.「彼を幸せにする」メソッドを作りたいなら、$he->make($me, $happy);とかなら、heがmeを幸せにするメソッドなんだなって分かる
  • オブジェクト=S, メソッド名=V, 引数=O or Cみたいな感じ
  • まず書きたい処理があったら、どのオブジェクトに持たせるのかを一旦考え直した方が良い

 

まとめ

UnityのC#書く時も気をつけようと思った

tmuxのコマンドモードのkey-bindをC-mにして死んだ

今朝、「なんかtmux上だけENTER効かないんですけどー」ってなってた

CR = C-m, LF = C-jに標準で割り当てられてる

だからC-mにコマンドモードのkey-bindに割り当ててたらENTER押せなかった

 

まとめ

テストに出るらしい