29
1 Corporate Perl in Recruit, OpenSocial and Emoji 2009.09.10 Yusuke Kawasaki (kawanet) Recruit Media Technology Labs http://mtl.recruit.co.jp/ YAPC::Asia 2009 Tokyo YAPC::Asia 2009 Tokyo

Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Embed Size (px)

DESCRIPTION

YAPC::Asia 2009(1日目)発表の後半パート。前半パート(リクルートWebサービス)は、別途、石橋より公開します!

Citation preview

Page 1: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

1

‎Corporate Perl in Recruit, OpenSocial and Emoji‎

2009.09.10

Yusuke Kawasaki (kawanet)

Recruit Media Technology Labs

http://mtl.recruit.co.jp/

YAPC::Asia 2009 Tokyo

YAPC::Asia 2009 Tokyo

Page 2: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

2

Yusuke Kawasaki(川﨑 有亮)

http://www.kawa.net/

http://twitter.com/kawanet

YAPC::Asia 2009 Tokyo

Page 3: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

CPAN Author

• XML::TreePP

• XML::FeedPP

• Class::Accessor::Children

• Lingua::JA::Romanize::Japanese

• Lingua::KO::Romanize::Hangul

• Lingua::ZH::Romanize::Pinyin

• Encode::JP::Emoji

• Unicode::Emoji::Base

http://search.cpan.org/~kawasaki/3YAPC::Asia 2009 Tokyo

Page 4: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

XML::TreePP

• XML string from/to Perl hash objectPure Perl, fast, easy and stable

• use XML::TreePP;my $tpp = XML::TreePP->new();my $hash = {elem=>"value"};print $tpp->write($hash); # XML string

• my $xml = "<elem>value</elem>";my $tree = $tpp->parse($xml);print Dumper($tree); # Perl hash object

4YAPC::Asia 2009 Tokyo

Page 5: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Emoji

Picture characters commonly used on mobile phones in Japan

5YAPC::Asia 2009 Tokyo

Page 6: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Emoji in private code point

• Mobile phone companys use their own code point in PUA (private use area). Ex. “heart”

• DoCoMo KDDI SoftBankU+E6EC U+E595 U+E022SJIS-F991 SJIS-F7B2 SJIS-F962

• We need translation maps for each pair of Emoji sets.

6YAPC::Asia 2009 Tokyo

Page 7: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Google’s code points

• Gmail supports “emoticon” characters.

• They also uses PUA again and has their translation map from/to Japanese Emojis.

• Then, Google’s “emoji4unicode” project has proposed unified code points of Japanese Emojis to Unicode standard. Thanks!

• http://emoji4unicode.googlecode.com/

7YAPC::Asia 2009 Tokyo

Page 8: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Two Perl Modules Released

• Unicode::Emoji::E4U

–Emoji mappings based on Google’s emoji4unicode project

–Pure Perl OO interface for their table

• Encode::JP::Emoji

–Emoji encodings and cross-mapping tables in pure Perl

–Pure Perl encodings for Encode.pm

–XS (UCM) version of this was canceled.

8YAPC::Asia 2009 Tokyo

Page 9: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Encode::JP::Emoji Detail

1. 各キャリアの Shift_JIS 絵文字コードとUTF-8 絵文字コードを相互変換できます。

2. emoji4unicode の提供するテーブルにより、各キャリアの絵文字を相互変換できます。

3. 絵文字が存在しない場合は、fallback によりテキストまたは IMG タグに変換できます。

4. 日本の 3 キャリアに加えて、Google が内部で利用している絵文字コードにも変換できます。

5. emoji4unicode が提案中の PUA を利用しないUnicode との相互変換に対応します。

6. pure Perl 実装のため、レンタルサーバ等でもFTP アップロードのみで利用できます。

7. pure Perl 実装にもかかわらず、実用的な変換処理速度を確保しています。(Encode::JP::Mobile 比)

9YAPC::Asia 2009 Tokyo

Page 10: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Encode::JP::Emoji Usage

