Perlのシグナルハンドラ

シグナル受信時実行するサブルーチンの設定

$SIG{シグナル名} = サブルーチン名;

シグナル受信時の動作をデフォルトに戻す

$SIG{シグナル名} = 'DEFAULT';

シグナルの受信を無視

$SIG{シグナル名} = 'IGNORE';

シグナルの一部
SIGINT: interrupt, Ctrl+Cによる中断
SIGTERM: termination, killコマンドのデフォルトシグナル
SIGALRM: alarm, alarmで設定した時間が経過

10秒経つ前にCtrl+C押した場合、即座に終了せずループを抜けて終わる例

use 5.018;
use strict;
use warnings;
use utf8;

my $stop = 0;

$SIG{INT} = sub {
    $stop = 1;
};

print "start";
for (1..10) {
    sleep(1);
    print "sleep:$_";
    if ($stop) {
        last;
    }
}
print "end";

URLスキームによるAndroid/iOSアプリ起動

Android/iOS共通のURLスキーム

{app_scheme}://{controller}/{action}?{query}

ex:

example_app://api/login?login_id=user1

Android/iOSの双方で起動可能
ただしアプリが未インストールだと何も起きない悲しみに包まれる

未インストールならばストアに遷移させたい
これを実現するならば、

  1. URLスキームへ遷移
  2. 一定時間遷移出来ていない場合、ストアURLへ遷移

みたいな感じに

Android専用のURLスキーム

intent://{controller}/{action}?{query}#Intent;package={package};scheme={app_scheme};end;

ex:

`intent://api/login/login_id=user1#Intent;package=com.example.exampleapp;scheme=example_app;end;

これに遷移するだけでアプリがインストールされてれば起動、
なければストアで遷移してくれる、スゴイ

git diff

ブランチ間の差分確認

ex. hogeブランチとfugaブランチを比較

$ git diff hoge..fuga

ブランチ間の差分のあるファイルの名前一覧

$ git diff --name-only hoge..fuga

ブランチ間の特定のファイルの差分

$ git diff hoge:piyo.txt fuga:piyo.txt

同じファイルならば以下でも良い

$ git diff hoge fuga piyo.txt