C88 雅なPerl入門第3版出します

f:id:kaz_hiramatsu:20150803001501j:plain 直前になりましたが雅なPerl入門第3版を出します。 今回の目玉は今年のクリスマスにリリースが予定されているPerl6です。 Perl6入門という章を追加しました。 時間がなくてちょっと駆け足気味なのですが、Perl6の機能を簡単に紹介しています。 ぜひブースに来てください! ブースは、東123ホールのO43a雅なラクダです。

C85にて「雅なPerl入門第2版」を頒布します

f:id:kaz_hiramatsu:20131227120021j:plain

直前になりましたが、冬コミ告知です。31日の西ほ07aで「雅なPerl入門第2版」を頒布します。内容は前回のアップデートとなります。オブジェクト指向の章をパッケージとモジュールに分けて、テスト、ファイル入出力、文字エンコーディング、CPANモジュールガイドの章を新設しました。だいたい50ページくらい増えています。

  • 第1章プロローグ
  • 第2章Perlを知ろう
  • 第3章Perlの開発環境を整えよう
  • 第4章スカラー
  • 第5章配列とリスト
  • 第6章ハッシュ
  • 第7章サブルーチン
  • 第8章コンテキスト
  • 第9章正規表現
  • 第10章リファレンス
  • 第11章CPAN
  • 第12章パッケージ
  • 第13章モジュール
  • 第14章オブジェクト指向
  • 第15章テスト
  • 第16章ファイル入出力
  • 第17章文字エンコーディング
  • 第18章CPANモジュールガイド

そしてなんと!今回はまかまかさんとの合同スペースになっています!!みなさんぜひ来て下さい。お待ちしています!

YAPC::Asia 2013

今年もYAPC::Asiaが終った。今年は、1000人以上の参加者がいたようだ。そして、ここまで大きなイベントをトラブルなく運営してきた牧さんと941さんの体制が終わる。本当にお疲れ様でした。牧さんが言っていた新しい息吹というのを確かに感じる。彼らに期待したい。何らかの形でサポートできればと思っている。ボランティアスタッフをしたこともあるので、多少は力になれるのではないかと思っている。

今年のYAPCはトークをほとんど聞かず(聞けず)にmakamakaさんと屋台で同人誌を頒布していた。今年の夏コミPerlの同人誌を出したのがきっかけで、makamakaさんに一緒に出しませんかと誘っていただいた訳だが本を出さなければこんなことはありえなかったわけで、本当にPerlは素晴らしいと思う。以前のYAPCPerlは人と人とをつなげる言語なんだと誰かが言っていた気がするけど、本当にその通りだと思う。makamakaさん、本を手にとって頂いたみなさん本当にありがとう。手にとって頂いた方はできれば書評を書いてもらえると嬉しいです。

f:id:kaz_hiramatsu:20130924143037j:plain

PerlMotion

最近、PerliOSのアプリを作れるPerlMotionというプロダクトがリリースされました。個人的にRubyMotionを使っていて、テキストエディタとコマンドラインでiOSアプリを作る楽しさみたいなものを知ってしまったので、早速、試してみました。RubyMotionは残念ながらOSSではないので、中身を見ることはできないのですが、PerlMotionは全てOSSとして公開されています。

インストール方法

homebrewで最新のllvmをインストールします。ただ手元の環境だと普通にllvmをインストールしてもその後に必要になるCompiler::CodeGenerator::LLVMがインストールできなかったので、以下のサイトの手順に従って、最新のlibc++とllvmをインストールしました。

Homebrew で最新の libc++ と clang をビルドする

$ brew instal https://raw.github.com/rhysd/homebrew/13dbf9d3af83297eec66eeee8e579d82ab598da2/Library/Formula/llvm.rb --HEAD --with-clang --with-libcxx --disable-assertions

llvm以外で必要なライブラリをインストールします。

$ brew install reattach-to-user-namespace
$ brew install ios-sim

PerlMotionのgitリポジトリをcloneして、carton installすればインストールは完了です。(cartonやcpanmは事前に入れておく)

$ git clone https://github.com/goccy/perl-motion.git
$ cd perl-motion
$ carton install

carton installでエラーが出たのですが、Compiler::*のモジュールでSuccessfully installedと表示されていればインストールは完了しています。cpanfileのrequiresにgit repoを書いた場合は、今のところこういう状態になりますが、インストール自体は完了しているので、このまま説明を進めます。

とりあえずデモを動かしましょう。example/Helloディレクトリに移動してbuildコマンドを実行します。

$ cd example/Hello
$ ../../bin/perl-motion build

これでiOSシミュレータが起動すれば問題なくBuildできています。ここでperl-motionコマンドのPATHを通しておきましょう。

アプリの作り方

アプリの作り方を簡単に説明します。新規にアプリを作るには、createコマンドを実行します。

$ perl-motion create Test

これでアプリのひな形ができました。まずTestディレクトリにあるapp.confを見てみましょう。これはYAML形式のファイルで、app_nameにアプリ名、delegateにAppDelegateクラスを書きます。デフォルトでは、Test::AppDelegateクラスとなっています。