use Encode;

use Encode::JP::Emoji;

# from DoCoMo <U+E6E2> to Google <U+FE82E>

my $keycap1 = "¥xEE¥x9B¥xA2";

Encode::from_to($keycap1, 'x-utf8-e4u-docomo', 'utf8');

# from KDDI <SJIS+F7F5> to SoftBank <SJIS+F747>

my $scream = "¥xF7¥xF5";

Encode::from_to($scream, 'x-sjis-e4u-kddiapp',

'x-sjis-e4u-softbank3g');

Encode::JP::Mobile is an alternative module to do above.

10YAPC::Asia 2009 Tokyo

Page 11: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Encode::JP::Emoji Internal

例:KDDI Shift_JIS から KDDI Unicode に変換する内部コード。(概念)

内部的には、いったん CP932 で decode してから、tr// 等で置換する仕組み。

sub decode {

my ($self, $octets, $check) = @_;

$self->before_decode($octets, $check);

my $string = $self->byte_encoding->decode($octets, $check);

$self->after_decode($string, $check);

$string;

}

sub after_decode {

$_[1] =~ tr

[¥x{E234}-¥x{E342}¥x{E5B5}-¥x{E5DF}]

[¥x{E5CD}-¥x{E5DF}¥x{EA80}-¥x{EAFA}¥x{EB0E}-¥x{EB8E}

¥x{EAFB}-¥x{EB0D}¥x{E5B5}-¥x{E5CC}];

}

11YAPC::Asia 2009 Tokyo

Page 12: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Ex. Emoji for Dung

• DoCoMo (don’t have emoji for dung)

• KDDI PUA <U+E4F5>

• SoftBank PUA <U+E05A>

• Google PUA <U+FE4F4>

• Unicode Standard proposed <U+1F410>

• 4バイトUTF-8 なので、MySQL 5 は非対応

12YAPC::Asia 2009 Tokyo

Page 13: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

OpenSocial ContainerBy Perl

RECRUIT は OpenSocialコンテナを実装中です

13YAPC::Asia 2009 Tokyo

Page 14: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

OpenSocial コンテナを開発中

http://creyle.jp/

• リクルートは、『CREYLE』サービスにてOpenSocial コンテナを実装しています。

• OpenSocial アプリに対応します。

• ディベロッパー向け β リリース:2009年 10月予定

14YAPC::Asia 2009 Tokyo

Page 15: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

OpenSocial

• OpenSocial is a set of APIs for SNS.

• Many SNSs in the world, including Mixi in Japan, support OpenSocial apps.

• Two way to access to social network ■

–JavaScript library interface ■

–RESTful XML / JSON-RPC protocols ■15YAPC::Asia 2009 Tokyo

Page 16: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Apache Shindig

• An OpenSocial container implementionby Apache incubation project.

• Consists of four parts:

–Gadget Container JavaScript

–Gadget Rendering Server

–OpenSocial Container JavaScript

–OpenSocial Data Server

• Java and PHP version of it released.

• No Perl version yet.16YAPC::Asia 2009 Tokyo

Page 17: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Importing Shindig to Perl

• We’re importing Shindig’s RPC Data API handling servlets to Perl!

• Apache + FastCGI + HTTP::Engine

17

ApiServlet.pm

AppDataHandler.pm

AppDataService.pm

CollectionOptions.pm

DataRequestHandler.pm

DataServiceServlet.pm

JsonRpcServlet.pm

PersonHandler.pm

PersonService.pm

RequestItem.pm

ResponseItem.pm

RestRequestItem.pm

RpcRequestItem.pm

:

Apache

FastCGI / Perl PHP

GadgetRenderServlet

DataRPC APIServlet

SNSWebsite

Core

Database Layer

YAPC::Asia 2009 Tokyo

Page 18: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

osapi(通称:オサピー)supported

• 従来の OpenSocial JavaScript インターフェースに加えて、

osapi(通称:オサピー)に対応しています。

