2011年 06月 25日

gerry++

2011年 06月 23日

はてなダイアリーで雑誌原稿(というか WEB+DB PRESSの原稿)を書くためのグリースモンキースクリプト

はてなダイアリーをプライベートモードにして原稿を書いてたんですがそのときつかっていたスクリプトを公開しときます。

とりあえず gist で private gist を作り、次にはてダ詳細編集ページにいき、任意の日付で

https://gist.github.com/xxxxxxxxxxxxxxxxxxxx

* 
foobar

とかテキストエリアに入力して、保存すると準備完了です。

その後はその場編集モードで保存を押すたびに、gist に日付をファイル名にしてバックアップがつくられます。

はてなダイアリーの仕様上、1章ごとに日付を分けたほうが無難です。長く書きすぎて溢れると、溢れた分、書いた内容が消えます。

はてなダイアリーからはてなダイアリーを書くためのユーザースクリプト

2011年 06月 22日

テストで気軽に sleep できるモジュール

書いてみました。

use すると、組込みの time() と sleep() を上書きして、sleep で sleep しなくなります。よくわからないですが、新しいインターフェイスを覚える必要なく時間が絡むテストができるようになるので、多少便利な気がします

2011年 06月 16日

gerry++

media query 使って横幅に応じて広告がでるようにした。

2011年 06月 15日

Ruby の scan を Perl でどうやるか忘れる

よく忘れるので memo

str =  '<11> <22> <33> <44>'

str.scan(/<(\d+)>/) { # ブロック付き
    warn $1
}

str.scan(/<(\d+)>/) # ブロック無し (Array がかえる)

を Perl でやるとき

my $str = '<11> <22> <33> <44>';

# たぶん正統派 (ブロック付き)
while ($str =~ m{<(\d+)>}g) {
	warn $1;
}

# ↑ の書きかたを忘れるのでよくやってしまうやつ  (ブロック付き) ↓
$str =~ s{<(\d+)>}{
	warn $1;
	$&; # 破壊してもいいときはつけない
}eg;

# ブロック無し (Array Ref.)
my $matched = [ $str =~ m{<(\d+)>}g ];

クエリ文字列をなんかいい感じに正規化っぽいことしたい

key 順でソートしたいけど、同じ key の value の順番は変えたくないみたいな。

最初もっとダサかったけど motemen さんに query_form_hash とか教えてもらった。canonical とインターフェイスを似せた query_form_canonical を定義してみる。なんか、そもそも論とかありそう。

use URI;
use URI::QueryParam;

sub URI::query_form_canonical {
	my $self = shift;
	my $other = $self->clone;

	my $hash = $self->query_form_hash;

	$other->query_form(map { $_ => $hash->{$_} } sort keys %$hash);
	$other;
}

sub nearly_equal ($$) {
	my ($a, $b) = @_;
	$a = URI->new($a);
	$b = URI->new($b);

	$a->query_form_canonical->eq($b->query_form_canonical);
}

use Test::More;

ok nearly_equal('/foo/bar?b=b&a=a&b=c', '/foo/bar?a=a&b=b&b=c');
ok !nearly_equal('/foo/bar?a=a&b=b&b=c', '/foo/bar?a=a&b=c&b=b');
ok nearly_equal('/foo/bar', '/foo/bar');

done_testing;

一部間違っていたので修正した

http://twitter.com/#!/nanto_vi/status/83883488855592961:twitter:detail

2011年 06月 13日

テストに適当に名前をつける2

http://subtech.g.hatena.ne.jp/motemen/20101214/1292316676 を見た直後に書いてたコードを長いこと放置していたので

にちょっと変えたのを置いてみました。

  • 行番号と該当テストの行

を name に入れるようにしただけです。use するだけで適当に使えると便利なので、同じようなモジュールがなければ CPAN にあげたい気がします。

こんな感じになります↓

    ok 1 - L28: is $_->res->code, 405;
    ok 2 - L32: is $_->res->status_line, '400 api_key is required';
    ok 3 - L36: is $_->res->status_line, '400 api_key is invalid';
    ok 4 - L40: is $_->res->status_line, '400 s is required';
    1..4
ok 1 - api_key
    ok 1 - L54: is $_->res->status, 200;
    ok 2 - L56: cmp_deeply $res, {
    ok 3 - L79: is $_->res->status, 200;
    ok 4 - L81: cmp_deeply $res, {
    1..4
ok 2 - basic
    ok 1 - L112: is $_->res->status, 200;
    ok 2 - metadata
    ok 3 - L141: is $_->res->status, 200;
    ok 4 - metadata append
    1..4
ok 3 - metadata
1..3
2011年 06月 08日

新キーワード

[[かしこみかしこみちゃん]]