<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://feather.cocolog-nifty.com/weblog/">
<title>雪羽の発火後忘失</title>
<link>http://feather.cocolog-nifty.com/weblog/</link>
<description>YUKIHANE&#39;s blog &quot;FIRE AND FORGET&quot;</description>
<dc:language>ja-JP</dc:language>
<dc:creator></dc:creator>
<dc:date>2009-11-14T19:15:38+09:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.typepad.com/" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/android-99e8.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/rssgroovy-298a.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver03-9616.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser-ver.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver02-9113.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver01-30d9.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/jst-2cf6.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/fest-swing6-edt.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/enum-e5ff.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/trllogeditor-11.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/11/holux-m-241trl-.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/10/9-7efe.html" />
<rdf:li rdf:resource="http://feather.cocolog-nifty.com/weblog/2009/10/ntt-117d.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/android-99e8.html">
<title>Androidでのミュージックファイルアートワーク(カバーアート)仕様</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/android-99e8.html</link>
<description>正確にはAndroidの仕様なのかアプリケーションの仕様なのか分からないが、少なくともHT-03Aの標準音楽プレーヤと、meridianでは以下のような動作になっていた。 アートワークはアルバムごとに1つ 「アルバム」の定義は後述するが、上記の意味するところは、同一アルバム内の楽曲ファイルに異なるアートワークを設定したとしても、プレーヤ上はどれも同じアートワークが表示される。 どのアートワークが用...</description>
<content:encoded>&lt;iframe style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; height=&quot;60&quot; marginheight=&quot;0&quot; border=&quot;0&quot; src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=feather0e-22&amp;amp;o=9&amp;amp;p=13&amp;amp;l=st1&amp;amp;mode=books-jp&amp;amp;search=android&amp;amp;fc1=000000&amp;amp;lt1=&amp;amp;lc1=3366FF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; frameborder=&quot;0&quot; width=&quot;468&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;正確にはAndroidの仕様なのかアプリケーションの仕様なのか分からないが、少なくともHT-03Aの標準音楽プレーヤと、&lt;a href=&quot;http://jp.androlib.com/android.application.org-iii-romulus-meridian-qmtA.aspx&quot;&gt;meridian&lt;/a&gt;では以下のような動作になっていた。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;アートワークはアルバムごとに1つ&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;「アルバム」の定義は後述するが、上記の意味するところは、同一アルバム内の楽曲ファイルに異なるアートワークを設定したとしても、プレーヤ上はどれも同じアートワークが表示される。&lt;/p&gt;  &lt;p&gt;どのアートワークが用いられるかは&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;アルバム内で最初にアクセスした「アートワークが設定されたファイル」のアートワークを、アルバムアートワークとしてキャッシュする&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;ということのようだ。一旦キャッシュされると、次回以降はそのキャッシュを使用しているように見える。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;キャッシュはルート直下の&lt;em&gt;albumthumbs&lt;/em&gt;ディレクトリに保存される&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;このディレクトリ以下に保存されているファイルを画像ビューアで開くと、アートワーク画像そのものだということがわかる。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;次に「アルバム」の定義だが、&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;異なるディレクトリに保存されたファイルは必ず異なるアルバムとして扱われる&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;同一ディレクトリに保存されたファイルでも、ID3タグ上のアルバム名が異なるファイルは異なるアルバムとして扱われる&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;逆に言うと、&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;同一アルバムとして扱うためには、以下の条件を満たす必要がある      &lt;ul&gt;       &lt;li&gt;同一ディレクトリに保存されたファイルである &lt;/li&gt;        &lt;li&gt;ID3タグのアルバム名が同一である &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;ということになる。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ところで、HT-03Aでの楽曲管理に&lt;a href=&quot;http://www.doubletwist.com/&quot;&gt;doubleTwist&lt;/a&gt;を用いている方も多いと思うが、このアプリで同期すると音楽ファイルは単一ディレクトリに保存される。&lt;/p&gt;  &lt;p&gt;したがって、アルバム名を設定していないと、全て同一アルバムの楽曲だとみなされてしまう。&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html&quot;&gt;ipum&lt;/a&gt;ではニコニコ動画音楽ファイルにID3タグを付与する設定にしていても、アルバム名の設定は行わない。このため、初回アクセスしたファイルのアートワークが、全てのファイルで表示されてしまう。対策としては&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ファイルごとに保存ディレクトリを変える &lt;/li&gt;    &lt;li&gt;ファイルごとにアルバム名を変える(ファイル名をアルバム名に設定する、など) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;といったことが考えられるが、前者はファイル管理が煩雑になる(し、同期アプリに依存する)、後者はAndroid上だけで扱うファイルであれば良いかもしれないが、タグの本来の意味と異なるものを設定することになるため、相互運用で問題が出るだろう。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;追記：&lt;/p&gt;  &lt;p&gt;Google code の Issuesでは、&lt;a href=&quot;http://code.google.com/p/android/issues/detail?id=2945&quot;&gt;Issue 2945: Music player doesn&#39;t recognize different images in the id3 tags of multiple files in one album&lt;/a&gt; で”Defect”として登録されているので、仕様ではなくバグのようだ。&lt;/p&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>
<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-14T19:15:38+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/rssgroovy-298a.html">
<title>ニコニコ動画のRSS一覧作成するGroovyスクリプト</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/rssgroovy-298a.html</link>
<description>Groovyイン・アクション Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet 最近全くGroovyを触っていなかったので、手慣らしにスクレイピングでニコニコ動画のRSS一覧を作成するスクリプトを書いてみた。 import org.cyberneko.html.parsers.SAXParser def rankUrl ...</description>
<content:encoded>&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:2eaa1df4-c1b9-401a-b9d1-3b95204dda44&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4839927278/feather0e-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Groovyイン・アクション&quot; src=&quot;http://ecx.images-amazon.com/images/I/41vRc7HHxqL._SL160_.jpg&quot;&gt;&lt;br&gt;Groovyイン・アクション Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet &lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最近全くGroovyを触っていなかったので、手慣らしにスクレイピングでニコニコ動画のRSS一覧を作成するスクリプトを書いてみた。&lt;/p&gt;  &lt;div style=&quot;border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px&quot; id=&quot;codeSnippetWrapper&quot;&gt;   &lt;div style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;     &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;import&lt;/span&gt; org.cyberneko.html.parsers.SAXParser&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def rankUrl = &lt;span style=&quot;color: #006080&quot;&gt;&#39;http://www.nicovideo.jp/ranking&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def kinds = [&lt;span style=&quot;color: #006080&quot;&gt;&#39;総合&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;fav&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;マイリスト&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;mylist&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;再生&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;view&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;コメント&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;res&#39;&lt;/span&gt;]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def spans = [&lt;span style=&quot;color: #006080&quot;&gt;&#39;毎時&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;hourly&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;デイリー&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;daily&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;週間&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;weekly&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;月間&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;monthly&#39;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&#39;合計&#39;&lt;/span&gt;:&lt;span style=&quot;color: #006080&quot;&gt;&#39;total&#39;&lt;/span&gt;]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def rankHtml = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; XmlSlurper(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SAXParser()).parse(rankUrl)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def groups = rankHtml.&lt;span style=&quot;color: #006080&quot;&gt;&#39;BODY&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;DIV&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;DIV&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TABLE&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TR&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TD&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TABLE&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TR&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;TH&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;A&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;def groupMap = [:]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;groups.each{groupMap[it.text()] = it.@href.toString().split(&lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt;)[6]}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #008000&quot;&gt;//groupMap.each{println it.key + &#39;, &#39; + it.value}&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;HTML&amp;gt;&amp;lt;BODY&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(kind in kinds){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(span in spans){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;        println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;A HREF=&amp;quot;&#39;&lt;/span&gt; + rankUrl + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + kind.value + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + span.value + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + &lt;span style=&quot;color: #006080&quot;&gt;&#39;all&#39;&lt;/span&gt; + &lt;span style=&quot;color: #006080&quot;&gt;&#39;?rss=2.0&amp;quot;&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;        println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&#39;&lt;/span&gt; + &lt;span style=&quot;color: #006080&quot;&gt;&#39;カテゴリ合算&#39;&lt;/span&gt; + &lt;span style=&quot;color: #006080&quot;&gt;&#39; - &#39;&lt;/span&gt; + kind.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39; - &#39;&lt;/span&gt; + span.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;/A&amp;gt;&amp;lt;BR&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(group in groupMap){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    def groupUrl = rankUrl + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/fav/daily/&#39;&lt;/span&gt; + group.value&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    def groupHtml = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; XmlSlurper(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SAXParser()).parse(groupUrl)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    def categories = groupHtml.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;*&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;NOBR&#39;&lt;/span&gt;.&lt;span style=&quot;color: #006080&quot;&gt;&#39;A&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    def categoryMap = [:]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    categories.each{categoryMap[it.&lt;span style=&quot;color: #006080&quot;&gt;&#39;DIV&#39;&lt;/span&gt;.text()] = it.@href.toString().split(&lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt;)[6]}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//    categoryMap.each{println it.key + &#39;, &#39; + it.value}&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;P&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;H3&amp;gt;カテゴリグループ: &#39;&lt;/span&gt; + group.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;/H3&amp;gt;&amp;lt;BR&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(category in categoryMap){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(kind in kinds){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt;(span in spans){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;                println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;A HREF=&amp;quot;&#39;&lt;/span&gt; + rankUrl + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + kind.value + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + span.value + &lt;span style=&quot;color: #006080&quot;&gt;&#39;/&#39;&lt;/span&gt; + category.value + &lt;span style=&quot;color: #006080&quot;&gt;&#39;?rss=2.0&amp;quot;&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;                println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&#39;&lt;/span&gt; + category.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39; - &#39;&lt;/span&gt; + kind.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39; - &#39;&lt;/span&gt; + span.key + &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;/A&amp;gt;&amp;lt;BR&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;    println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;/P&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;println &lt;span style=&quot;color: #006080&quot;&gt;&#39;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;出力結果は&lt;a href=&quot;http://yukihane.dip.jp/dist/NicoBrowser/feedurllist.html&quot;&gt;こういう感じ&lt;/a&gt;になる。&lt;/p&gt;