• newIdSpec 不要で簡潔な記述となり、開発の敷居を下げます。

• バッチリクエストにより、多数の API 呼び出しを束ねて高速化。

18YAPC::Asia 2009 Tokyo

XML:

<Require feature="osapi" />

JavaScript:

var batch = new osapi.newBatch();

batch.add('members', osapi.people.get({

userId: '@self',

fields: ['id','displayName','thumbnailUrl']

}));

batch.execute(callback);

Page 19: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

CREYLE × OpenSocial

• ガジェットコンテナ(ガジェットレンダラ)はPHP 版 Shindig を採用しています。

• RESTful、JSON-RPC の API(データサーバ)をPerl で独自実装しました。(Shindig の一部クラスを Perl に移植)

• OpenSocial 0.8.1 準拠で Mixi アプリ互換!?一部、0.9 仕様を先取り採用しています。アルバム、メディア、メッセージに対応。osapi(通称:オサピー)で開発も快適です。

• 2009年10月ディベロッパー向けβ公開予定。

• ご興味・ご関心のある方、ぜひお知らせ下さい。

19YAPC::Asia 2009 Tokyo

Page 20: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

MA5Web Application Contest

今年も開催します!

http://mashupaward.jp/

20YAPC::Asia 2009 Tokyo

Page 21: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

登録は今スグ! http://mashupaward.jp/21

Page 22: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Mashup Awards 5 (通称:MA5)

◇主催:Mashup Awards 実行委員会

◇参加登録期間 : 2009年9月10日(木)~11月4日(水)

◇作品応募期間 : 2009年9月25日(金)~11月4日(水)

◇表彰式 : 2009年11月29日(日)※予定

◇ウェブサイト : http://mashupaward.jp/

◇公式ハッシュタグ : #MA5

◇最優秀賞賞金 : 100万円

◇作品応募条件:

参加協力企業・団体が提供する API から少なくとも1つ利用して、作品を制作すること。応募時点でのインターネット公開済・未公開は問わない。詳細・応募方法は、公式ウェブサイト http://mashupaward.jp/ を参照。

22YAPC::Asia 2009 Tokyo

Page 23: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

MA5 協力企業

• MA5 は、50社以上の協力企業が参加。

• 各社が提供する API のうち1つ以上利用して、ウェブサイトを制作し、ご応募ください!

• API 提供企業は追加募集中!API 提供企業以外の協力企業・団体(コミュニティ)も歓迎します。

23YAPC::Asia 2009 Tokyo

Page 24: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

MA5 Media Sponsors

24YAPC::Asia 2009 Tokyo

Page 25: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

MA5 Leading Partners

MA5 は、下記リーディングパートナーの協賛・協力によって、運営されます。

25YAPC::Asia 2009 Tokyo

Page 26: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

26

ChaMap – MA4 Grand Prix

http://www.chamap.net/

Geo location based

chat communication

platform service

using Google Maps,

Language API and

some other APIs.

Real time translation

and read out in English.

YAPC::Asia 2009 Tokyo

Page 27: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

Get 1,000,000 Yen on MA5!

最優秀賞は

賞金100万円!

参加登録は今スグ!

mashupaward.jp

27YAPC::Asia 2009 Tokyo

Page 28: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

まとめ

• リクルートは昔も今も、Perl を使っています。Perl の普及、YAPC・JPA を応援しています。

• リクルート Web サービスは、mod_perl。http://webservice.recruit.co.jp/

• CREYLE は、FastCGI + HTTP::Engine。OpenSocial コンテナを2009年10月公開予定!http://creyle.jp/

• MA5 開発コンテストを開催中。賞金100万円!http://mashupaward.jp/

28YAPC::Asia 2009 Tokyo

Page 29: Corporate Perl in Recruit, OpenSocial and Emoji - YAPC::Asia 2009 Tokyo

29

Thank you!(液晶拭きも使ってね)

川﨑 http://twitter.com/kawanet

石橋 http://twitter.com/iandeth

YAPC::Asia 2009 Tokyo