118
Lorzy: “Lego Programming” in Perl Chia-liang Kao <[email protected] > YAPC::Asia 2009, Tokyo

"Lego Programming" with Lorzy

  • Upload
    clkao

  • View
    1.609

  • Download
    2

Embed Size (px)

Citation preview

Page 1: "Lego Programming" with Lorzy

Lorzy:“Lego Programming”

in PerlChia-liang Kao <[email protected]>

YAPC::Asia 2009, Tokyo

Page 2: "Lego Programming" with Lorzy

自己介紹

Page 3: "Lego Programming" with Lorzy

id:clkao

Page 4: "Lego Programming" with Lorzy

高嘉良

Page 5: "Lego Programming" with Lorzy

Page 6: "Lego Programming" with Lorzy
Page 7: "Lego Programming" with Lorzy

台湾人

Page 8: "Lego Programming" with Lorzy
Page 9: "Lego Programming" with Lorzy

日本語

Page 10: "Lego Programming" with Lorzy

日本語

不會

Page 11: "Lego Programming" with Lorzy

しょうがない

Page 12: "Lego Programming" with Lorzy

Takesakoさんの Inline::x86

Page 13: "Lego Programming" with Lorzy
Page 14: "Lego Programming" with Lorzy

Just In Time

Page 15: "Lego Programming" with Lorzy

Just In TimeSlides

Page 16: "Lego Programming" with Lorzy

Just In TimeSoftware!

Page 17: "Lego Programming" with Lorzy

殘念no translation

Page 18: "Lego Programming" with Lorzy
Page 19: "Lego Programming" with Lorzy

RT:Request Tracker

Page 20: "Lego Programming" with Lorzy
Page 21: "Lego Programming" with Lorzy
Page 22: "Lego Programming" with Lorzy

In Perl!

Page 23: "Lego Programming" with Lorzy

We ♡ Perl

Page 24: "Lego Programming" with Lorzy
Page 25: "Lego Programming" with Lorzy

$normal_user☠ Perl

Page 26: "Lego Programming" with Lorzy
Page 27: "Lego Programming" with Lorzy
Page 28: "Lego Programming" with Lorzy

Lorzy:Lazy, Lispy, Orz

Page 29: "Lego Programming" with Lorzy

• Scheme-like interpreter in Perl

• Typeful

• uses Moose & Moose type system

Page 30: "Lego Programming" with Lorzy

Example

Page 31: "Lego Programming" with Lorzy

Defining Rules, Actions

Page 32: "Lego Programming" with Lorzy

(Think gmail filters)

Page 33: "Lego Programming" with Lorzy
Page 34: "Lego Programming" with Lorzy
Page 35: "Lego Programming" with Lorzy
Page 36: "Lego Programming" with Lorzy

(lambda (ticket transaction) <HERE>) :: Bool

Page 37: "Lego Programming" with Lorzy
Page 38: "Lego Programming" with Lorzy

sub { my ($ticket, $transaction) = @_; <HERE> }# returns Bool

Page 39: "Lego Programming" with Lorzy

If ticket’s queue matches “Foo”

Page 40: "Lego Programming" with Lorzy

$ticket->queue->name eq “Foo”

Page 41: "Lego Programming" with Lorzy

S-Expression

Page 42: "Lego Programming" with Lorzy

(Str.Eq (RT::Model::Queue.name (RT::Model::Ticket.queue ticket)) “Foo”)

Page 43: "Lego Programming" with Lorzy
Page 44: "Lego Programming" with Lorzy

Strongly Typed

Page 45: "Lego Programming" with Lorzy

(Types are Good)

Page 46: "Lego Programming" with Lorzy
Page 47: "Lego Programming" with Lorzy
Page 48: "Lego Programming" with Lorzy
Page 49: "Lego Programming" with Lorzy
Page 50: "Lego Programming" with Lorzy
Page 51: "Lego Programming" with Lorzy
Page 52: "Lego Programming" with Lorzy
Page 53: "Lego Programming" with Lorzy

Problem

Page 54: "Lego Programming" with Lorzy

$ticket->queue->name eq “Foo”

Page 55: "Lego Programming" with Lorzy