&lt;p&gt;実行には&lt;a href=&quot;http://nekohtml.sourceforge.net/&quot;&gt;CyberNeko HTML Parser&lt;/a&gt;が必要。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-14T01:42:18+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver03-9616.html">
<title>音楽ファイルに投稿者を設定する(ipum ver.0.3)</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver03-9616.html</link>
<description>NicoBrowser ver.0.1.1 でニコニコ動画の投稿者名を永続化するように対応したのに合わせ、ipumで変換したファイルのID3タグにも投稿者名を埋め込むように対応した。 ダウンロードはこちらから。 従来、ニコニコ動画サイトで投稿者命を取得するには、各動画ページ内の「この動画を違反通報」リンク先を参照する必要があり、他の方が作成されているスクリプト等ではこれを見ているものが多いように思...</description>
<content:encoded>&lt;p&gt;NicoBrowser ver.0.1.1 でニコニコ動画の投稿者名を永続化するように対応したのに合わせ、ipumで変換したファイルのID3タグにも投稿者名を埋め込むように対応した。&lt;/p&gt;  &lt;p&gt;ダウンロードは&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html&quot;&gt;こちら&lt;/a&gt;から。&lt;/p&gt;  &lt;p&gt;従来、ニコニコ動画サイトで投稿者命を取得するには、各動画ページ内の「この動画を違反通報」リンク先を参照する必要があり、他の方が作成されているスクリプト等ではこれを見ているものが多いように思う。&lt;/p&gt;  &lt;p&gt;この秋のバージョンアップからだろうか、動画ページ内に「投稿者プロフィールへ」リンクが出来ているようなので、NicoBrowserではこちらから取得するようにしている。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-13T16:05:03+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html">
<title>ipum - 動画ファイルから無劣化音楽抽出</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html</link>
<description>ipum 最新版(ver.0.3)をダウンロードする Java6実行環境がインストールされていれば、ipum.jarをダブルクリックすることで起動できる。 機能と特徴 インターネット動画サービスが提供している動画ファイルから音楽を抽出する。 mp4,flv,swfファイルに対応。 動画変換でよく利用されているffmpegはswfサポートが弱いので、swfに対応できているのは希少。 NicoBrow...</description>
<content:encoded>&lt;p&gt;&lt;iframe style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; height=&quot;240&quot; marginheight=&quot;0&quot; border=&quot;0&quot; src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=feather0e-22&amp;amp;o=9&amp;amp;p=15&amp;amp;l=bn1&amp;amp;mode=videogames-jp&amp;amp;browse=637394&amp;amp;fc1=000000&amp;amp;lt1=&amp;amp;lc1=3366FF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; frameborder=&quot;0&quot; width=&quot;468&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/ipum_front_1.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;ipum_front&quot; border=&quot;0&quot; alt=&quot;ipum_front&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/ipum_front_thumb_1.png&quot; width=&quot;244&quot; height=&quot;220&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/ipum/20091113_ver_0_3/ipum0.3.zip&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/graphics/Download-32x32.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/ipum/20091113_ver_0_3/ipum0.3.zip&quot;&gt;ipum 最新版(ver.0.3)をダウンロードする&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Java6実行環境がインストールされていれば、&lt;strong&gt;ipum.jar&lt;/strong&gt;をダブルクリックすることで起動できる。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;機能と特徴&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;インターネット動画サービスが提供している動画ファイルから音楽を抽出する。 &lt;/li&gt;    &lt;li&gt;mp4,flv,swfファイルに対応。      &lt;ul&gt;       &lt;li&gt;動画変換でよく利用されているffmpegはswfサポートが弱いので、swfに対応できているのは希少。 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html&quot;&gt;NicoBrowser&lt;/a&gt;との連携により、ニコニコ動画のコンテンツではID3タグにサムネイル画像などを埋め込み可能。 &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;&amp;#160;&lt;/p&gt;  &lt;h4&gt;動作環境&lt;/h4&gt;  &lt;p&gt;&lt;a href=&quot;http://java.com/&quot;&gt;java6&lt;/a&gt;&lt;a href=&quot;http://java.com/&quot;&gt;実行環境&lt;/a&gt;がインストールされたWindows。&lt;/p&gt;  &lt;p&gt;ID3タグ埋め込み機能を利用するためには、&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html&quot;&gt;NicoBrowser&lt;/a&gt; Ver.0.1.1以降がセットアップされている必要がある。&lt;/p&gt;  &lt;ul&gt;&lt;/ul&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-13T15:49:07+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser-ver.html">
<title>データを保持したままテーブル構造を変更する(NicoBrowser ver.0.1)</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser-ver.html</link>
<description>データベース・リファクタリング スコット W アンブラー ピラモド・サダラージ NicoBrowser Ver.0.1を作成した。ダウンロードはこちらから。 なお、以前のバージョンから更新する際には、初回起動前に以下のコマンドを実行する必要がある(通常の起動コマンドにsyncオプションをつける)。 java –jar NicoBrowser sync 変更内容は以下の通り。 永続化情報に「投稿者」...</description>
<content:encoded>&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:0782115b-602a-47e5-a64e-f3293e99bc2f&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4894715007/feather0e-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;データベース・リファクタリング&quot; src=&quot;http://ecx.images-amazon.com/images/I/51AqqyE8%2BdL._SL160_.jpg&quot;&gt;&lt;br&gt;データベース・リファクタリング スコット W アンブラー ピラモド・サダラージ &lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;NicoBrowser Ver.0.1を作成した。ダウンロードは&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html&quot;&gt;こちら&lt;/a&gt;から。&lt;/p&gt;  &lt;p&gt;なお、&lt;font color=&quot;#ff0000&quot;&gt;以前のバージョンから更新する際には、初回起動前に以下のコマンドを実行する必要がある(通常の起動コマンドに&lt;strong&gt;&lt;em&gt;sync&lt;/em&gt;&lt;/strong&gt;オプションをつける)。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;java –jar NicoBrowser sync&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;変更内容は以下の通り。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;永続化情報に「投稿者」を追加した。 &lt;/li&gt;    &lt;li&gt;追加機能は特に無い。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;NicoBrowserでは、コンテンツ情報をインプロセスDBで管理している。今回、投稿者情報という新しい項目を永続化するに当たって、テーブルにカラムを追加する必要が生じた。&lt;/p&gt;  &lt;p&gt;従来のバージョンでは、JPAの機能を利用して、DBやテーブルが無ければ作成する(あれば何もしない)という動作にしていた。しかし、今回のように現在テーブルが既に存在する場合にプロパティ(永続化するBeanのフィールド)を追加しようとした場合は、この機能では対応できない。&lt;/p&gt;  &lt;p&gt;そこで、今回のバージョンからは、DB/テーブルの作成は&lt;a href=&quot;http://www.liquibase.org/ja/home&quot;&gt;LiquiBase&lt;/a&gt;で行うことにした。&lt;/p&gt;  &lt;p&gt;LiquiBaseはDBリファクタリングツールという位置付けで、&lt;a href=&quot;http://www.amazon.co.jp/gp/product/4894715007?ie=UTF8&amp;amp;tag=feather0e-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=4894715007&quot;&gt;書籍「データベース・リファクタリング」&lt;/a&gt;で説明されている手法をツール化したもの、らしい。&lt;/p&gt;  &lt;p&gt;ともかく、このツールを使うことで、テーブルの内容を保持したままテーブル構造を変更することができるようになった。&lt;/p&gt;  &lt;p&gt;ただ、このツールは、DBの変更(リファクタリング)内容を、専用のテーブルで管理しており、NicoBrowserを従来のバージョンから今回の方式にあわせるためには、一旦現在の内容をその管理テーブルに書き込む必要がある。これを、冒頭に記載したsyncオプションで行うことにしている。&lt;/p&gt;  &lt;p&gt;このsyncオプションによる管理テーブルの同期は1回のみ行えばよく、今後はテーブル構造に変更があった場合でもLiquiBaseが自動で追従してくれるはずである。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-13T11:31:09+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html">
<title>NicoBrowser - ランキング、公開マイリストからのニコニコ動画自動ダウンロード</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/nicobrowser---f.html</link>
<description>NicoBrowser最新版(ver.0.1.1)をダウンロードする 以前のバージョンを利用している場合には、後述「バージョンアップに関する注意事項」も参照のこと。 機能・特徴 ニコニコ動画に投稿された動画の自動ダウンロード ランキングの上位から自動ダウンロード(ニコニコ動画のフィードを利用) 指定した公開マイリストから自動ダウンロード ダウンロード履歴管理 一度ダウンロードした動画は重複してダウ...</description>
<content:encoded>&lt;p&gt;&lt;iframe style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; height=&quot;240&quot; marginheight=&quot;0&quot; border=&quot;0&quot; src=&quot;http://rcm-jp.amazon.co.jp/e/cm?t=feather0e-22&amp;amp;o=9&amp;amp;p=15&amp;amp;l=st1&amp;amp;mode=music-jp&amp;amp;search=steins%20gate&amp;amp;fc1=000000&amp;amp;lt1=&amp;amp;lc1=3366FF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; frameborder=&quot;0&quot; width=&quot;468&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/NicoBrowser/20091113/NicoBrowser0.1.1.zip&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/graphics/Download-32x32.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/NicoBrowser/20091113/NicoBrowser0.1.1.zip&quot;&gt;&lt;strong&gt;NicoBrowser最新版(ver.0.1.1)をダウンロードする&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;以前のバージョンを利用している場合には、後述「バージョンアップに関する注意事項」も参照のこと。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;機能・特徴&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;ニコニコ動画に投稿された動画の自動ダウンロード      &lt;ul&gt;       &lt;li&gt;ランキングの上位から自動ダウンロード(&lt;a href=&quot;http://yukihane.dip.jp/dist/NicoBrowser/feedurllist.html&quot;&gt;ニコニコ動画のフィード&lt;/a&gt;を利用) &lt;/li&gt;        &lt;li&gt;指定した公開マイリストから自動ダウンロード &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;ダウンロード履歴管理      &lt;ul&gt;       &lt;li&gt;一度ダウンロードした動画は重複してダウンロードされない &lt;/li&gt;        &lt;li&gt;エコノミーモードでダウンロードしていた場合でも、高画質ファイルが取得できるのであれば再ダウンロードする &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Pure Javaで開発      &lt;ul&gt;       &lt;li&gt;Windows, MacOS, Linux上などで動作可能 &lt;/li&gt;        &lt;li&gt;&lt;a href=&quot;http://java.com/&quot;&gt;Java6実行環境&lt;/a&gt;がインストールされている必要がある &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;操作方法&lt;/h3&gt;  &lt;p&gt;コマンドラインで以下を実行。&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;strong&gt;java -jar NicoBrowser.jar&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;NicoBrowser.jarのダブルクリックでも起動できるが、この場合エラーメッセージ等は表示されない。&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;その他詳細設定方法などは、ダウンロードファイルに含まれるREADME.htmlを参照。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;バージョンアップに関する注意事項&lt;/h3&gt;  &lt;h4&gt;&lt;a name=&quot;mozTocId920310&quot;&gt;&lt;/a&gt;2009/05/24版以前を使用していた場合の注意事項&lt;/h4&gt;  &lt;p&gt;アップデート後(つまり今回のファイルで上書きした後)、1回目の起動前に以下のコマンドを実行する必要がある。実行しないとDB関連のエラーとなり処理が継続できない。&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;strong&gt;java -jar NicoBrowser.jar sync&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;(引数にsyncをつけて実行する)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;&lt;a name=&quot;mozTocId116237&quot;&gt;&lt;/a&gt;2009/03/23版以前を使用していた場合の注意事項&lt;/h4&gt;  &lt;p&gt;nicobrowser.propertiesの互換性は無いため、一旦リネーム(or 削除)してから    &lt;br /&gt;実行する必要がある。こうすることで、新しいnicobrowser.propertiesが作成される。&lt;/p&gt;  &lt;p&gt;path.dbの設定は、従来は&amp;quot;ファイル名&amp;quot;の指定だったが、現在は&amp;quot;ディレクトリ名&amp;quot;の指定に変わっていることに注意。&lt;/p&gt;  &lt;p&gt;本体libディレクトリ以下について、構成が大きく変わっているため、libは上書きでなく置換することを推奨。&lt;/p&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-13T10:43:57+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver02-9113.html">
<title>ニコニコ動画コンテンツをサムネイルつきで音楽ファイルに変換する(ipum ver.0.2)</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver02-9113.html</link>
<description>前回記載したとおり、iPod touchやHT-03Aでは専ら音楽を聴くのみで、動画再生機能は利用していない。 ただ、せっかくディスプレイがあるので、音楽再生時にも利用できたほうが良いのではないか、ということで、ipumにアートワークを埋め込む機能を追加した。 ドラッグアンドドロップで、以下のような情報が埋め込まれたファイルが自動生成される。 この機能を利用するためにはいくつか制約がある。 Nic...</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver01-30d9.html&quot;&gt;前回記載した&lt;/a&gt;とおり、iPod touchやHT-03Aでは専ら音楽を聴くのみで、動画再生機能は利用していない。&lt;/p&gt;  &lt;p&gt;ただ、せっかくディスプレイがあるので、音楽再生時にも利用できたほうが良いのではないか、ということで、ipumにアートワークを埋め込む機能を追加した。&lt;/p&gt;  &lt;p&gt;ドラッグアンドドロップで、以下のような情報が埋め込まれたファイルが自動生成される。&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/id3tag.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;id3tag&quot; border=&quot;0&quot; alt=&quot;id3tag&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/id3tag_thumb.png&quot; width=&quot;125&quot; height=&quot;244&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;この機能を利用するためにはいくつか制約がある。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/05/--nicobrowserni.html&quot;&gt;NicoBrowser&lt;/a&gt;(使い方例&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2008/03/post_2827.html&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2008/03/post_7d4b.html&quot;&gt;2&lt;/a&gt;)でダウンロードしたファイルであること。 &lt;/li&gt;    &lt;li&gt;ダウンロード後、ファイル名を変更していないこと。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;NicoBrowserが持っているダウンロード履歴を基にWebアクセスを行い、ID3タグに埋め込むための情報を取得しているため、このような制約がある。&lt;/p&gt;  &lt;p&gt;その他、このipumのID3タグ埋め込み機能を利用する場合、NicoBrowserと同時起動すると正しく動作しないため、注意が必要である。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ダウンロードは&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html&quot;&gt;こちら&lt;/a&gt;から。&lt;/p&gt;  &lt;p&gt;デフォルトでは、本機能は無効になっている。有効にするためには、設定ファイル内の&lt;strong&gt;&amp;lt;useid3&amp;gt;&lt;/strong&gt;オプションをfalseから&lt;strong&gt;true&lt;/strong&gt;に書き換える。&lt;/p&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>
<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-09T20:34:11+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver01-30d9.html">
<title>動画から音楽ファイルを抽出するipum ver.0.1</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/ipum-ver01-30d9.html</link>
<description>ダウンロードはこちらから。 Java実行環境がインストールされていれば、ipum.jarをダブルクリックすることで起動できる。 機能と特徴 インターネット動画サービスが提供している動画ファイルから音楽を抽出する。 mp4,flv,swfファイルに対応。動画変換でよく利用されているffmpegはswfサポートが弱いので、swfに対応できているのは希少。 初期設定不要で、ドラッグアンドドロップで変換可...</description>
<content:encoded>&lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/ipum_front.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;ipum_front&quot; border=&quot;0&quot; alt=&quot;ipum_front&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/ipum_front_thumb.png&quot; width=&quot;244&quot; height=&quot;220&quot; /&gt;&lt;/a&gt; &lt;/h4&gt;  &lt;p&gt;ダウンロードは&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/ipum---1377.html&quot;&gt;こちら&lt;/a&gt;から。&lt;/p&gt;  &lt;p&gt;Java実行環境がインストールされていれば、&lt;strong&gt;ipum.jar&lt;/strong&gt;をダブルクリックすることで起動できる。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;機能と特徴&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;インターネット動画サービスが提供している動画ファイルから音楽を抽出する。 &lt;/li&gt;    &lt;li&gt;mp4,flv,swfファイルに対応。動画変換でよく利用されているffmpegはswfサポートが弱いので、swfに対応できているのは希少。 &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;&amp;#160;&lt;/p&gt;  &lt;h4&gt;動機&lt;/h4&gt;  &lt;p&gt;最近使用しているポータブルミュージックプレーヤは、iPod touchと、たまにHT-03Aである。双方とも動画再生が行えるが、動画を再生することは殆ど無く、単純に音楽を聴くだけに使用している。&lt;/p&gt;  &lt;p&gt;YouTubeやニコニコ動画のflvやmp4を、ポータブルプレーヤ向けに変換してくれるソフトウェアは多いが、簡単に音楽ファイルに変換できるものは少ないように感じた。あったとしても動画変換のおまけ機能といった位置付けで、機能が無駄に多く、最適な変換を行うための設定が分からなかったりする。&lt;/p&gt;  &lt;p&gt;従来、私はCraving Explorerの変換機能を利用していたが、&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;変換するだけのためにブラウザを立ち上げるのは... &lt;/li&gt;    &lt;li&gt;オリジナルの音源を使えば良いのに変換処理が入ってしまう(時間がかかる、ものによってはファイルサイズが肥大化する)。 &lt;/li&gt;    &lt;li&gt;swfファイルの変換が出来ない。ファイルタイプをみて使用するソフトウェアを変えるのは面倒。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;という不満点があった。&lt;/p&gt;  &lt;p&gt;技術的には、ドラッグ&amp;amp;ドロップをJavaで実装したことが無かったのでやってみよう、というのと、Jakarta Commonsの便利さを実感してみよう、というのがある。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;現在の制約事項は以下の通り。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ウィンドウ右上の設定ボタンは機能しない。現在のところ、設定変更はファイルを直接編集する必要がある。設定ファイルは初回起動時に、ホームディレクトリ直下に.ipum/ipum.xmlとして作成される。WindowsXPの場合は &lt;em&gt;C:\Documents and Settings\user\.ipum\ipum.xml&lt;/em&gt; となる。 &lt;/li&gt;    &lt;li&gt;一旦登録したファイルは削除できない。これはただの実装漏れなので、近いうちに修正したい。 &lt;/li&gt;    &lt;li&gt;ファイル名によっては変換に失敗するものがある(ハートマークが入ったもので必ず失敗することを確認)。これはffmpegの制約のようだ。対策としては変換時、一時的にファイル名を変更するなどが挙げられる &lt;/li&gt;    &lt;li&gt;音楽ファイルフォーマット(エンコード方式)は変換元のファイル拡張子から決め打ちしているので、想定と異なるエンコードだと変換できても聴けないものが出てくるかもしれない。 &lt;/li&gt;    &lt;li&gt;動作環境はJava6ランタイムがインストールされたWindows。ネイティブバイナリを使用していることの他、Javaでのdrag&amp;amp;dropの実装がOSごとに異なるらしい。 &lt;/li&gt; &lt;/ul&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>
<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-08T19:53:32+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/jst-2cf6.html">
<title>[読書]「科学者になる方法」 科学技術振興機構(JST)プレスルーム編</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/jst-2cf6.html</link>
<description>科学者になる方法―第一線の研究者が語る 本書「はじめに」より。 進路に迷っている高校生の皆さんや、科学に興味を持っている方々が「理系に進んだらこんな仕事をするのか」、「研究者の日常生活はこうなのか」など、「研究者の実像」が分かるような本を作ってみようということになったのです。 タイトルや掲載順は異なるが、原稿作成者はSciencePortalのページ「科学者になる方法」と同じであり、内容のイメージ...</description>
<content:encoded>&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:36d24c58-a3f9-497c-a8fa-955e9172ed5a&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4487800552/feather0e-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;科学者になる方法―第一線の研究者が語る&quot; src=&quot;http://ecx.images-amazon.com/images/I/51QEQQDWAVL._SL160_.jpg&quot;&gt;&lt;br&gt;科学者になる方法―第一線の研究者が語る &lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;本書「はじめに」より。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;進路に迷っている高校生の皆さんや、科学に興味を持っている方々が「理系に進んだらこんな仕事をするのか」、「研究者の日常生活はこうなのか」など、「研究者の実像」が分かるような本を作ってみようということになったのです。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;タイトルや掲載順は異なるが、原稿作成者はSciencePortalのページ「&lt;a href=&quot;http://scienceportal.jp/HotTopics/kagakusha/&quot;&gt;科学者になる方法&lt;/a&gt;」と同じであり、内容のイメージは掴める。おそらくwebにあるのが、原稿で、これを基にインタビューを行いまとめたものが本書なのだろう。&lt;/p&gt;  &lt;p&gt;研究分野ごとに章がわかれており、それぞれ以下の通りとなっている。&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;環境分野。2名。 &lt;/li&gt;    &lt;li&gt;情報通信分野。4名。 &lt;/li&gt;    &lt;li&gt;ライフサイエンス分野。16名。 &lt;/li&gt;    &lt;li&gt;ナノテクノロジー・材料分野。11名。 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;webでは34名登場しているのに対し書籍では合計33名になっているのは、書籍では&lt;a href=&quot;http://scienceportal.jp/HotTopics/kagakusha/backnumber/06.html&quot;&gt;毛利衛氏&lt;/a&gt;の文章はコラムとして扱われているため。&lt;/p&gt;  &lt;p&gt;冒頭引用文及び、上記webのタイトルを一覧するとわかるが、本書は書籍名である「科学者になる方法」というより、『科学者の半生』という色が強い。&lt;/p&gt;  &lt;p&gt;この他、『○○先生の研究』という節でそれぞれの著者が行っている研究の概要を、『研究者になるなら-先生からのアドバイス』という節で研究者としての資質や、どう考え行動していくべきなのか等が記述される。この3節がこの書籍の構成になっている。&lt;/p&gt;  &lt;p&gt;研究分野の比率は前述のとおり情報工学分野は少ないため、研究内容についてはあまり関心が生まれなかった(全く無いというわけではなく、例えば&lt;a href=&quot;http://scienceportal.jp/HotTopics/kagakusha/backnumber/04.html&quot;&gt;野依良治氏&lt;/a&gt;の文章の中にある、鏡に映った右手の手袋から&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E4%B8%8D%E6%96%89%E5%90%88%E6%88%90&quot;&gt;不斉合成&lt;/a&gt;の説明をされるくだりは大変面白かった)のだが、アドバイスの節は読んだ価値を感じさせてくれた。著者ごとに反対の意見とも言える主張をされているものもあり、面白い。&lt;/p&gt;  &lt;p&gt;途中のコラムに「研究者へのキャリアパス」というものがあり、ここでは、最終的な研究環境として『大学研究者』『公的研究機関』『企業研究者』の3種類が挙げられている。この書籍に登場されている方をカテゴライズしてみたところ、以下のようになった。&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;大学研究者: 25名 &lt;/li&gt;    &lt;li&gt;公的研究機関: 5名 &lt;/li&gt;    &lt;li&gt;企業研究者: 4名 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;執筆の以来を行う際の伝手の問題なども影響しているのだろうが、やはり研究者になろうとした場合の正攻法は(おそらく世間のイメージどおり)大学研究者になることなのだろうか。&lt;/p&gt;</content:encoded>


