~/.ssh/configを設定してみる

~/.ssh/configにいろいろ設定すると、ssh hostnameが楽になる。

今の環境はssh dev_host_01の名前解決ができない。

$vim ~/.ssh/config
Host dev_host_01
HostName XXX.XXX.XXX.XXX

これで、IPを入力しなくてもなんとかなると。

そして他にもUserなど指定したりもできるみたい。
Host dev_host_01
HostName XXX.XXX.XXX.XXX
User user_name

Perlの正規表現で記号を削除

別に正規表現でなくても良いのだが、文字列から記号を削除したい場合に、どのようなアプローチがあるのか、検討してみた。

便利そうなUnicodeのブロックを使ってみる
¥p{Latin}で数字となるが、
ローマ数字なども含んでいるので使えない

sub nomalize {
my $str = shift;
$str =~ s/[^0-90-9a-zA-Za-zA-Z\p{Han}\p{Katakana}\p{Hiragana}]//g;
return $str;
}

[File::Basename]を調べる

use strict;
use warnings;

use File::Basename;

use Test::More;

my $path = 't/file/dir/sample.t';
subtest 'fileparse' => sub {
my ($filename, $directory, $suffix) = fileparse($path);
is $filename => 'sample.t', 'filename';
is $directory => 't/file/dir/', 'directory';
is $suffix => undef, 'suffix';
};

subtest 'fileparse suffixes' => sub {
my ($filename, $directory, $suffix) = fileparse($path, qw/.t/);
is $filename => 'sample', 'filename';
is $directory => 't/file/dir/', 'directory';
is $suffix => '.t', 'suffix';
};

subtest 'basename' => sub {
my $filename = basename($path);
is $filename => 'sample.t', 'filename';
};

subtest 'basename suffix' => sub {
my $filename = basename($path, qw/.t/);
is $filename => 'sample', 'filename';
};

subtest 'fileparse suffiexs2' => sub {
my $prefix_name = join '', (fileparse($path, qw/.t/))[1,0];
is $prefix_name => 't/file/dir/sample';
};

done_testing;

patchコマンド

svnやgitを使ってると、特に意識することはないけど、
仕組みというか概念というか、とりあえず使ってみた。



diff -u 1.pl 2.pl
--- 1.pl 2011-06-29 23:49:54.000000000 +0900
+++ 2.pl 2011-06-29 23:50:10.000000000 +0900
@@ -1,3 +1,3 @@
1
-2
+22
3
diff -c 1.txt 2.txt
*** 1.pl 2011-06-29 23:49:54.000000000 +0900
--- 2.pl 2011-06-29 23:50:10.000000000 +0900
***************
*** 1,3 ****
1
! 2
3
--- 1,3 ----
1
! 22
3
-uを付けるとunified 出力形式を用いる。
-cを付けるとcontext 出力形式を用いる。

まぁどちらでもよいけど、-uを選択。

それをsample.patchとして保存。

基本的な使い方
patch <sample.patch

オプション
-b : バックアップ -B だとプレフィックスを指定できる
-R : パッチは新旧のファイルが反転しているとみなす。
--dry-run : パ ッチを当てたときの結果を表示
-f : 問い合わせ無しの実行
-i [pach file] : パッチをファイルから読み込む - を指定すると標準入力(デフォルト)
-p[num] : 適用するパスのプレフィックスを[num]個削除する
--verbose : 詳細情報表示

ファイルの圧縮/解凍

今更な感じだけど、覚えていないので、メモ程度に記述

tar zcvf 圧縮後のファイル名 対象ファイル...
tar zxvf 圧縮ファイル

詳細も調べたいけど今ではない。

異なるサーバ間のファイルをマージする

開発環境が複数あると、マージなんかが大変になるわけで、比較的簡単にやりたい。
出来ればGUIでやりたいのだが、WindowsのWinMergeみたいな便利なものがなく、
ひとまず p4Mergeでチャレンジ

1.まずマウントしてローカルファイルのアクセスをできるように
mount -w -t smbfs //user:pass@dev1/path /mnt/dev1/path/
mount -w -t smbfs //user:pass@dev2/path /mnt/dev2/path/

2.p4mergeを呼び出す
p4merge ベースファイル 左側のファイル 右側のファイル マージ結果ファイル
p4merge /mnt/dev1/hrk_ys/lib/Foo.pm /mnt/dev1/hrk_ys/lib/Foo.pm /mnt/dev2/hrk_ys/lib/Foo.pm /mnt/dev2/hrk_ys/lib/Foo.pm

ベースファイルはsvn HEADとかから取得するといんだろうなー。

※Automatorを使うと便利 テキスト入力から取得してコマンドを作るみたいな
※dev_host1 dev_host2 lib/Foo.pm => p4merge ...

ひとまずこれでGUIでなんとか出来る。

Perlのeachには気をつけろ

perlのeachではまったので、メモを。

$ perl -v
This is perl, v5.8.5 built for i386-linux-thread-multi

サンプルソース
use strict;
use Data::Dumper;

use Test::More;

my $hash = +{ a => 1 };
#note explain $hash;
Data::Dumper->new( [$hash] )->Sortkeys(1)->Dump;
ok each %{ $hash };


結果
not ok 1

ちなみに、Sortkeys(0)をすると、okとなります。
同様にnote explain $hashでもnot okになります。
explain は内部的にData::Dumperを呼んでいるため。

そして、何が原因か探ろうとおもったのですが、
中身がData::Dumper::Dumpex(実物はxs)なので断念。

たぶん、eachでつかうitaratorがリセットされてないだけだと思いますが。。

こんな感じです。

use strict;

use Test::More;

my $hash = +{ a => 1 };
#note explain $hash;
#Data::Dumper->new( [$hash] )->Sortkeys(1)->Dump;
while (my $k = each %{ $hash } ) {
last
}
ok each %{ $hash };


ついついexplainしたくなりますが、気をつけます。

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...