$ticket->queue->name eq “Foo”

Page 56: "Lego Programming" with Lorzy

$ticket->queue->name eq “Foo”

Page 57: "Lego Programming" with Lorzy

$ticket->queue->name eq “Foo”

Page 58: "Lego Programming" with Lorzy

???!!!

Page 59: "Lego Programming" with Lorzy
Page 60: "Lego Programming" with Lorzy
Page 61: "Lego Programming" with Lorzy
Page 62: "Lego Programming" with Lorzy
Page 63: "Lego Programming" with Lorzy
Page 64: "Lego Programming" with Lorzy
Page 65: "Lego Programming" with Lorzy

Type mismatch!

Page 66: "Lego Programming" with Lorzy
Page 67: "Lego Programming" with Lorzy
Page 68: "Lego Programming" with Lorzy
Page 69: "Lego Programming" with Lorzy
Page 70: "Lego Programming" with Lorzy

Page 71: "Lego Programming" with Lorzy

Any function that takes Str and returns Bool

Page 72: "Lego Programming" with Lorzy

Any function that takes a and returns b

Page 73: "Lego Programming" with Lorzy

RT::Model::Ticket ♨ Bool

Page 74: "Lego Programming" with Lorzy
Page 75: "Lego Programming" with Lorzy

RT::Model::Ticket ♨ Bool

Page 76: "Lego Programming" with Lorzy
Page 77: "Lego Programming" with Lorzy
Page 78: "Lego Programming" with Lorzy

Any function that takes a and returns a

Page 79: "Lego Programming" with Lorzy

Bool ♨ Bool

Page 80: "Lego Programming" with Lorzy
Page 81: "Lego Programming" with Lorzy

Bool ♨ Bool

Page 82: "Lego Programming" with Lorzy
Page 83: "Lego Programming" with Lorzy

Backend:lcore

Page 84: "Lego Programming" with Lorzy

We want a sandbox

Page 85: "Lego Programming" with Lorzy
Page 86: "Lego Programming" with Lorzy

Dump database password, etc...

Page 87: "Lego Programming" with Lorzy

In Perl Environment

Page 88: "Lego Programming" with Lorzy

First attempt: ~2003Audrey & Jesse

Page 89: "Lego Programming" with Lorzy
Page 90: "Lego Programming" with Lorzy
Page 91: "Lego Programming" with Lorzy

Type mismatch!

Page 92: "Lego Programming" with Lorzy

Second attempt: ~2008

Page 93: "Lego Programming" with Lorzy
Page 94: "Lego Programming" with Lorzy

lcore:~600 lines

Page 95: "Lego Programming" with Lorzy

TODO

Page 96: "Lego Programming" with Lorzy
Page 97: "Lego Programming" with Lorzy
Page 98: "Lego Programming" with Lorzy
Page 99: "Lego Programming" with Lorzy

iTunes

Page 100: "Lego Programming" with Lorzy

not?

iTunes

Page 101: "Lego Programming" with Lorzy

iTunes

Page 102: "Lego Programming" with Lorzy

and/or?

iTunes

Page 103: "Lego Programming" with Lorzy

iTunes

Page 104: "Lego Programming" with Lorzy

ArrayRef[Bool]

iTunes

Page 105: "Lego Programming" with Lorzy
Page 106: "Lego Programming" with Lorzy

MooseX::Types::Applicative

Page 107: "Lego Programming" with Lorzy

mapisa => “CodeRef[CodeRef[a,b], ArrayRef[a],

ArrayRef[b]]”

Page 108: "Lego Programming" with Lorzy

should be (a → Bool)

Page 109: "Lego Programming" with Lorzy

Load existing rulesinto the UI

Page 110: "Lego Programming" with Lorzy

Conclusion

Page 111: "Lego Programming" with Lorzy

Visual Programming Environment

Page 112: "Lego Programming" with Lorzy

Sandbox for providing

user extensions

Page 113: "Lego Programming" with Lorzy

All about Types!

Page 114: "Lego Programming" with Lorzy

Live Demo!

Page 117: "Lego Programming" with Lorzy

Questions?

Page 118: "Lego Programming" with Lorzy

謝謝!