<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Sugmak</title><link>http://sugmak.com</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/probo" /><description>The world through the eyes of a freelance programmer based in Fukuoka, Japan.</description><language>en</language><generator>posterous.com</generator><link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#4fc32aa80" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/probo" /><feedburner:info uri="probo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>LaunchBarで読み込むためにGoogle ChromeのブックマークをHTMLファイルに書き出すPerlスクリプト</title><link>http://feedproxy.google.com/~r/probo/~3/u6MAOxJY81I/launchbarchromehtmlperl</link><pubDate>Sun, 21 Mar 2010 07:36:00 PDT</pubDate><guid isPermaLink="false">http://sugmak.com/launchbarchromehtmlperl</guid><description>&lt;p&gt;
	&lt;p&gt;私は長年&lt;a href="http://www.obdev.at/products/launchbar/index.html"&gt;LaunchBar&lt;/a&gt;を愛用していますが、未だChromeのブックマークの読み込みには対応していません。ですが、ChromeのブックマークをHTMLファイルとして書き出すことができればLaunchBarで読み込むことができます。&lt;/p&gt;
&lt;p&gt;そういうわけで、Chromeのブックマークの所在を調べてみると&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;~/Library/Application Support/Google/Chrome/Default/Bookmarks&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;にそれらしきファイルがありました。このファイルはどうやらJSON(JavaScript)フォーマットで書かれています。そういうわけで、こいつをHTMLに書き出す非常にニッチな自作スクリプトを作って使用しています。&lt;/p&gt;
&lt;p&gt;スクリプト実行後に書き出されたファイルをLaunchBarに登録すればOKです。また、このスクリプト自体もLaunchBarに登録すれば、いつでも実行できるので便利です。&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-perl"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;span rel="#L31" id="L31"&gt;31&lt;/span&gt;
&lt;span rel="#L32" id="L32"&gt;32&lt;/span&gt;
&lt;span rel="#L33" id="L33"&gt;33&lt;/span&gt;
&lt;span rel="#L34" id="L34"&gt;34&lt;/span&gt;
&lt;span rel="#L35" id="L35"&gt;35&lt;/span&gt;
&lt;span rel="#L36" id="L36"&gt;36&lt;/span&gt;
&lt;span rel="#L37" id="L37"&gt;37&lt;/span&gt;
&lt;span rel="#L38" id="L38"&gt;38&lt;/span&gt;
&lt;span rel="#L39" id="L39"&gt;39&lt;/span&gt;
&lt;span rel="#L40" id="L40"&gt;40&lt;/span&gt;
&lt;span rel="#L41" id="L41"&gt;41&lt;/span&gt;
&lt;span rel="#L42" id="L42"&gt;42&lt;/span&gt;
&lt;span rel="#L43" id="L43"&gt;43&lt;/span&gt;
&lt;span rel="#L44" id="L44"&gt;44&lt;/span&gt;
&lt;span rel="#L45" id="L45"&gt;45&lt;/span&gt;
&lt;span rel="#L46" id="L46"&gt;46&lt;/span&gt;
&lt;span rel="#L47" id="L47"&gt;47&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;utf8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="c1"&gt;# use Data::Dumper;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$chrome_bookmark_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ENV&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;HOME&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/Library/Application Support/Google/Chrome/Default/Bookmarks&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$new_bookmark_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ENV&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;HOME&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/Documents/chrome_bookmarks.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$chrome_bookmark_file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;utf8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decode_utf8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$json&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nb"&gt;warn&lt;/span&gt; &lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;¥n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$bookmarks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;roots&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;other&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;children&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;create_chrome_bookmark_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$bookmarks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;readfile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Can&amp;#39;t open file $_[0]: $!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="vg"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="sr"&gt;&amp;lt;$fh&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;create_chrome_bookmark_file&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$new_bookmark_file&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Can&amp;#39;t open file $new_bookmark_file: $!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;dl&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@$items&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;eq&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;dt&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;a href=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;quot; &amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;/dt&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;/dl&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="nb"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fh&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;ついでにヒストリーファイルも同様に処理したかったのですが、こちらはJSONファイルではないようです。&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/launchbarchromehtmlperl"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/launchbarchromehtmlperl#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/launchbarchromehtmlperl</feedburner:origLink></item><item><title>"Fukuoka Perl Workshop #15" 開催のお知らせ</title><link>http://feedproxy.google.com/~r/probo/~3/wP63BYMRLHU/fukuoka-perl-workshop-15</link><pubDate>Mon, 08 Mar 2010 09:18:00 PST</pubDate><guid isPermaLink="false">http://sugmak.com/fukuoka-perl-workshop-15</guid><description>&lt;p&gt;
	&lt;p&gt;いつもの通り、ATNDで参加受付を行っています。 &lt;br /&gt;&lt;a href="http://atnd.org/events/3247"&gt;http://atnd.org/events/3247&lt;/a&gt; &lt;p /&gt; 今回のスピーカーは、今のところdragon3さんが &lt;br /&gt;「Plack/PSGI ですばやく実装＆デプロイなお話」をされるようです。 &lt;br /&gt;乞うご期待。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/fukuoka-perl-workshop-15"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/fukuoka-perl-workshop-15#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/fukuoka-perl-workshop-15</feedburner:origLink></item><item><title>WordCamp Fukuoka 2010終了しました。</title><link>http://feedproxy.google.com/~r/probo/~3/oIca5Tqx2EE/wordcamp-fukuoka-2010-0</link><pubDate>Mon, 01 Mar 2010 08:08:00 PST</pubDate><guid isPermaLink="false">http://sugmak.com/wordcamp-fukuoka-2010-0</guid><description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://2010.wordcampfukuoka.com/"&gt;&lt;img src="http://lh6.ggpht.com/_8r6rBJA736s/S2hGnpqnF5I/AAAAAAAAAS4/OlmGr5Gqzj8/0A2DB2F4-575A-4DA3-B287-71C45FBFB6CB.jpg?imgmax=800" border="0" height="60" alt="0A2DB2F4-575A-4DA3-B287-71C45FBFB6CB.jpg" width="468" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前の記事で「イベント当日は裏方をやっています」と書きましたが、なんと当日は総合司会をやっていたので、驚かれた方も多いかと思います。大方の予想通り、噛みまくりで残念な感じの司会でしたが、なんとか最後までこぎ着けることができました。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;さて、今回のイベントの成果ですが、来場者は有料のメインホールに参加された方が189名、これに多目的ホールでの無料の講演に参加された方々、さらにはゲスト、スピーカー、スタッフの方々を加えると200名は優に超えました。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;私は福岡で200人という集客数は大盛況だと思っています。何故なら、福岡県の人口が約500万人、東京都が約2.6倍の1300万人位ですから、&lt;strong&gt;福岡の200人は東京での520人規模のイベントに匹敵する&lt;/strong&gt;という勝手な持論を持っているからです。&lt;/p&gt;