<dc:subject>書籍・雑誌</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-06T02:23:36+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/fest-swing6-edt.html">
<title>FEST-Swingを利用する(6) 非EDTでのSwingアクセスを検証する</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/fest-swing6-edt.html</link>
<description>Swingのスレッドポリシーに記載されている通り、Swingコンポーネント及び関連クラスはイベントディスパッチスレッド(EDT)で実行する必要がある。 スタンドアロンなプログラムを作成している場合には、上記リンク先に記載されているとおり、あまり意識する必要がない。しかし、クライアント/サーバ間で非同期通信を行うプログラムなどでは、よく誤ったコーディングを見かける。 本エントリでは、上記問題の簡単な...</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/package-summary.html#threading&quot;&gt;Swingのスレッドポリシー&lt;/a&gt;に記載されている通り、Swingコンポーネント及び関連クラスはイベントディスパッチスレッド(EDT)で実行する必要がある。&lt;/p&gt;  &lt;p&gt;スタンドアロンなプログラムを作成している場合には、上記リンク先に記載されているとおり、あまり意識する必要がない。しかし、クライアント/サーバ間で非同期通信を行うプログラムなどでは、よく誤ったコーディングを見かける。&lt;/p&gt;  &lt;p&gt;本エントリでは、上記問題の簡単な実例と、それに対するFEST-Swingでの検証方法について記述する。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;サンプルの説明&lt;/h4&gt;  &lt;p&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/fest/06/CommunicationSample.zip&quot;&gt;今回のサンプルコードはこちら&lt;/a&gt;になる。本サンプルコードは、GUIを持つクライアント(client.Client)とサーバ(server.Server)が登場する。&lt;/p&gt;  &lt;p&gt;クライアントは、サーバに要求を行い、サーバからその結果を受けた際に、画面に結果を表示する機能を持つ。&lt;/p&gt;  &lt;p&gt;サーバは、クライアントからの要求を受け付けた後、非同期で処理を行い結果を通知する機能を持つ。&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/cs_sequence.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;cs_sequence&quot; border=&quot;0&quot; alt=&quot;cs_sequence&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/WindowsLiveWriter/cs_sequence_thumb.png&quot; width=&quot;244&quot; height=&quot;148&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(余談。JUDE/Community 改め &lt;a href=&quot;http://astah.change-vision.com/ja/product/astah-community.html&quot;&gt;astash* community&lt;/a&gt;、最近のバージョンでは、印刷やコピー時に、上図のような透かしが入るようになったようだ。あくまで試用版、という色合いが濃くなったということか。&lt;a href=&quot;http://astah.change-vision.com/ja/contact-support/jude-user.html&quot;&gt;JUDEは2009年末までダウンロード提供&lt;/a&gt;、とのこと。)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;注目すべき箇所&lt;/h4&gt;  &lt;p&gt;結果を表示するラベル(resultLabel)に文字列を設定している2箇所に注目する。&lt;/p&gt;  &lt;p&gt;1箇所目はclient/Client.javaの106行目&lt;span style=&quot;font-weight: bold&quot;&gt;requestButtonActionPerformed&lt;/span&gt; メソッド中になる。要求ボタンを押した際に実行される。&lt;/p&gt;  &lt;div style=&quot;border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px&quot; id=&quot;codeSnippetWrapper&quot;&gt;   &lt;div style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;     &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum1&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; requestButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum2&quot;&gt;   2:&lt;/span&gt;     resultLabel.setText(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;要求中...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum3&quot;&gt;   3:&lt;/span&gt;     server.request();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum4&quot;&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;2箇所目は同ファイル134行目 &lt;span style=&quot;font-weight: bold&quot;&gt;listen&lt;/span&gt; メソッド中になる。サーバからの通知を受けた際に実行される。&lt;/p&gt;

