20 modules i haven't yet talked about
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

20 modules i haven't yet talked about

on

  • 12,540 views

 

Statistics

Views

Total Views
12,540
Views on SlideShare
12,169
Embed Views
371

Actions

Likes
3
Downloads
41
Comments
5

18 Embeds 371

http://coderwall.com 260
http://hype-free.blogspot.com 59
http://www.agent31.eu 11
http://www.slideshare.net 10
http://hype-free.blogspot.fr 5
http://hype-free.blogspot.de 4
http://hype-free.blogspot.cz 4
http://hype-free.blogspot.ca 4
http://hype-free.blogspot.co.uk 3
http://hype-free.blogspot.hu 2
http://hype-free.blogspot.in 2
http://localhost 1
http://hype-free.blogspot.sg 1
http://hype-free.blogspot.com.br 1
http://hype-free.blogspot.com.au 1
http://hype-free.blogspot.co.il 1
http://localhost:3000 1
http://hype-free.blogspot.tw 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • VIdeo o f this talk is now available at http://conferences.yapcasia.org/ya2008/talk/1026
    Are you sure you want to
    Your message goes here
    Processing…
  • claes: I'll check it out. I just installed libjs-dev or something on debian but i couldn't find the equivalent on OS X, at least when I tried to install the module the night before the presentation :)
    Are you sure you want to
    Your message goes here
    Processing…
  • SpiderMonkey and OS X works just fine together. In fact, that's what I develop JavaScript.pm on.

    I keep a install under ~/local/js17/(lib, include, bin, mac) and make sure the lib dir is in my DYLD_LIBRARY_PATH. Hateful yes, but it works.
    Are you sure you want to
    Your message goes here
    Processing…
  • it was just 20 minutes :)
    Are you sure you want to
    Your message goes here
    Processing…
  • Very cool! How long did you take to deliver this talk? any(5,20)->minutes?
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

