タグ

ブックマーク / blog.64p.org (81)

  • Amon2 をつかったウェブアプリケーションを GUI アプリにはやがわりさせる!! - tokuhirom's blog

    GUI アプリをつくりたいけど、どうもめんどくさくて、ウェブアプリケーションですませてしまうウェブエンジニアは多いとききます。 とはいえブラウザでいちいちひらくのも面倒だし、daemontools つかうのもちと面倒。。というわけで、GUI アプリケーションにしてしまいましょう。 以下のような、キモいが回転する PSGI アプリがあったとします。これを GUI アプリケーションにはやがわりさせるにはどうしたらいいでしょうか。 use strict; use warnings; use utf8; use Amon2::Lite; get '/' => sub { my $c = shift; return $c->render('index.tt'); }; # code was taken from: http://jsdo.it/moriyoshi/syTt __PACKAGE__-

  • プログラミング言語 Tora を公開した - tokuhirom's blog

    http://tora-lang.org/ Perl6 の開発が宣言されてから10年以上の歳月がたち、いまだ実用的な実装はあらわれません。 そんななかで、next perl 的なものをつくりたいと gfx がいってから 3ヶ月ぐらいたっていますが、こちらも一行もコードをかいた様子はありません しょうがないので僕がつくってみました。まだあらけずりですが、意外とうごいています。 今回、とくに Perl5 にあった機能のなかでけずりたかったものは以下のとおり context@ary, %hashつけたかったものは以下のとおり autoboxingMoose 的なものの組み込みハックしやすいVM組み込みライブラリの実装しやすさ 未実装な点は以下のとおり Moose 的なアクセサSignal handlingこまかい socket 関連のものHash::MultiValue の組み込みなどなど。 g

  • 唐突ですがここでプラグインをかいてみよう 〜 軽量フレームワークAmon2入門 (10) 〜 - tokuhirom's blog

    Amon2 のプラグインの書き方がよくわからないという話をたまに聞くので、そのへんについて説明したいとおもいます。 基的にはプラグインはただの Perl モジュールで、ただ一つの規約にしたがえば問題ありません。それは 'init'という名前のクラスメソッドをもっているということです。ただそれだけです。 package MyPlugin; sub init { } 1;これで、ひとつの valid なプラグインです。 さて、なにもしないプラグインをつくってもしょうがないので、ちょっと機能をたしてみましょう。 package MyPlugin; sub init { my ($class, $context) = @_; $context->add_trigger( AFTER_DISPATCH => sub { my ($self, $res) = @_; $res->header('X-

  • Amon2とJSONとセキュリティ - tokuhirom's blog

    [1]http://d.hatena.ne.jp/ockeghem/20110907/p1[2]http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05a.html[3] http://msdn.microsoft.com/ja-jp/asp.net/ff713315[4] http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/cross-site_including.phpあたりをよんで、JSON とセキュリティについてかんがえてみた。 ここで、有効とされている対策のうち while(1); を先頭に付与するPOST ですべて処理するといったあたりは、RESTful でないし、BK 感がひどいというか質的ではないのでできるだけやりたくない。 また、Amon2 では互換

  • Amon2::Setup::Flavor::Large + Teng をもちいた簡単な掲示板の作成 その3『Tengの行オブジェクトを拡張して投稿日付を表示しよう』 〜 軽量フレームワークAmon2入門 (9) 〜 - tokuhirom's blog

    さて、ページングもついて、一応うごいているといえる状況になっている掲示板ですが、とにもかくにも投稿日付がわからないのは不便といっていいでしょう。 通常ならばもちろん投稿日付を保存するようには設計段階からしておくところですが、今回はチュートリアルなので一度におぼえることをすくなくするために細切れにするとともに、漸近的にウェブアプリケーションを成長させていくための技法をまなんでいっていただこうという気持なわけです。 さて、スキーマにデータを追加するには、まず sql/mysql.sql を更新しましょう。 CREATE TABLE IF NOT EXISTS sessions ( id CHAR(72) PRIMARY KEY, session_data TEXT ); CREATE TABLE IF NOT EXISTS entry ( id INT UNSIGNED NOT NULL AU

  • Amon2::Setup::Flavor::Large + Teng をもちいた簡単な掲示板の作成 その2『ページャーをつけよう』 〜 軽量フレームワークAmon2入門 (8) 〜 - tokuhirom's blog

    さて、掲示板をつくったとはいえ、これだけではおもしろくありませんね。 まずこの掲示板には重大な欠陥があります。具体的にいうと、ページングがされていません。 ウェブアプリケーションにおいてはページングは非常に重要な要素です。 なにかを一覧表示するページをつくるときに、ページングのことが思いうかばないようでは一人前のウェブエンジニアとはいえません。ページングを手抜きすると、あとあと重いページになって泣くことになるでしょう。ページングは最初の段階でいれておくのが結局は楽なのです(という自戒)。 さて、今回の掲示板では Teng をつかっているので非常にページャの実装が容易になっています。Teng ではページャ関連の実装はプラグインとなっていますから、Teng に Teng::Plugin::Pager をよみこませましょう。lib/MyBBS/DB.pm に以下のようにかきましょう。 packa

  • Amon2::Setup::Flavor::Large + Teng をもちいた簡単な掲示板の作成 〜 軽量フレームワークAmon2入門 (7) 〜 - tokuhirom's blog

    前回から大分時間が経ってしまいましたが、唐突に Amon2+Teng で大きめのアプリをつくるチュートリアルでもはじめましょう。Teng というのは、O/R Mapper とよばれる種類のライブラリで、DB へのアクセスを簡単にしてくれるものです。 さて、とにかくも準備からはじめましょう。 % cpanm Amon2 Amon2::Setup::Flavor::Teng Tengで Amon2 をインストールします。 % amon2-setup.pl --flavor=Large,Teng MyBBSとするとスケルトンができあがりますので % cd MyBBSとして、プロジェクト用のディレクトリにはいります。 %cpanm --installdeps .とすると、依存モジュールがインストールされます。 % plackup app.psgi -R libとうつと、サーバープロセスが起動します

  • Perl5 においてファイルからの読取る場合における Malformed UTF-8 問題 - tokuhirom's blog

    Perl::Critic が最近 PerlIO layer に :utf8 つかうと怒ってくるけど、べらんめえしったことか! とおもっていたら、サイトが表示できなくなった(このような問題を hasegawayosuke 現象と我々はよんでいる)ので、ちゃんと調べた。 https://metacpan.org/module/Perl::Critic::Policy::InputOutput::RequireEncodingWithUTF8Layer 以下のようなスクリプトを実行する。 #!/usr/bin/perl use strict; use warnings; use utf8; use 5.010000; use autodie ':all'; use Devel::Peek; { open my $ofh, '>', 'foo.txt'; print $ofh "\xC0\xAF"

  • Exporter::Auto ってのつくってみたよ - tokuhirom's blog

    https://github.com/tokuhirom/Exporter-Auto なんか @EXPORT にいれるのだるくね! このプロジェクトでしかつかわないから全部 export しちゃってくれていいですよ! みたいなやつ。ありませんか? ありませんか。そうですか。そうなら、ブラウザの「戻る」ボタンを押してください。ってところまでかいてから気付きましたが、最近のブラウザって「戻る」ってかいてありませんね。はい。 で、概要ですが、Sub::Identify + B::Hooks::EndOfScope という荒技で、パブリックっぽいメソッドの一覧をみつけて @EXPORT にぶっこむというイカした技です。 Exporeter::Auto->import がよばれる時点、つまり use Exporter::Auto の時点ではまだメソッドが実際に定義されていないので、B::Hooks:

    TMTL
    TMTL 2011/10/31
  • Amon2::Auth によるロケタッチAPIをつかったサイトの構築 〜 軽量フレームワークAmon2入門 (6) 〜 - tokuhirom's blog

    https://github.com/tokuhirom/TouchTouch/commit/dbb3cdeacf6629dc8213bd9fa50e14f9712634b9 久々に Amon2 入門だ! 最近リリースされたばかりの Amon2::Auth モジュールをつかってみよう! Amon2::Plugin::Web::Auth への依存を Makefile.PL に設定する!! diff --git a/Makefile.PL b/Makefile.PL index f8b9297..8f0f183 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -20,6 +20,7 @@ WriteMakefile( 'Test::WWW::Mechanize::PSGI' => '0', 'JSON' => '2.50', 'Plack::Midd

  • Shipped File::Zglob 0.01 - tokuhirom's blog

    http://github.com/tokuhirom/File-Zglob File::Find::Rule とかまあ結構なんですけども、 File::Find::Rule->file->in('lib')->name('*.pm')っていうフォームはなかなかぱっと思いだしづらいです。ユーザーフレンドリーじゃないんですね。 シェルだったら lib/**/*.pm ってうったらいっぱつででてくるじゃないですか。そういう風にうちたいですよ。 というわけでつくってみました。 File::Zglob です。 use File::Zglob; my @files = zglob("lib/**/*.pm");という風にうつだけでいいんです。このインターフェースならわすれないでしょう。shell で普段からうってますものね。 ちょっとしたスクリプトとかで超便利だとおもうので、ぜひつかってみてください

    TMTL
    TMTL 2011/09/29
  • Testing Web Application 2011秋 - tokuhirom's blog

    とにかく楽に、お気軽に。お気軽にテストを追加できて、お気軽にテストを実行できる。というのがなによりも重要です。 追加しようとおもったときに「どう追加したらいいかわからない」という状況になりがちなので、あらかじめいろいろな構成要素ごとにテストをひととおりかいてみるというのも重要だとおもいます。O/R Mapper のクラスのテストとか、model のテストとか、コントローラのテストとか、JSON API のテストとか。。 ExtUtils::MakeMaker でテストをうごかさないExtUtils::MakeMaker を素でつかうと blib/ とかつかってきてうざいので、Makefile.PL に以下のような hack をほどこしてあります。ウェブアプリケーションで blib/ とかにコピーする必要ないですよね。実運用でも blib/ でうごかさないし、インストールもしませんし。 #

  • ゆるふわ CI サーバー Ukigumo ちゃんのつかいかた、かいたよー - tokuhirom's blog

    Ukigumo はゆるふわであることを第一目標として設計されているので、適当にサーバーを設置していれば、プロジェクトの担当者がそれぞれすきなタイミングでつかえるようになります。 まあ、なんか気軽に設置して気軽につかえるやつがいまいまほしかったのでつくったというかんじです。 クライアント側とサーバー側は完全に分離しているんで、クライアント側は自分のすきな実装でできるし、サーバーの管理者の世話になる必要がまったくありません。その方が楽でしょうということで。というか俺は管理したくないので。いや、するけど、できるだけ最低限の手間でやりたいじゃん。セットアップも超簡単にできるようにしてあるというか、むしろ dotcloud とかにすぐに設置できるレベルですよ。 で、クライアント側はどうやってつかいはじめたらいいかということだけども、非常に簡単で、以下のように一個 HTTP Request をおくるだ

  • Amon2::DBI からはじめるデータベースアプリケーション 〜 軽量フレームワークAmon2入門 (5) 〜 - tokuhirom's blog

    はい! というわけで3連休あけですね。 Ruby 会議にいったり、Android なんとかにいったり、リア充生活をおくったりと、各自たのしい3連休をすごされたことかとおもいます。 さて、連休あけの今日は、かるく Amon2::DBI について解説をしてきましょう。 Amon2::DBI は、DBI の薄いラッパーで「素の DBI だとちょっと不便だな」というところにピリリときいてくる山椒のような存在です(ちかくのチンマーハンは山椒がきいてなさすぎるので、もうちょいきいてるといいなとおもいます)。非常にうすいラッパーだし、コードベース自体も非常に簡潔なので、ひととおりよんでからつかうといいかとおもいます。 DBI には子クラスを設定できる機能があって、Amon2ではそれをつかって拡張しています。詳細については DBI の Subclassing the DBI の項目をよんでください。 Am

  • TinyURLをつくってみよう 〜 軽量フレームワークAmon2入門 (4) 〜 - tokuhirom's blog

    インストール今回は Amon2 の最新版が必要なので、すでにインストールしている場合でもあらためてインストールしてください。 環境は OSX, linux を想定していますが、Windowsでもそれほどかわらないかと思います。Windows でやっていてわからなかったら mattn さんにきいてください。 さて、Amon2 のインストールは非常に容易です。Amon2はCPANにリリースされていますから、通常のCPANモジュールと同様にcpanmコマンドでインストールできます。 % curl -L http://cpanmin.us | perl - Amon2 Amon2::DBIで、インストールが完了します。テストに失敗する場合には、コメント欄などできいてください。 TinyURLを作るぐだぐだとかたっていても何もつたわらないと思うので、チュートリアルに入りましょう。 とりあえず、簡単で

  • PSGIとPlackと 〜 軽量フレームワークAmon2入門 (3) 〜 - tokuhirom's blog

    さて、今回は裏をかいて、いったん題のAmon2の話からはずれて、PSGI/Plackのはなしをしましょうかね。 PSGI/Plackは基的にはアプリを書く人は知る必要はあまりないのですが、概念ぐらいは知っておくにこしたことはない、というところです。 さて、数年前のYAPCでわたくしが口を酸っぱくして申し上げたことを皆さんはおぼえているでしょうか。そう、一番大事なのは「PSGIは仕様。Plackは実装」ということなのでした。ここだけ把握していれば十分なので、PSGI/Plack の詳細に興味がない人はブラウザの Back ボタンを連打してください。 PSGIってなんだ?PSGIとは「ウェブアプリケーションとアプリケーションサーバーの間のプロトコルのこと」です。Perlの基的なデータ型であるArrayRef, HashRef やCodeRefを使ってHTTPリクエストとレスポンスを表現し

    TMTL
    TMTL 2011/07/19
  • tokuhirom blog

    Amon2のアーキテクチャまずはこちらの図をごらんください。 Amon2 の構造は非常に単純であることをご理解いただけたかとおもいます。基的な構造はこれがすべてなのです。なにしろ、できるだけおぼえることがすくなくなるように意図して設計されておりますから、こういうシンプルな構造になるのもあたりまえといえましょう。 ここで特徴的なところが二点あります。Web Context Object が Context Object を継承しているところ、レスポンスオブジェクトが has-a 関係ではないところです。 Web Context Object が Context Object を継承しているのは、CLI でもなんとなくつかえるようにするためです。この工夫により CLI での開発が異常に楽になっています。このあたりについてはおって解説したいとおもっています。 レスポンスオブジェクトが has-

    tokuhirom blog
  • tokuhirom blog

    Amon2の利点 〜 軽量フレームワークAmon2入門 (1) 〜 というわけで、私が中心となり開発を進めているウェブアプリケーションフレームワークであるところのAmon2に関する連載企画です。続くかどうかはわかりませんけど! 対象読者はウェブアプリケーションの開発の基礎知識はあり、Perlプログラミングを一通り理解していることを前提としています。 Amon2とはAmon2は、ウェブアプリケーションフレームワークです。ウェブアプリケーションフレームワークというのは、ウェブアプリケーションを書くために楽をするためのライブラリと、それに関するツール一式のこととここでは定義しましょう。 そう、Amon2を使えば非常に楽に、高速に、ウェブアプリケーションを開発できてしまうのです。 なぜAmon2なのかしかしウェブアプリケーションフレームワークとひとくちにいっても、Perlだけでも、数え切れないほど

    tokuhirom blog
  • tokuhirom blog

    Amon2::Lite というモジュールを Amon2 に添付してみました。 まだ EXPERIMENTAL な実装なので今後かわる可能性もありますが、とりあえずリリースしました。 http://beta.metacpan.org/module/Amon2::Lite Sinatra や Mojolicious::Lite のような感じで、以下のように app.psgi をかくことができます。 use Amon2::Lite; get '/' => sub { my ($c) = @_; $c->render('index.tt'); }; __PACKAGE__->to_app(); __DATA__ @@ index.tt <!doctype html> <html> <body>Hello</body> </html> 通常の Amon2 の形式への移行も容易だとおもうので、おためし

    tokuhirom blog
    TMTL
    TMTL 2011/07/11
  • HTML::Scrubber, HTML::StripScripts::Parser and HTML::Filter::Callbacks - tokuhirom's blog

    #!/usr/bin/perl use strict; use warnings; use utf8; use autodie; use 5.010000; use Benchmark ':all'; use HTML::StripScripts; use HTML::StripScripts::Parser; use HTML::Scrubber; use HTML::Filter::Callbacks; say "Perl $]"; for (qw( HTML::StripScripts HTML::StripScripts::Parser HTML::Filter::Callbacks HTML::Scrubber HTML::Parser )) { eval "use $_;1;" or die $@; printf "%s %s\n", $_, $_->VERSION; } sa

    TMTL
    TMTL 2011/07/06