Perlの文字列比較のテストを少し楽にする方法

テストは何のためにあるのかという話もありますが、
テストを動かしながら正しく通るテスト結果をよくつるく今日この頃ですが。。。

今までのやり方だと


my $text = <<'...'; Test string text ... my $expects = <<'...'; test string word ... is $text => $expects, 'test func is';
# Failed test 'test func is'
# at test_differences.pl line 33.
# got: 'Test
# string
# text
# '
# expected: 'test
# string
# word
# '


そしてTest::Differencesを使うとこんな感じに



eq_or_diff $text => $expects, 'table diff';
# Failed test 'table diff'
# at test_differences.pl line 34.
# +---+--------+----------+
# | Ln|Got |Expected |
# +---+--------+----------+
# * 1|Test |test *
# | 2|string |string |
# * 3|text |word *
# +---+--------+----------+


どこに差分があるのか分かりやすい。ただ改行入ってないと意味ないけどね。

一括置換

なにかと知ってるととくするコマンド

find . -name '*.pm' | xargs perl -i.bak -pe 's/InputCheck/Util::InputCheck/g'

バックアップいらないとは
find . -name '*.pm' | xargs perl -i -pe 's/InputCheck/Util::InputCheck/g'
でいいのか?

ちなみに
find pm/ -type f -name *.bak -exec rm {} \;
で該当バックアップファイルをけせる

git コマンド一覧

pull
git pull [送信先] [送信元ブランチ]
デフォルトでgit pull origin masterとなる

log
git log --stat
変更されたファイルの一覧と変更されたファイルの数、追加・削除された行数が表示


設定関連
git config --global core.pager "lv -c"
(utf8 の場合lv -cOu8)

perl utf8メモ

UTF8フラッグの場合

utf8::is_utf8($text); # 1となる

ファイルから読み込むと、utf8フラッグのやつが取得できる
open IN, "<:encoding(euc-jp)", "hoge.txt";
open IN, "<:utf8", "hoge.txt";

フラグを落とす
$text = Encode::encode("utf8", $text);
utf8::encode($text);

utf8フラグの文字列を指定した文字コードに変換する
my $new_text = Encode::encode($charset, $wide_char);

utf8フラグなしの文字を その文字の文字コードを指定して、 utf88フラグを付ける
my $wide_char = Encode::decode($non_wide_char_charset, $non_wide_char);
例:my $text = Encode::decode('sjis', $subject);


utf8フラグのない文字列($string)の文字コードの変換
Encode::from_to($string, 'sjis', 'euc-jp');

perl DBIほにゃららら

最近SQL::Abstractがはやっていて、いろいろ調べてみた

user_id in (1, 2, 3)
もとsrc

my @ids = qw/111 222 333/;
my $ids = join(q{,}, @ids);
my $data = $dbh->selectall_hashref(<<"SQL", id);
select id, column1, column2 from table1 where id in ($ids)
SQL


それをいい感じに
my @ids = qw/111 222 333/;
my $sql = SQL::Abstract->new();
my ($stmt, @bind) = $sql->select(
'table1',
[qw/ id column1 column2 /],
+{ id => +{ 'in' => \@ids } },
);
my $data = $dbh->selectall_hashref($stmt, 'id', +{}, @bind);





大なり、小なりとかとか
my $sql = SQL::Abstract->new;
my ($stmt, @bind) = $sql->insert(
'user_data',
'*',
+{ user_id => +{ '>=', 100000} }
);




同じカラムに対するandとか
    ( $stmt, @bind ) = $sql->select(
'table',
[qw/field1 field2/],
+{
reg_date => +{ '<=' => 12345, '>' => 54321 },
}
);

is $stmt, q{SELECT field1, field2 FROM table WHERE ( ( reg_date <= ? AND reg_date > ? ) )},
"stmt";
is_deeply \@bind, [qw/12345 54321/], "bind";




Limitとか