&lt;p&gt;ただ、数字というのはあまり問題ではなく、今回一番嬉しかったのは、イベント終了後に参加者の皆さんがTwitterやブログなどで&lt;strong&gt;「楽しかった」、「ためになった」、「自分でも何か作ってみようと思った」&lt;/strong&gt;などのポジティブなコメントを数多く残してくださっていることです。参加者数はどうあれ、これらの言葉がイベントを催す側にとっての最大の褒め言葉であり、継続のための励みになるのです。&lt;/p&gt;
&lt;p&gt;さて、講演の詳細は他のブログ等に委ねるとして、全体を通して私が個人的に印象に残ったことを書きます。&lt;/p&gt;
&lt;p&gt;司会者の私はメインホールでの講演はステージ脇で全て拝聴しました。その中で印象に残った言葉をまとめていくと次のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作ってみよう。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;使うだけでも楽しいけど、プラグインやテーマを作るともっと楽しい。それを他のユーザーに使ってもらうとさらに楽しい。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;参加しよう。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;コミュニティや勉強会で他のユーザーと交流したり、情報交換したりすれば、刺激になる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;世界に飛び出そう。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;日本人のプラグイン作者はまだまだ少ない。&lt;/li&gt;
&lt;li&gt;「見ず知らずの方の人生を豊かにできる」（三好隆之さんの講演での言葉）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;これらは、どんなプロダクトであれ、プログラミング言語であれ、共通のキーワードだと思いますが、その発言の根底に、&lt;strong&gt;プロダクトに対する感謝と愛情の気持ち&lt;/strong&gt;が見え隠れするのが、人気のあるオープンソースプロダクトの特徴だと思います。WordPressもそうでした。&lt;/p&gt;
&lt;p&gt;それと、今回ステージ上から観客席を拝見して驚いたのは、その年齢層でした。老若男女、実に幅広いお客様がいらっしゃいました。さらに職業もプログラマーからデザイナー、更には学生さんから経営者まで、こちらも実に幅広い。この観客層が、いかに多くの人々にWordPressが愛されているかを象徴しているような気がしました。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;最後になりましたが、４つの感謝で締めくくりたいと思います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ご支援・ご協力いただいたスポンサーの皆様、ありがとうございました。&lt;/li&gt;
&lt;li&gt;講演して下さったスピーカーの皆様、ありがとうございました。&lt;/li&gt;
&lt;li&gt;イベントを影で支えてくれたボランティアスタッフの皆様、ありがとうございました。&lt;/li&gt;
&lt;li&gt;そして、ご来場いただいた参加者の皆様、本当にありがとうございました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この気持ちは来年に繋げたいと思います。&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/wordcamp-fukuoka-2010-0"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/wordcamp-fukuoka-2010-0#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/wordcamp-fukuoka-2010-0</feedburner:origLink></item><item><title>WordCamp Fukuoka 2010</title><link>http://feedproxy.google.com/~r/probo/~3/uMjlVjvy-js/wordcamp-fukuoka-2010</link><pubDate>Mon, 01 Mar 2010 00:32:00 PST</pubDate><guid isPermaLink="false">http://sugmak.com/wordcamp-fukuoka-2010</guid><description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://2010.wordcampfukuoka.com/"&gt;&lt;img src="http://lh6.ggpht.com/_8r6rBJA736s/S2hGnpqnF5I/AAAAAAAAAS4/OlmGr5Gqzj8/0A2DB2F4-575A-4DA3-B287-71C45FBFB6CB.jpg?imgmax=800" border="0" height="60" alt="0A2DB2F4-575A-4DA3-B287-71C45FBFB6CB.jpg" width="468" /&gt;&lt;/a&gt;&lt;p /&gt;WordPress関連のイベントが福岡で開催されます。私は当日、運営スタッフの一員として裏方の仕事をやっていますので、ステージ脇や受付周辺をウロウロしていると思います。見かけた方は声をかけてくださると喜びます。&lt;p /&gt;話は変わって、私はWordPressにはもう4年くらい触っていないのですが、聞くところによると、最近ではブログツールとしてだけではなくCMSとして使われることが多いそうです。私はCMS自体を作ることに、仕事で毎日のように携わっていますが、既存の製品を使ったことは、まだ一度もありません。&lt;p /&gt;たぶん私の仕事は服飾でいうところのオーダーメイドなんだと思います。既製品の服は、ぴったりとカスタマイズすることは難しいけれども、廉価で手が出しやすいというメリットがあります。そうやって多くのユーザーが集まり、同じ製品を愛する人たちの知恵が集結すれば、オーダーメイドにも負けないような結果が出せるんじゃないか？ということを、このイベントで見極めたいと思っています。&lt;p /&gt;まだ定員まで余裕があります。興味のある方は是非ご参加ください。&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/wordcamp-fukuoka-2010"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/wordcamp-fukuoka-2010#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/wordcamp-fukuoka-2010</feedburner:origLink></item><item><title>「Fukuoka Perl Workshop #14」の開催についてと雑感</title><link>http://feedproxy.google.com/~r/probo/~3/kH8SepgZKwI/fukuoka-perl-workshop-14</link><pubDate>Sun, 18 Oct 2009 22:32:00 PDT</pubDate><guid isPermaLink="false">http://sugmak.com/fukuoka-perl-workshop-14</guid><description>&lt;p&gt;
	&lt;p&gt;現在参加者募集中です。詳細はこちらからどうぞ。&lt;br /&gt; &lt;a href="http://fukuoka.pm.org/2009/10/fukuoak-perl-workshop-14.html"&gt;Fukuoka  Perl Mongers: 「Fukuoak Perl Workshop #14」開催のお知らせ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前回の記事にも書きましたが、先月開催されたYAPC::Asia  2009にイベントレポータとして参加したお陰で、Perlを愛して止まない多くの方々とお会いすることができました。初日の懇親会では Shibuya.pmリーダーの竹迫さんとYokohama.pmリーダーの栗原さんと集まってお話することができました。他にも「機会があれば Fukuoka.pmへ参加したい」という方々が何人もいらっしゃいました。東京から1000キロ以上離れた場所にあるFukuoka.pmですが、その 距離が一気に縮まったような気がしました。&lt;/p&gt;
