Yappo::Hatena::Group::Subtech このページをアンテナに追加 RSSフィード

2008-01-22

Test::Base 16:40 Test::Base - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - Test::Base - Yappo::Hatena::Group::Subtech

http://subtech.g.hatena.ne.jp/tokuhirom/20080122/1200990130

use strict;
use warnings;
use Test::Base;
{
    local $SIG{__DIE__};
    require Encode;
}
__END__

===
--- input: 5
--- output: 4

Test::Baseの中で

my $DIED = 0;
$SIG{__DIE__} = sub { $DIED = 1; die @_ };

ってなっててEncodeの中で

eval { require Encode::ConfigLocal };

ってなってるから

2008-01-02

H::MA 2nd 04:10 H::MA 2nd - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - H::MA 2nd - Yappo::Hatena::Group::Subtech

MA::Agent::DoCoMo->load_plugins(qw/Flash::DoCoMo/);

MA::Agent::ThirdForce->load_plugins(qw/Flash::ThirdForce/);

って事だと

package HTTP::MobileAttribute::Agent;
use base;
use warnings;
use Class::Component;

sub load_plugins {
    my($class, @plugins) = @_;
    for (@plugins) {
        next if s/+//;
        $_ = "HTTP::MobileAttribute::Plugin::$_":
    }
    $class->NEXT( load_plugins => @plugins);
}
package HTTP::MobileAttribute::Agent::DoCoMo;
use strict;
use warnings;
use base 'HTTP::MobileAttribute::Agent';

こうなるか?


おれもマジレスすると 03:52 おれもマジレスすると - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - おれもマジレスすると - Yappo::Hatena::Group::Subtech

H::MAのプラガブル実装は2次元的すぎてカッコいいコードの書き方が思いつかない所にあるんだよな。

プラガブルにしなきゃいけない対象が少なくともキャリアと機能の二軸があって、下手すると2Gや3Gの隔たりや端末別にまで波及する。

そりゃプラガブルに個別対応していったら実現出来るよ?

でもそんな事したら大変な事になるよね?


さまざまなユースケースに対応する良い方法があればとっくに誰かが書いてると思うよ。

人格攻撃とコードDISを混ぜて書いても良いのは小学生までだよね〜 01:48 人格攻撃とコードDISを混ぜて書いても良いのは小学生までだよね〜 - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - 人格攻撃とコードDISを混ぜて書いても良いのは小学生までだよね〜 - Yappo::Hatena::Group::Subtech

http://kokogiko.net/m/archives/002118.html

tokuhirom氏の書きようの中に、なんか機会見つければとりあえずkokogikoはDISっとけ、っぽい温度を感じたので、この際過去に遡って書いたような感じです。

私個人の主観の世界の中では自然に繋がったのですが、客観的にはそうなのかもしれません。

申し訳ないです。

結局、ここが論点であったようで、その他のコードに関する怒りはおまけ的だってのがわかったけれども、コード周りのだけ突っ込んでみる。


個人的には、「車輪の再発明」が云々、みたいなことを言われる中では、公表した以上、開発者が重要視していないユースケースでも対応すべきなのではないか、みたいな感覚を持っていて。

楽しんでコードを書いていて、それをたまたまCPANに上げてるだけなのに、そこまで責任を負うというのはちょっと楽しくないですね。

楽しくて書いてたのに、いつの間にか他の人の為にメンテナンスを義務を負う様になっていったら、つまらなくなってコードのメンテナンスすらされなくなるよね。

そうしてメンテされなくなったこーどがたまたま有用で利用者がいっぱいだったら社会の損だよね。


CPAN Autherのスタンスなんて自由で良いしRTのバグ潰さなくったって、常に利用する側に選択権がある訳だから文句言う前にコード書けという話だよね。


たとえばテストがほとんど真っ赤ってのも逆に清々しい。

http://cpantesters.perl.org/author/MIKIHOSHI.html


お前のコードはどうなのよ、という話もありますが、エゴサーチで散々DISられているのは知っていますが、具体的に「ここをこう直してくれ」みたいな要望は、Perlギーク周り以外からはいくつかありましたが、Perlギーク周りからは一切来ていません。

その過程に至る前にGeo::Coordinates::Converterを作ってリリースしちゃった。

CPANでのGeo周りのあまりの混沌っぷり(Location::GeoTool含む)が嫌になってオレオレした感じ。


過去、あれを個人でカバーするために、名前空間を汚染するコードを挙げる愚を犯した経験がありまして、その事については非常に反省しているのですが、その愚を私を含め再び犯す者が出ないようにするためにも、キャリア毎の対応をそれぞれのユースケースを重要に思っている人間に開放すべきじゃないかみたいな話をずっとしてますし、実際そうできるように改造したコードもメンテナに送ってます(エッジな方にはお気に召さないようなレベルのコードだったので、スルーされましたが)。

そんなのメンテナにはメンテナの事情があるんだし、別にリポジトリもオープンじゃないんだから

いくら有用なコードだとしても、気にくわなければ自分で作り直せば良いのに。

そして作り直した物の有用性を証明してsexさんとかをビックリさせれば良いのに。


あんまり言ってると自分までstfuawscになるので、書き直し版のスクラッチコード書いたよ!

package HTTP::MobileAttribute;
use strict;
use warnings;
use Class::Component;

our $VERSION = '0.01';
1;

__END__

=head1 NAME

HTTP::MobileAttribute - Yet Another HTTP::MobileAgent


そして

