はてなダイアリーで雑誌原稿(というか WEB+DB PRESSの原稿)を書くためのグリースモンキースクリプト
はてなダイアリーをプライベートモードにして原稿を書いてたんですがそのときつかっていたスクリプトを公開しときます。
とりあえず gist で private gist を作り、次にはてダ詳細編集ページにいき、任意の日付で
https://gist.github.com/xxxxxxxxxxxxxxxxxxxx * foobar
とかテキストエリアに入力して、保存すると準備完了です。
その後はその場編集モードで保存を押すたびに、gist に日付をファイル名にしてバックアップがつくられます。
はてなダイアリーの仕様上、1章ごとに日付を分けたほうが無難です。長く書きすぎて溢れると、溢れた分、書いた内容が消えます。
はてなダイアリーからはてなダイアリーを書くためのユーザースクリプト
テストで気軽に sleep できるモジュール
書いてみました。
use すると、組込みの time() と sleep() を上書きして、sleep で sleep しなくなります。よくわからないですが、新しいインターフェイスを覚える必要なく時間が絡むテストができるようになるので、多少便利な気がします
gerry++
✖
media query 使って横幅に応じて広告がでるようにした。
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
テストに適当に名前をつける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
新キーワード
[[かしこみかしこみちゃん]]