Hatena::ブログ(Diary)

Hack Forever改めhi-rocksのはてなダイアリー RSSフィード

2009-01-31

リニューアルのおしらせ

これまで、年に数回という更新頻度ではありましたが、自分としてはいちおうここがメインのブログという認識でした。

ですが、このたび自分もチームの一員として関わったライブドアブログの新CMSがリリースされましたので、

[リニューアル速報 PART7] 新管理画面、今日から使えます!|livedoor Blog 開発日誌

これを機に、これまでほとんど放置状態だったあちらのブログをメインと位置付けることにしました。


で、メインのブログの名前をどうしよう、と考え始めたところ、ここで使ってた『Hack Forever』(これも元々はシャレでつけた) がかなり気に入ってたので、やっぱりメインはこれにしたい!ということであちらで『Hack Forever』の名称を使用することにしました。

Hack Forever


で、ここの今後についてですが、いちおう少ないながらもブクマしてくれてる人がいたり、フィードを読んでくれてる人もいるので、ここはこのまま残して、これまでにも書いてきたようなちょっとしたコードの断片みたいのはこちらに書くようにしようと思ってます。

まあ、更新頻度は今までよりさらに落ちるかもしれませんが、、、これからもよろしくお願いします。


ちなみに『Hack Forever』の元ネタはこちら

FUCK FOREVER-JAPAN ONLY ミニ・アルバム

FUCK FOREVER-JAPAN ONLY ミニ・アルバム

2008-08-26

mixi OpenIDでなんか作った

とりあえず雰囲気つかむ感じで、このまえの週末に作ってみました。→mopit

mixi OpenIDでログインしてテキストが書けるだけの簡単なプログラムです。いちおうマイミク認証もあります。さくらインターネットのスタンダードで動かしたかったので普通(?)にCGIです。

ソースはこちら http://coderepos.org/share/browser/websites/mopit/trunk

今回はとにかくてきとうにパーっと作るつもりで始めたので、フレームワークどころかO/Rマッパーすら使ってません (ややSledge風味ですが)。本当はこういう単純なやつでも、Catalystとかでちゃちゃーっとやっつけちゃったほうがスマートなのかもですが。まあ、とりあえずなにかの参考にしてもらうにはこういうのもいいんではないかと思いまして。

あと、肝心のOpenIDの仕様については、正しく理解している自信があまりないので、ひょっとすると間違いがあるかもしれません。(nicknameを取るとことかはこんなんでいいの?)

ちなみに、mopitは "mixi OpenID test" の略です

2008-05-18

[] 複数のPDFを一つのファイルに

またまた小ネタですいません。

いや、週末はYAPCのまとめとか書くつもりだったんですが、なんだかんだいろいろと脱線しまくってたところで、嫁が「ウチは新聞とってないから区報を読もうと思ったらどっかでもらってこないと」と言いだしたので、区報なんて区のサイトに掲載されてたりするんじゃないの?と思って見てみると、練馬区の場合、ちゃんとPDFデータが公開されてるんだけど、1ページ1ファイルになっててそれが毎号8ページ分、っていう形式だったので、これはめんどくさいということで、全部ダウンロードしてくっつけてしまえ、というスクリプトを書いてみました。

もっとネタ的に面白くなるかと思ったんだけど、CPANを漁ってCAM::PDFというモジュールを見つけたら、あとはこんな簡単にできちゃってもうネタにもなりませんね。CPAN万歳!

#!/usr/bin/env perl
use strict;
use CAM::PDF;
use LWP::UserAgent;

my $date = shift || do {
    my ( $y, $m, $d ) = ( localtime() )[ 5, 4, 3 ];
    sprintf "%d%02d%02d", $y + 1900, $m + 1, $d;
};

my $base_url = 'http://www.city.nerima.tokyo.jp/kuho/' . $date;
my $output   = './' . $date . '.pdf';

my $ua = LWP::UserAgent->new( keep_alive => 1 );

my $get_pdf = sub {
    my $url = sprintf "%s/page%d.pdf", $base_url, $_[0];
    my $response = $ua->get($url);
    die $response->status_line unless $response->is_success;
    return CAM::PDF->new( $response->content );
};

my $pdf = $get_pdf->(1);
$pdf->appendPDF( $get_pdf->($_) ) for ( 2 .. 8 );
$pdf->cleanoutput($output);

__END__

ちなみに、練馬区の区報は毎月1日11日21日の3回発行です。これを発行日に自動で実行するようにしといてメールで送りつけるとかもありですね。

あ、あとでYAPCのまとめもちゃんと書きますよ(のつもり)。

2008-05-07

そろそろnipotan niteについて一言いっておくか

僕がnipotanもしくはハヘロロハムーさんのことを知ったのは、島男ネタのあたりからだったと思う。