&lt;div style=&quot;border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px&quot; id=&quot;codeSnippetWrapper&quot;&gt;
  &lt;div style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;
    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum1&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; listen(String str) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum2&quot;&gt;   2:&lt;/span&gt;     resultLabel.setText(str);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum3&quot;&gt;   3:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;どちらも同じようにイベントハンドラの中でラベルに文字列を書いており、実行してみても通常問題は発生しないため、このような実装が行われているのをよく見かける。&lt;/p&gt;

&lt;p&gt;しかし実際は、一方は問題ないが、もう一方は冒頭記述のSwingスレッドポリシーに反している。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;1点目のメソッドはJButton#addActionListenerメソッドで登録したハンドラであり、これは、ボタンが押された場合にEDTで実行されることが保証されている。&lt;/p&gt;

&lt;p&gt;一方、2点目のメソッドはサーバ側のタイミングで実行される(今回の場合はサーバスレッドが実行する)。従って非EDTで実行されてしまっている。&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;FEST-Swingを用いた検出&lt;/h4&gt;

&lt;p&gt;FEST-Swingでは、上記のようなコーディング誤りを検知する方法を提供している。&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.EDT&quot;&gt;FailOnThreadViolationRepaintManager&lt;/a&gt;というクラスがこれに当たる。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;利用するには、JUnitのテストクラスの@BeforeClassで以下の1行を追加すればよい。&lt;/p&gt;

