メイン

perl アーカイブ

2007年02月23日

Acme::Orisnek

Acme::Kensiroはencodeだけでdecodeが無いよ!
って事で作ってみました。

package Acme::Orisnek;
use strict;
use warnings;
use utf8;
use base qw/Exporter/;
our @EXPORT = 'orisnek';
our $VERSION = 0.01;

sub orisnek {
my $自転車 = shift;
utf8::decode($自転車) unless utf8::is_utf8($自転車);
return 0 unless $自転車 =~ /^[あた]+$/;

$自転車 =~ s/た/0/g;
$自転車 =~ s/あ/1/g;

my $じてんしゃ = (length($自転車) % 8);
$じてんしゃ = 8 - $じてんしゃ if $じてんしゃ;
$自転車 = '0' x $じてんしゃ . $自転車;

my $ジテンシャ = unpack("C", pack("B8", $自転車));
return $ジテンシャ;
}

1;
__END__

=head1 NAME

Acme::Orisnek - kensiro-sinsu decoder

=head1 SYNOPSIS

use Acme::Orisnek;
orisnek('あたたたた'); # => 16

=head1 DESCRIPTION

kensiro-sinsu decoder.

=head1 SEE ALSO

L<Acme::Kensiro>, L<http://www.asahi-net.or.jp/~rc4t-ishr/kensiro.html>

=head1 AUTHOR

Kazuhiro Osawa

=head1 LICENCE

This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L.


自転車漕ぎながらデコードします。
なんかAcme::Kensiroは8bit演算しか出来ない希ガス。

まだ未読のFeed沢山有るなぁ。。。

2007年03月01日

SoozyのEngine化 #0

今のところ$self->reqがApache::Requestになってるのでmod_perl以外で融通が利かないのをどうにかしたい!
Sledgeからcode持って来てCGIとか出来る物も作ってみたけど、あれもApache::Request互換的な実装なので、やっぱりCatalystのそれっぽい実装に変えてしまいたい。

Soozy::Requestにリクエスト系の処理をやらせ
Soozy::Responseでレスポンス周りの処理をする
Soozy::Engineでリクエスト/レスポンスのハンドリングを行う感じ。

問題点は、Soozy::CoreやPluginとかで->reqを多用しちゃってるので、後方互換性を取りながら変えるのをどうするかだ。
多分Soozy::CoreのメソッドをPlugin::Bundle::0_4みたいなので上書きしちゃうのが分かりやすいのかなぁ。
Plugin::Bundle::0_4自体は、Engine化するためのPluginをloadするだけで、実際のメソッド上書きはPlugin::Engineとかでやるみたいな。
後方互換取るのが難しそうな変更内容をPlugin::Bundleで実装していく感じだと、いいかんじかもしれんね。
Soozy::Core自体もバランス良く変更していって奇麗に0.4に移行したい。


CLIとかでも活用できたら嬉しいす。

SoozyのEngine化 #1

Catalystというのは良く出来た物なわけで、結局Catalyst::(Engine|Request|Response)からのコピペになる感じ。
流石にJiftyからは取れない。。。

Plugin::Bundle::0_4とかで後方互換性取るのやめて

use Soozy qw(-Engine=Apache::MP13 -Debug=1 DebugScreen ConfigLoader);
と-Engineオプションを付ける事でEngineが動くようにした。
付けなければ0.3系列の挙動のままになる。
$self->engineがあると要所要所のメソッドをcode refで書き換えて処理フローを変えて行く感じで。

これの影響でPlugin動かないのがいっぱい出て来てるから、PluginのEngine対応しなきゃいけないね。
出来れば0.3系のアプリでもEngine使いたいからSoozy::RequestにApache::Request互換のメソッドつけときたいな。
headerとuploadあたりが出来ればいいはず。

2007年03月02日

SoozyのEngine化 #2

とりあえずPlugin::DebugScreenを動くようにした。

Soozy::Requestに

# for Soozy 0.3 user methods                                                                                                                            
sub header_out {
my $self = shift;

$self->context->res->header( @_ ) if @_ == 2;
$self->context->res->header(shift);
}

*header_in = \&header;

