Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2008-07-03

JavaScript: The Good Parts

|  JavaScript: The Good Parts - dann's blog を含むブックマーク はてなブックマーク -  JavaScript: The Good Parts - dann's blog  JavaScript: The Good Parts - dann's blog のブックマークコメント

お、Douglas Crockfordさんが本出してたのか。170pと薄いし、さくっと読んどこうかな。

JavaScript: The Good Parts

http://www.amazon.com/o/ASIN/0596517742/

John ResigのPro JavaScript Techniquesもなかなか良い本だったし、この1,2年は割とJavaScriptの本はあたりが多いかも。

http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273/

MooseX::Methodで引数チェック

| MooseX::Methodで引数チェック  - dann's blog を含むブックマーク はてなブックマーク - MooseX::Methodで引数チェック  - dann's blog MooseX::Methodで引数チェック  - dann's blog のブックマークコメント

perlcodesampleさんのをMooseX::Methodで書いてみました。

http://d.hatena.ne.jp/perlcodesample/20080702#seeall

MooseX::Methodだと、宣言的に書けて美しいですね。コード量もかなり短くなっています。

#!/usr/bin/env perl
use strict;
use warnings;

{

    package Foo;
    use MooseX::Method;

    method conf => named(
        mode => { isa => 'Int', required => 1 },
        warn => { isa => 'Int', required => 1 },
    ) => sub {
        my ( $self, $args ) = @_;

        print "called !!! \n";
    };
}

Foo->conf( mode => 1, warn => 0 );

# 引数名が間違ってる(引数が不足と同じだけれど)
eval { Foo->conf( moda => 1, warn => 0 ); };
if ($@) {
    warn $@;
}

# 引数の型が違う
eval { Foo->conf( mode => 'Hello', warn => 0 ); };
if ($@) {
    warn $@;
}

# 引数が不足
eval { Foo->conf( mode => 1 ); };
if ($@) {
    warn $@;
}

実行結果

called !!! 
Parameter (mode): Must be specified at moosex_method.pl line 23
Parameter (mode): Argument isn't (Int) at moosex_method.pl line 29
Parameter (warn): Must be specified at moosex_method.pl line 35

Mooooooooooooooooooose

Perl「言語」初心者がモダンなPerlを高速に学ぶ方法

Perl「言語」初心者がモダンなPerlを高速に学ぶ方法  - dann's blog を含むブックマーク はてなブックマーク - Perl「言語」初心者がモダンなPerlを高速に学ぶ方法  - dann's blog Perl「言語」初心者がモダンなPerlを高速に学ぶ方法  - dann's blog のブックマークコメント

Perlを仕事でまともに使い始めてから大体1年が経過しました。少しずつではありますがPerlも書けるようになってきました。自分の経験を踏まえ、他の言語は使えるけれどもPerlは良くわからないという人が、Perlを学ぶ際に、どのように学んでいけばよいかをまとめてみました。

ライブラリ、言語、ミドルウェアの学習

一番最初にしたのは、Plaggerを使い、Plaggerのコードを読むことでした。

Perlを使い始めて、まず分からなかったのが、何のライブラリを使えばいいのかといいうことでした。CPANには数多くのライブラリがあるのですが、玉石混交で何を使えばいいのかが最初全くわかりません。

Plaggerは、Mooseを使わない最もモダンなPerlのアプリケーションの一つで、かつ実用的に使えるライブラリが動く形で提供されています。

それを読んで、どのライブラリを選択すべきで、どのようにライブラリを使うのかを勉強します。Plaggerを読む過程で文法的に分からない点は、Programming Perlとperldocで調べるということを繰り返します。

Plaggerはライブラリの使い方だけでなく、Perlらしいコードの書き方、クラスデザインなどについても勉強になります。さすがに世界のmiyagawaさんです。Plaggerのコードは、ackを使いながら未だに良く読んでいますが、とても勉強になります。

後は必要に応じて、そのライブラリで使っているライブラリの使い方などを勉強すると、色々なコードが読めるようになってきます。例えば、Path::Classの内部では、File::*などが使われていて、さらに、File::*をどのように使えばいいのかがわかります。さらに、File::*がどのようなことをしているかを見るという具合に、下へと辿っていきます。

yusukebeさんが、PlaggerからPerlを始めた人の世代のことを、Plagger世代といっていましたが、言い得て妙だなと思いました。Plagger前後では、Perlの学習コストが全然違ってくるからです。

言語のマッピングやライブラリの使い方は上記の方法で学べます。ですが、ミドルウェア部分のノウハウはさほど公開されていません。ミドルウェア周りのノウハウは、さほど多くのノウハウが公開されていないので、これは自分で試してみるのと、IRCで聞いてみるほかないかなという感じです。