20 modules i haven't yet talked about Presentation Transcript

  • 1. use HTTP::ProxyPAC; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $uri = URI->new(quot;http://portal.titech.ac.jp/proxy.pacquot;); my $pac = HTTP::ProxyPAC->new($uri); my $res = $pac->find_proxy(quot;http://www.google.com/quot;); if ($res->direct) { # ... } elsif ($res->proxy) { $ua->proxy('http' => $res->proxy); }
  • 2. use JavaScript::Runtime; sub init { my($class, $code) = @_; my $runtime = JavaScript::Runtime->new; my $context = $runtime->create_context(); for my $func (@HTTP::ProxyPAC::Functions::PACFunctions) { no strict 'refs'; $context->bind_function( name => $func, func => sub { &{quot;HTTP::ProxyPAC::Functions::$funcquot;}(@_) }); } $context->eval($code); bless { context => $context }, $class; }
  • 3. package HTTP::ProxyPAC::Functions; # stolen from HTTP::ProxyAutoConfig sub isPlainHostName { my ($host) = @_; return (($host =~ /./) ? 0 : 1); } sub dnsResolve { my ($host) = @_; return unless isResolvable($host); return inet_ntoa(inet_aton($host)); } sub myIpAddress { return inet_ntoa(inet_aton(hostname())); }
  • 4. use pQuery::DOM; my $v = pQuery::DOM->fromHTML('<div id=quot;fooquot;>bar</div>') ->getElementById('foo')->innerHTML;
  • 5. use pQuery::DOM; no capitalization ‘pQuery::DOM’; my $v = pQuery::DOM->fromHTML('<div id=quot;fooquot;>bar</div>') ->get_element_by_id('foo')->innerHTML;
  • 6. use PHP::Session; my $session = PHP::Session->new($id); # session id my $id = $session->id; # get/set session data my $foo = $session->get('foo'); $session->set(bar => $bar);
  • 7. when = 60.days.ago datasize = 200.megabytes
  • 8. use autobox; use autobox::DateTime::Duration; # equivalent to DateTime::Duration->new(months => 1, days => 2); $duration = 1->month + 2->days; # equivalent to DateTime->now->add(years => 2); $datetime = 2->years->from_now; # equivalent to DateTime->now->add(months => 4, years => 5); $datetime = (4->months + 5->years)->from_now; # equivalent to DateTime->now->subtract(days => 3); $datetime = 3->days->ago;
  • 9. my $ttl = 608400; # 7 days
  • 10. my $ttl = 608400; # 7 days 604800
  • 11. my $ttl = 24 * 60 * 60 * 7; # 7 days
  • 12. use Time::Duration::Parse; my $ttl = parse_duration “7 days”;
  • 13. $x = “x{5bae}”; # Unicode $y = “xe5xaexae”; # UTF-8 $z = $x . $y;
  • 14. $x = “x{5bae}”; # Unicode $y = “xe5xaexae”; # UTF-8 $z = $x . $y; x{5bae}x{e5}x{ae}x{ae}
  • 15. use Encode; $x = “x{5bae}”; # Unicode $y = “xe5xaexae”; # UTF-8 $z = $x . decode_utf8($y);
  • 16. use Encode::DoubleEncodedUTF8; $x = “x{5bae}”; # Unicode $y = “xe5xaexae”; # UTF-8 $z = $x . $y; $z = decode(“utf-8-de”, $z);
  • 17. my $latin1_as_utf8 = quot;[xC2xC3][x80-xBF]quot;; my $valid_utf8_regexp = <<'.' ; [x{00}-x{7f}] | [x{c2}-x{df}][x{80}-x{bf}] | x{e0} [x{a0}-x{bf}][x{80}-x{bf}] | [x{e1}-x{ec}][x{80}-x{bf}][x{80}-x{bf}] | x{ed} [x{80}-x{9f}][x{80}-x{bf}] | [x{ee}-x{ef}][x{80}-x{bf}][x{80}-x{bf}] | x{f0} [x{90}-x{bf}][x{80}-x{bf}] | [x{f1}-x{f3}][x{80}-x{bf}][x{80}-x{bf}][x{80}-x{bf}] | x{f4} [x{80}-x{8f}][x{80}-x{bf}][x{80}-x{bf}] . sub decode { my($obj, $buf, $chk) = @_; $buf =~ s{((?:$latin1_as_utf8){2,3})}{ _check_utf8_bytes($1) }ego; $_[1] = '' if $chk; # this is what in-place edit means Encode::decode_utf8($buf); } sub _check_utf8_bytes { my $bytes = shift; my $copy = $bytes; my $possible_utf8 = ''; while ($copy =~ s/^(.)(.)//) { $possible_utf8 .= chr( (ord($1) << 6 & 0xff) | ord($2) ) } $possible_utf8 =~ /$valid_utf8_regexp/xo ? $possible_utf8 : $bytes; }
  • 18. use utf8; use URI::Find; my $text = <<TEXT; Japanese Wikipedia home page URL is http://ja.wikipedia.org/wiki/ TEXT my $finder = URI::Find->new(&cb); $finder->find($text); sub cb { warn shift } # http://ja.wikipedia.org/wiki/
  • 19. use utf8; use URI::Find::UTF8; my $text = <<TEXT; Japanese Wikipedia home page URL is http://ja.wikipedia.org/wiki/ TEXT my $finder = URI::Find::UTF8->new(&cb); $finder->find($text); sub cb { my($uri, $orig) = @_; } # http://ja.wikipedia.org/wiki/
  • 20. use Lingua::JA::Hepburn::Passport; my $hepburn = Lingua::JA::Hepburn::Passport->new; $hepburn->romanize(quot; quot;); # KATO SHUHEI
  • 21. my $user = “miyagawa”; my $pass = “blahblah”; $api->login($user, $pass);
  • 22. use LWP::UserAgent::Keychain; my $ua = LWP::UserAgent::Keychain->new; $ua->get(quot;http://proteceted.example.com/quot;);
  • 23. <?xml version=”1.0”?> <heroes>Larry & Schwern</heroes>
  • 24. <?xml version=”1.0”?> <heroes>Larry &amp; Schwern</heroes>
  • 25. <?xml version=”1.0”?> <shout>I &hearts; Perl</shout>
  • 26. <?xml version=”1.0”?> <shout>I &#x2665; Perl</shout>
  • 27. <?xml version=”1.0”?> <div> <a href=”/search?q=YAPC&Asia”>link</a> </div>
  • 28. <?xml version=”1.0”?> <div> <a href=”/search?q=YAPC&amp;Asia”>link</a> </div>
  • 29. <?xml version=”1.0”?> <rss> <channel> <item> <summary>YAPC rocks</summary> <xhtml:body> YAPC <xhtml:strong>really</xhtml:strong> rocks. </xhtml:body> </item> </channel> </rss>
  • 30. <?xml version=”1.0”?> <rss xmlns:xhtml=”http://www.w3.org/1999/xhtml”> <channel> <item> <summary>YAPC rocks</summary> <xhtml:body> YAPC <xhtml:strong>really</xhtml:strong> rocks. </xhtml:body> </item> </channel> </rss>
  • 31. use XML::LibXML; my $parser = XML::LibXML->new; my $doc = $parse->parse_string($xml);
  • 32. use XML::Liberal; my $parser = XML::Liberal->new(‘LibXML’); my $doc = $parse->parse_string($xml);