sub status { shift->context->res->status(shift) }

なコード入れといたのである程度互換性保てそうだ。
$self->redirectも$self->res->redirectに飛ばすようにしてある。
あとはPlugin側もちゃんと対応して、FileUpload周りの互換性とる作業したら、Engine化のベースは固まりそうだ。

うまく行けば0.3系のアプリに投入できるな。

takesakoさんお誕生日おめでとうございます!

SoozyのEngine化 #3

file upload周りの互換性チェックを軽くしてみたところ、そのまま動きそうなのでやる事無かった。

PluginはJSONとSession::State::Cookieが過去のRequest API使ってるけど、今のところ吸収されてるので放置しておく。

互換性一通り取れてそうなのでsvk pushした
http://trac.yappo.jp/trac/changeset/278
なんかコメントが酷い事になってる。。。

Catalystからコードを流用したお陰で、ファイルアップロードしてデータをすぐに表示するといった用途が楽に書けるようになった。

template/tt/default/default.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Language" content="en" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>EngineTest - Default on Soozy</title>
</head>
<body>
<h1>Hello! EngineTest - Default default</h1>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><input type="submit" />
</form>
</body>
</html>
とテンプレートを書いて置いて

lib/EngineTest/C/Default.pm

package EngineTest::C::Default;
use strict;
use warnings;
use base qw( EngineTest );

sub do_default {}
sub do_upload {
my $self = shift;
my $upload = $self->req->upload('file');
return $self->forward('default') unless $upload;

$self->res->content_type($upload->type);
$self->res->body($upload->fh);
$self->handle_view('');
}
1;

とコントローラを書くと、アップロードしたファイルを直ぐに表示できる。

用途は全くないけど!

2007年03月08日

SoozyのEngine化 #4

YAPC開催があと一ヶ月を切った今日この頃、皆様はどうおすごしでしょうか。

Soozy::Engineの整備が一通り終わりました。
内蔵Webサーバも付けてmod_perl無くても使えるようになりました。
#3の時からの追加内容は

Soozy::Engine::CGI
Soozy::Engine::HTTP
Soozy::Engine::HTTP::Restarter
Soozy::Engine::HTTP::Restarter::Watcher

です。
結果的にCGI対応にもなりました。
helper scriptもちょっと追加して app_server.pl という内蔵Webサーバコマンドをsoozy.plが作るようになってます。

作業コンソールが若干黒いのでcperl modeの色が奇麗に見えるので、CLIとHelperのリファクタリングも進めます。
大分仕様が変わる予定。

2007年03月16日

今週のSoozy update 2007/3/16

2つプラグインの追加をしてconfig.yamlに便利機能をつけました。

Plugin::CnfigLoaderの中に__path_to()__をサポートしました。
例えばconfig.yamlに

  static:
dirs:
- images
include_path:
- __path_to(./upload)__
と記入して、アプリケーションのroot pathが/usr/local/myappの場合は
  static:
dirs:
- images
include_path:
- /usr/local/myapp/upload
とconfigが書かれた物として動作します。
Catalystから機能をコピーしてきました。



Plugin::Static::Simple

Catalyst::Plugin::Static::Simpleと同等で、静的ファイルを簡単に処理出来ます。たとえば、設定に
  static:
dirs:
- images
include_path:
- __path_to(./upload)__
と書くとhttp://localhost:13000/images/へのアクセスは/usr/local/myapp/upload以下のディレクトリへのアクセスとして見なします。MIMEタイプの処理等も自動的に行われます。
これもCat

Plugin::Camelize

SoozyのURL/Classマッピングは微妙にCamelizeと違う方法でマッピングされていましたが、このプラグインを使うとString::Camelizeを使ってクラスマッピングを行います。

現在は特定のURLを特定のコントローラーに飛ばすプラグインの実装を考えています。

これがおわったら、今度こそCLIをちゃんと作る。

2007年04月10日

Device::USB::MissileLaunchers (video)

わー

続きを読む "Device::USB::MissileLaunchers (video)" »

About perl

ブログ「新宿御苑前ではたらく社員のぶろぐ」のカテゴリ「perl」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはConferenceです。

次のカテゴリはtechです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.34