2012-05-13

アイコン画像に割り当てられているCSSクラスを調べるやつ作ってみた

f:id:Cside:20120513215631p:plain


https://github.com/Cside/icon-class-visualizer *1


アイコンって普通、全アイコンの画像が一枚の画像に詰まってて、それをCSSで部分的に切り出すことで表示しているけれど、「このアイコン使いたいけどCSSのクラスどれ使ってるんだろなー」を楽に調べられたら手間が省けるかなと思いついた。

configファイル にcssのパスとアイコンのクラスの正規表現を書いてmakeしたら、マッチするアイコンを列挙してくれる。で、マウスオーバーで具体的なクラス名を知れる。

JSでごちゃごちゃ頑張ってしまったけど、普通にCGIにしとけばもっとすぐ書けたと後から気づいた。

*1:Exampleがはてなブログなのは特に意味はないですw

2012-05-12

その人にとっては当たり前のもの

今日、keikuboさんに誘ってもらってRackhub座談会なるものに参加していたのだけど、そこで「どのブラウザ使ってる?」みたいな話にたまたまなって、rosylillyさんが「いやーイベントの発火にブレークポイント仕込める機能がないと生きていけないので僕はChrome以外ないっすねー」とか「CocproxyでローカルのJSを本番ページに食わせることができて…」とかいうことを話されていて、自分は普通にそれを知らなかったので超、超、超 目鱗だった。

で、思ったのだけど、その人にとってはもはや当たり前のことだけど他の人からすれば普通に知らない超便利Tipsって割とごろごろある。でも、当たり前のことをわざわざブログに書こうとは普通思わないから、こういった情報ってシェアされにくいのかなぁと思った。情報共有の敷居を下げるにはどういう方法がいいんだろうなぁ。kobitoはひとつの解だと思うけれど。

2012-05-06

開発時のPlackのアクセスログフォーマットを指定する

Plack::Middleware::AccessLogは、開発環境(PLACK_ENV=development)の場合、P::M::Lint や P::M::StackTrace とともに「オプションなしで」Plack::Runner によって自動で読み込まれる。つまりログのフォーマットが指定できない。

app.psgi で enable 'AccessLog', format => '...' としても、「自動で読み込まれるものとは別に」もう一つ P::M::AccessLog を読み込むことになるので、1度のリクエストでログが2回吐かれることになってしまう。

というわけで、PLACK_ENV=development でもデフォルトの Middleware を読み込まない俺俺plackup をこさえた。

plackup-without-default-mw (長い)

あとは app.psgi で好みのログフォーマットオプションをつけた上で P::M::AccessLog を enable してやればいい。

build {
    ($ENV{PLACK_ENV} eq 'development')
        ? enable 'AccessLog', format => 'common' # for dev
        : enable 'AccessLog';                    # for product
    enable 'Lint';
    enable 'StackTrace';
    ...

課題

ベストは「app.psgi で enable している Middleware については、Plack::Runner で自動で読み込まない」だと思うけれど、それをやるには意外といじるところが多くなりそうだったので、ひとまずここで放置している。

2012-05-05

Sub::Inspector というモジュールを書いた

https://metacpan.org/module/Sub::Inspector

coderefから以下の情報を簡単に取り出すモジュールです。

  • アトリビュート
  • プロトタイプ
  • 元のメソッドが定義されているファイル
  • 元のメソッドが定義されている行番号
  • 名前

いずれも標準モジュールの B.pm を使えば出来ることですが、いちいち使い方を調べるのもしょうもないのでモジュール化するに至りました。

インターフェイスは以下のとおりです(PODそのまま)。

use Sub::Inspector;
 
 
# get file, line, name (oo interface)
 
use File::Spec;
my $code = File::Spec->can('canonpath');
my $inspector = Sub::Inspector->new($code);
 
print $inspector->file; #=> '/Users/Cside/perl5/ ... /File/Spec/Unix.pm'
print $inspector->line; #=> 71
print $inspector->name; #=> 'canonpath'
 
# class method interface
 
print Sub::Inspector->file($code); #=> '/Users/Cside/perl5/ ... /File/Spec/Unix.pm'
print Sub::Inspector->line($code); #=> 71
print Sub::Inspector->name($code); #=> 'canonpath'
 
 
# get prototype
 
use Try::Tiny qw(try);
 
print Sub::Inspector->proto(\&try); #=> '&;@'
 
 
# get attributes
 
use AnyEvent::Handle;
my $code2 = AnyEvent::Handle->can('rbuf');
 
print Sub::Inspector->attrs($code2); #=> ('lvalue')
2010-05-10

進行中

読みたい