Perl関連の本について

http://perl-users.jp/books.html に書かれているPerlに関しても有名な本は一通り全部読みました。注意が必要なのは、モダンなPerlコードで書かれた本が殆どないということです。

perl-usersで紹介されている本は基本的に全て読んだのですが、モダンなコードがかかれているかというと、そういうわけではないというのがあります。一部はとても古いものなのだということを意識しながら読む必要があります。Plaggerのコードを読む際の参考程度で読むというのがよいように感じました。

モダンなコードの勉強

一番良いのは、CatalystMoose系のコードを読むことです。 

どのようなライブラリが今のトレンドで、Perlコミュニティでどんな人が先端を走っているのかが、良くわかります。

現状、CatalystMoose系の人が現在では一番アクティブで、これらのコミッタの活動に注目していくのがいいのではないかと思いました。

例えば、海外だとmst, jrockway, stevan, groditti, nothingmuch, rjbs, jesse, clkaoあたりの人(またはそれらの人が参加するIRCのチャンネル)をwatchしておけば、大体の流れがわかります。日本ではsubtech, codereposの人を見ておくとかなり勉強になります。

コミュニティについて

Perlではコミュニティ活動が他の言語に比べてかなり活発に行われています。Shibuya.pm, Yokohama.pmなどなど各種コミュニティがあるので、積極的に参加してみるのはよいです。また、IRCなどについても、積極的に参加してみるのがいいです。

トレンドを知れるだけでなく、モチベーションが高まります。これが一番大事かもしれません。

まとめ

ポイントをまとめると、

  • 言語、ライブラリの学習について
    • やりたいことを調べるのに、上から辿る。その際には、PlaggerCatalystなどのフレームワークから調べるのが早い
    • Plaggerはライブラリの使い方だけでなく、Perlらしい書き方の勉強の役にも立つので、何度も読んでみたほうがいい
    • 現在出版されているPerlの本は参考に使う。全てを鵜呑みにするのは良くない。 
  • モダンなPerlの学習について
    • Catalyst, Moose界隈の人に注目するのは、トレンドを調べるに役に立つ
    • コミュニティ参加は重要
      • トレンドを知るにも、モチベーションを高めるのにもよい

ということになります

まだ勉強途中ではありますが、本エントリがPerlを学びたいという人の役に立てば嬉しいです。今年はもう少し勉強をして、使う人から作る人へ変わっていきたいと思っているので、来年あたりには作る人になるためのエントリを書ければいいなぁと思ってます。

HatedaEditor 0.003

HatedaEditor 0.003 - dann's blog を含むブックマーク はてなブックマーク - HatedaEditor 0.003 - dann's blog HatedaEditor 0.003 - dann's blog のブックマークコメント

  • cookie support
  • proxy support
  • 新エントリ作成コマンド(cで新規エントリ作成)

を追加しました。

http://github.com/dann/hatedaeditor/tree/master

TODO

  • Window, Listboxなどをサブクラス化して、そこに部品毎に処理をわけていきたいなぁ。HatedaEditor.pmに全UI部品のsetupが埋まってるのが相当いまいち。Curses::UIで上手くやる方法をさぐる。
  • UIをわかりやすく
    • 5W1H情報を編集中に参照できるようにする。
    • どのグループのエントリを編集しているのかわかるようにする
    • クラスメソッド化してる部分をなんとかする
  • PerlJavaScriptbind(this)みたいなのを、どうすればできんだろ。
  • Help作成
  • Top画面を綺麗に
  • 「ちょっとした更新」のsupport

ここまでが終わればversion0.01くらいにはしてもいいかもしれない。

とおりすがりとおりすがり2008/07/04 09:48モダンなとか言ってる時点で終わってる言語。

yappoyappo2008/07/04 12:16じゃぁモランボンで

danndann2008/07/05 00:51どんな言語でもモダンな書き方やライブラリというのはあると思いますよ。

na3na32008/07/05 09:22仕事だとモダンな書き方を許してもらえなかったりして悔しいです。

ponpon2008/07/05 13:16良く分からないけど、「モダン」ってPerl5.8.8で許されるようになった書き方とかっすか?

JohannJohann2008/07/05 16:36すごく為になる情報です。とおりすがりの茶々とか気にする必要無いですね。
ありがとうございました。

サルサル2008/07/05 23:00perlの問題点をまざまざと見せ付けてくれたという点ではすごくためになる情報だと思う。

perl48perl482010/08/27 19:42なるほど、Plaggerを学ぶと早いしモダンなんですね。ありがとうございます。