この頃はまだ、自分にとってのライブドアという会社のイメージも、当時の一般的な人々と大差なく、まあなんというか、とりあえずかつてのオン・ザ・エッヂとはだいぶかけ離れちゃったのかなあ、とか思っていた。

そうしたイメージを覆してくれたのもまたnipotanのこのエントリーだった。

これを読んで、なんだかんだいってもコアのところは何も変わってない、今でも充分トンがった会社だということがわかって、なんだか嬉しく思ったりした。

そうこうしているうちに、例の事件が起きたわけだが、その時もまたnipotanのこのエントリーを読んで、自分は何もできないながらも心の中でエールを送るとともに、これを書いたnipotan自身にも、ある種の尊敬の念のようなものを抱くようになっていったのだった。

(中略)

そうして、晴れて採用の通知を受け取ることとなったのだった。

が、その喜びからほんの数日後、近くnipotanが米国へ赴任することになったらしいということを知ることになる。そして、nipotanを激励しつつ送り出すための会『nipotan nite』が開催されるという。参加者枠には、ライブドア関係者のみならず、Perl関連というのがあったので、とにもかくにも参加することにする。

とはいえ、まだライブドア入社は公にできない微妙なタイミング。「nipotanと一緒に仕事がしたくてわざわざ転職までしたのにー!キーッ!」とかいうネタ(?)も使えない。おまけに当日は仕事のほうでハマってしまい、遅れること1時間、ようやく会場に到着するも、オープニングのイリュージョンとか水室にぽ介ライブとかはことごとく見逃して乗り遅れ感満点の中、会場のみなさんはすでにそれなりに出来あがっていい調子になっちゃってるし、料理はもう残り物が少々って感じだし、そもそも業界内にお友達がそんなに多いわけではない自分としては、最初のうちはどうふるまってよいのか途方に暮れていたのだった。

が、やがて数少ない顔見知りな人にも会えてお話したり、ライブドア社内で自分の入社を知っている一部の人にご挨拶したりと、徐々に場に馴染めるようになっていった。(id:clouderさんにいたっては、彼のほうから声をかけてくださり、社内の話とかいろいろ聞かせていただきました。ありがとうございました!)

そうして最後、もう会もお開きという頃になって、nipotanに直接ご挨拶する機会を得た。「一緒にお仕事できると思ってたんですが〜TT」という恨み言に対して、「他にも優秀なエンジニアがいっぱいいますので、がんばってください」という温かい言葉をいただき、僕もnipotanの向こうでの活躍をお祈りしてます、といってお別れしたのだった。

というわけで、5月1日付けで株式会社ライブドアに入社しました。よろしくお願いいたします。

2008-02-18

複数のCSSをまとめるApacheのハンドラ

ふと思いたって適当に書いてみました。

小さく分割されたバラバラなcssファイルを、1つのファイルに連結して出力します。更新日時を見て、分割ファイルのいずれかが更新されてたら、連結ファイルを書き換えます。(ついでにminifyもカマしてみてますがこれはどうかな?)

もちろん開発環境向けなわけですが、本番環境にはそのまま連結ファイルを上げればいいってことで。

今のとこ、configでディレクトリを指定してその下のcssファイルを全部読むって感じになってるんだけど、これだと結局1種類しかできないので素敵じゃないかもと思うので、どうしようか考え中です。

package Apache::ConcatCSS;
use strict;
use Apache::Constants qw(:common);
use Apache::Log ();
use CSS::Squish;
use CSS::Minifier qw(minify);

sub handler {
    my $r = shift;
    return DECLINED unless $r->content_type() eq 'text/css';

    my $log = $r->server->log;

    my $file  = $r->filename;
    my $dir   = $r->dir_config('CSSBaseDirectory');
    my @files = <$dir/*.css>;

    return DECLINED
        if ( -e $r->finfo && !if_modified( ( stat _ )[9], @files ) );

    my $squished = CSS::Squish->concatenate(@files);
    my $minified = minify( input => $squished );

    open my $out, '>', $file or return SERVER_ERROR;
    print $out $minified;
    close $out;

    $r->send_http_header();
    $r->print($minified);
    return OK;
}

sub if_modified {
    my $mtime = shift;
    for my $css (@_) {
        return 1 if $mtime < ( stat $css )[9];
    }
    return;
}

1;

__END__

=head1 NAME

Apache::ConcatCSS

=head1 SYNOPSIS

  # in httpd.conf
  <Location /css>
      SetHandler perl-script
      PerlHandler Apache::ConcatCSS
      PerlSetVar CSSBaseDirectory /path/to/css_directory
  </Location>

=head1 DESCRIPTION

=head1 METHODS

=head1 AUTHOR

Hiroaki Yoshida E<lt>yoshidaster at gmail.comE<gt>

=head1 SEE ALSO

L<CSS::Minifier>
L<CSS::Squish>

=cut