実際、今の会社で、フォーマット変換とか測地系変換とか余分な機能を省いて、純粋に経緯度<->iエリア変換するだけの軽いモジュールを書き直すのに、1日あったら十分出来た。

それこそstfuawscであって、公開すればいいのに。



コード書きなんだからコードで喧嘩しないのはとても格好悪い、結局コードで反論してないよね。

ってtokuhiromの人格攻撃が目的だからコード無くても良いのか。



結論としては

@HoryGrail は 0.1% をサポートしないとダメだとDISられることにキレていて

@kokogiko は 0.1% をサポートしないと駄目だと DIS ってるから

二人を混ぜれば良いしHoryGrailはもっと会社の事をWeb上で発信すればいい。



そして一番おれが言いたい事は

正月はエッチな番組一杯で集中したいのに、局地戦を各地で展開されてちゃエロに集中出来ないじゃないか!kokogikoもHoryGrailも正月くらい自重しろ!

kokogikokokogiko2008/01/03 12:131箇所だけ。
> > フォーマット変換とか測地系変換とか余分な機能を省いて、純粋に経緯度<->iエリア変換するだけの軽いモジュールを書き直すのに、1日あったら十分出来た。
> それこそstfuawscであって、公開すればいいのに。

これはiエリア<->経緯度変換がいかに対したことしてないかを強調するために書いただけであって、

・某社内でだけ利用されることを前提に
・日本測地系決め打ち
・「某社の変態的な」経緯度フォーマット決め打ち
のモジュールに公開する意味があるとは思えません。

yappoyappo2008/01/03 12:51その某社のサービスをhackする人にとっては有用だったりしませんか?

2007-11-13

mobile frameworkが欲しい 11:58 mobile frameworkが欲しい - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - mobile frameworkが欲しい - Yappo::Hatena::Group::Subtech

HTTP::MobileAgent

HTML::DoCoMoCSS

Encode::JP::Mobile

Net::CIDR::MobileJP

Data::ToruCa

Mail::Address::MobileJp

HTTP::MobileUserID

HTML-MobileConverter(ちょっとちがうや)

etc..etc..

などなどを有効に組み合わせたモバイルなフレームワークが欲しい。

テンプレートエンジンが最適なの思いつかないんだけど

今、テンプレートエンジン作りたいから作ってるだけのHTML書かないテンプレートエンジンでモバイル最適化すればいいのか?

tokuhiromtokuhirom2007/11/14 16:55それ sledge でできるよ

2007-11-02

日本ハムが優勝した気分になれるグリモンかいた 14:43 日本ハムが優勝した気分になれるグリモンかいた - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - 日本ハムが優勝した気分になれるグリモンかいた - Yappo::Hatena::Group::Subtech

// ==UserScript==                                                                                                                                       
// @name           日ハム優勝おめでとう!                                                                                                     
// @namespace      http://subtech.g.hatena.ne.jp/yappo/                                                                                                 
// @include        http://event.rakuten.co.jp/baseball/2007/winner/                                                                                     
// ==/UserScript==                                                                                                                                      

(function() {
     var w = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;
     var h = w.document.body.innerHTML;
     h = h.replace(/ttl_d.jpg/g, 'ttl_f.jpg');
     h = h.replace(/sub01_d.gif/g, 'sub01_f.gif');
     h = h.replace(/中日/g, '北海道日本ハム');
     h = h.replace(/ドラゴンズ/g, 'ファイターズ');
     w.document.body.innerHTML = h;
})();

これ入れてから

http://event.rakuten.co.jp/baseball/2007/winner/

にアクセスしてね。

2007-10-04

Scalar::Filter 20:11 Scalar::Filter - Yappo::Hatena::Group::Subtech を含むブックマーク はてなブックマーク - Scalar::Filter - Yappo::Hatena::Group::Subtech

Web::Scraper::Filterだけ使うラッパー

package Scalar::Filter;

use strict;
use warnings;

require Carp;
require Web::Scraper;

use overload q{""} => \&as_string;

our $AUTOLOAD;
our $VERSION = '0.01';

sub new {
    my $class  = shift;
    my $scalar = shift;

    bless {
        scalar  => $scalar,
        filters => [],
    }, $class;
}

sub reset {
    my $self = shift;
    my $filters = delete $self->{filters};
    $self->{filters} = [];
    $filters;
}

sub add_filter {
    my($self, $filter, @args) = @_;

    push @{ $self->{filters} }, {
        filter => $filter,
        args   => \@args,
    };
    $self;
}

sub as_string {
    my $self = shift;
    my $filters = $self->reset;
    my $value = $self->{scalar};
    for my $filter (@{ $filters }) {
        $value = eval { Web::Scraper::run_filter($value, $filter->{filter}) };

        if ($@) {
            Carp::croak("Filter $filter->{filter} had an error: $@");
        }
    }
    $value;
}


sub AUTOLOAD {
    my $self = shift;
    my $filter = $AUTOLOAD;
    return if $filter =~ /::DESTROY$/;
    $filter =~ s/.*:://;
    $self->add_filter($filter, @_);
}


1;
package Web::Scraper::Filter::space2lf;
use strict;
use warnings;
use base qw( Web::Scraper::Filter );
sub filter { s/ /\n/g  }
1;
package Web::Scraper::Filter::text2test;
use strict;
use warnings;
use base qw( Web::Scraper::Filter );
sub filter { s/text/test/g  }
1;

test.pl

use strict;
use warnings;

use Scalar::Filter;

my $f = Scalar::Filter->new(' sample text ');

$f->space2lf->text2test;

print $f;

result


sample
test

なんか重いきがす