2009年12月アーカイブ

2009年の回顧と展望

| コメント(2)

まったく、時の経つのは早いもので、2009年の年の瀬も押し迫ってきました。夏休みの宿題を9月に入ってから終えるという悪癖があった私のことですから、今年を総括する記事をこんな時刻に書き始めるのも無理からぬ事です。

しかし、新学期の開始日と時間割を突き合わせ、例えば中学校では

  • 理科Iは月・火・金に授業がある
  • 新学期は9月1日水曜日に始まる
  • 故に理科Iの宿題は9月2日木曜日中に片付ければよい

という嫌らしい打算で生きて来た私にとっては、むしろこのくらいが普通の生き様とも言えます。

ともあれ、今年2009年を一言で表現するのであれば、ただひたすら「感謝」の一年だった、ということになります。

アセトアルデヒドの勢いで変な物を書いたような気がします。書きかけですけれども。

Games::DateTime - A simple date and time object on any games

screenshot_of_p5-games-datetime.png

たまには脇道に逸れて、ff14.nameおよびff14.asia向けの部品的なモジュールを書くというのも、気分転換に良いかも知れません。何に対しての気分転換かというと、独り身の帰宅路で涙にむせぶ件といったところでしょうか。

上掲のスクリーンショットのような「時計」であればFlashやJavaScriptでもよく見掛けるのですが、「ローカルタイムな地球現在時→仮想世界の現在時」以外に

  • 仮想世界の日時→地球の日時方向への変換
  • ローカルタイム以外のタイムゾーンへの対応
  • 地球日時もしくは仮想世界の日時の指定
  • 時間計算(地球および仮想世界の両方)

などが出来る「日付時刻クラス」というのは寡聞にして知らないので、書きました。取り敢えずググって要件を見つけられたのはFF11だけでしたが、起点日時の対称が見付かれば、プレースホルダー的に置くだけ置いたEverQuestなどの実装にも対応出来るかも知れません。

ちなみにスクリーンショットの時計はライブラリー本体ではなくexamplesディレクトリー以下のおまけであるGames::DateTime::Clockです。ff14.nameやff14.asiaでは、最終的にはこれとGames::DateTimeをJavaScriptに移植することになります。

なお、Acme::*以下の名前空間にするかどうかは考え中です。また、テストは酔いが覚めてから書く予定です。などと書いていると肝臓が明日も泣きそうな気がします。

備忘録ですが、MooseX::AbstractFactoryで、ファクトリーメソッドに指定する具象クラス名(の一部)を指定する際にエイリアスを使えるようにしています。ただしHashRefを渡さずにエイリアスクラス名(の一部)を渡す際には、宝箱を開ける為の鍵が当該宝箱の中にあるような状態で、いまいちです。

Mooseの型制約を遅延設定するMooseX::Types::Games::DateTime辺りの小細工(実装クラスに依存してwhereブロック内の振る舞いを規定する、など)については、稿を改めようと思います。

  • 1日24時間という世界の具象クラスではhour0 <= $_ && $_ < 24の範囲になり、
  • 1日30時間という世界の具象クラスではhour0 <= $_ && $_ < 30の範囲になる

という要件があったときに、事前に(静的に)それぞれ別の型制約を作らずに、最大値を具象クラスから引っこ抜いて型制約で使うということです。これもまたいまいちな実装ですけれども。

追記: テストを薄く書いてバグを除いたほか、見本の時計はロケールにも対応させました。また、cp932でなくUnicodeなコンソールでの字詰めの問題等々を解消しています。上記スクリーンショットも差し替えています。全角半角の「文字幅」の取り扱い方については、(時間があれば)稿を改めて備忘録を起こす予定です。

JPerl advent calendar 2009 hacker track22日目を執筆させていただきました。

補足情報を簡単に記します。

FF14ベータテスターへ応募

| コメント(1)

本サイトはFF14のプレイヤー向けウェブシステムの開発日誌という位置付けですので、FF14の話題にも触れておきます。

遂にFF14のベータテスターの募集が始まりました。2010年の正式サービス開始予定を前に、開発も佳境に入っていることとお見受けします。大変期待の持てる作品であり、末永く愛されることを願ってやみません。