&lt;p&gt;そのFukuoka.pmは2007年11月に設立されました。満2歳を向かえる来月、なんとJPA代表理事の牧大輔さんが、Fukuoka.pm へ参加されることになりました。牧さんには感謝この上もございません。また、このような繋がりが生まれつつあるのは、YAPC::Asiaのお陰であり、 Perlコミュニティのお陰でもあります。本当に参加して良かったと思います。&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/fukuoka-perl-workshop-14"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/fukuoka-perl-workshop-14#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/fukuoka-perl-workshop-14</feedburner:origLink></item><item><title>YAPC::Asia 2009 大雑把な所感</title><link>http://feedproxy.google.com/~r/probo/~3/ahH0zAlkWPc/yapcasia-2009</link><pubDate>Thu, 03 Sep 2009 22:42:00 PDT</pubDate><guid isPermaLink="false">http://sugmak.com/yapcasia-2009</guid><description>&lt;p&gt;
	&lt;p&gt;私は今回、id:hirataraさんと共に、前夜祭も含めた全日程でgihyo.jpのイベント・レポーターなるものに挑戦しました。 &lt;p /&gt; &lt;a href="http://gihyo.jp/news/report/01/yapcasia2009"&gt;http://gihyo.jp/news/report/01/yapcasia2009&lt;/a&gt; &lt;p /&gt; レポータをやっていて「これは今後使われるケースが増えていくんじゃないか?」と思った技術的なキーワードをざっとリストアップしてみました(既に流行っているものもありますが)。全体的にPerlでのWebアプリケーションの作り方が、また新たな局面を迎えた感があります。 &lt;p /&gt;  * HTTP::EngineベースのWAF &lt;br /&gt; * PSGI/Plack &lt;br /&gt; * イベント駆動(AnyEvent) &lt;br /&gt; * スレッド(Coro) &lt;br /&gt; * 非同期 &lt;br /&gt; * 継続 &lt;br /&gt; * nginx &lt;p /&gt; 全てのセッションを聴講したわけではないので抜けがあると思います。その点はご了承ください。 &lt;p /&gt; ちなみにMooseは、第一線ではもうすっかり定着している感じで、現在はHTTP::EngineのようにMooseをベースとした成果物、さらにはそれをベースとしたMoose三世くらいの時代に入っているのかなと思いました。 &lt;p /&gt; 最後に、YAPCのボランティアスタッフの皆様、JPAの皆様、そしてスピーカの皆様、本当にお疲れさまでした、そしてありがとうございました。 &lt;p /&gt; Perl大好き!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/yapcasia-2009"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/yapcasia-2009#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/yapcasia-2009</feedburner:origLink></item><item><title>初めて本格的にJavaを使ってみていいと思ったところ</title><link>http://feedproxy.google.com/~r/probo/~3/VAkzpJJntrY/java-369</link><pubDate>Sat, 07 Feb 2009 22:49:00 PST</pubDate><guid isPermaLink="false">http://sugmak.com/java-369</guid><description>&lt;p&gt;
	&lt;p&gt;昨年の4月頃から仕事で本格的にJavaを使い始めました。ちなみにそれまでの自分の仕事をざっと言語別にみると「Perl、 &lt;br /&gt;ActionScript、JavaScript、(時々)PHP」という感じで、いわゆるスクリプト言語が殆どでした。しかしここ1年を見ると、サーバーサイド言語に関してはPerlよりもJavaが多くなり、クライアントサイドがJavaScriptとActionScript、そしてバッジ処理、テキスト処理等の部分でPerlを使うという具合に変わってきています。 &lt;p /&gt; 最初のうちはJavaという慣れないプラットフォームに戸惑いましたが、周囲にいらっしゃる優秀なJavaプログラマーの皆さんのおかげで、なんとか仕事で使えるレベルまで到達してきました。またスクリプト言語とJavaの双方を経験することにより、お互いの良いところ、あるいは足りないところを再認識できたのも、自分にとっての大きな収穫でした。 &lt;p /&gt; そこで今回は、私の感じたプラットフォームとしてのJavaが優れていると思った点をメモしてみたいと思います。 &lt;p /&gt; &lt;/p&gt;
