Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Plagger the duct tape of internet

5,194 views

Published on

at XML developers' day 2006

Published in: Technology
  • Be the first to comment

Plagger the duct tape of internet

  1. 1. Plagger the duct tape of the Web Tatsuhiko Miyagawa [email_address] Six Apart, Ltd. / Shibuya Perl Mongers XML Developers' Day #9
  2. 2. <ul><li>IRC </li></ul><ul><li>#plagger-ja </li></ul><ul><li>chat.freenode.net </li></ul><ul><li>(iso-2022-jp) </li></ul>
  3. 3. <ul><li>アウェイっぽいので </li></ul><ul><li>自己紹介 </li></ul>
  4. 4. <ul><li>Tatsuhiko Miyagawa </li></ul>
  5. 7. http://www.vox.com/
  6. 8. <ul><li>What is Plagger? </li></ul>
  7. 13. <ul><li>Pl uggable </li></ul><ul><li>RSS/Atom </li></ul><ul><li>Agg regato r </li></ul>
  8. 14. <ul><li>Why Pluggable? </li></ul><ul><li>Just for a feed aggregation? </li></ul>
  9. 15. <ul><li>History </li></ul>
  10. 16. <ul><li>2002 Apr. </li></ul><ul><li>baseball2rss </li></ul><ul><li>http://search.cpan.org/dist/WWW-Baseball-NPB/ </li></ul>
  11. 17. <ul><li>2003 Oct. </li></ul><ul><li>rss2javascript </li></ul><ul><li>http://blog.bulknews.net/cookbook/blosxom/rss/rss2js.html </li></ul>
  12. 18. <ul><li>2004 Sep. </li></ul><ul><li>bloglines2ipod </li></ul><ul><li>http://bulknews.net/lib/utils/bloglines2ipod/ </li></ul>
  13. 20. <ul><li>2004 Oct. </li></ul><ul><li>rss2audiobook </li></ul><ul><li>http://bulknews.net/lib/utils/rss2audiobook/ </li></ul>
  14. 21. <ul><li>2005 Aug. </li></ul><ul><li>bloglines2gmail </li></ul><ul><li>http://svn.bulknews.net/repos/public/bloglines2email/trunk/ </li></ul>
  15. 22. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $xml = $agent->get($url)->content; my $rss = XML::RSS->new; $rss->parse($xml); for my $item (@{$rss->items}) { # do something with $item }
  16. 23. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $xml = $agent->get($url)->content; my $rss = XML::RSS->new; $rss->parse($xml); for my $item (@{$rss->items}) { # do something with $item }
  17. 24. <ul><li>&quot;HTTP リクエストが </li></ul><ul><li>エラーになったら ?&quot; </li></ul>
  18. 25. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $res = $agent->get($url); if ($res->is_error) { die &quot;Bah.&quot; } my $xml = $res->content; my $rss = XML::RSS->new; $rss->parse($xml); for my $item (@{$rss->items}) { # do something with $item }
  19. 26. <ul><li>&quot;Atom も読みたい !&quot; </li></ul>
  20. 27. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; use XML::Atom::Feed; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $res = $agent->get($url); if ($res->is_error) { die &quot;Bah.&quot; } my $xml = $res->content; if ($res->content_type =~ /atom/) { my $feed = XML::Atom::Feed->new($xml); } else { my $rss = XML::RSS->new; $rss->parse($xml); }
  21. 28. <ul><li>If-Modified-Since で </li></ul><ul><li>帯域節約したい! </li></ul>
  22. 29. #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::RSS; my $url = &quot;http://example.com/rss.xml&quot;; my $agent = LWP::UserAgent->new; my $local = cache_path_for($url); my $res = $agent->mirror($url, $local); if ($res->is_error) { die &quot;Bah.&quot; } my $xml = $res->content; …
  23. 30. <ul><li>&quot; 壊れたフィードも </li></ul><ul><li>パースしたい! &quot; </li></ul>
  24. 31. <ul><li>Etc., etc. </li></ul>
  25. 32. <ul><li>他にも </li></ul>
  26. 33. <ul><li>rss2opml </li></ul><ul><li>http://aruntx.com/software/rss2opml/ </li></ul>
  27. 34. <ul><li>rss2pdf </li></ul><ul><li>http://rss2pdf.com/ </li></ul>
  28. 35. <ul><li>rss2atom </li></ul><ul><li>brian.wanamaker.com/mybicycle/2004/02/rss2atom.html </li></ul>
  29. 36. <ul><li>atom2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=atom2rss </li></ul>
  30. 37. <ul><li>rss2ical </li></ul><ul><li>http://bura-bura.com/blog/archives/2004/06/22/rss2ical/ </li></ul>
  31. 38. <ul><li>Bloglines2opml </li></ul><ul><li>http://mycvs.org/wp/wp-content/wp-transform.php </li></ul>
  32. 39. <ul><li>rss2gmail </li></ul><ul><li>http://www.cs.utexas.edu/~karu/gmailrss/ </li></ul>
  33. 40. <ul><li>rss2imap </li></ul><ul><li>http://rss2imap.sourceforge.jp/ </li></ul>
  34. 41. <ul><li>ebay2rss </li></ul><ul><li>http://www.2rss.com/software.php?page=ebay2rss </li></ul>
  35. 42. <ul><li>svn2rss </li></ul><ul><li>http://twiki.org/cgi-bin/view/Codev/Svn2rss </li></ul>
  36. 43. <ul><li><any>2<any> </li></ul>Where either of <any> is RSS|Atom|OPML
  37. 44. <ul><li>This is ridiculous. </li></ul>
  38. 45. <ul><li>Different Languages, </li></ul><ul><li>Different Bugs. </li></ul><ul><li>No hackability </li></ul>
  39. 47. via http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/02.html
  40. 48. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  41. 49. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  42. 50. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML, XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  43. 51. IRC, Eject, Growl MSAgent, SSTP … Filter Publish StripRSSAd TruePermalink EntryFullText Pipe Thumbnail FindEnclosures FetchEnclosure SpamAssassin RSSLiberalDateTime URLBL ResolveRelativeLink … Gmail Delicious PDF MT Feed Planet Speech … Notify Bloglines Config OPML , XOXO File, DBI, FOAF … Mixi, Frepa POP3, iCal iTunes, Amazon YouTube … Subscription CustomFeed
  44. 52. <ul><li>Just like UNIX pipe </li></ul>Subscribe OPML | StripRSSAd | ResolveRelativeLink | Publish Feed --type=Atom
  45. 53. I believe RSS has the potential to be the “UNIX pipe of the internet” … Ray Ozzie CTO of Microsoft http://rayozzie.spaces.live.com/blog/cns!FB3017FBB9B2E142!285.entry
  46. 54. &quot;the Unix shell for Web 2.0&quot;
  47. 55. <ul><li>組み合わせの数 </li></ul><ul><li>{CustomFeed,Subscription}/*.pm: 35 </li></ul><ul><li>{Publish,Notify}/*.pm: 37 </li></ul><ul><li>35 * 37 = 1295 </li></ul>
  48. 56. <ul><li>Plagger </li></ul><ul><li>Core features </li></ul>
  49. 57. <ul><li>RSS/Atom </li></ul><ul><li>Auto-Discovery </li></ul>
  50. 58. <ul><li>Support Feed formats </li></ul><ul><li>RSS 0.91 to Atom 1.0 </li></ul><ul><li>(XML::Feed + hacks) </li></ul>
  51. 59. <ul><li>Support parsing </li></ul><ul><li>Broken feeds </li></ul><ul><li>(XML::Liberal) </li></ul>
  52. 60. <ul><li>HTTP optimizations </li></ul><ul><li>If-Modified-Since / gzip </li></ul><ul><li>(URI::Fetch) </li></ul>
  53. 61. <ul><li>Podcast / Videocast </li></ul><ul><li>Support </li></ul><ul><li>(RSS 2.0 & Atom 1.0) </li></ul>
  54. 62. <ul><li>Photocast </li></ul><ul><li>Media RSS </li></ul><ul><li>iTunes RSS* </li></ul>
  55. 63. <ul><li>非同期ダウンロード </li></ul><ul><li>cURL, wget, HTTP::Parallel & HTTP::Async* </li></ul>
  56. 64. <ul><li>完全な国際化 </li></ul><ul><li>Unicode & Timezone </li></ul>
  57. 65. <ul><li>Access to </li></ul><ul><li>browser Cookies </li></ul><ul><li>IE, Safari, Firefox and w3m </li></ul>
  58. 66. <ul><li>Screen-scraping </li></ul><ul><li>Via CutomFeed::* </li></ul>
  59. 67. <ul><li>Stackable Plugins </li></ul>
  60. 68. <ul><li>Rule-based </li></ul><ul><li>Dispatch of Plugins </li></ul>
  61. 69. <ul><li>Plagger の </li></ul><ul><li>インストール </li></ul>
  62. 72. <ul><li>省略 </li></ul>http://plagger.org/trac/wiki/PlaggerQuickStart
  63. 73. <ul><li>Plagger </li></ul><ul><li>クイックチュートリアル </li></ul>
  64. 74. <ul><li>Email クライアントで </li></ul><ul><li>RSS フィードを読みたい! </li></ul><ul><li>(Gmail, Thunderbird) </li></ul>
  65. 75. rss2email.yaml plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - http://bulknews.typepad.com/blog/ - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  66. 76. RSS in Gmail
  67. 77. HTML + Images
  68. 78. Feed Image (Logo / Buddy Icon)
  69. 79. Search
  70. 80. Auto grouping (“Conversations”)
  71. 81. Diff
  72. 82. <ul><li>オフライン(飛行機)でも </li></ul><ul><li>フィードを読みたい! </li></ul>
  73. 83. rss2email.yaml plugins: - module: Subscription::Config config: feed: - http://bulknews.vox.com/library/posts/atom.xml - http://bulknews.typepad.com/blog/ - module: Filter::FindEnclosures - module: Filter::FetchEnclosure config: dir: /tmp - module: Publish::Gmail config: mailto: miyagawa@gmail.com attach_enclosures: 1
  74. 84. Offline Mode POP3 + Thunderbird
  75. 85. <ul><li>&quot; フィードのリストを </li></ul><ul><li>YAML で管理するのメンドウ &quot; </li></ul>
  76. 86. opml2email.yaml plugins: - module: Subscription::OPML config: url: http://example.com/subscription.opml - module: Publish::Gmail config: mailto: miyagawa@gmail.com # subscription.opml <?xml version=&quot;1.0&quot;?> <opml> <outline title=&quot;Subscriptions&quot;> <outline title=&quot;miyagawa&quot; type=&quot;rss&quot; xmlUrl=&quot;http://bulknews.typepad.com/blog/atom.xml&quot; /> <outline title=&quot;miyagawa on Vox&quot; type=&quot;rss&quot; htmlUrl=&quot;http://bulknews.vox.com/&quot; /> </outline> </opml>
  77. 87. <ul><li>&quot;OPML を手動で編集するのはテラダルス &quot; </li></ul>
  78. 88. filesub2email.yaml plugins: - module: Subscription::File config: url: file:///path/to/subscription.txt - module: Publish::Gmail config: mailto: miyagawa@gmail.com > cat subscription.txt http://bulknews.typepad.com/blog/atom.xml http://bulknews.vox.com/ >
  79. 89. <ul><li>&quot;1000 フィード以上読んでると自分のマシンで読むのは帯域のムダ。 Bloglines にクロールさせたい。 &quot; </li></ul>
  80. 90. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  81. 91. <ul><li>&quot; それ Livedoor Reader で &quot; </li></ul>
  82. 92. bloglines2email.yaml plugins: - module: Subscription::LivedoorReader config: username: YOU@example.com password: blahblahblah - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  83. 93. <ul><li>&quot;Gmail / Thunderbird から </li></ul><ul><li>del.icio.us にブクマしたい !&quot; </li></ul>
  84. 94. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Widget::Simple config: widget: delicious - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  85. 96. <ul><li>&quot; それはてなブックマークで &quot; </li></ul>
  86. 97. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Widget::Simple config: widget: hatena_bookmark_users - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  87. 99. <ul><li>&quot;RSS 広告ウザス &quot; </li></ul>
  88. 100. bloglines2email.yaml plugins: - module: Subscription::Bloglines config: username: YOU@example.com password: blahblahblah - module: Widget::Simple config: widget: delicious - module: Filter::StripRSSAd - module: Publish::Gmail config: mailto: miyagawa@gmail.com
  89. 101. <ul><li>Quick tour </li></ul><ul><li>For more plugins </li></ul>
  90. 102. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  91. 103. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  92. 104. <ul><li>Subscription </li></ul><ul><li>load subscriptions </li></ul><ul><li>(list the feeds/URLs to aggregate) </li></ul>
  93. 105. <ul><li>Subscription::Config </li></ul>- module: Subscription::Config config: feed: - http://www.yapcchicago.org/feed/ - http://tokyo.yapcasia.org/blog/
  94. 106. <ul><li>Subscription::OPML </li></ul>- module: Subscription::OPML config: url: http://www.example.com/subs.opml # subs.opml <opml> <outline xmlUrl=&quot;http://www.yapcchicago.org/feed/&quot; /> <outline htmlUrl=&quot;http://tokyo.yapcasia.org/blog/&quot; /> </opml>
  95. 107. <ul><li>Subscription::File </li></ul>- module: Subscription::File config: url: file:///path/to/subscription.txt % cat subscription.txt http://www.yapcchicago.org/feed/ http://tokyo.yapcasia.org/blog/ %
  96. 108. <ul><li>Subscription::XOXO </li></ul>- module: Subscription::XOXO config: url: http://www.example.com/subscription.html # subscription.html <ul class=&quot;xoxo&quot;> <li><a href=&quot;http://www.yapcchicago.org/feed/&quot;>YAPC::NA</a></li> <li><a href=&quot;http://tokyo.yapcasia.org/blog/&quot;>YAPC::NA</a></li> </ul>
  97. 109. <ul><li>Subscription::Bookmarks </li></ul><ul><li>Read bookmarks file of IE, Firefox and Safari </li></ul>
  98. 110. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  99. 111. <ul><li>Filter </li></ul><ul><li>Normalize / Repair feed metadata </li></ul><ul><li>Upgrade feed content </li></ul><ul><li>Filter feed content using text filters </li></ul><ul><li>Invoke some action on entries </li></ul>
  100. 112. <ul><li>Filter::EntryFullText </li></ul><ul><li>本文なしのフィードをアップグレード </li></ul><ul><li>個別 HTML を取得して正規表現 / XPath </li></ul>
  101. 113. <ul><li>Filter::TruePermalink </li></ul><ul><li>リダイレクト URL などを Canonicalize </li></ul><ul><li>(e.g. http://…/go.php?url=….) </li></ul>
  102. 114. <ul><li>Filter::FindEnclosures </li></ul><ul><li>コンテンツからエンクロージャを抽出 </li></ul><ul><li><a href=&quot;http://…./foo.mp3&quot;>episode #1</a> </li></ul>
  103. 115. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  104. 116. <ul><li>Publish </li></ul><ul><li>Publish aggregated entry to online services </li></ul><ul><li>reBlogging </li></ul><ul><li>Convert feeds to other formats </li></ul>
  105. 117. <ul><li>Publish::Feed </li></ul><ul><li>Republish feed in RSS/Atom </li></ul><ul><li>Good to use with scrapers </li></ul>
  106. 118. <ul><li>Publish::MT </li></ul><ul><li>Reblog entries using MT XML-RPC </li></ul>
  107. 119. <ul><li>Publish::MTWidget </li></ul>
  108. 120. <ul><li>Publish::Email </li></ul><ul><li>text/plain, multipart/alternative </li></ul><ul><li>Pluggable email protocols </li></ul><ul><li>(SMTP, SMTP Auth, IMAP, Maildir …) </li></ul>
  109. 121. <ul><li>Publish::iCal </li></ul><ul><li>Publish iCal feeds out of RSS/Atom </li></ul>
  110. 122. <ul><li>Publish::Excel </li></ul>仕事の合間に !
  111. 123. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  112. 124. <ul><li>Search </li></ul><ul><li>Index aggregated entries on search engines </li></ul>
  113. 125. <ul><li>Search::Spotlight </li></ul>
  114. 126. <ul><li>Search::Estraier </li></ul><ul><li>Uses HyperEstraier XMLRPC node API </li></ul>
  115. 127. <ul><li>Search::Lucene* </li></ul><ul><li>Use Lucene WebService API </li></ul><ul><li>(OpenSearch 1.1 and Atom) </li></ul>
  116. 128. Plugin phases (types) <ul><li>Subscription </li></ul><ul><li>Aggregator </li></ul><ul><li>CustomFeed </li></ul><ul><li>Filter </li></ul><ul><li>Publish </li></ul><ul><li>Search </li></ul><ul><li>Notify </li></ul>
  117. 129. <ul><li>Notify </li></ul><ul><li>Notify feed updates in various ways </li></ul>
  118. 130. <ul><li>Notify::Growl </li></ul>
  119. 131. <ul><li>Notify::Balloon </li></ul>
  120. 132. <ul><li>Notify::MSAgent </li></ul>
  121. 133. Notify::Eject Supports: Windows, Linux, FreeBSD and Mac OSX!
  122. 134. <ul><li>Notify::Pizza </li></ul>
  123. 135. <ul><li>Notify::Pizza </li></ul>Now it does Sushi too!
  124. 136. <ul><li>Plagger に </li></ul><ul><li>対する誤解 </li></ul>
  125. 138. http://d.hatena.ne.jp/sugarcut/20061117/p1 それ Pla 脳 それ Plagger で できるよ それプラズマで 説明できるよ
  126. 140. <ul><li>何でもできる </li></ul><ul><li>… わけじゃない </li></ul>
  127. 142. <ul><li>Plagger is a </li></ul><ul><li>&quot;Feed&quot; aggregator </li></ul>
  128. 143. Plagger::Subscription Plagger::Feed author id link title tags url entries Plagger::Feed author id link title tags url entries Plagger::Feed author id link title tags url entries Plagger::Entry author id link permalink title tags enclosures
  129. 144. ピザ Pla の意義
  130. 148. &quot;the Unix shell for Web 2.0&quot;
  131. 149. &quot;RSS is the Standard IO for the Web&quot;
  132. 150. &quot;RSS is the Standard IO for the Web&quot;
  133. 151. Feed formats RSS 0.91 RSS 2.0 RSS1.0 / RDF Atom 1.0 JSON iCal OPML XOXO XBEL Sitemaps attention.xml Amazon API Google API OpenSearch AtomPP GData
  134. 152. Feed Vocabulary / Extensions rvw: Enclosures Photocast iTunes RSS Media RSS Dublin Core FOAF microformats
  135. 154. Plagger = The duct tape of the web.
  136. 155. <ul><li>Example: </li></ul><ul><li>Location metadata </li></ul>
  137. 156. N 37.7782 W 122.3973
  138. 157. GeoRSS <georss:point>37.7782 -122.3973</georss:point> <georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </gml:Point> </georss:where> xmlns:georss=&quot;http://www.georss.org/georss&quot; xmlns:gml=&quot;http://www.opengis.net/gml&quot;
  139. 158. RDF geo vocabulary <foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point> </foaf:based_near> xmlns:geo=&quot;http://www.w3.org/2003/01/geo/wgs84_pos#&quot;
  140. 159. Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> xmlns:media=&quot;http://search.yahoo.com/mrss/&quot;
  141. 160. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; />
  142. 161. geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&quot;>-122.3973</span> </div>
  143. 162. Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a>
  144. 163. Eznavi mail
  145. 164. Photo EXIF
  146. 165. adr <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>San Francisco</span>, <span class=&quot;region&quot;>CA</span> <span class=&quot;postal-code&quot;>94107</span> <div class=&quot;country-name&quot;>U.S.A.</div> </div>
  147. 166. <ul><li>We don't care </li></ul><ul><li>about format diffs. </li></ul>
  148. 167. GeoRSS <georss:point>37.7782 -122.3973</georss:point> <georss:where> <gml:Point> <gml:pos>37.7782 -122.3973</gml:pos> </gml:Point> </georss:where> Namespace::GeoRSS
  149. 168. RDF geo vocabulary <foaf:based_near> <geo:Point> <geo:lat>35.678</geo:lat> <geo:long>139.770</geo:long> </geo:Point> </foaf:based_near> Namespace::Geo
  150. 169. Flickr geo tag <media:category scheme=&quot;urn:flickr:tags&quot;> geo:lat=37.7782 geo:lon=-122.3973 </media:category> Filter::geotagged
  151. 170. GeoURL <meta name=&quot;ICBM&quot; content=&quot;37.7782, -122.3973&quot; /> Filter::GeoURL
  152. 171. geo microformats <div class=&quot;geo&quot;> <span class=&quot;latitude&quot;>37.7782</span> <span class=&quot;longitude&quot;>-122.3973</span> </div> Filter::Microformats::geo
  153. 172. Links to Google Maps <a href=&quot;http://maps.google.com/maps?q=37.7782,-122.3973&z=16&quot;> Link to Google Maps</a> Filter::ExtractMapsLinks
  154. 173. Eznavi mail Filter::ExtractMapsLinks
  155. 174. Photo EXIF Filter::FetchEnclosure + Filter::ExtractEXIF
  156. 175. adr <div class=&quot;adr&quot;> <div class=&quot;street-address&quot;>548 4th St.</div> <span class=&quot;locality&quot;>San Francisco</span>, <span class=&quot;region&quot;>CA</span> <span class=&quot;postal-code&quot;>94107</span> <div class=&quot;country-name&quot;>U.S.A.</div> </div> Filter::Microformats::adr + Filter::Geocoding::US
  157. 176. <ul><li>Publish::KML </li></ul><ul><li>Publish::GoogleMaps </li></ul><ul><li>Publish::Feed </li></ul><ul><li>(with geotags) </li></ul>
  158. 177. <ul><li>Everything's done </li></ul><ul><li>in plugins </li></ul><ul><li>= Clean & extensible. </li></ul>
  159. 178. <ul><li>Plagger </li></ul><ul><li>dev. Status </li></ul>
  160. 179. <ul><li>Version </li></ul><ul><li>0.7.13 </li></ul>
  161. 180. <ul><li>Coming Soon … </li></ul>
  162. 181. <ul><li>iTunes RSS support </li></ul>
  163. 182. <ul><li>Geo extensions </li></ul>
  164. 183. <ul><li>Enclosure processors </li></ul><ul><li>ffmpeg, Sync::PSP, Sync::iPodVideo </li></ul>
  165. 184. <ul><li>Pluggable summarizer </li></ul><ul><li>& text formatter </li></ul><ul><li>Lingua::EN::Summarize, Text::Original, HTML::WikiConverter, HTML::FormatText </li></ul>
  166. 185. <ul><li>Rich Media metadata </li></ul><ul><li>ID3 tag in enclosures </li></ul><ul><li>Links to imdb.com / amazon.com </li></ul><ul><li>hReview microformats </li></ul>
  167. 186. <ul><li>Calendar Support </li></ul><ul><li>iCal parser & emitter </li></ul><ul><li>hCalendar microformats </li></ul><ul><li>.ics attached in emails </li></ul><ul><li>Sync::SyncML </li></ul>
  168. 187. <ul><li>Email refactoring </li></ul><ul><li>text/plain, iso-2022-jp support </li></ul><ul><li>Pluggable storage engines </li></ul>
  169. 188. <ul><li>http://plagger.org/ </li></ul><ul><li>Planet, Mailing List, IRC </li></ul><ul><li>Bug Tracking, SVN repository </li></ul>
  170. 189. <ul><li>#plagger-ja on freenode </li></ul>
  171. 190. <ul><li>Join Us! </li></ul>
  172. 191. <ul><li>Thank you </li></ul><ul><li>Questions? </li></ul>

×