さて、応募に際しては必要事項を色々記入することになりますが、いくつか気掛かりな内容がありました。といっても、馬鹿正直に書いた内容が裏目に出たらどうしよう、という心配事でしかないのですが。

PerlのDIコンテナーであるOrochiは、作者である牧さん(lestrratさん)ご本人がFukuoka.pmFukuoka Perl Workshop #14スライドのp.46で「循環依存の解決は実装できてない」と書いていらっしゃいます(参考:平田さんの「Fukuoka Perl Workshop #14に行ってきた」の記事)。

ただし、これは私にとっては特段の制約事項とは感じません。循環依存するようなクラスは、場合にもよりますが、私の場合には大抵クラス設計を誤って陥る泥沼状態であるからです。

とはいえ、クラスが複雑に絡み合う事態は起こり得るので、依存関係には気を付ける必要があります。ただ単に依存がぐるぐる回ってバターにならないようにすることは勿論ですが、依存関係を実際に注入する処理でも気を付ける必要があります。この処理は、dannさんの記事の通り、Java界隈ではwiring(ワイヤリング)という用語が充てられます。

で、そのwiringで気を付けるというのは、具体的には、inject_classの実行順が依存の逆順であってはならない、という点です。当たり前といえば当たり前なのですが、うっかりしていました。

以下はその備忘録と解説です。

Moose/Mouseベースのクラスをテストする際には、本筋とは離れたところで一工夫が必要になることがあります。

例えば以前の記事「Arkアプリケーションの開発者テストでTest::Perl::Criticを使う」では、Test::Perl::Criticに於いて、use Mooseなどでuse strict構文も代替した場合でも、Perl::Critic::Policy::TestingAndDebugging::RequireUseStrictに引っ掛からないようにする方策を例示しました。

これに関連して、メソッド(やファンクション)についてPOD内での言及が網羅されているかを検査するTest::Pod::Coverageで、Moose/Mouse用の一部メソッドの記述を省いてしまいたい場合があります。

具体的なメソッドは、例えば

  • BUILDARGS()
  • BUILD()
  • DEMOLISH()

などのフックポイントです。

私は、PODというものはモジュールの使用者向けの資料であって、内部実装について開発者へ向けて事細かく書くような資料ではないと思っています。場合によりけりですが、基本的にはそうした考えに基づいてPODを書いているつもりです。

そうすると、例えばBUILDARGS()に於いてどのようなパターンで引数の読み替えをするか(例えばIntなスカラー値1つを渡されたら{ epoch => $value }に読み替えるなど)を書くよりも、素直にnew()についての記述を設けた方が良いということになります。

ということで、PODにそれらを書かずに、Pod::Coverage自体の機能を活用することで、「ためにする文書化」(手段の自己目的化)を避けることにしましょう。

all_pod_coverage_ok(
    {
        also_private => [qw(
            BUILDARGS
            BUILD
            DEMOLISH
        )],
    },
);

具体例としては、拙作DBICx::Modeler::Generatorの開発者テストであるxt/pod_coverage.tなどを挙げておきます。

なお、Kwaliteeを高くすることなどを目的とした「やせ我慢」について以下で補足しておきます。

筆者"Gardejo"について

  • Twitter: @gardejo
  • GitHub: gardejo
  • CodeRepos: gardejo
  • CPAN: MORIYA

このサイトについて

Eorzea System Worksは、架空のシステム開発結社です。

FF14.name (FinalFantasyXIV.name)では、アヴァター(プレイヤーキャラクター)の管理システムやイベント出欠・リマインダシステムや、リンクシェル(LS)運営・管理システムやDKPシステムなどを設計・開発・公開する予定です。

関連サイト

関連サイトでは、他にもFF14に関連するサイトをいくつか紹介しています。

リンク, トラックバック歓迎

このブログへのリンク(どのページでも構いません)やトラックバックを歓迎します。

設計・開発・運用の参考にさせていただきますので、コメントもお気軽にお寄せください!

個別の記事に対するご意見などのほか、目安箱もご用意しています。

このアーカイブについて

このページには、2009年12月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年11月です。

次のアーカイブは2010年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

2014年2月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

やや真面目なサイト