|
|
||
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
my $DIED = 0; $SIG{__DIE__} = sub { $DIED = 1; die @_ };
ってなっててEncodeの中で
eval { require Encode::ConfigLocal };
ってなってるから
って事だと
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';
こうなるか?
H::MAのプラガブル実装は2次元的すぎてカッコいいコードの書き方が思いつかない所にあるんだよな。
プラガブルにしなきゃいけない対象が少なくともキャリアと機能の二軸があって、下手すると2Gや3Gの隔たりや端末別にまで波及する。
そりゃプラガブルに個別対応していったら実現出来るよ?
でもそんな事したら大変な事になるよね?
さまざまなユースケースに対応する良い方法があればとっくに誰かが書いてると思うよ。
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も正月くらい自重しろ!
HTTP::MobileAgent
HTML::DoCoMoCSS
Encode::JP::Mobile
Net::CIDR::MobileJP
Data::ToruCa
Mail::Address::MobileJp
HTTP::MobileUserID
HTML-MobileConverter(ちょっとちがうや)
などなどを有効に組み合わせたモバイルなフレームワークが欲しい。
テンプレートエンジンが最適なの思いつかないんだけど
今、テンプレートエンジン作りたいから作ってるだけのHTML書かないテンプレートエンジンでモバイル最適化すればいいのか?
// ==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/
にアクセスしてね。
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
なんか重いきがす
> > フォーマット変換とか測地系変換とか余分な機能を省いて、純粋に経緯度<->iエリア変換するだけの軽いモジュールを書き直すのに、1日あったら十分出来た。
> それこそstfuawscであって、公開すればいいのに。
これはiエリア<->経緯度変換がいかに対したことしてないかを強調するために書いただけであって、
・某社内でだけ利用されることを前提に
・日本測地系決め打ち
・「某社の変態的な」経緯度フォーマット決め打ち
のモジュールに公開する意味があるとは思えません。