&lt;div style=&quot;border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px&quot; id=&quot;codeSnippetWrapper&quot;&gt;
  &lt;div style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;
    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum1&quot;&gt;   1:&lt;/span&gt; @BeforeClass&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum2&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; setUpClass() &lt;span style=&quot;color: #0000ff&quot;&gt;throws&lt;/span&gt; Exception {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum3&quot;&gt;   3:&lt;/span&gt;     FailOnThreadViolationRepaintManager.install();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #606060&quot; id=&quot;lnum4&quot;&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;サンプルコードのテストケースを実行してみると、例外&lt;em&gt;EdtViolationException&lt;/em&gt;が発生し&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Exception in thread &amp;quot;Server Thread&amp;quot; org.fest.swing.exception.EdtViolationException: EDT violation detected&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;から始まる例外スタックトレースによって、前述2点目のハンドラに問題があることが検知できる。&lt;/p&gt;

&lt;p&gt;ただし、JUnit自体は正常終了している。これは、&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/10/fest-swing5-edt.html&quot;&gt;前回記載した事項&lt;/a&gt;と同様で、JUnitを失敗させるためには、JUnitスレッドで例外を送出する必要がある。&lt;/p&gt;

&lt;p&gt;実際のプログラムでは、あらゆるスレッドやプロセス(通常、クライアントとサーバは別VMだろう)で発生した例外をJUnitスレッドに集約することはできないだろう。ただし、ユニットテスト時、このようなテストにはモックオブジェクトを使用するのが通例だと考える。従って、モックオブジェクトのスレッドで発生した例外を、前回のようにJUnitスレッドに教えるコードを追加すれば正しく問題を検知できるテストコードが作成できると考える。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;FailOnThreadViolationRepaintManagerを用いた検証は完璧ではない(これについては次回記載予定)のだが、十分役に立つのではないだろうか。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-05T15:09:00+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/enum-e5ff.html">
<title>Enum?にキャストしようとするとコンパイルエラー変換できない型が発生する</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/enum-e5ff.html</link>
<description>こちらの例にあるように、 public class Test { enum Planet { EARTH, MARS } public static void main(String[] args) { Enum e1 = Planet.EARTH; // Hmm, doesnt compile Planet e2 = (Planet) e1; // Well this compiles,...</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;http://forums.sun.com/thread.jspa?threadID=5171568&amp;amp;tstart=0&quot;&gt;こちら&lt;/a&gt;の例にあるように、&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:bd099e40-c971-4005-bac5-4b7f571960b8&quot; class=&quot;wlWriterSmartContent&quot;&gt;   &lt;pre class=&quot;java:nogutter:nocontrols&quot; name=&quot;code&quot;&gt;public class Test {
    enum Planet { EARTH, MARS }
 
    public static void main(String[] args) {
        Enum&amp;lt;?&amp;gt; e1 = Planet.EARTH;
        // Hmm, doesn&#39;t compile
        Planet e2 = (Planet) e1;
        // Well this compiles, but it&#39;s not pretty!
        Planet e3 = (Planet) (Object) e1;
        // So does this ....
        Planet e4 = (Planet) (Enum) e1;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;をコンパイルすると、7行目(&lt;em&gt;Enum&amp;lt;?&amp;gt;&lt;/em&gt;の部分)で&amp;quot;変換できない型(inconvertible types)&amp;quot;というエラーが発生する。&lt;/p&gt;

&lt;p&gt;どうやら原因は&lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6548436&quot;&gt;Sun JDK6のバグ&lt;/a&gt;だそうで、JDK7では解消されている。&lt;/p&gt;

&lt;p&gt;今回のようなバグは、Eclipse上で開発を行ってEclipseのコンパイラを使い続けていると全く気付かず、さあjarに固めようか、といってAntでjavacすると...というようなタイミングで発覚するので性質が悪い。&lt;/p&gt;

&lt;p&gt;NetBeansなら保存時の自動コンパイルでも(少なくともWindowsでは)デフォルトでSunコンパイラを使用するため、早期発見しやすいのではないかと思う(最終成果物はSunコンパイラでコンパイルすることが大半だろう、という前提の下で)。&lt;/p&gt;

&lt;p&gt;一応、Eclipseもビルダーの設定を行えば保存時コンパイルにSun JDKを使用するようにも出来るようだが。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-05T13:47:40+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/trllogeditor-11.html">
<title>TrlLogEditor 1.1</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/trllogeditor-11.html</link>
<description>旅の記録に最適！！ 宇宙キッズセレクト GPSロガー trlフォーマットファイルの編集ツールTrlLogEditorだが、Ver1.0aでは速度表示において、特定の条件下で誤差を含む値を表示していたため、これを修正した。 TrlLogEditor.jar Ver.1.1をダウンロードする 前回、 ファイルフォーマットを独自で解析している都合上、このプログラムで保存したファイルが正しくない結果になる...</description>
<content:encoded>&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:8439a03e-3349-4a7f-8cb0-f17b3dab1989&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B002IR5V16/feather0e-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;旅の記録に最適！！ 宇宙キッズセレクト GPSロガー&quot; src=&quot;http://ecx.images-amazon.com/images/I/41oIJAYs%2B0L._SL160_.jpg&quot;&gt;&lt;br&gt;旅の記録に最適！！ 宇宙キッズセレクト GPSロガー &lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;trlフォーマットファイルの編集ツールTrlLogEditorだが、&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/10/trl10a-260e.html&quot;&gt;Ver1.0a&lt;/a&gt;では速度表示において、特定の条件下で誤差を含む値を表示していたため、これを修正した。&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/TrlLogEditor/20091104_ver_1_1/TrlLogEditor.jar&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feather.cocolog-nifty.com/weblog/graphics/Download-32x32.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://yukihane.dip.jp/dist/TrlLogEditor/20091104_ver_1_1/TrlLogEditor.jar&quot;&gt;TrlLogEditor.jar Ver.1.1をダウンロードする&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;前回、&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ファイルフォーマットを独自で解析している都合上、このプログラムで保存したファイルが正しくない結果になる可能性がある。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;というように記載したが、&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/11/holux-m-241trl-.html&quot;&gt;他の方の解析結果&lt;/a&gt;も同様なので、間違いは無いのではないかと思う。&lt;/p&gt;</content:encoded>


<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-04T20:49:22+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/11/holux-m-241trl-.html">
<title>Holux m-241のtrlファイルフォーマット</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/11/holux-m-241trl-.html</link>
<description>以前予告したとおり、trlファイルについて記述しようと思ったのだが、既に日本語でも解説されているサイトが複数あるようなので、繰り返し説明する必要がないと考え、解説サイトの紹介にとどめる。 M-241 1.13のトラックログフォーマット - GPSへの扉 ～FC2出張所～ HOLUX m-241 LoggerUtility .trlファイル構造の覚書 – www.motohasi.net m-241...</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/10/trl10a-260e.html&quot;&gt;以前&lt;/a&gt;予告したとおり、trlファイルについて記述しようと思ったのだが、既に日本語でも解説されているサイトが複数あるようなので、繰り返し説明する必要がないと考え、解説サイトの紹介にとどめる。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://zzzzzzzzzzzzz.blog91.fc2.com/blog-entry-359.html&quot;&gt;M-241 1.13のトラックログフォーマット&lt;/a&gt; - GPSへの扉 ～FC2出張所～ &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.motohasi.net/GPSTools/TrlInfo.php&quot;&gt;HOLUX m-241 LoggerUtility .trlファイル構造の覚書&lt;/a&gt; – &lt;a href=&quot;http://www.motohasi.net&quot;&gt;www.motohasi.net&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://blog.livedoor.jp/nmjrsg/archives/51145887.html&quot;&gt;m-241のフォーマット&lt;/a&gt; - ω通信 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;それぞれ、自作ユーティリティやスクリプトも公開されている。&lt;/p&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>
<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-11-04T20:43:43+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/10/9-7efe.html">
<title>ニコニコ動画(9)になってニコニ・コモンズカテゴリが廃止された</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/10/9-7efe.html</link>
<description>ネットニュースなどでは見かけなかったのだが、ニコニコ大百科を見ると、以前作成していたRSSフィード一覧の中ではニコニ・コモンズとひとこと動画カテゴリが廃止されたようだ。 ニコニコ動画（9）のバージョン移行に伴い、カテゴリタグとしての機能が廃止された。 その他の新設・廃止されたカテゴリタグについても記載があった。 このカテゴリのRSSフィードや、今回新しく出来たカテゴリグループのランキングRSSフィ...</description>
<content:encoded>&lt;p&gt;ネットニュースなどでは見かけなかったのだが、ニコニコ大百科を見ると、以前作成していた&lt;a href=&quot;http://yukihane.dip.jp/dist/NicoBrowser/20090524/feedurllist.html&quot;&gt;RSSフィード一覧&lt;/a&gt;の中では&lt;a href=&quot;http://dic.nicovideo.jp/a/ニコニ・コモンズ&quot;&gt;ニコニ・コモンズ&lt;/a&gt;と&lt;a href=&quot;http://dic.nicovideo.jp/a/ひとこと動画&quot;&gt;ひとこと動画&lt;/a&gt;カテゴリが廃止されたようだ。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ニコニコ動画（9）のバージョン移行に伴い、カテゴリタグとしての機能が廃止された。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;その他の&lt;a href=&quot;http://dic.nicovideo.jp/a/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%BF%E3%82%B0&quot;&gt;新設・廃止されたカテゴリタグについても記載があった&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;このカテゴリのRSSフィードや、今回新しく出来た&lt;a href=&quot;http://dic.nicovideo.jp/a/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&quot;&gt;カテゴリグループ&lt;/a&gt;の&lt;a href=&quot;http://www.nicovideo.jp/ranking&quot;&gt;ランキング&lt;/a&gt;RSSフィード(従来どおり、URLの後ろに&lt;strong&gt;?rss=2.0&lt;/strong&gt;をつけ&lt;a href=&quot;http://www.nicovideo.jp/ranking/fav/daily/g_popular?rss=2.0&quot;&gt;http://www.nicovideo.jp/ranking/fav/daily/g_popular&lt;strong&gt;?rss=2.0&lt;/strong&gt;&lt;/a&gt; のような形になっているようだ)も、&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/05/--nicobrowserni.html&quot;&gt;NicoBrowser 2009/05/24版&lt;/a&gt;で対応できているように見える。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ところで、上記のようなシステム寄りの設計を以って、「汎用性・拡張性が高い」と主張する意見を、業務で何度か聞いたことがある。&lt;/p&gt;  &lt;p&gt;しかしながら、個人的にはユーザビリティを無視してシステムの都合だけで決めたようなインタフェースに対して、より価値が高いように聞こえる上記意見は、聞くたびに疑問に思っていた。&lt;/p&gt;  &lt;p&gt;何が言いたいかというと、NicoBrowserって使い勝手微妙ですね、ということだけなのだが。&lt;/p&gt;</content:encoded>


<dc:subject>パソコン・インターネット</dc:subject>
<dc:subject>プログラミング</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-10-29T21:44:53+09:00</dc:date>
</item>
<item rdf:about="http://feather.cocolog-nifty.com/weblog/2009/10/ntt-117d.html">
<title>転居時のNTTフレッツ光解約はそんなに面倒ではなかった</title>
<link>http://feather.cocolog-nifty.com/weblog/2009/10/ntt-117d.html</link>
<description>転居時に一番大変なのは、ごみの処理についてではないかと考える。 粗大ごみ(大型ごみ)はあらかじめ自治体へ回収の申し込みを行い、コンビニ等で粗大ごみ処理券を購入した上で、指定された日時に指定された場所へ出しておく必要がある(東京都新宿区の例)。 また、自治体によっては、回収点数や回収間隔に制限を設けている場合もある(千葉県市川市の例)。 1回の申し込みで5点まで収集します。申し込みの間隔は7日間以上...</description>
<content:encoded>&lt;p&gt;転居時に一番大変なのは、ごみの処理についてではないかと考える。&lt;/p&gt;  &lt;p&gt;粗大ごみ(大型ごみ)はあらかじめ自治体へ回収の申し込みを行い、コンビニ等で粗大ごみ処理券を購入した上で、指定された日時に指定された場所へ出しておく必要がある(&lt;a href=&quot;http://www.city.shinjuku.tokyo.jp/division/392200seiso/1gomishigen/5sodai/sodai.html&quot;&gt;東京都新宿区の例&lt;/a&gt;)。&lt;/p&gt;  &lt;p&gt;また、自治体によっては、回収点数や回収間隔に制限を設けている場合もある(&lt;a href=&quot;http://www.city.ichikawa.lg.jp/env04/1541000008.html&quot;&gt;千葉県市川市の例&lt;/a&gt;)。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1回の申し込みで5点まで収集します。申し込みの間隔は7日間以上あけてください。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;その他、上記例の中に記述されている通り、&lt;a href=&quot;http://www.city.shinjuku.tokyo.jp/division/392200seiso/1gomishigen/13kaden/kaden.html&quot;&gt;テレビ・冷蔵庫など(家電リサイクル法による)&lt;/a&gt;や&lt;a href=&quot;http://www.city.shinjuku.tokyo.jp/division/392200seiso/1gomishigen/14pc/pc.html&quot;&gt;PCなど(資源有効利用促進法による)&lt;/a&gt;は、粗大ごみとして扱えないため、別途会衆を依頼するなどの作業が必要である。&lt;/p&gt;  &lt;p&gt;可燃ごみ等の通常ごみについても、一度に大量のものを出すことはマンションの取り決めなどで禁じられていることもあり、計画的にごみ出しを行わないといけない場合がある。&lt;/p&gt;  &lt;p&gt;民間のリサイクル業者に任せると上記の問題が解消される場合もあるが、いわゆる悪徳業者の判別が必要になるだろう(&lt;a href=&quot;http://www.city.nerima.tokyo.jp/seisou/sodai/sodai.html&quot;&gt;東京都練馬区&lt;/a&gt;)。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;チラシなどの宣伝で、「家庭で不要になった家具等の粗大ごみを処分する」などと言って、高額な処理費用を請求したり、無料で引き取るといいながら、処理費用を請求する業者がいますので、ご注意ください。(粗大ごみは、区の収集(申込制・有料)に出すのが正しい処分の方法です。)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;引越し業者によってはごみ処理サービスを提供しているところもある(&lt;a href=&quot;http://www.hikkoshi8100.com/content/option/disuse.html&quot;&gt;ハート引越センターの例&lt;/a&gt;)が、業者を決めてからごみ処理方法を考えるのは、時期的に厳しくなったり、金銭面で有利に働かなかったりするのではないかと思う。&lt;/p&gt;  &lt;p&gt;…とここまで書いたが、今回の私の転居では粗大ごみは1つも出さなかった(普通ごみを引越しのかなり前から小分けにして出したくらい)ので、自治体に相談すれば案外簡単に解決する問題である、という可能性もある。ただし、上記のような背景があると知った上で、なるべく早めに行動する必要はあるだろう。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;一方で、&lt;a href=&quot;http://www.gizmodo.jp/2009/10/1ntt.html&quot;&gt;GIZMODO JAPANの記事&lt;/a&gt;にある、NTTフレッツ光の解約はそんなに大変ではなかった。&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://feather.cocolog-nifty.com/weblog/2009/10/1-41f4.html&quot;&gt;以前のエントリ&lt;/a&gt;では記載し忘れていたが、転居に伴い新聞購読の解約も行った。&lt;/p&gt;  &lt;p&gt;電気・水道・ガス会社とは異なり、インターネット接続や新聞は、ある地区で複数のサービス提供会社が並存する、つまり競争が発生する。&lt;/p&gt;  &lt;p&gt;また、今までインターネット接続や新聞購読のサービスを受けていた人は、転居後も速やかに同サービスを受けたいと考えるのではないかと思う。&lt;/p&gt;  &lt;p&gt;従って、転居の連絡時に、転居先でも同社の契約を続ける提案を行うのは、どちらから見てもメリットになることが多いのではないかと思う。&lt;/p&gt;  &lt;p&gt;実際、私の転居の際も、NTTだけでなく新聞の解約時にもサービス継続の勧誘を受けた。私の場合はどちらも断りすんなり済んだが、新規勧誘の煩わしさから、NTTよりも新聞の方がしつこいイメージがある。&lt;/p&gt;  &lt;p&gt;モデム返却については、転居先から返送したが、キーボードやブロードバンドルータなどの周辺機器と一緒に箱詰めすることになるので、転居先へ持っていくことについては特に問題だとは感じなかった。&lt;/p&gt;</content:encoded>


<dc:subject>住まい・インテリア</dc:subject>

<dc:creator>雪羽</dc:creator>
<dc:date>2009-10-29T02:15:10+09:00</dc:date>
</item>


</rdf:RDF>