use SQL::Abstract::Limit;
my $sql = SQL::Abstract::Limit->new( limit_dialect => 'LimitOffset' );
( $stmt, @bind ) = $sql->select(
'table', [qw/field1 field2/],
+{ id => '1' },
+{ -desc => 'field3' },
10, 2
);
is $stmt =>
'SELECT field1, field2 FROM table WHERE ( id = ? ) ORDER BY field3 DESC LIMIT 10 OFFSET 2',
'stmt';
is_deeply \@bind, [qw/1/], 'bind';

jQueryメモ

特定のタグへのアクセス

$("#hoge"); // idで指定
$(".hoge"); // classで指定
$("div"); // tagで指定 ページ内のdivタグすべて!!
$("div, p"); // 複数指定
$("div p"); // divタグ内のpタグ(孫まですべて)
$("div>p"); // divタグ内のpタグ(子まで)
$("div+p"); // divタグの後にあるpタグ
$("#mygame-conf input[type=radio]"); // id="mygame-conf"ないのinput type=radio
スタイルシートを指定する

$("p").css({ "color" : "#ff0000", "background-color" : "#000080"});

$("p").toggleClass("highlight"); // スタイルシート切り替え

セレクタ

http://semooh.jp/jquery/api/selectors/

jQueryメモ

特定のタグへのアクセス

複数のタグへアクセス
カンマで複数指定することが可能
$("div, p").text("ほげほげ");

Mac パッケージ管理コマンド

Macでのパッケージ管理システム「MacPorts」について

sudo port selfupdate <= MacPorts自身とそのリストを最新の状態に更新する

sudo port search [コマンド] <= インストールしたいパッケージを探す

sudo port install [コマンド] <= インストール

以上

Mac フリーズ対応

Windowsではcont+alt+deleteで強制終了できあるが、
Macの場合は

command+option+escでアプリケーションの強制終了

それでもダメな場合は

control + command + 電源ボタン

それでもダメな場合は

電源ボタンで消します。

文字コードチェック

vim + screen + (terminal)でうまく日本語が表示されない場合、
正しい文字コードの確認方法

nkf -g [filename]

またlvで出力文字コードを指定する方法は

lv -ou8 [filename] <= utf-8
lv -oej [filename] <= euc-jp_
lv -os [filename] <= shift-jis

Quicksliverをちゃんと知る

<<ファイルの指定>>
フォルダーを指定してその中身を見る場合、
[control]+Nで下、[control]+Pで上へカーソルが移動する。

選択したディレクトリの中に移動したい場合は、バックスラッシュ(/)が→

<<Catalog>>
Catalogに登録されているアプリケーション、フォルダ等が、
1stペインでつかえる

<<複数アイテムの選択>>
カンマ(,)を入力すると、複数入力ができる

<<テキストモード>>
ピリオド(.)を入力すると、テキスト形式で入力ができる

<<アプリケーションを終了>>
1stペインにアプリケーションを指定、2stペインに「quit」を指定するとエラーとなる

utf8の文字化け等々確認する

use Devel::Peek qw/ Dump /;
Dump $rhData->{subject};

とすると、文字コードが標準出力に表示される

SV = PVMG(0x186e5b58) at 0x1877cca0
REFCNT = 1
FLAGS = (POK,pPOK)
IV = 0
NV = 0
PV = 0x1876a330 "[D:F9A5][D:F99F][D:F9A3][D:F8F8]\343\201\202"\0
CUR = 44
LEN = 48

続・ハイパフォーマンスWebサイトで紹介されているツール

今すぐ使えないけど、そのうち使うかも。

A.1 パケットアナライザ
・HttpWatch
  Windows IE, firefoxで利用可能。HTTPウォーターフォールチャート
・Firebugの接続パネル
  FirefoxのAddon
・AOL Pagetest
  IEのプラグイン
・VRTA
・IBM Page Detailer
・Webインスペクタの[リソース]パネル
  Safariの開発メニュー内
・Fiddler
  プロキシとして動作する
・Charles
・Wireshark

Eclipseの日本語化 in mac

会社支給のmacにEclipceを入れて日本語化する。