---
app_name: Test
delegate: Test::AppDelegate

アプリ本体は、lib配下にモジュールとして実装していきます。lib/Test/AppDelegate.pmを見てみましょう。

package Test::AppDelegate;
use base 'UIApplicationDelegate';
use UIWindow;
use UIScreen;
use Test::RootViewController;

# this method is entrypoint of your application
sub application {
    my ($app, $options) = @_;

    my $window = UIWindow->new()->init_with_frame(UIScreen->main_screen->bounds); 
    $window->root_view_controller(Test::RootViewController->new);
    $window->root_view_controller->wants_full_screen_layout(1);
    $window->make_key_and_visible;
    $app->window($window);
}

1;

アプリが起動するとAppDelegateクラスのapplicationメソッドが呼ばれます。ここで$appと$optionsが引数で渡されます。$appというのは、UIApplicationのインスタンスで、ここですることはUIWindowのオブジェクトを生成して、RootVIewControllerを設定することです。RootViewControllerというのは、一番最初に画面に表示する処理を書くControllerです。lib/Test/RootViewController.pmは次の通りです。

package Test::RootViewController;
use base 'UIViewController';
use UITableView;

sub load_view {
    my ($self) = @_;
    my $table_view = UITableView->new();
    $self->view($table_view);
}

1;

全てのコントローラは、UIViewControllerを継承します。画面に表示するViewを自前で生成したい場合は、load_viewメソッドをオーバーライドします。ここではUITableViewを設定しています。この状態でbuildすると真っ白なテーブルビューが表示されます。

モジュールの実装方法

Obj-Cの機能を持ったオブジェクトをPerlMotionで使いたい場合、普通にObj-Cのクラスとして実装します。先ほどuseしていたUITableViewは、perl-motion/lib/PerlMotion/Builder/PerlCompiler/UITableView.mに実装されています。 中身は普通にObj-Cのクラスであることがわかります。ただ、このディレクトリにモジュールを作っただけではモジュールを使えません。PerlCompilerのランタイムにモジュールとメソッドを登録する必要があります。UITableView.mでは、UITableView_setup関数でモジュールとメソッドを登録しています。このUITableView_setupをperl_motion_core_libs_common.mのstore_ios_native_library関数で呼ぶことでモジュールを使えるようになるようです。

デリゲートメソッドのオーバーライド

現状だとPerlMotion側からObj-Cのメソッドを直接呼ぶ方法はないようです。load_viewやapplicationのようにデリゲートメソッドをオーバーライドしたい場合は、PerlMotion側であらかじめメソッド名を決めておき、Obj-Cでデリゲートメソッドを全てオーバーライドしておいてから、あらかじめ決めておいたメソッドを呼び出すという実装をするようです。

RubyMotionとの比較

RubyMotionとPerlMotionは、llvmの機械語にコンパイルするという仕組みは同じだと思うのですが、RubyMotionは、RubyのオブジェクトとObj-Cのオブジェクトを透過的に扱えます。PerlMotionは今のところObj-Cの機能を使うには、Obj-Cを書く必要があります。このあたりはモジュールを書いていけば、基本的な機能はそろうのではないかと思っています。

まとめ

PerlMotionは、今のところ機能が足りないので、iOSアプリを作ったことがあってPerlがわかる人は開発に参加すると面白いのではないかと思います。

追記

との事なので、自前でブリッジを書かなくてもよくなりそうですね!

C84お疲れ様でした

ブースに来てくださった方、ありがとうございました。 おかげさまで搬入分は完売することができました。 完売後にも何名かブースに来てくださったのですが、非常に申し訳ありませんでした。 まだ調整中なのですが、許可が出ればYAPCでも販売できるようにしたいと思っています。 本を出すのは、初めてのことで製本についてはまだまだ満足いくものではありません。 思ったよりページがめくりにくかったり、重かったり。 でもこういうのは、電子書籍では味わえないものだと思います。 今回の本は、ReVIEWというツールを使いました。 ReVIEWフォーマットという書式で書けば、ePubやPDFを吐き出してくれます。 ReVIEWについては、最近、勉強会が開かれたようで盛り上がっているようですが、まだまだ資料が少ないので、時間があれば別エントリーで書いてみたいです。

C84にて「雅なPerl入門」という本を頒布します

f:id:kaz_hiramatsu:20130807130256j:plain

C84の宣伝です。Perlの入門書を書きました。内容は、雅ちゃんがハッカークロウにPerlを教えてもううという内容で、以下の内容を含んでいます。

内容は、よくあるPerlの基本からオブジェクト指向まで入れました。plenvやcpanmなども利用しています。内容は、堅苦しくならないように会話形式で進んでいくので比較的読みやすいのではないかと思っています。執筆の時間があまりなかったので、いろいろ不備があるかと思いますが、もし興味がありましたらぜひ買いに来てください。スペースは、3 日目 月曜日 東5ホール ペ11b 雅なラクダです。よろしくお願いします!!あたりまえですが中身は18禁ではないです!!