&lt;p&gt;1. VMの存在&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; JavaVM(Java仮想マシン)のおかげで、開発環境や実運用環境の構築の際に、OSの種類やバージョン等に振り回されることが少なくなりました。JavaVMという仮想世界に閉じこもることのできないスクリプト言語では、そうはいかない場合が多いのです。そういう意味で、Perl6から導入されるであろうParrotに期待しています。 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2. DIとAOP&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Depandency Injection(依存性注入)とAOP(アスペクト指向プログラミング)。これらの概念が最も浸透している言語のひとつがJavaだと思います。DIとAOPについての詳しい説明はここでは省きますが、極めて平たく言うと、部品(オブジェクト)同士の依存関係を切り詰めることによって、全体の柔軟性を高めることが可能となり、その結果、メンテナンス性が高まるとか、テストがやり易くなる等のメリットを享受することができるというものです。特に規模の大きなプロジェクトでその効力を発揮します。ちなみに私はSeasar2というフレームワークをメインで使っています。 &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; DIもAOPもスクリプト言語ではあまり馴染のない概念ですが、現在私はPerlのDIフレームワークであるBread::Boardを弄っています。Perlの場合、Mooseあるいは将来登場するPerl6のように、成熟した純然たるオブジェクト指向で書けるようになるつれて、DIや &lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 30px;"&gt;AOPのような概念がどんどん普及してくるのではないかと思っています。そういう意味で近い将来に期待したいと思います。&lt;/p&gt;
&lt;p&gt;3. 周辺技術の充実&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt; 1. IDE &lt;br /&gt; スクリプト言語のコーディングやXHTMLのマークアップの際にはVimかEmacsを使いますが、Javaプログラミングでは専らElipse &lt;br /&gt;を使っています。Javaのように静的な型付けをする言語の場合、型を補完したりチェックしてくれるIDEがないとかなり厳しいと思います。定番と呼ばれるものには、それなりの理由があって、Eclipseの場合も慣れてしまえば本当に便利なツールになるはずです。&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt; 2. Maven &lt;br /&gt; プロジェクトのスケルトン作成、依存ライブラリの管理、ビルド、テスト、そしてデプロイ(サーバーへの配備)まで、一貫して面倒を見てくれるツールです。スクリプト言語の場合だと、複数のツールをいろいろ組み合わせて実現するようなことを、Mavenの場合には、これひとつで一貫してできるというのがポイントです。また意外と柔軟性もあって、豊富なpluginを使ってさらに便利に拡張することも可能ですし、Antやシェルスクリプトなど他のツールと組み合わせて使うこともできます。最初のうちはMavenの仕様というか哲学みたいなものを理解するのに時間がかかりましたが、理解が深まるにつれて、とても便利なツールだということを実感しました。&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;3. Tomcat &lt;br /&gt; 実績のある定番アプリケーションサーバーの存在は、特に実運用の際に心強いものです。スクリプト言語にもそれぞれ定番の運用環境はあるものの、 &lt;br /&gt;Tomcatほど簡単に設置できるものは見かけません。やはりここでもプラットフォームの差異を吸収してくれるVMの存在が大きいのかも知れません。&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;4. CIツール &lt;br /&gt; 有名なものとしてはHudsonとContiniumがあります。言語を問わずソフトウェアの品質を維持・管理する上で、「コンピューターにできることは、できる限り自動的にそして定期的にコンピューターにやらせる」というのはとても大切なことだと思います。私も今後はこのCI(継続的インテグレーション)という概念を、スクリプト言語にも積極的に取り入れたいと思っています。&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;5. 豊富な情報量 &lt;br /&gt; これは書店の技術書のコーナーへ行くとわかるのですが、プログラミング言語の場合、おそらくJavaに関する書籍の数が最も多いのではないでしょうか?英語が苦にならないような現場ならば別ですが、大抵の場合、日本語の情報量が豊富というのは、かなり重要な要因になると思います。&lt;p /&gt; 以上、大雑把ですが、ざっとまとめてみました。今後もJavaとスクリプト言語のお互いの良いところを取り入れながら、適材適所で上手く使い分けていきたいと思います。&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sugmak.com/java-369"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://sugmak.com/java-369#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;</description><posterous:author xmlns:posterous="http://posterous.com/help/rss/1.0">
        <posterous:userImage>http://files.posterous.com/user_profile_pics/415488/tanuki144.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5eCbPPb57wrv</posterous:profileUrl>
        <posterous:firstName>Makoto</posterous:firstName>
        <posterous:lastName>Sugiyama</posterous:lastName>
        <posterous:nickName>sugmak</posterous:nickName>
        <posterous:displayName>Makoto Sugiyama</posterous:displayName>
      </posterous:author><feedburner:origLink>http://sugmak.com/java-369</feedburner:origLink></item></channel></rss>