1.Eclipseのダウンロード
今回はjQueryを勉強したかったので、Eclipse IDE for Java EE Developersを入れる
http://www.eclipse.org/downloads/

2.Pleiadesから本体のダウンロード
現時点の安定版は1.3.1でした。

eclipse.iniを修正だけど、macだとここにある
/[$Eclipse_HOME]/Eclipse.app/Contents/MacOS/eclipse.ini

変更
-Xms40m => -Xms128m
追加
-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

一応最初の起動はコマンドから。
./eclipse -clean

無事にインストール完了です。

Perl Arkをたしなんでみる

まずはインストール

ここら辺から最新版をダウンロード
http://github.com/typester/ark-perl/downloads

現時点では「Ark-0.1202.tar.gz」です。

解答したディレクトリに移動して、テストを実行(これ結構長いです。)
$ cd Ark-0.001000_001
$ cpan -t .

インストール
$ cpan -i .

うまくいかない場合はこちら
$ sudo -H cpan -i .

ちなみにボクはうまく行きませんでしたww

EclipseのAndroid設定エラー???

ADT(Android Development Tools)のversionを5にupdateしたら、
Eclipseのコンパイルが通らなくなりました。

「プラグイン "org.eclipse.jface" からのコードの起動で問題が発生しました。」

とエラー?かダイアログ?か表示されていたので、
昨日はなくなくあきらめて、
Eclipseの再インストールでもするかな〜と思っていたら、
見つけました。


Android SDK Tools, Revision 5のインストール方法

この方も同じようにRevision 5にupdateしてエラーとなっていた模様。
というか、なぜ昨日は探し出せなかったのか・・・。

ということで一件落着。
このブログも誰かの目にとまり役に立っていたら幸いです。

Androidアプリを登録する

先日のブログで紹介した「Android不要なアプリを削除する」で見事に削除できましたが、
今度はもとに戻したいと思ってみたり。

1.Eclipseで作成したプロジェクト/binディレクトリにあるXXXXX.apkファイルを
$ANDROID_HOME/toolsへコピーする

2.cd $ANDROID_HOME/toolsで移動

3.adb install XXXXX.apk
※このときエミュレータは起動していました。

無事に復活することができました。

Android不要なアプリを削除する

Eclipse+Android(ADT)でサンプルアプリを開発

不要となったアプリをEclipse上で削除しても、
エミュレータ上からは削除されていません。
個別に削除する必要があるみたいです。

1.Eclipseの実行
2.エミュレータが起動
3.ターミナルを起動し、以下を実行
[Android HOME?]/tools/adb shell
※まだ詳しく調べてないが、Androidが起動しているLinuxに入る?
4./data/app配下のアプリをrmする

再起動なしで、アプリが削除されていることを確認

参考
http://labs.feed-yomi.com/android/setup/emu_appdel.html

動的正規表現を使って入れ子の対にマッチさせる

perlコードを動的正規表現は(??{Perlコード})で記述する

my $regx;
$regx = qr/ (?> [^()]+ | \( (??{ $regx }) \) )* /x;
if ($str =~ m/\b\w+ ( \( $regx \) ) /x) {
print "$str\t--> found ptn2 : $1\n";
}

ちなみに、perlの組み込みコードは(?{Perlコード})で記述

/gオプション

1.すべてのマッチ抜き出し
my $text = '123.456.789.101';
my @nums = $text =~ m/\d+/g;
print $_, "\n" for @nums;

----
123
456
789
101

2.反復的なマッチ
my $text = '123.456.789.101';
$text =~ m/(\d+)/g;
print "1 -> $1\n";
$text =~ m/(\d+)/g;
print "2 -> $1\n";
$text =~ m/(\d+)/g;
print "3 -> $1\n";
$text =~ m/(\d+)/g;
print "4 -> $1\n";

----
1 -> 123
2 -> 456
3 -> 789
4 -> 101

while でも同じ
my $text = '123.456.789.101';
while ($text =~ m/(\d+)/g) {
print "found : $1\n";
}
----
found : 123
found : 456
found : 789
found : 101

ReactNativeでAndroid対応する話

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