<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6293224381723023880</id><updated>2011-07-31T18:38:54.305+09:00</updated><category term='ステートレス'/><category term='MIME'/><category term='SQL'/><category term='Prism'/><category term='REST'/><category term='ポリフォニーデジタル'/><category term='CORBA'/><category term='OpenSocial'/><category term='etc'/><category term='Mozilla Sunbird'/><category term='Java'/><category term='Role属性'/><category term='microformats'/><category term='SOAP'/><category term='ユーザインターフェース'/><category term='Ruby'/><category term='Eclipse'/><category term='ショート・コーディング'/><category term='C言語'/><category term='Cell'/><category term='XHTML'/><category term='日産'/><category term='JavaScript'/><category term='Axis2'/><category term='Growl'/><title type='text'>馬鹿につける薬</title><subtitle type='html'>主に技術的な話題を扱うためにのみ開設してみたブログなので、更新頻度は低いと思われます。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-412597587159305781</id><published>2010-03-13T12:01:00.003+09:00</published><updated>2010-03-13T12:07:12.525+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ユーザインターフェース'/><title type='text'>統合開発環境は次の時代へ</title><content type='html'>&lt;blockquote cite="http://d.hatena.ne.jp/KZR/20100311/p1" title="Code Bubbles - 統合開発環境の新しい形 - Radium Software"&gt;
   &lt;object width="425" height="344"&gt;
    &lt;param name="movie" value="http://www.youtube.com/v/PsPX0nElJ0k&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;/param&gt;
    &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;
    &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;
    &lt;embed src="http://www.youtube.com/v/PsPX0nElJ0k&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;
   &lt;/object&gt;
   &lt;p&gt;上の動画は，ブラウン大学のAndrew Bragdon氏らによって開発された統合開発環境"Code Bubbles"のデモだ。プログラミングと統合環境に興味のある人は，とにかく一度見てみて欲しい。とてもインパクトのあるデモだ。&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;というわけで、見てみたんだが、相当広いデスクトップが無いと辛いんじゃないか？これは。&lt;/p&gt;
  &lt;blockquote cite="http://d.hatena.ne.jp/KZR/20100311/p1" title="Code Bubbles - 統合開発環境の新しい形 - Radium Software"&gt;
  &lt;p&gt;現行の統合開発環境は，いまだにファイル単位でのエディットを基本としており，それが様々な不便を生み出している。Code Bubblesはその不便を解消するべくデザインされた，まったく新しい形の統合環境だ。&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;eclipseのパッケージ・エクスプローラにJavaのソースファイルが並んでいるのが気持ち悪かった（あそこにはソースファイルではなく、クラスが並ぶべきだろう）のだが、同じような疑問を持っていた人は結構大勢いるのだろうか？&lt;/p&gt;
  &lt;p&gt;前述した通り、相当広いデスクトップが無いとこのCode Bubblesとやらは使いにくいような気がするが、ファイル単位で物考えるのはやめねえか？というアプローチはありだろう。&lt;/p&gt;
  &lt;p&gt;少なくとも、eclipseはファイルシステムがそのまま見えているだけに等しいパッケージ・エクスプローラをどうにかして抽象化するべきだ。開発者が記述しているのはファイルではなく、コードなのだ。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-412597587159305781?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/412597587159305781/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=412597587159305781' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/412597587159305781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/412597587159305781'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2010/03/andrew-bragdoncode-bubbles-code-bubbles.html' title='統合開発環境は次の時代へ'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-195881560869603373</id><published>2009-10-17T14:47:00.001+09:00</published><updated>2009-10-17T14:47:39.950+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='CORBA'/><title type='text'>CORBA</title><content type='html'>&lt;p&gt;さて、次の仕事が始まったんだが、SOAPでGo!だと思ってたら、一部のサーバとはCORBAで通信するらしい。　CORBAって前世紀の遺物だと思ってたんだが、そうでも無いらしいな。&lt;/p&gt;
  &lt;p&gt;なので、CORBAについて調査させられたんだが、ハッキリ言ってよく分かりません。　&lt;a href="http://omg.org/" title="Object Management Group"&gt;OMGのサイト&lt;/a&gt;で&lt;a href="http://www.omg.org/technology/documents/spec_catalog.htm" title="OMG Specifications"&gt;仕様が公開されてる&lt;/a&gt;んだが、個々の仕様のつながりとバージョンとの関連がまったく分かりません。　それに、Javaでのデファクトスタンダードなライブラリって無いの？　JDKのCORBAのパッケージはCORBA 2.3のまま止まってる感じだし、OpenORBはCORBA 2.6だし……。　最新のバージョンはCORBA 3.1なのに最新のバージョンに追従しているライブラリって存在しないのかな。&lt;/p&gt;
  &lt;p&gt;仕事で使ってる人はなにを使ってるんだろう。　あと、CORBAの仕様書の和訳ってどこかに転がってないかなあ。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-195881560869603373?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/195881560869603373/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=195881560869603373' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/195881560869603373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/195881560869603373'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/10/corba.html' title='CORBA'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6527274986672323713</id><published>2009-10-17T14:24:00.000+09:00</published><updated>2009-10-17T14:25:51.400+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その7</title><content type='html'>&lt;p&gt;さて、結構駆け足でやってきたんだが、いくつか問題と要検討な課題がある。　その前に、作成する必要があるファイルとツールによって生成されるファイルをまとめておこう思う。&lt;/p&gt;
  &lt;table&gt;
   &lt;caption&gt;AutoGeneratesの定義ファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;java2wsdl.build.properties&lt;/td&gt;
     &lt;td&gt;interfaceクラスからWSDLを作成するためのbuild.xmlのためのプロパティファイル。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;java2wsdl.build.xml&lt;/td&gt;
     &lt;td&gt;interfaceクラスからWSDLを作成するためのbuild.xmlファイル。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;table&gt;
   &lt;caption&gt;AutoGeneratesでツールによって生成されるファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;SampleService01.wsdl&lt;/td&gt;
     &lt;td&gt;java2wsdlコマンドによってinterfaceクラスから生成されるwsdlファイル。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;table&gt;
   &lt;caption&gt;Skeletonsの定義ファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;wsdl2java.build.properties&lt;/td&gt;
     &lt;td&gt;WSDLファイルからサーバ側スケルトンのJavaソースファイルを生成するbuild.xmlのためのプロパティファイル。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;wsdl2java.build.xml&lt;/td&gt;
     &lt;td&gt;WSDLファイルからサーバ側スケルトンのJavaソースファイルを生成するためのbuild.xmlファイル。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;table&gt;
   &lt;caption&gt;Skeletonsでツールによって生成されるファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ディレクトリ名&lt;/th&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01MessageReceiverInOut.java&lt;/td&gt;
     &lt;td&gt;用途不明。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01Skeleton.java&lt;/td&gt;
     &lt;td&gt;スケルトン本体。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;Test01.java&lt;/td&gt;
     &lt;td&gt;パラメータが格納されるBeanクラスを格納するBeanクラス。メソッド名と同じになる。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;Test01Response.java&lt;/td&gt;
     &lt;td&gt;戻り値を格納するBeanクラスを格納するBeanクラス。メソッド＋Responseという名前になる。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;ExtensionMapper.java&lt;/td&gt;
     &lt;td&gt;用途不明。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;RequestMessage.java&lt;/td&gt;
     &lt;td&gt;パラメータを格納するBeanクラス。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;ResponseMessage.java&lt;/td&gt;
     &lt;td&gt;戻り値を格納するBeanクラス。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;resources/&lt;/td&gt;
     &lt;td&gt;SampleService01.wsdl&lt;/td&gt;
     &lt;td&gt;スケルトン生成に使用したWSDLファイル。内容はAutoGeneratesのWSDLと同一。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;resources/&lt;/td&gt;
     &lt;td&gt;services.xml&lt;/td&gt;
     &lt;td&gt;Axis2が使用するサービスとJavaクラスを紐付けるための定義ファイル。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;/&lt;/td&gt;
     &lt;td&gt;build.xml&lt;/td&gt;
     &lt;td&gt;生成したファイルをaarファイルにまとめるためのbuild.xmlファイル。wsdl2javaコマンドが生成する。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;table&gt;
   &lt;caption&gt;Stubsの定義ファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;wsdl2java.build.properties&lt;/td&gt;
     &lt;td&gt;WSDLファイルからクライアント側スタブのJavaソースファイルを生成するbuild.xmlのためのプロパティファイル。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;wsdl2java.build.xml&lt;/td&gt;
     &lt;td&gt;WSDLファイルからクライアント側スタブのJavaソースファイルを生成するためのbuild.xmlファイル。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;table&gt;
   &lt;caption&gt;Stubsでツールによって生成されるファイル&lt;/caption&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;ディレクトリ名&lt;/th&gt;
     &lt;th&gt;ファイル名&lt;/th&gt;
     &lt;th&gt;概要&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01CallbackHandler.java&lt;/td&gt;
     &lt;td&gt;用途不明。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpEndpoint.java&lt;/td&gt;
     &lt;td&gt;インターフェース。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpEndpointStub.java&lt;/td&gt;
     &lt;td&gt;スタブクラス。サーバ側とRESTアーキテクチャで通信をする場合に使用する？&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpSoap11Endpoint.java&lt;/td&gt;
     &lt;td&gt;インターフェース。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpSoap11EndpointStub.java&lt;/td&gt;
     &lt;td&gt;スタブクラス。サーバ側とSOAP 1.1で通信をする場合に使用する？&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpSoap12Endpoint.java&lt;/td&gt;
     &lt;td&gt;インターフェース。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;SampleService01SampleService01HttpSoap12EndpointStub.java&lt;/td&gt;
     &lt;td&gt;スタブクラス。サーバ側とSOAP 1.2で通信をする場合に使用する？&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;Test01.java&lt;/td&gt;
     &lt;td&gt;パラメータが格納されるBeanクラスを格納するBeanクラス。メソッド名と同じになる。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/&lt;/td&gt;
     &lt;td&gt;Test01Response.java&lt;/td&gt;
     &lt;td&gt;戻り値を格納するBeanクラスを格納するBeanクラス。メソッド＋Responseという名前になる。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;ExtensionMapper.java&lt;/td&gt;
     &lt;td&gt;用途不明。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;RequestMessage.java&lt;/td&gt;
     &lt;td&gt;パラメータを格納するBeanクラス。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td&gt;src/com/example/soap/xsd&lt;/td&gt;
     &lt;td&gt;ResponseMessage.java&lt;/td&gt;
     &lt;td&gt;戻り値を格納するBeanクラス。&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;p&gt;さて、今回はパッケージの階層が以下のような形になった。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;com.example
   &lt;ul&gt;
    &lt;li&gt;soap
    &lt;ul&gt;
     &lt;li&gt;xsd&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;services&lt;/li&gt;
    &lt;li&gt;client&lt;/li&gt;
    &lt;li&gt;business&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;クライアント側は&lt;code&gt;com.example.client.SampleService01&lt;/code&gt;を使用し、サーバ側の実装は&lt;code&gt;com.example.business.SampleService01Impl&lt;/code&gt;に実装を記述するようにしている。　しかし、クライアント側で使用するクラスのパッケージとサーバ側で実装を記述するパッケージは同じであるほうが望ましいと思われる。&lt;/p&gt;
  &lt;p&gt;なぜなら、サーバ側で&lt;code&gt;com.example.services.SampleService01&lt;/code&gt;を実装し、クライアント側で&lt;code&gt;com.example.services.SampleService01&lt;/code&gt;を使用している、もしくは使用しているように見えるほうが意味論として正しいだろう。&lt;/p&gt;
  &lt;p&gt;そこで、SampleService01をinterfaceとして、サーバ側とクライアント側それぞれの実装を個別に用意し、DIコンテナ等を使用して実行時に依存性の注入が行われるようにすることで、サーバ側ではサーバ側の実装クラスがロードされ、クライアント側ではクライアント側の実装クラスがロードされるようにしたほうが良いだろう。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;com.example
   &lt;ul&gt;
    &lt;li&gt;soap
    &lt;ul&gt;
     &lt;li&gt;xsd&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;services
    &lt;ul&gt;
     &lt;li&gt;SampleService01&lt;/li&gt;
     &lt;li&gt;SampleService01ClientImpl&lt;/li&gt;
     &lt;li&gt;SampleService01ServerImpl&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;ちなみに&lt;code&gt;com.example.soap.SampleService01Skeleton&lt;/code&gt;クラスを継承して&lt;code&gt;com.example.services.SampleService01&lt;/code&gt;を作成していたが、&lt;code&gt;SampleService01Skeleton&lt;/code&gt;は本当にスケルトンで中身はメソッドが一つ定義されているだけ、処理は何一つないクラスなので、別に継承する必要は無い。&lt;/p&gt;
  &lt;p&gt;そのため、&lt;code&gt;com.example.soap.SampleService01&lt;/code&gt;クラスを新規に作成して、このクラスから&lt;code&gt;com.example.service.SampleService01&lt;/code&gt;を呼び出すようにし、&lt;code&gt;services.xml&lt;/code&gt;を修正してやれば十分だろう。　というわけで、ソース生成後に新規に作成する必要があるクラスは以下になるだろう。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;com.example/
   &lt;ul&gt;
    &lt;li&gt;soap/
    &lt;ul&gt;
     &lt;li&gt;xsd/&lt;/li&gt;
     &lt;li&gt;SampleService01Invoker.java&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;services/
    &lt;ul&gt;
     &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;li&gt;SampleService01ClientImpl.java&lt;/li&gt;
     &lt;li&gt;SampleService01ServerImpl.java&lt;/li&gt;
     &lt;li&gt;SampleService01Request.java&lt;/li&gt;
     &lt;li&gt;SampleService01Response.java&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6527274986672323713?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6527274986672323713/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6527274986672323713' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6527274986672323713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6527274986672323713'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/10/eclipse-wtp-axis27.html' title='Eclipse + WTP + Axis2　その7'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-5691692893804476694</id><published>2009-10-17T14:23:00.000+09:00</published><updated>2009-10-17T14:24:36.223+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その6</title><content type='html'>&lt;p&gt;とりあえず、以上でサーバ側とクライアント側が用意で来たので、実際に動かしてみよう。　まずはServiceAプロジェクトでサーバの起動を行う。　次にクライアント側だが、今はただの試験なのでJUnitのテストケースでも作成してクライアント側SampleService01#test()を実行してやる。　ちなみにエンドポイントは&lt;a href="http://localhost:8080/ServiceA/services/SampleService01" title=""&gt;http://localhost:8080/ServiceA/services/SampleService01&lt;/a&gt;となる。&lt;/p&gt;
  &lt;p&gt;SampleService01#test()をコールしてやると、おそらくは「名前空間が違うぞ」というエラーになるはず。　これは最初にinterfaceからWSDLを作成した際に、インターフェースのパッケージが&lt;code&gt;com.example.soap&lt;/code&gt;だったので、WSDLでの名前空間が&amp;quot;http://soap.example.com&amp;quot;になっているのに、サーバ側でSampleService01を公開した際のパッケージが&lt;code&gt;com.example.services&lt;/code&gt;だったので、実際に公開されているサービスの名前空間が&amp;quot;http://services.example.com&amp;quot;になってしまっているからだ。&lt;/p&gt;
  &lt;p&gt;なので、WSDLからサーバ側スケルトンを作成した時に一緒に作成されたservices.xmlとSampleService01.wsdlをservicesディレクトリに配置してやる。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;ServiceA/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;build/&lt;/li&gt;
    &lt;li&gt;WebContent/
    &lt;ul&gt;
     &lt;li&gt;axis-web/&lt;/li&gt;
     &lt;li&gt;META-INF/&lt;/li&gt;
     &lt;li&gt;WEB-INF/
     &lt;ul&gt;
      &lt;li&gt;conf/&lt;/li&gt;
      &lt;li&gt;lib/&lt;/li&gt;
      &lt;li&gt;module/&lt;/li&gt;
      &lt;li&gt;services/
      &lt;ul&gt;
       &lt;li&gt;SampleService01/
       &lt;ul&gt;
        &lt;li&gt;com/&lt;/li&gt;
        &lt;li&gt;META-INF/
        &lt;ul&gt;
         &lt;li&gt;SampleService01.wsdl&lt;/li&gt;
         &lt;li&gt;services.xml&lt;/li&gt;
        &lt;/ul&gt;
        &lt;/li&gt;
       &lt;/ul&gt;
       &lt;/li&gt;
      &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;servces.list&lt;/li&gt;
      &lt;li&gt;version.aar&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;services.xmlはちゃんと上書きしてやること。　これで、サーバを再起動して、クライアントを起動すればちゃんとSOAPで通信が行われているはず。　なお、&lt;code&gt;com.example.business.SampleService01Impl&lt;/code&gt;で戻り値をちゃんと設定してやら無いとぬるぽとか出ちゃうので注意。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-5691692893804476694?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/5691692893804476694/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=5691692893804476694' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5691692893804476694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5691692893804476694'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/10/eclipse-wtp-axis26.html' title='Eclipse + WTP + Axis2　その6'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-760041075232222847</id><published>2009-10-17T14:20:00.000+09:00</published><updated>2009-10-17T14:22:50.567+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その5</title><content type='html'>&lt;p&gt;さて、サーバ側はとりあえず形になったので、次はクライアント側を作成する。　こっちはサーバ側と異なり、それほど悩む必要も無い。　まずは、AutoGeneratesプロジェクトにあるWSDLファイルを元にしてクライアント側スタブを作成するためのプロジェクトを新規に作成してやる。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;Stubs/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;Referenced Libraries/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;次にWSDLからクライアント側スタブを生成するためのbuild.xmlとbuild.propertiesを作成する。　内容はスケルトン作成時のbuild.xmlとほぼ同じだ。&lt;/p&gt;
&lt;pre title="wsdl2java.build.xml"&gt;&lt;code&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;project default=&amp;quot;w2j.stub&amp;quot; basedir=&amp;quot;.&amp;quot;&amp;gt;
 &amp;lt;!-- 使用するプロパティファイルを設定する --&amp;gt;
 &amp;lt;property file=&amp;quot;wsdl2java.build.properties&amp;quot;/&amp;gt;

 &amp;lt;!-- パスの設定 --&amp;gt;
 &amp;lt;property name=&amp;quot;wsdl.uri&amp;quot;
  value=&amp;quot;${eclipse.workspace.uri}/AutoGenerates/wsdls/${service.name}.wsdl&amp;quot;/&amp;gt;
 &amp;lt;property name=&amp;quot;build.src&amp;quot; value=&amp;quot;.&amp;quot; /&amp;gt;

 &amp;lt;!-- Axis2関連設定 --&amp;gt;
 &amp;lt;property name=&amp;quot;axis2.lib&amp;quot; value=&amp;quot;${axis2.home}/lib&amp;quot; /&amp;gt;

 &amp;lt;!-- ライブラリパスの設定 --&amp;gt;
 &amp;lt;path id=&amp;quot;lib&amp;quot;&amp;gt;
  &amp;lt;fileset dir=&amp;quot;${axis2.lib}&amp;quot;&amp;gt;
   &amp;lt;include name=&amp;quot;*.jar&amp;quot; /&amp;gt;
  &amp;lt;/fileset&amp;gt;
 &amp;lt;/path&amp;gt;

 &amp;lt;!-- スタブコード出力 --&amp;gt;
 &amp;lt;target name=&amp;quot;w2j.stub&amp;quot;&amp;gt;
  &amp;lt;echo message=&amp;quot;Target WSDL : ${wsdl.uri}&amp;quot;/&amp;gt;
  &amp;lt;java classname=&amp;quot;org.apache.axis2.wsdl.WSDL2Java&amp;quot; dir=&amp;quot;.&amp;quot; fork=&amp;quot;yes&amp;quot;&amp;gt;
   &amp;lt;classpath&amp;gt;
    &amp;lt;path refid=&amp;quot;lib&amp;quot;/&amp;gt;
   &amp;lt;/classpath&amp;gt;
   &amp;lt;arg line=&amp;quot;-uri ${wsdl.uri}&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-u&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-ap&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-p&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-d adb&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-o ${build.src}&amp;quot; /&amp;gt;
  &amp;lt;/java&amp;gt;
 &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre title="wsdl2java.build.properties"&gt;&lt;code&gt;
# Eclipse Workspace
eclipse.workspace=C:/home/bobo/development/java/nem
eclipse.workspace.uri=file:///C:/home/bobo/development/java/nem

# Axis2 Home
axis2.home=C:/Applications/apache-axis2-1.4.1

# Target Service
service.name=SampleService01
&lt;/code&gt;&lt;/pre&gt;
  &lt;p&gt;WSDL2Javaに渡すオプションが微妙に異なっているので、注意したい。&lt;/p&gt;
  &lt;p&gt;これで、antを実行するとsrc配下にクライアント側スタブのJavaソースファイルが、Stubプロジェクト直下にbuild.xmlが作成される。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;Stubs/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.soap/
     &lt;ul&gt;
      &lt;li&gt;SampleService01CallbackHandler.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpEndpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpEndpointStub.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap11Endpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap11EndpointStub.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap12Endpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap12EndpointStub.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd/
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;Referenced Libraries/&lt;/li&gt;
    &lt;li&gt;build.xml&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.xml&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.properties&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;どうも、必要ないスタブまで作成されているようだけど、この辺はWSDL2Javaのオプションを精査すれば作成させないようにもできるだろう。　なので、今は気にしないことにする。&lt;/p&gt;
  &lt;p&gt;スタブはスケルトンとは異なり、&lt;code&gt;*Stub&lt;/code&gt;クラスのインスタンスを生成してメソッドをコールしてやれば普通に使えるので、スケルトンほど考えることが無いんだが、クラス名が～Stubだったり、パラメータがTest01クラスに格納されていたり、戻り値がTest01Responseに格納されていたりするので、多少の整形は必要だろう。&lt;/p&gt;
  &lt;p&gt;というわけで、パラメータの取り出しやStubクラスの実行、戻り値の格納を行ってやるSampleService01Implクラスを作成することにする。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;Stubs/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.business/
     &lt;ul&gt;
      &lt;li&gt;SampleService01Request.java&lt;/li&gt;
      &lt;li&gt;SampleService01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.client/
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
      &lt;li&gt;SampleService01Impl.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap/
     &lt;ul&gt;
      &lt;li&gt;SampleService01CallbackHandler.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpEndpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpEndpointStub.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap11Endpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap11EndpointStub.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap12Endpoint.java&lt;/li&gt;
      &lt;li&gt;SampleService01SampleService01HttpSoap12EndpointStub.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd/
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;ちなみにSampleService01RequestとSampleService01Responseはスケルトン作成時に作成したものをそのままコピーしてきた。　サーバ側とクライアント側でパラメータと戻り値は同じ型の方が良いだろう。&lt;/p&gt;
  &lt;p&gt;というわけで、クライアント側は特に悩む必要も無く、これでおしまい。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-760041075232222847?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/760041075232222847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=760041075232222847' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/760041075232222847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/760041075232222847'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/10/eclipse-wtp-axis25.html' title='Eclipse + WTP + Axis2　その5'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-5219099956823383173</id><published>2009-09-21T12:08:00.001+09:00</published><updated>2009-09-21T12:11:49.689+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その4</title><content type='html'>&lt;p&gt;さて、aarファイルの作成だが、wsdl2javaコマンドがaarファイル作成のためのbuild.xmlをSkeletonsプロジェクトの直下に作成しているはずなので、それを使用する。&lt;/p&gt;
  &lt;p&gt;だが、その前にservices.xmlを修正する必要がある。　services.xmlを開いてみれば分かるが、name属性がServiceClassのparameter要素の内容が&lt;code&gt;com.example.soap.SampleService01Skeleton&lt;/code&gt;になっているので、&lt;code&gt;com.example.service.SampleService01&lt;/code&gt;に変更する。&lt;/p&gt;
  &lt;p&gt;そして、build.xmlでantしてやればSkeletonsプロジェクトの直下にbuildというディレクトリが作成されて、aarファイルその他のファイルが作成される。&lt;/p&gt;
  &lt;p&gt;ここで、残念なお知らせが。　&lt;code&gt;build/classes/&lt;/code&gt;配下にはaarファイルの中身に相当するファイルが配置されているんだが、ここに&lt;code&gt;com.example.services.SampleService01Impl&lt;/code&gt;のclassファイルが配置されてしまっている。　業務の実装クラスまでaarファイルにまとめられてしまうわけにはいかないので、何とかしてやる必要がある。&lt;/p&gt;
  &lt;p&gt;というわけで、&lt;code&gt;com.example.business&lt;/code&gt;パッケージを別のプロジェクトに移動させることにした。&lt;/p&gt;
  &lt;p&gt;antしたら山ほどエラーが出た。　まぁ、&lt;code&gt;com.example.business&lt;/code&gt;パッケージがSkeletonsプロジェクトに無いから当然なんだが……。　この辺、どうにかならないかなあ。　どうにかなれば、チームBにはaarファイルだけ提供して「後はよろしく」といけるんだけどなあ。&lt;/p&gt;
  &lt;p&gt;とりあえず、今は諦めてツールで生成したソースと新規に作成したソースをServiceAプロジェクトにコピーすることにする。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;Skeletons
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.business
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
      &lt;li&gt;SampleService01Impl.java&lt;/li&gt;
      &lt;li&gt;SampleService01Request.java&lt;/li&gt;
      &lt;li&gt;SampleService01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.services
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap
     &lt;ul&gt;
      &lt;li&gt;SampleService01MessageReceiverInOut.java&lt;/li&gt;
      &lt;li&gt;SampleService01Skeleton.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;resources/
    &lt;ul&gt;
     &lt;li&gt;SampleService01.wsdl&lt;/li&gt;
     &lt;li&gt;services.xml&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
   &lt;li&gt;ServiceA
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.business
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
      &lt;li&gt;SampleService01Impl.java&lt;/li&gt;
      &lt;li&gt;SampleService01Request.java&lt;/li&gt;
      &lt;li&gt;SampleService01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.services
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap
     &lt;ul&gt;
      &lt;li&gt;SampleService01MessageReceiverInOut.java&lt;/li&gt;
      &lt;li&gt;SampleService01Skeleton.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;build/&lt;/li&gt;
    &lt;li&gt;WebContent/
    &lt;ul&gt;
     &lt;li&gt;axis2-web/&lt;/li&gt;
     &lt;li&gt;META-INF/
     &lt;ul&gt;
      &lt;li&gt;MANIFEST.MF&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;WEB-INF/
     &lt;ul&gt;
      &lt;li&gt;conf/
      &lt;ul&gt;
       &lt;li&gt;axis2.xml&lt;/li&gt;
      &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;lib/
      &lt;/li&gt;
      &lt;li&gt;modules/
      &lt;/li&gt;
      &lt;li&gt;services/
      &lt;ul&gt;
       &lt;li&gt;services.list&lt;/li&gt;
       &lt;li&gt;version.aar&lt;/li&gt;
      &lt;/ul&gt;
      &lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;これであらかたの準備が整ったわけだが、この状態でTomcatを起動しても残念ながらSampleService01は公開されない。　Webサービスとして公開するためには&lt;code&gt;WebContent/WEB-INF/services/&lt;/code&gt;配下にaarファイルを配置するか、classファイルとxmlファイルを格納したディレクトを配置する必要がある。&lt;/p&gt;
  &lt;p&gt;xmlファイルだけなら手作業で配置しても良いんだが、classファイルも配置しなくてはならないので、手間がかかる上に必要なclassファイルの選別等が面倒くさいので、Eclipseに頼ることにする。&lt;/p&gt;
  &lt;p&gt;サービスとして公開するJavaのソースファイル（この場合は&lt;code&gt;com.example.services.SampleService01&lt;/code&gt;）を右クリックして、[Web Service] -&amp;gt; [Create Web service]としてEclipseにやってもらう事にする。　これで、servicesディレクトリの配下にサービス名の付いたディレクトリが作成され、services.xmlとclassファイルが格納されているはずだ。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;ServiceA
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;build/&lt;/li&gt;
    &lt;li&gt;WebContent/
    &lt;ul&gt;
     &lt;li&gt;axis2-web/&lt;/li&gt;
     &lt;li&gt;META-INF/&lt;/li&gt;
     &lt;li&gt;WEB-INF/
     &lt;ul&gt;
      &lt;li&gt;conf/&lt;/li&gt;
      &lt;li&gt;lib/&lt;/li&gt;
      &lt;li&gt;modules/&lt;/li&gt;
      &lt;li&gt;services/
      &lt;ul&gt;
       &lt;li&gt;SampleService01/
       &lt;ul&gt;
        &lt;li&gt;com/
        &lt;/li&gt;
        &lt;li&gt;META-INF/
        &lt;ul&gt;
         &lt;li&gt;services.xml&lt;/li&gt;
        &lt;/ul&gt;
        &lt;/li&gt;
       &lt;/ul&gt;
       &lt;/li&gt;
       &lt;li&gt;services.list&lt;/li&gt;
       &lt;li&gt;version.aar&lt;/li&gt;
      &lt;/ul&gt;
      &lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;これで、Tomcatを起動してやれば、SampleService01が公開されているのが確認できる。　とりあえず、ブラウザから&lt;a href="http://localhost:8080/ServiceA/axis2-web/index.jsp" title="Axis 2 - Home"&gt;http://localhost:8080/ServiceA/axis2-web/index.jsp&lt;/a&gt;にアクセスしてServicesリンクをクリックしてSampleService01が見えていれば良しとしよう。&lt;/p&gt;
  &lt;p&gt;さて、次はクライアント側のJavaソースの生成に行こう。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-5219099956823383173?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/5219099956823383173/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=5219099956823383173' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5219099956823383173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5219099956823383173'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/eclipse-wtp-axis24_21.html' title='Eclipse + WTP + Axis2　その4'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-7219875185510120054</id><published>2009-09-21T12:05:00.000+09:00</published><updated>2009-09-21T12:08:03.593+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その4</title><content type='html'>&lt;p&gt;さて、とりあえず、スケルトンは生成されたわけだが、このままチームBにポイするのはあんまりなので、整形してやることにする。　整形の基本方針としては大まかに以下の二種類が考えられる。&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;SampleService01Skeletonクラスを直接整形する。&lt;/li&gt;
   &lt;li&gt;SampleService01Skeletonクラス自体には手を入れない。&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;SampleService01Skeletonクラスを直接整形するとAPIに変更が入ってスケルトンを再生成するたびに実装を書いてやる必要があるので、馬鹿馬鹿しい。　ここはツールで生成されるソースには手を入れないほうが良いだろう。&lt;/p&gt;
  &lt;p&gt;というわけで、スケルトンクラスを継承したクラスを作成してパラメータの取り出しや戻り値の格納等を実装してやることにする。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;code&gt;java.lang.Object&lt;/code&gt;
   &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;com.examle.soap.SampleService01Skeleton&lt;/code&gt;
    &lt;ul&gt;
     &lt;li&gt;&lt;code&gt;com.example.service.SampleService01&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;SampleService01SkeletonとSampleService01でパッケージが異なるのには理由がある。　将来的にプロトコルがSOAPからCORBAになったり（今更これはないか）、RESTになったり（これはありそう）した場合、SampleService01のスーパークラスを変更してやるだけで対応可能にするためだ。&lt;/p&gt;
  &lt;p&gt;そして、ここでも道は二つに分かれる。　業務ロジックを実装するチームBはこのSampleService01をどう扱うべきかということだ。　この時点でSampleService01にはパラメータの取り出しや戻り値の格納がチームCによって実装されている。　そのソースファイルを直接チームBに渡して「後はよろしく」とやるのはやっぱり不細工だ。　チームBにとって本質的ではないようなコードが記述されているのは迷惑だろうし、下手に弄られても困る。&lt;/p&gt;
  &lt;p&gt;ではどうするか。　SampleService01を継承したクラスを作成し、それをチームBに渡すか、SampleService01から業務ロジックを記述したクラスを呼び出してやるかの二択になるだろう。&lt;/p&gt;
  &lt;p&gt;SampleService01を継承したクラスを作成した場合、一つ問題がある。　それは、たとえばSampleService01LogicとSampleService02Logicで共通の処理があった場合、AbstractSampleService等というクラスを作ってスーパークラスとして実装したいだろう。　しかし、SampleService01を継承したクラスに実装を記述してもらう方法だとこういう柔軟な対応ができなくなる。&lt;/p&gt;
  &lt;p&gt;というわけで、柔軟に対応可能になるのはSampleService01から業務ロジックが記述されたクラスを呼び出す方式になるだろう。　また、DIコンテナ等を使用して業務ロジックが記述されたクラスをロードするようにすれば、未実装時やテスト中は業務クラスのスタブに切り替えてやることもできる。　ついでなので、引数と戻り値になるbeanも&lt;code&gt;com.example.business&lt;/code&gt;パッケージ配下に作成して、詰め替えてやる。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;code&gt;java.lang.Object&lt;/code&gt;
   &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;com.examle.soap.SampleService01Skeleton&lt;/code&gt;
    &lt;ul&gt;
     &lt;li&gt;&lt;code&gt;com.example.service.SampleService01&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;code&gt;com.example.business.SampleService01&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;com.example.business.SampleService01Impl&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;com.example.business.SampleService01Request&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;com.example.business.SampleService01Response&lt;/code&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;これで、&lt;code&gt;com.example.business&lt;/code&gt;配下をチームBに渡して「後はよろしく」と言っても不細工なことにはならないと思われる。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;wsdls/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
   &lt;li&gt;Skeletons/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.business/
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
      &lt;li&gt;SampleService01Impl.java&lt;/li&gt;
      &lt;li&gt;SampleService01Request.java&lt;/li&gt;
      &lt;li&gt;SampleService01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.service/
     &lt;ul&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap/
     &lt;ul&gt;
      &lt;li&gt;SampleService01MessageReceiverInOut.java&lt;/li&gt;
      &lt;li&gt;SampleService01Skeleton.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd/
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;Referenced Libraries/&lt;/li&gt;
    &lt;li&gt;resources/
    &lt;ul&gt;
     &lt;li&gt;SampleService01.wsdl&lt;/li&gt;
     &lt;li&gt;services.xml&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;build.xml&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.properties&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.xml&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;さて、ようやく、aarファイルの作成にいけるが、それは次回。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-7219875185510120054?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/7219875185510120054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=7219875185510120054' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7219875185510120054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7219875185510120054'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/eclipse-wtp-axis24.html' title='Eclipse + WTP + Axis2　その4'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-2723984390664568334</id><published>2009-09-21T12:02:00.000+09:00</published><updated>2009-09-21T12:04:42.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その3</title><content type='html'>&lt;p&gt;さて、WSDLファイルが作成されたので、次はスケルトンを作成してみよう。　そのためにはまず、スケルトンを作成するためのプロジェクトを作成してやる。　AutoGeneratesプロジェクト内でスケルトンを生成しても良いのだが、スケルトンとスタブで生成されるソースが被るので、スケルトンを生成するためのプロジェクトを新規に作成することにする。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;wsdls/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
   &lt;li&gt;Skeletons/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;Referenced Libraries/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;次にAutoGeneratesプロジェクトにあるWSDLファイルを使用してJavaソースファイルを作成するためのbuild.xmlとbuild.propertiesを作成する。&lt;/p&gt;
&lt;pre title="wsdl2java.build.xml"&gt;&lt;code&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;project default=&amp;quot;w2j.skeleton&amp;quot; basedir=&amp;quot;.&amp;quot;&amp;gt;
 &amp;lt;property file=&amp;quot;wsdl2java.build.properties&amp;quot;/&amp;gt;

 &amp;lt;!-- パスの設定 --&amp;gt;
 &amp;lt;property name=&amp;quot;wsdl.uri&amp;quot;
  value=&amp;quot;${eclipse.workspace.uri}/AutoGenerates/wsdls/${service.name}.wsdl&amp;quot;/&amp;gt;
 &amp;lt;property name=&amp;quot;build.src&amp;quot; value=&amp;quot;.&amp;quot; /&amp;gt;

 &amp;lt;!-- Axis2関連設定 --&amp;gt;
 &amp;lt;property name=&amp;quot;axis2.lib&amp;quot; value=&amp;quot;${axis2.home}/lib&amp;quot; /&amp;gt;

 &amp;lt;!-- ライブラリパスの設定 --&amp;gt;
 &amp;lt;path id=&amp;quot;lib&amp;quot;&amp;gt;
  &amp;lt;fileset dir=&amp;quot;${axis2.lib}&amp;quot;&amp;gt;
   &amp;lt;include name=&amp;quot;*.jar&amp;quot; /&amp;gt;
  &amp;lt;/fileset&amp;gt;
 &amp;lt;/path&amp;gt;

 &amp;lt;!-- スケルトンコード出力 --&amp;gt;
 &amp;lt;target name=&amp;quot;w2j.skeleton&amp;quot;&amp;gt;
  &amp;lt;echo message=&amp;quot;Target WSDL : ${wsdl.uri}&amp;quot;/&amp;gt;
  &amp;lt;java classname=&amp;quot;org.apache.axis2.wsdl.WSDL2Java&amp;quot; dir=&amp;quot;.&amp;quot; fork=&amp;quot;yes&amp;quot;&amp;gt;
   &amp;lt;classpath&amp;gt;
    &amp;lt;path refid=&amp;quot;lib&amp;quot;/&amp;gt;
   &amp;lt;/classpath&amp;gt;
   &amp;lt;arg line=&amp;quot;-uri ${wsdl.uri}&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-ss&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-sd&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-ap&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-d adb&amp;quot; /&amp;gt;
   &amp;lt;arg line=&amp;quot;-o ${build.src}&amp;quot; /&amp;gt;
  &amp;lt;/java&amp;gt;
 &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre title="wsdl2java.build.properties"&gt;&lt;code&gt;
# Eclipse Workspace
eclipse.workspace=C:/home/bobo/development/java/nem
eclipse.workspace.uri=file:///C:/home/bobo/development/java/nem

# Axis2 Home
axis2.home=C:/Applications/apache-axis2-1.4.1

# Target Service
service.name=SampleService01
&lt;/code&gt;&lt;/pre&gt;
  &lt;p&gt;build.propertiesにワークスペースのパスがフルパスで記述されてるのが、ダサい、超ダサいんだが、wsdl2javaにWSDLの場所を教えてやる際にURIで渡す必要があるので、しょうがなく……。　&lt;code&gt;eclipse.convertPath&lt;/code&gt;を使用すれば&lt;code&gt;resourcePath&lt;/code&gt;属性を使用してプロジェクトの絶対パスを取得できるんだが、&lt;code&gt;file.path&lt;/code&gt;が“\”になっちゃうので、使用できず……。　この辺、そろそろファイルシステムに直結したパスの記述は根絶させて全てURIで記述するようにならないものかなあ。　相対パスの記述方法がなくなるかもしれないけど。&lt;/p&gt;
  &lt;p&gt;なにはともあれ、これで、src配下にJavaソースが、resources配下にWSDLとservices.xmlが、そしてSkeletonsプロジェクト直下にbuild.xmlが作成される。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;wsdls/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
   &lt;li&gt;Skeletons/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.example.soap/
     &lt;ul&gt;
      &lt;li&gt;SampleService01MessageReceiverInOut.java&lt;/li&gt;
      &lt;li&gt;SampleService01Skeleton.java&lt;/li&gt;
      &lt;li&gt;Test01.java&lt;/li&gt;
      &lt;li&gt;Test01Response.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
     &lt;li&gt;com.example.soap.xsd/
     &lt;ul&gt;
      &lt;li&gt;ExtensionMapper.java&lt;/li&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;Referenced Libraries/&lt;/li&gt;
    &lt;li&gt;resources/
    &lt;ul&gt;
     &lt;li&gt;SampleService01.wsdl&lt;/li&gt;
     &lt;li&gt;services.xml&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;build.xml&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.properties&lt;/li&gt;
    &lt;li&gt;wsdl2java.build.xml&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Skeletonプロジェクト直下に生成されたbuild.xmlは生成されたJavaソースファイルをコンパイルしてaarファイルを生成するためのものなので、とりあえずおいておく。&lt;/p&gt;
  &lt;p&gt;さて、これで、あらかた必要なJavaソースとxmlが生成されたわけだが、この状態でチームBに渡して「後はよろしく」とやっちゃうのはあんまりだ。　なんせ、業務ロジックを実装する対象となるクラスは&lt;code&gt;SampleService01Skeleton&lt;/code&gt;なんて名前だし、APIのパラメータである&lt;code&gt;RequestMessage&lt;/code&gt;は&lt;code&gt;Test01#localParam0&lt;/code&gt;に格納されていて&lt;code&gt;Test01#getParam0()&lt;/code&gt;で取得しなきゃならんし、戻り値となる&lt;code&gt;ResponseMessage&lt;/code&gt;は&lt;code&gt;Test01Response#set_return(ResponseMessage)&lt;/code&gt;を使用して&lt;code&gt;Test01Response#local_return&lt;/code&gt;に格納してやらなきゃならん。　そこら辺はチームCが隠蔽してやるのが筋だろう。&lt;/p&gt;
  &lt;p&gt;というわけで次回に続く。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-2723984390664568334?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/2723984390664568334/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=2723984390664568334' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2723984390664568334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2723984390664568334'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/eclipse-wtp-axis23.html' title='Eclipse + WTP + Axis2　その3'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6863988215374630686</id><published>2009-09-21T11:59:00.000+09:00</published><updated>2009-09-21T12:01:24.947+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その2</title><content type='html'>&lt;p&gt;さて、プロジェクト分けができたので、それで上手くいくか試してみよう。&lt;/p&gt;
  &lt;p&gt;まずはAutoGeneratesプロジェクトを作成する。　これは普通のJavaプロジェクトで良いだろう。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/&lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;次はsrc/配下にinterfaceを作成する。　今は定義書とかないので、手で書いちゃう。　以下のようなしょっぱいので十分だろう。&lt;/p&gt;
&lt;pre title="SampleService01.java"&gt;&lt;code&gt;
package com.example.soap;

public interface SampleService01
{
 public ResponseMessage test01(RequestMessage requestMessage);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre title="RequestMessage.java"&gt;&lt;code&gt;
package com.example.soap;

public interface RequestMessage
{
 public void setParamInt(int a);
 public int getParamInt();
 public void setParamBool(boolean b);
 public boolean getParamBool();
 public void setParamString(String c);
 public String getParamString();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre title="ResponseMessage.java"&gt;&lt;code&gt;
package com.example.soap;

public interface ResponseMessage
{
 public void setParamInt(int a);
 public int getParamInt();
 public void setParamBool(boolean b);
 public boolean getParamBool();
 public void setParamString(String c);
 public String getParamString();
}
&lt;/code&gt;&lt;/pre&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.examle.soap/
     &lt;ul&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;次に、これらのinterfaceからWSDLを作成するためのbuild.xmlを作成する。　ついでに、build.propertiesも作ってやる。&lt;/p&gt;
&lt;pre title="java2wsdl.build.xml"&gt;&lt;code&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;project default=&amp;quot;j2w&amp;quot; basedir=&amp;quot;.&amp;quot;&amp;gt;
 &amp;lt;!-- 使用するプロパティファイルを設定する --&amp;gt;
 &amp;lt;property file=&amp;quot;java2wsdl.build.properties&amp;quot;/&amp;gt;

 &amp;lt;!-- パスの設定 --&amp;gt;
 &amp;lt;property name=&amp;quot;path.src&amp;quot; value=&amp;quot;./src&amp;quot; /&amp;gt;
 &amp;lt;property name=&amp;quot;path.bin&amp;quot; value=&amp;quot;./bin&amp;quot; /&amp;gt;
 &amp;lt;property name=&amp;quot;path.wsdl&amp;quot; value=&amp;quot;./wsdls&amp;quot; /&amp;gt;

 &amp;lt;!-- タスク定義：Axis2-Java2WSDL --&amp;gt;
 &amp;lt;taskdef name=&amp;quot;axis2-java2wsdl&amp;quot;
  classname=&amp;quot;org.apache.axis2.tool.ant.Java2WSDLTask&amp;quot;&amp;gt;
  &amp;lt;classpath&amp;gt;
   &amp;lt;fileset dir=&amp;quot;${axis2.home}/lib&amp;quot; includes=&amp;quot;**/*.jar&amp;quot;/&amp;gt;
  &amp;lt;/classpath&amp;gt;
 &amp;lt;/taskdef&amp;gt;

 &amp;lt;!-- WSDL出力 --&amp;gt;
 &amp;lt;target name=&amp;quot;j2w&amp;quot; description=&amp;quot;Java2WSDLを実行します。&amp;quot;&amp;gt;
  &amp;lt;echo message=&amp;quot;Target Class : ${service.class}&amp;quot;/&amp;gt;
  &amp;lt;axis2-java2wsdl
   classname=&amp;quot;${service.class}&amp;quot;
   outputfilename=&amp;quot;${path.wsdl}/${service.name}.wsdl&amp;quot;&amp;gt;
   &amp;lt;classpath&amp;gt;
    &amp;lt;pathelement location=&amp;quot;${path.bin}&amp;quot; /&amp;gt;
   &amp;lt;/classpath&amp;gt;
  &amp;lt;/axis2-java2wsdl&amp;gt;
 &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre title="java2wsdl.build.properties"&gt;&lt;code&gt;
# Axis2 Home
axis2.home=C:/Applications/apache-axis2-1.4.1

# Target Service
service.class=com.example.soap.SampleService01
service.name=SampleService01
&lt;/code&gt;&lt;/pre&gt;
  &lt;p&gt;ちなみに、&lt;code&gt;org.apache.ws.java2wsdl.Java2WSDL&lt;/code&gt;ではなく、&lt;code&gt;org.apache.axis2.tool.ant.Java2WSDLTask&lt;/code&gt;を使用してやらないとEPRが作れないよとかいうエラーが出ちゃう。　理由は不明。　なお、axis2-java2wsdl要素にはlocationuriやservicename等の属性を指定できる。　この辺はJava2WSDLTaskのAPIリファレンス見れば分かるだろうし、java2wsdlコマンドの引数と対応してるだけだろうから後でちゃんと調べることにする。&lt;/p&gt;
  &lt;p&gt;また、作成されるWSDLファイルを格納するためのディレクトリもついでに作ってやる。　これで、antを実行してやればwsdlsディレクトリにWSDLファイルが作成されるはずだ。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;AutoGenerates/
   &lt;ul&gt;
    &lt;li&gt;src/
    &lt;ul&gt;
     &lt;li&gt;com.examle.soap/
     &lt;ul&gt;
      &lt;li&gt;RequestMessage.java&lt;/li&gt;
      &lt;li&gt;ResponseMessage.java&lt;/li&gt;
      &lt;li&gt;SampleService01.java&lt;/li&gt;
     &lt;/ul&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;JRE System Library/&lt;/li&gt;
    &lt;li&gt;wsdls/
    &lt;ul&gt;
     &lt;li&gt;SampleService01.wsdl&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;java2wsdl.build.properties&lt;/li&gt;
    &lt;li&gt;java2wsdl.build.xml&lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;さて、これで、「ねんがんのWSDLをてにいれた」ので、次はスケルトンとスタブを作成してやる。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6863988215374630686?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6863988215374630686/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6863988215374630686' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6863988215374630686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6863988215374630686'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/eclipse-wtp-axis22.html' title='Eclipse + WTP + Axis2　その2'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-677691450794688392</id><published>2009-09-21T11:53:00.000+09:00</published><updated>2009-09-21T11:59:12.196+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Eclipse + WTP + Axis2　その1</title><content type='html'>&lt;p&gt;さて、次のお仕事はSOAPだそうで。　どういうスタイルと手順で開発するのが良いのか良くわからないので、連休中に色々と考えてみようと思う。&lt;/p&gt;
  &lt;p&gt;前提条件として、次のプロジェクトは以下のような構成になるらしい。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;サーバは二台（サーバA、サーバB）&lt;/li&gt;
   &lt;li&gt;クライアントマシンからはサーバAに接続&lt;/li&gt;
   &lt;li&gt;サーバAはSOAPでサーバBのAPIを呼び出す&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;きわめてオーソドックスな構成だと思う。　そして、プロジェクトのチーム分けとしては以下の三つに分けられるそうだ。&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;サーバAのビジネスロジック実装（チームA）&lt;/li&gt;
   &lt;li&gt;サーバBのビジネスロジック実装（チームB）&lt;/li&gt;
   &lt;li&gt;サーバAとサーバBでのSOAP通信を実装（チームC）&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;二チームでええやんとも思うんだが、チームCが作られちゃうらしい。　チームBがWSDL作ってチームAに渡してやれば良いと思うんだがなあ。　そのほうがチームBとしては柔軟に開発できるような気がするだよな。&lt;/p&gt;
  &lt;p&gt;でもまあ、チームCに配属されちゃうそうなので、致し方なし。　チームCでスケルトンとスタブとWSDL作って両チームに提供することになる。&lt;/p&gt;
  &lt;p&gt;そこで、どのような手順でスケルトンとスタブとWSDLを作成するかを考えてみた結果、以下のような流れが妥当だろうと判断した。　本当はもっと良いやり方があるのかもしれないが、今のところこれが妥当だろう。&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;Excelで作成したSOAPインターフェース定義書からJavaのinterfaceクラスを作成する（ついでにコンパイルも行う）。&lt;/li&gt;
   &lt;li&gt;コンパイル済みのinterfaceクラスを元にAxis2のjava2wsdlでWSDLファイルを作成する。&lt;/li&gt;
   &lt;li&gt;WSDLファイルを元にAxis2のwsdl2javaでサーバ側スケルトンを作成する。&lt;/li&gt;
   &lt;li&gt;WSDLファイルを元にAxis2のwsdl2javaでクライアント側スタブを作成する。&lt;/li&gt;
   &lt;li&gt;最初に作ったinterfaceクラスは破棄する。&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;すでに実装されたクラスを元にWSDLを作って、クライアント側スタブを作ったり、最初にWSDLを作成してスケルトンとスタブを作ったりせず、interfaceクラスからWSDLを作る理由は、そうする事でWSDLの記述の揺らぎを抑えて統一感を持たせるためだ。　また、定義書のマクロでinterfaceクラスを作成するのも揺らぎを抑えて統一感を持たせる助けになるだろうと思う。&lt;/p&gt;
  &lt;p&gt;この流れは結構普通なんじゃないだろうか。　最後にinterfaceクラスを破棄するかどうかはスケルトンとスタブの実装によるだろうけど。&lt;/p&gt;
  &lt;p&gt;次にEclipseのプロジェクトをどう分けるかについてたが。　interfaceクラスの作成後はEclipse上で実施できるほうが便利だろうと思うので、プロジェクトは大まかに二つに分けられるだろう。&lt;/p&gt;
  &lt;dl&gt;
   &lt;dt&gt;AutoGenerates（Javaプロジェクト）&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;interfaceクラスを配置して、build.xml等でWSDLを作成する。　基本的にテンポラリとして使用し、WSDLの作成が終わったら不要なファイルは削除する。&lt;/p&gt;
   &lt;/dd&gt;
   &lt;dt&gt;Skeletons（Javaプロジェクト）&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;WSDLからサーバ側スケルトンを作成する。　基本的にテンポラリとして使用し、Javaソースの作成が終わったら不要なファイルは削除する。&lt;/p&gt;
   &lt;/dd&gt;
   &lt;dt&gt;Stubs（Javaプロジェクト）&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;WSDLからクライアント側スタブを作成する。　基本的にテンポラリとして使用し、Javaソースの作成が終わったら不要なファイルは削除する。&lt;/p&gt;
   &lt;/dd&gt;
   &lt;dt&gt;ServiceA（動的Webプロジェクト）&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;サーバAの実装。&lt;/p&gt;
   &lt;/dd&gt;
   &lt;dt&gt;ServiceB（動的Webプロジェクト）&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;サーバBの実装。　AutoGeneratesプロジェクトからコピーされたスケルトンにビジネスロジックを実装する。&lt;/p&gt;
   &lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p&gt;これも普通なやり方なんじゃないかなあ。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-677691450794688392?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/677691450794688392/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=677691450794688392' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/677691450794688392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/677691450794688392'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/eclipse-wtp-axis21.html' title='Eclipse + WTP + Axis2　その1'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6038496577883152336</id><published>2009-09-06T19:44:00.000+09:00</published><updated>2009-09-06T19:45:46.199+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Pit</title><content type='html'>&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/snaka72/20090314/1237042226" title="Growl for windows 2.0ベータ版でrubyによる簡易twitterクライアント(TL表示のみ)を動かしてみた - 今日もスミマセン。"&gt;snakaさんのブログの簡易クライアント&lt;/a&gt;が何度やっても動かず、twitter.comは延々とレスポンスコード401を返し続けたので、はまった箇所のメモを残しておくことにする。&lt;/p&gt;
  &lt;dl&gt;
   &lt;dt&gt;そもそも、&lt;a href="http://x503i.yappo.ne.jp/share/browser/lang/ruby/pit" title="/lang/ruby/pit ? CodeRepos::Share ? Trac"&gt;Pit&lt;/a&gt;ってモジュールがなんなのか分かってなかった。&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;例によって例のごとく、「ユーザ名とパスワードは自分の物に書き換えて実行してね（はぁと」なサンプルコードだとばかり思ってたら、全然違うでやんの。　&lt;code&gt;puts config[&amp;quot;username&amp;quot;]&lt;/code&gt;とかやって、設定したはずのユーザ名とパスワードが出力されないのを確認してやっと、&lt;strong&gt;なんかおかしい&lt;/strong&gt;と気付いた。&lt;/p&gt;
   &lt;p&gt;「&lt;a href="http://subtech.g.hatena.ne.jp/cho45/20080102/1199257680" title="アカウント情報を管理するコマンド pit - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech"&gt;アカウント情報を管理するコマンド pit&lt;/a&gt;」を読んでやっと理解した。&lt;/p&gt;
   &lt;/dd&gt;
   &lt;dt&gt;$EDITORが起動しねえ&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;で、pitは当該情報が設定ファイルにない場合はエディタを起動して入力させるようになってるんだけど、ここでエディタが起動しねえの。　原因は複合的なもので&lt;a href="http://d.hatena.ne.jp/snaka72/20090409/1239286994" title="WindowsでPitの落とし穴(pit)にはまった - 今日もスミマセン。"&gt;DOS形式なファイルパスで無いと受け付けてくれないらしい&lt;/a&gt;ことと、環境変数の値を&amp;quot;で括っちゃイカンということ。&lt;/p&gt;
   &lt;p&gt;拡張子関連付けを手作業で行うときの癖で、パスに半角スペースが含まれる時は&amp;quot;で括っちゃってたんだが、これがいけなかったらしい。　&lt;code&gt;SET EDITOR=&amp;quot;c:\progra~1\gvim\vim.exe&amp;quot;&lt;/code&gt;等とやると動きませんでした。&lt;/p&gt;
   &lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p&gt;というわけで、大変恥ずかしいはまり方をしていたので、公開して羞恥プレイしてみる。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6038496577883152336?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6038496577883152336/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6038496577883152336' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6038496577883152336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6038496577883152336'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/pit.html' title='Pit'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-4808081558484043051</id><published>2009-09-06T19:41:00.000+09:00</published><updated>2009-09-06T19:43:21.046+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Growl'/><title type='text'>Growl for Windows</title><content type='html'>&lt;p&gt;Macユーザにはおなじみかもしれないが、アプリケーションからの通知を一手に引き受けてユーザに通知する「Growl」なるアプリがMac OSには存在する。　で、これのWindows版クローンとして「&lt;a href="http://www.growlforwindows.com/gfw/" title="Growl for Windows"&gt;Growl for Windows&lt;/a&gt;」をインストールしてみた。&lt;/p&gt;
  &lt;p&gt;元々何がしたかったかというと、Twitterのタイムラインを通知して欲しかったわけだ。　プアなPCで作業をしている時にTwitterのために常にブラウザを立ち上げておきたくない、かといって常駐するクライアントも入れたくない。　極力PCに負荷を掛けないアプリがないものかと思って探していた時にGrowlに出くわした。&lt;/p&gt;
  &lt;p&gt;これを使って、タイムライン取得してGrowlに投げたら即座に終了するようなアプリと組み合わせればPCへの負荷を極力減らせるんじゃないかと思った。&lt;/p&gt;
  &lt;p&gt;そこで、早速インストールして&lt;a href="http://d.hatena.ne.jp/snaka72/20090314/1237042226" title="Growl for windows 2.0ベータ版でrubyによる簡易twitterクライアント(TL表示のみ)を動かしてみた - 今日もスミマセン。"&gt;snakaさんのブログで公開されている簡易クライアント&lt;/a&gt;で試してみたところいい感じに動いたので、「おおぉ、動いた動いた」とキャッキャと喜んでいて、はたと気付く。　こいつを定期的に起動してタイムライン取得するようにならないと駄目でしょ、と。&lt;/p&gt;
  &lt;p&gt;Growlそのものにはアプリケーションをスケジューリングする機能はない（Growl自身が持ってても良いような気はするけど）。　Windows 2000ではスケジューラーがOS標準であったよね？　と思ってXPで探してみたんだけど、ねえでやんの。&lt;/p&gt;
  &lt;p&gt;一応、似たような機能としてタスクってのがあるんだけど、こいつは30分おきに実行するとかいう設定はできないようだ。&lt;/p&gt;
  &lt;p&gt;というわけで、思惑は外れちゃったので、次はWindows版cronでも探してくるかな。　atコマンドなるものもあるらしいけど、ATコマンドってモデム制御するためのコマンドじゃなかったっけ？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-4808081558484043051?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/4808081558484043051/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=4808081558484043051' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/4808081558484043051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/4808081558484043051'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2009/09/growl-for-windows.html' title='Growl for Windows'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-5415108757947593304</id><published>2008-03-20T21:29:00.001+09:00</published><updated>2008-03-20T21:48:18.798+09:00</updated><title type='text'>新東京タワーの名称募集</title><content type='html'>&lt;p&gt;さて、すっげえ久しぶりにエントリを書くわけだが、特に技術的なお話というわけではない。&lt;/p&gt;
&lt;p&gt;東京の墨田区に完成予定の&lt;a href="http://www.rising-east.jp/"&gt;新東京タワー&lt;/a&gt;について、その名称が&lt;strong&gt;学識者&lt;/strong&gt;らによって六つの案に絞られた。そして、四月一日からの投票で正式に決定されるらしい。&lt;/p&gt;
&lt;p&gt;その六つの案というのが以下のものなんだけど……&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;東京EDOタワー&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;/li&gt;
&lt;li&gt;ライジングタワー&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;はっきり言って、どれもこれもダサいと思う。&lt;/p&gt;
&lt;p&gt;普通に「新東京タワー」とか「第二東京タワー」とかで良いと思うんだけどねえ。&lt;/p&gt;
&lt;p&gt;と、ここまで思って、気が付いた。「&lt;strong&gt;新&lt;/strong&gt;東京タワー」って名称は、三つ目のタワーが出来た時に困っちゃうよな。「墨田タワー」ってのも墨田区にもう一個電波塔が作られたら困っちゃうよな。&lt;/p&gt;
&lt;p&gt;というわけで、この問題、実は「クールなURLにするためには」ってのと同じ問題を孕んでるんじゃないだろうか？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-5415108757947593304?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/5415108757947593304/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=5415108757947593304' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5415108757947593304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5415108757947593304'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2008/03/blog-post.html' title='新東京タワーの名称募集'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-2574799821477024007</id><published>2008-01-19T18:25:00.000+09:00</published><updated>2008-01-19T18:29:28.867+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mozilla Sunbird'/><title type='text'>Mozilla Sunbird使ってみた</title><content type='html'>さて、RESTネタは考える時間が必要なので、軽いネタで。&lt;/p&gt;
  &lt;p&gt;特にたいした予定はないんだけど、書籍の発売日やCDの発売日やゲームの発売日を記録して管理するためにPIMアプリを探しててたどり着いたのがMozillaのSunbird。一週間ほど使ってみたので、気になった点を書いてみる。&lt;/p&gt;
  &lt;p&gt;まず、この手のスケジューラーで日付ではなくもっと大雑把な単位で予定を入力できるツールを見たことがないんだけど、誰も不満に思わないのだろうか。たとえば「2008年春　ライブ開催予定」とかいう形で発表された場合、どうやってスケジューラに登録するんだ？とりあえず4月1日の予定として登録しておいて、正確な日付が発表されたら修正するとかいう使い方をしてるの？そういう使い方すると、「本当に4月1日の予定」なのか「日付が確定していないので4月1日に仮登録している予定」なのか見分けがつかなくならないかなあ？&lt;/p&gt;
  &lt;p&gt;日付が確定していない予定に対して、大雑把な「時期」だけで、登録しておき、正確な日付が確定するまでは別管理できるような仕組みがスケジューラーには必要なんじゃないかなあ。&lt;/p&gt;
  &lt;p&gt;次に、イベントとタスクしか登録できないことについて。そういう使い方は想定してないとか言われそうだが、せっかくカレンダーが付いてるんだからそれぞれの日付にメモを残せる仕組みがあってもいいんじゃないの？イベントでもタスクでもなく、メモ。そのメモのカテゴリを健康としてその日の体重とBMI値を登録するとかいう使い方もできるようになる。&lt;/p&gt;
  &lt;p&gt;カレンダーに対してメモを貼れるようになるだけで、使い道が格段に増えることになると思うが、どうだろうか？&lt;/p&gt;
  &lt;p&gt;もう、すでにAdd-ons等で実現されているかもしれないけどね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-2574799821477024007?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/2574799821477024007/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=2574799821477024007' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2574799821477024007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2574799821477024007'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2008/01/mozilla-sunbird.html' title='Mozilla Sunbird使ってみた'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-470925931362858096</id><published>2008-01-12T14:19:00.000+09:00</published><updated>2008-01-12T14:30:09.246+09:00</updated><title type='text'>あけましておめでとうございます</title><content type='html'>いまさらですが、あけましておめでとうございます。&lt;/p&gt;

&lt;p&gt;今年から作業場所が変わり、今までのような暇な状態ではなくなったので、しばらくは更新頻度は激減するだろうと思います。&lt;/p&gt;

&lt;p&gt;また、年末にRESTについて何本かエントリをアップしましたが、これの続きにいつ取り掛かれるかわかりません。気長にお待ちください。「&lt;a href="http://www.oreilly.co.jp/books/9784873113531/"&gt;RESTful Webサービス&lt;/a&gt;」を買って通勤時間中に読んでるので、その感想等は書くかもしれませんが。&lt;/p&gt;

&lt;p&gt;それでは、今年もよろしくお願いします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-470925931362858096?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/470925931362858096/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=470925931362858096' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/470925931362858096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/470925931362858096'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2008/01/blog-post.html' title='あけましておめでとうございます'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-1314337368222070911</id><published>2007-12-21T11:35:00.000+09:00</published><updated>2007-12-21T11:37:29.277+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etc'/><title type='text'>Bloglines BETA が生き返った</title><content type='html'>そして、一部が日本語になってる。　のは良いんだけど、ピンのところにある「暗証番号」ってなんだ？&lt;/p&gt;

&lt;p&gt;あと、トップページは前のほうがシンプルでよかったと思うぞ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-1314337368222070911?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/1314337368222070911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=1314337368222070911' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1314337368222070911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1314337368222070911'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/bloglines-beta_21.html' title='Bloglines BETA が生き返った'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-5642364898521555120</id><published>2007-12-19T15:45:00.000+09:00</published><updated>2007-12-19T15:51:04.027+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etc'/><title type='text'>Bloglines BETA が死んでいる</title><content type='html'>おそらくは18日くらいから&lt;a href="https://beta.bloglines.com/"&gt;Bloglines BETA&lt;/a&gt;が500を戻している。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bloglines.com/"&gt;旧バージョン&lt;/a&gt;は生きてるので、一応、使えるんだけど、どうなっているんだろう。　機能追加したよってニュースが流れているので、普通に使える人もいるみたいなのが、よくわからない。&lt;/p&gt;

&lt;p&gt;それにしてもさっぱり話題にならないあたり、諸行無常よのう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-5642364898521555120?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/5642364898521555120/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=5642364898521555120' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5642364898521555120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/5642364898521555120'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/bloglines-beta.html' title='Bloglines BETA が死んでいる'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-3312964675307449365</id><published>2007-12-13T15:10:00.000+09:00</published><updated>2007-12-13T15:11:29.807+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>実際に設計してみよう その3</title><content type='html'>さて、&lt;a href="http://pyonchang.blogspot.com/2007/12/2.html" title="馬鹿につける薬: 実際に設計してみよう その2"&gt;前回&lt;/a&gt;で、RESTというスタイルで考えた場合、既存のシステムとは異なるURL体系になることがわかった。&lt;/p&gt;

&lt;p&gt;これは何もおかしなことではなく、既存のwebアプリではアプリケーション（というよりもインターフェースか？）が前面に出ており、実際に操作したいリソースはDBという形で見えなくなっており、RESTではそれを覆して、リソースを前面に押し出し、アプリケーション（インターフェース）をプロトコルの中に格納したからだろう。&lt;/p&gt;

&lt;p&gt;というわけで、URLについてもう少し考えてみることにする。　まずは先送りにした検索について考えてみようと思う。&lt;/p&gt;

&lt;p&gt;会議室予約システムを考えた場合、検索したいのは「空いている会議室」だけだろう。　そこで、空いている会議室を検索する方法（URL）についてのみ考えてみる。&lt;/p&gt;

&lt;p&gt;まず、既存のシステムだとどのようになるだろうか？　多分こんな感じになるんじゃないだろうか？&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
http://intranet.example.co.jp/meetingroomreserve/search.php?unreserve=true
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これをRESTなスタイルで考え直してみた場合、こんな感じになるんじゃないかな？&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
http://intranet.example.co.jp/meetingroom/?unresereve=true
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これは会議室というリソースの集合に対して「空いている会議室」という問い合わせを行っている事になる。　要件が「空いている会議室の検索」なので、問い合わせをすること自体は問題ないのだろうが、実際に行いたいことは「検索」という動作ではなく、「空いている会議室」というリソース、もしくはその集合の取得なのだ。　検索という要求に引きずられて、何のために検索するのかを見失うとここが見えてこなくなる。　というか、見えなかったために躓いたり迷子になったりしたのだ。&lt;/p&gt;

&lt;p&gt;では、上記のURLは「空いている会議室」のリソースとして適当だろうか？　おそらくは否だろう。　なんせ、問い合わせを行っている。　「空いている会議室」のリソースを取得したいのであれば、「空いている会議室」のリソースの識別子をもって取得してやればいい、こんな感じになるだろう&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
http://intranet.example.co.jp/meetingroom/unreserve
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これなら会議室というリソースの集合の中の「開いている会議室」というリソースの集合を表す識別子としては適当だろう。　また、各階の会議室のリソースの集合に対しても「各階の空いている会議室」というリソースを表すことができる。　こんな感じだろう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
http://intranet.example.co.jp/meetingroom/8F/unreserve
http://intranet.example.co.jp/meetingroom/9F/unreserve
http://intranet.example.co.jp/meetingroom/10F/unreserve
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ということで、RESTというのはどこまでもリソースが主体なのだ。　なので、RESTなスタイルでサービスを構築する際、設計の最初で行うことは、「どのようなURL（識別子）にするのか？」を決めることになるのではないだろうか？　今までのように必要に応じて問い合わせ文字列（パラメータ）を増減させていてはどこかで破綻することになるような気がする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-3312964675307449365?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/3312964675307449365/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=3312964675307449365' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3312964675307449365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3312964675307449365'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/3.html' title='実際に設計してみよう その3'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-9012675491033891222</id><published>2007-12-06T17:07:00.000+09:00</published><updated>2007-12-06T17:08:55.895+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C言語'/><title type='text'>やらかしちゃった勘違い</title><content type='html'>さて、以下のコードがどのような出力結果になると思いますか？&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

#define DEF_STRING01 &amp;quot;hoe /* hoge */ moge&amp;quot;
#define DEF_STRING02 &amp;quot;hoe %s hoge %s moge&amp;quot;

int main(int argc, char* argv[])
{
  fprintf(stdout, DEF_STRING01);
  fprintf(stdout, &amp;quot;\n&amp;quot;);
  fprintf(stdout, DEF_STRING02, &amp;quot;/*&amp;quot;, &amp;quot;*/&amp;quot;);
  fprintf(stdout, &amp;quot;\n&amp;quot;);

 return 0;
}
&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;結果は普通に以下のようになる。&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;hoe /* hoge */ moge
hoe /* hoge */ moge
&lt;/pre&gt;&lt;/code&gt;

  &lt;p&gt;コメントになるのかと思ったよ……orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-9012675491033891222?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/9012675491033891222/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=9012675491033891222' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/9012675491033891222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/9012675491033891222'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/blog-post.html' title='やらかしちゃった勘違い'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-2232688618464265662</id><published>2007-12-04T23:03:00.000+09:00</published><updated>2007-12-04T23:38:02.773+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>map.resourcesすげえ</title><content type='html'>Rubyさわった事ないけど、&lt;a href="http://www.eisbahn.jp/yoichiro/2007/12/3mapresources.html" title=""&gt;map.resourcesってすげえ&lt;/a&gt;。

&lt;p&gt;&lt;code&gt;http://localhost:3000/api/divisions/1/employees/2&lt;/code&gt;というURLをControllerクラスにマッピングできちゃうらしい。　Ruby on Railsって凄くね？&lt;/p&gt;

&lt;p&gt;だけど、これって&lt;code&gt;division=1&lt;/code&gt;、&lt;code&gt;employees=2&lt;/code&gt;が&lt;code&gt;.../api/divisions/1/employees/2&lt;/code&gt;にマッピングされるってことはRoR的には&lt;code&gt;.../api/1/2&lt;/code&gt;というURLは考慮してないってことか？&lt;/p&gt;

&lt;p&gt;ブログ等でよくある&lt;code&gt;example.co.jp/entry/2007/12/04/1&lt;/code&gt;とかいうURLをマッピングする時はどうやるんだろう？　&lt;code&gt;.../entry/year/2007/month/12/day/04/post/1&lt;/code&gt;とかいうURLにしなくちゃ駄目なんだろうか？　そんなわけないよね？&lt;/p&gt;

&lt;p&gt;ということで、Rubyのお勉強を始めてみることにした。　スクリプト言語はBシェル以外さわった事ないので、前途多難なんだけど楽しそうではある。&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;参考リンク&lt;/dt&gt;
 &lt;dd&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.ruby-lang.org/ja/" title="オブジェクト指向スクリプト言語 Ruby"&gt;オブジェクト指向スクリプト言語 Ruby&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://rubyforge.org/projects/rubyinstaller/" title="RubyForge: One-Click Ruby Installer: Project Info"&gt;RubyForge: One-Click Ruby Installer: Project Info&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=top" title="Ruby インストールガイド - top"&gt;Ruby インストールガイド - top&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.rubyonrails.org/" title="Ruby on Rails"&gt;Ruby on Rails&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.notwork.org/sbcr-ruby/" title="「たのしいRuby 第2版」サポートページ"&gt;「たのしいRuby 第2版」サポートページ&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;「&lt;a href="http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC2%E7%89%88-Ruby%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%B0%97%E8%BB%BD%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9/dp/4797336617" title="Amazon.co.jp： たのしいRuby 第2版 Rubyではじめる気軽なプログラミング: 本: 高橋 征義,後藤 裕蔵"&gt;たのしいRuby&lt;/a&gt;」なる本を買ってみた。　今のRubyってCygwinなくても使えるの？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-2232688618464265662?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/2232688618464265662/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=2232688618464265662' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2232688618464265662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2232688618464265662'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/mapresources.html' title='map.resourcesすげえ'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-1020678149537255619</id><published>2007-12-03T23:22:00.000+09:00</published><updated>2007-12-03T23:24:02.542+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>GoogleとSNS</title><content type='html'>facebookしかり、mixiしかり、最近はSNSが花盛りである。&lt;/p&gt;

  &lt;p&gt;SNSはインターネットというインフラの上に、アカウントを持っていないとアクセスすることができない、もうひとつのネットワークを構築しているといえる。　いわば、VPNのようなものだ。&lt;/p&gt;

  &lt;p&gt;当然、SNSで公開された情報は、そのSNSのアカウントを保有していないと取得することができない。&lt;/p&gt;

  &lt;p&gt;それがどういうことかというと、SNSで公開された情報はGoogleにインデックスされないということだ。&lt;/p&gt;

  &lt;p&gt;いや、それが利点でしょ？　不特定多数の人に見せたく無いからSNS内に引きこもるんだし。　と利用者からは言われそうだが、Googleにとってはそれでいいのだろうか？　SNSがこのまま普及し、SNS内で情報が完結してSNS内で閉じてしまうような状況が発生したらどうなるだろうか？&lt;/p&gt;

  &lt;p&gt;たとえば、新聞社がSNS内でのみニュースを配信するようになったら？　amazonがSNS内でのみ店舗を構えるようになったら？　今はまだ、顧客の大部分を切り捨てることになるため、そのようなサービスは存在していない。　しかし、すでにmixi内でのみ公開されているコンテンツは存在する（ドラマだったっけ？[※1]）。　今はインターネット上で広く公開されているこれらの情報がSNS内に引っ込んでしまったとき、Googleの検索エンジンではこれらの情報にたどり着けなくなってしまう。&lt;/p&gt;

  &lt;p&gt;それは検索エンジン最大手としてのGoogleの支配力を消滅させてしまうことになるのではないだろうか？&lt;/p&gt;

  &lt;p&gt;先月の初めにGoogleからOpenSocialというAPIセットが公開されたが、これがそんな状況へのGoogleの対応策なのだろうか？　と思ったらどうも違うっぽい。　どうも、GoogleはコンテンツがSNS内で完全に閉じてしまうことは無いと考えているようだ。　本当にそれで大丈夫だろうか？&lt;/p&gt;

  &lt;p&gt;というわけで、出版社の人はmixi内部で新刊の最初の数ページだけ公開してみたり、いっそのこと長編の一巻目だけを公開してみてはどうだろうか？　また、新聞社の人はmixi内部で記事を公開しコメントを付けられるようにしてみてはどうだろうか？　インターネット上で公開してコメントを付けられるようにするよりも荒らしには対処しやすいと思うんだが。&lt;/p&gt;

  &lt;p&gt;そしてそういう状況を推し進めたとき、Googleがどういう手段を講じてくるか興味がある。&lt;/p&gt;

  &lt;hr/&gt;

  &lt;dl&gt;
   &lt;dt&gt;※1&lt;/dt&gt;
   &lt;dd&gt;
   &lt;p&gt;コンテンツの内容をインデックスすることのできない動画情報なので無視することにする。&lt;/p&gt;
   &lt;/dd&gt;
  &lt;/dl&gt;

  &lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-1020678149537255619?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/1020678149537255619/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=1020678149537255619' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1020678149537255619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1020678149537255619'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/googlesns.html' title='GoogleとSNS'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-1226425687277678643</id><published>2007-12-03T22:24:00.000+09:00</published><updated>2007-12-03T22:26:35.244+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>実際に設計してみよう その2</title><content type='html'>今回は、会議室という物理的なリソースをネットワーク上でどのように表現するか考えてみようと思う。とりあえず、会議室は以下のようになっているとする。&lt;/p&gt;

  &lt;table&gt;
   &lt;thead&gt;
    &lt;tr&gt;
     &lt;th&gt;階数&lt;/th&gt;
     &lt;th colspan="3"&gt;部屋番号&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;th&gt;8F&lt;/th&gt;
     &lt;td&gt;0801&lt;/td&gt;
     &lt;td&gt;&lt;/td&gt;
     &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;th&gt;9F&lt;/th&gt;
     &lt;td&gt;0901&lt;/td&gt;
     &lt;td&gt;0902&lt;/td&gt;
     &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;th&gt;10F&lt;/th&gt;
     &lt;td&gt;1001&lt;/td&gt;
     &lt;td&gt;1002&lt;/td&gt;
     &lt;td&gt;1003&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;p&gt;ここからわかることは以下のとおりだといえると思う。&lt;/p&gt;

  &lt;ol&gt;
   &lt;li&gt;会議室というリソースは六つある。&lt;/li&gt;
   &lt;li&gt;8Fの会議室というリソースの集合には0801という一つの会議室が含まれる。&lt;/li&gt;
   &lt;li&gt;9Fの会議室というリソースの集合には0901、0902という二つの会議室が含まれる。&lt;/li&gt;
   &lt;li&gt;10Fの会議室というリソースの集合には1001、1002、1003という三つの会議室が含まれる。&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;つまり、会議室というリソースは以下のような階層構造をしているといえる。&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;会議室
   &lt;ul&gt;
    &lt;li&gt;8F
    &lt;ul&gt;
     &lt;li&gt;0801&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;9F
    &lt;ul&gt;
     &lt;li&gt;0901&lt;/li&gt;
     &lt;li&gt;0902&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;10F
    &lt;ul&gt;
     &lt;li&gt;1001&lt;/li&gt;
     &lt;li&gt;1002&lt;/li&gt;
     &lt;li&gt;1003&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;ということは、これをそのままURLに置き換えてやれば、とりあえずは大丈夫だろう。&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;intranet.example.co.jp/meetingroom/
   &lt;ul&gt;
    &lt;li&gt;8F/
    &lt;ul&gt;
     &lt;li&gt;0801&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;9F/
    &lt;ul&gt;
     &lt;li&gt;0901&lt;/li&gt;
     &lt;li&gt;0902&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;10F/
    &lt;ul&gt;
     &lt;li&gt;1001&lt;/li&gt;
     &lt;li&gt;1002&lt;/li&gt;
     &lt;li&gt;1003&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;実際にアクセスする際のURLは以下のようになるだろう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://intranet.example.co.jp/meetingroom/
http://intranet.example.co.jp/meetingroom/8F/0801
http://intranet.example.co.jp/meetingroom/9F/0901
http://intranet.example.co.jp/meetingroom/9F/0902
http://intranet.example.co.jp/meetingroom/10F/1001
http://intranet.example.co.jp/meetingroom/10F/1002
http://intranet.example.co.jp/meetingroom/10F/1003
&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;これで、リソースおよびリソースの状態を操作するための識別子（URI）は作成することができた。　しかし、このままではこのリソースの「いつの時点」の状態なのか不明だ。　まあ、常識的に考えれば「現時点での状態」ということになるのだろう。&lt;/p&gt;

  &lt;p&gt;というところで、前回示した既存のシステムでのURLと比較するとずいぶん違うことがわかる。　わかったところで、今日はここまで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-1226425687277678643?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/1226425687277678643/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=1226425687277678643' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1226425687277678643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1226425687277678643'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/12/2.html' title='実際に設計してみよう その2'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-229144155613185108</id><published>2007-11-25T15:52:00.000+09:00</published><updated>2007-11-25T15:54:49.887+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='MIME'/><title type='text'>JavaScriptでオレオレ言語</title><content type='html'>JavaScript界隈が面白いことになってる。&lt;/p&gt;

&lt;blockquote cite="http://d.hatena.ne.jp/yukoba/20071108/p1"&gt;
 &lt;p&gt;ECMAScript4に対して、「Webの世界には新しい言語が必要である！」と言う人もいますが、そうではない、オレオレ言語を作れと！！（笑）&lt;/p&gt;
 &lt;p&gt;ECMAScriptは使うための言語じゃないんです。プログラミング言語を作るための言語なんです。&lt;/p&gt;
 &lt;cite&gt;&lt;a href="http://d.hatena.ne.jp/yukoba/20071108/p1" title="OreScript時代の幕開け - yukobaの日記"&gt;OreScript時代の幕開け&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;すげぇ。　別の言語で書いた処理をパースしてJavaScriptに翻訳して実行しちゃおう、とかとんでもないこと考えてるなあ。&lt;/p&gt;

&lt;p&gt;ドキュメントをXMLで記述してXSLT使ってHTMLやTEXTに変換して出力するってのと根っこの部分でつながる話のような気がするなあ。　生データはみんなオレオレ言語やオレオレマークアップで記述しておいて、クライアント側で変換しなさいね、変換する方法は別途教えてやるから。　という方向に進めば時代に合わせて生データを加工しなくても、変換する方法だけを時代に合わせて変えていけばいいことになる。&lt;/p&gt;

&lt;p&gt;まあ、みんなオレオレになると破綻するかもしれないけど。&lt;/p&gt;

&lt;p&gt;で、そうなるとオレオレ言語のMIMEタイプとかどうするの？　という話になるけど、こんな感じらしい。&lt;/p&gt;

&lt;blockquote cite="http://nanto.asablo.jp/blog/2007/11/23/2453383"&gt;
 &lt;ul&gt;
  &lt;li&gt;オレオレ言語の MIME タイプは application/x-script-name という形がお勧め。&lt;/li&gt;
  &lt;li&gt;IANA に登録するなら、私的ツリーかベンダツリーが簡単。&lt;/li&gt;
  &lt;li&gt;Active Script エンジンを提供するなら、text タイプの使用もやむをえない。ただし、IANA に登録するなら application タイプも忘れずに。&lt;/li&gt;
 &lt;/ul&gt;
 &lt;cite&gt;&lt;a href="http://nanto.asablo.jp/blog/2007/11/23/2453383" title="オレオレ言語の MIME タイプ: Days on the Moon"&gt;オレオレ言語の MIME タイプ&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;へえ、&lt;code&gt;vnd.&lt;/code&gt;は知ってたけど、&lt;code&gt;prs.&lt;/code&gt;なんてのもあるんだ。　&lt;code&gt;vnd.&lt;/code&gt;ツリーはともかく&lt;code&gt;prs.&lt;/code&gt;ツリーでもレビュー受けたほうが良いんだ。　つか、どんな観点でレビューするんだ？&lt;/p&gt;

&lt;p&gt;それにしてもIEの下記のような仕様はおかしくないか？　なんでそんなことになってるんだ？&lt;/p&gt;

&lt;blockquote&gt;
 &lt;p&gt;IE が script 要素を処理するとき、まずは type 属性を見ます。type 属性の値が text/script-name だった場合、IE は Windows レジストリの HKEY_CLASSES_ROOT\script-name を探し、そこに Active Script エンジン (ActiveX スクリプティングインターフェースを実装するスクリプトエンジン) が登録されていれば、そのエンジンを用いてソースコードを実行します。application/script-name だった場合は何も実行しません。&lt;/p&gt;
 &lt;cite&gt;&lt;a href="http://nanto.asablo.jp/blog/2007/11/23/2453383" title="オレオレ言語の MIME タイプ: Days on the Moon"&gt;オレオレ言語の MIME タイプ&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;トップレベルタイプがapplicationのときこそエンジンに食わせるべきやん。　IE7やVistaでもこうなのかなあ。　FirefoxやOperaはどうやってんだろう。　それもちょっと気になるな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-229144155613185108?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/229144155613185108/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=229144155613185108' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/229144155613185108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/229144155613185108'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/javascript.html' title='JavaScriptでオレオレ言語'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-3895446974587264826</id><published>2007-11-21T16:44:00.000+09:00</published><updated>2007-11-21T16:49:18.877+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>実際に設計してみよう その1</title><content type='html'>さて、&lt;a href="http://pyonchang.blogspot.com/2007/11/rest.html" title="馬鹿につける薬: RESTの入り口で迷子になる"&gt;前回&lt;/a&gt;まででとりあえず、大枠は理解したということにしておこう。　これ以上は実際に設計しながら考えていくしかないだろう。&lt;/p&gt;

&lt;p&gt;さて、私自身は職業プログラマなので、RESTというスタイルが仕事で使えるかどうかが大事だ。　これが、まったくもって向いてません、じゃあ困る。&lt;/p&gt;

&lt;p&gt;というわけで、イントラネット上で公開する小規模な業務アプリを考えてみることにする。　で、考えてみた結果、「会議室予約システム」とかどうよ？&lt;/p&gt;

&lt;p&gt;前回までで、「RESTとはリソースおよびリソースの集合への操作であると見つけたり」というところに落ち着いた。　ということは、物理的なリソースへの操作のほうがRESTとの相性が良いんじゃないだろか？　で、考えてみた結果が、「会議室というリソース」への「予約」という操作だ。　まったく、新鮮味がないあたりが時代遅れで浦島太郎な私らしいが、それはおいといてほしい。&lt;/p&gt;

&lt;p&gt;今までのスタイルに従って会議室予約システムを構築すると、以下のような「会議室予約システムのURL」にブラウザで接続することになるだろう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://intranet.example.co.jp/meetingroomreserve/index.php&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;そして、実際に予約するときは以下のようなURLに対して&lt;code&gt;POST&lt;/code&gt;で必要な情報（会議室の部屋番号、予約する時間帯、予約者の連絡先等）を送信することになるだろう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://intranet.example.co.jp/meetingroomreserve/reserve.php&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で、現在の予約状況を確認する場合は、以下のようになるだろう。　そして、この場合も確認する会議室の部屋番号等は&lt;code&gt;POST&lt;/code&gt;を使用して送信するだろう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://intranet.example.co.jp/meetingroomreserve/view.php&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これをRESTとというスタイルにしたがって構築するとどうなるか考えてみよう。　だが、その前に、会議室という物理的なリソースについて、もう少し詳細を仮決めしておこう。&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;/ul&gt;

&lt;p&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;li&gt;会議室を減らす。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;行いたい操作が決まれば、次は、これらの操作がHTTPのどのメソッドに該当するかを考えてみよう。&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;会議室の予約状況を確認する。&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;これは、もう、会議室というリソースの「ある時点での状態」の「取得」だから、&lt;code&gt;GET&lt;/code&gt;で決まりだろう。&lt;/p&gt;
 &lt;/dd&gt;
 &lt;dt&gt;会議室を予約する。&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;会議室というリソースの「ある時点での状態」を「空き」から「予約」に「変更」する操作なので、&lt;code&gt;PUT&lt;/code&gt;で良いだろう。&lt;/p&gt;
 &lt;/dd&gt;
 &lt;dt&gt;予約を解除する。&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;会議室というリソースの「ある時点での状態」を「予約」から「空き」に「変更」する操作なので、&lt;code&gt;PUT&lt;/code&gt;で良いだろう。&lt;/p&gt;
 &lt;/dd&gt;
 &lt;dt&gt;会議室を増やす。&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;会議室というリソースを追加する操作なので、&lt;code&gt;POST&lt;/code&gt;だろう。&lt;/p&gt;
 &lt;/dd&gt;
 &lt;dt&gt;会議室を減らす。&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;会議室というリソースの削除なので、&lt;code&gt;DELETE&lt;/code&gt;だろう。&lt;/p&gt;
 &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;並べてみて、会議室の増減ってめったに無いやんと思ったんだが、気にしないでおこう。　とにもかくにも、これで、HTTPのメソッドを使用してRESTなスタイルで「会議室予約システム」は構築できそうだ&lt;sup&gt;（※1）&lt;/sup&gt;。&lt;/p&gt;

&lt;p&gt;というところで、今日はここまで。　次回は会議室という物理的なリソースをどのようにネットワーク上に展開するかを考えてみようと思う。&lt;/p&gt;

&lt;hr/&gt;

&lt;dl&gt;
 &lt;dt&gt;※1&lt;/dt&gt;
 &lt;dd&gt;
  &lt;p&gt;「空いている会議室を検索する」という操作については意図的に省いてみた。　検索についてはいまだに不安だ。&lt;/p&gt;
 &lt;/dd&gt;
&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-3895446974587264826?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/3895446974587264826/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=3895446974587264826' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3895446974587264826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3895446974587264826'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/1.html' title='実際に設計してみよう その1'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-2246147967202741125</id><published>2007-11-16T22:39:00.000+09:00</published><updated>2007-11-16T22:41:36.227+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>RESTの入り口で迷子になる</title><content type='html'>&lt;a href="http://pyonchang.blogspot.com/2007/10/rest.html" title="馬鹿につける薬: RESTの入り口で溺れる。"&gt;RESTの入り口で溺れる&lt;/a&gt;において、&lt;code&gt;SEARCH&lt;/code&gt;とかいうメソッドが必要なんじゃね？　とか書いたが、どうにももにょるつか、気持ち悪い。　というわけで、もう一度&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html" title="yohei-y:weblog: REST 入門"&gt;REST 入門&lt;/a&gt;を読み直してみることにした。&lt;/p&gt;

&lt;p&gt;まずはリソースについて。　リソースは以下の特徴を持つとされている。&lt;/p&gt;

&lt;blockquote cite=""&gt;
 &lt;ul&gt;
  &lt;li&gt;全ての情報はリソース&lt;/li&gt;
  &lt;li&gt;リソースは識別子(URI)を持つ&lt;/li&gt;
  &lt;li&gt;リソースの状態は時間や条件とともに変化する可能性がある&lt;/li&gt;
  &lt;li&gt;リソースの意味は時間や条件が変化しても不変である&lt;/li&gt;
 &lt;/ul&gt;
 &lt;cite&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-3.html" title="yohei-y:weblog: REST 入門(その3) 全てはリソースから"&gt;REST 入門(その3) 全てはリソースから&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;そして、この「リソースのある時点での状態の表現を（ネットワークを介して）転送する」というのがRESTだと説明されている。&lt;/p&gt;

&lt;p&gt;ふむふむ、「リソースの状態」ではなく「リソースの状態の表現」となっているのは、リソースの状態を表す手段がHTMLだったりXMLだったりするからだと。　ということは同一のリソースの同一の状態の異なる表現を同じURIで取得することもできるということか？　コンテント・ネゴシエーションとか呼ばれてるやつのことか？&lt;/p&gt;

&lt;p&gt;つまり、&lt;code&gt;HTTP GET&lt;/code&gt;とは「リソースのある時点での状態の表現を取得（GET）する」ことだと。そして、&lt;code&gt;PUT&lt;/code&gt;は「リソースの状態を変更する」ことであり、&lt;code&gt;DELETE&lt;/code&gt;は「リソースを削除する」ことであり、&lt;code&gt;POST&lt;/code&gt;は「リソースを作成する」ことだと……。　&lt;code&gt;POST&lt;/code&gt;と&lt;code&gt;DELETE&lt;/code&gt;は「リソースそのもの」への操作であり、「リソースの状態」への操作ではないということだな。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PUT&lt;/code&gt;と&lt;code&gt;POST&lt;/code&gt;の使い分けは、&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-2-post-put.html" title="yohei-y:weblog: REST 入門(補足2) POST と PUT"&gt;POST と PUT について&lt;/a&gt;を読めと。　で、こんなことも書いてある。&lt;/p&gt;

&lt;blockquote cite="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html"&gt;
 &lt;p&gt;今回の POST, PUT, DELETE と、前回の GET はある点で大きく異なります。それは GET がリソースの状態に影響を与えないのに対して、それ以外の三つの動詞がリソースの状態に何らかの影響を与える可能性がある点です。このような性質を副作用(side effect)といいます。&lt;/p&gt;
 &lt;cite&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html" title="yohei-y:weblog: REST 入門(その5) 四つの動詞 -- GET, POST, PUT, DELETE"&gt;REST 入門(その5) 四つの動詞 -- GET, POST, PUT, DELETE&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;ここまでは、前回読んだときもすんなりと理解できた。　問題はここからだ。　はてなブックマークに検索インターフェースを付けようというところで、こんな記述がある。&lt;/p&gt;

&lt;blockquote cite="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html"&gt;
 &lt;p&gt;ここで登場するリソースは、「検索結果」リソースです。検索結果リソースはこれまでみてきたリソースとは少し趣が異なります。たとえばキーワード "REST" を検索した検索結果の URI は以下のようになります。&lt;/p&gt;
 &lt;cite&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html" title="yohei-y:weblog: REST 入門(その6) ハイパーリンクと XML"&gt;REST 入門(その6) ハイパーリンクと XML&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;検索結果リソースが検索という動作を行う前に存在しているというのが気持ち悪かったわけだ、だから&lt;code&gt;SEARCH&lt;/code&gt;というメソッドを追加して、リソースに対して検索することで「検索結果リソース」を作成し、レスポンスの&lt;code&gt;Location&lt;/code&gt;ヘッダで新規に作成された「検索結果リソース」の識別子（URI）を指定したほうが良いんじゃねえかと思ったわけだ。&lt;/p&gt;

&lt;p&gt;ただし、このやり方だと、&lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;POST&lt;/code&gt;、&lt;code&gt;PUT&lt;/code&gt;、&lt;code&gt;DELETE&lt;/code&gt;以外の操作が必要になるたびにメソッドが増えていくことになるので、美しくないなあというのが気持ち悪かった理由だ。&lt;/p&gt;

&lt;p&gt;しかし、これ、チェックボックス等の方法で条件を絞り込んでいくタイプの検索の場合はあらかじめ検索結果リソースを作成しておくことができることに帰宅中の電車の中で気が付いた。　あらかじめ、想定されうる全検索結果について検索結果リソースを作成しておき、検索結果リソースの集合を示すリソースを作成する。　そして、検索結果リソースの集合に対して、検索条件をパラメータで指定した&lt;code&gt;GET&lt;/code&gt;を行えばよくね？&lt;/p&gt;

&lt;p&gt;で、「検索結果リソースの集合」なんてものよりも「リソースの集合」に対して、取得条件を指定して&lt;code&gt;GET&lt;/code&gt;できれば十分じゃね？　で、リソースの集合に対して&lt;code&gt;POST&lt;/code&gt;すれば、リソースの集合にリソースが新規に追加されればよくね？&lt;/p&gt;

&lt;p&gt;というところまで行き着いた。　しかし、良いのかねえ、こんな理解の仕方で……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-2246147967202741125?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/2246147967202741125/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=2246147967202741125' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2246147967202741125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/2246147967202741125'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/rest.html' title='RESTの入り口で迷子になる'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6294895278040884066</id><published>2007-11-16T00:36:00.000+09:00</published><updated>2007-11-16T00:42:15.387+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><title type='text'>rel-tagについて</title><content type='html'>Webサービスのお勉強をしてみようとか言っておきならが、microformats関係ばっかり調べてる。　だってこっちのほうがお手軽そうなんだもん。　というわけで、microformats関係のFirefoxのAdd-onとbookmarklet。&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;Add-ons&lt;/dt&gt;
 &lt;dd&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/4106" title="Operator :: Firefox Add-ons"&gt;Operator&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://blog.codeeg.com/tails-firefox-extension-03/" title="Don’t Forget to Plant It! ? Tails Firefox Extension 0.3"&gt;Tails&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/2240" title="Tails Export :: Firefox Add-ons"&gt;Tails Export&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/dd&gt;
 &lt;dt&gt;Bookmarklet&lt;/dt&gt;
 &lt;dd&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://leftlogic.com/lounge/articles/microformats_bookmarklet" title="Microformats Bookmarklet ? Left Logic"&gt;Microformats Bookmarklet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://leftlogic.com/lounge/news/micrformats-bookmarket-for-ie/" title="Microformats Bookmarklet now for IE ? Left Logic"&gt;Microformats Bookmarklet(IE)&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;dd&gt;
&lt;/dl&gt;

&lt;p&gt;いろんなページで試してみたけど、どうにも日本語のページはまだまだ対応しているところが少ないね。&lt;/p&gt;

&lt;p&gt;で、いろんなページを見てて気になったことがひとつ。　タグクラウドって&lt;code&gt;rel-tag&lt;/code&gt;使って良いのか？ってこと。　Voxにもブログを持ってるので、調べてみたらタグクラウドで&lt;code&gt;rel-tag&lt;/code&gt;使ってるっぽい（Bookmarkletでは見つからなかったけど、ソースを見ると使ってる）んだよね。　そういうものなのかなあと思って調べてみたら、microformats.orgにこんなのがあった。&lt;/p&gt;

&lt;blockquote cite="http://microformats.org/wiki/rel-tag-faq#Q.26A"&gt;
 &lt;ul&gt;
  &lt;li&gt;rel-tag expresses a particular relationship (a) between the page you are on and (b) the target of a link. If you're not asserting this relationship, don't use rel-tag. In particular:
  &lt;ul&gt;
   &lt;li&gt;don't use rel-tag in Tag Clouds&lt;/li&gt;
  &lt;/ul&gt;
  &lt;/li&gt;
 &lt;/ul&gt;
 &lt;cite&gt;&lt;a href="http://microformats.org/wiki/rel-tag-faq#Q.26A" title="rel-tag-faq - Microformats"&gt;rel-tag-faq - Microformats&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;はっきり、タグクラウドでは使うなと書いてあった。　そうだよな、やっぱり。　他にも&lt;a href="http://microformats.org/code/" title="Micorformats | Code"&gt;Creator&lt;/a&gt;の吐くコードを見ているとabbr要素に&lt;code&gt;class=&amp;quot;dtstart&amp;quot;&lt;/code&gt;や&lt;code&gt;class=&amp;quot;dtend&amp;quot;&lt;/code&gt;を適用してるけど、これもどうなんだ？　abbr要素って略語に使用してtitle属性でその正式名称を指定するものじゃないの？　microformats自体が今あるものを使用して無理やり隙間を埋めようとする仕組みだからしょうがないんだろうけど、一定のコンセンサスがとれるようになるまでしばらくかかりそうな気がしてきた。&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;参照リンク&lt;dt&gt;
 &lt;dd&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.add-info.com/mt/archives/001293.php" title="Stolen Moments: rel-tag を利用する場合のリンク先について"&gt;Stolen Moments: rel-tag を利用する場合のリンク先について&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.add-info.com/mt/archives/001294.php" title="Stolen Moments: 続: rel-tag を利用する場合のリンク先について"&gt;Stolen Moments: 続: rel-tag を利用する場合のリンク先について&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://my-chunqiu.cocolog-nifty.com/blog/2006/12/post_f487.html" title="我的春秋: タグクラウドのマークアップ"&gt;我的春秋: タグクラウドのマークアップ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://web.g.hatena.ne.jp/vantguarde/?word=*%5Bmicroformats%5D" title="webtech:vantguarde - WEBTECH"&gt;webtech:vantguarde - WEBTECH&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://kidachi.kazuhi.to/blog/archives/002341.html" title="覚え書き@kazuhi.to: microformatsとかabbr要素とか"&gt;覚え書き@kazuhi.to: microformatsとかabbr要素とか&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;徐々に使われるようになってきたとはいえ、やっぱりmicroformatsを利用したサービスが出てこないとまだまだ、パッとしないなあ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6294895278040884066?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6294895278040884066/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6294895278040884066' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6294895278040884066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6294895278040884066'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/rel-tag.html' title='rel-tagについて'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-7701290380587183257</id><published>2007-11-13T00:57:00.000+09:00</published><updated>2007-11-13T00:59:43.654+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prism'/><title type='text'>Mozilla Prism</title><content type='html'>二〇〇七年十月二十四日に&lt;a href="http://www.mozilla.org" title="mozilla.org"&gt;Mozilla Foundation&lt;/a&gt;が“Prism”という妙なものを発表していたようだ。&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://japan.internet.com/webtech/20071030/10.html" title="Mozilla、『Prism』プロジェクトを発表"&gt;Mozilla、『Prism』プロジェクトを発表&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.itmedia.co.jp/news/articles/0711/05/news035.html" title="Mozilla、「Prism」のMac版とLinux版をリリース"&gt;Mozilla、「Prism」のMac版とLinux版をリリース&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Webアプリケーションをブラウザからではなく、デスクトップアプリケーションとして利用できるようにしようという試みのようだが、それって&lt;abbr title="HTML Application"&gt;HTA&lt;/abbr&gt;じゃねえの？　と思ったら違うようだ。　フォームから直接、レンダリング・エンジンを使用しましょう、ブラウザとしてのUIを持たないので、戻るボタン等を考慮しなくても良いですよ、ということらしい。　Firefoxのナヴィゲーション・ツールバーをマスクして見えなくしただけっぽいんだけど、誰が得するんだ？　つか、誰をターゲットにしてるんだ？&lt;/p&gt;

&lt;p&gt;Adobe Systemsが“AIR”でデスクトップで直接Flashを使用できるようにしようとしているのに比べると非常にしょぼいような気がするんだけど、どうなんだろう。&lt;/p&gt;

&lt;blockquote&gt;
 &lt;p&gt;現状ではウェブアプリが別画面で表示されるというくらいのことしかできませんが、それでもそれぞれのアプリは別プロセスで立ち上がっていますので、Firefox がクラッシュしても影響を受けないというメリットがあります。&lt;/p&gt;
 &lt;cite&gt;&lt;a href="http://lifehacking.jp/2007/10/mozilla-prism/" title="ウェブアプリを単独で起動させる Mozilla “Prism”"&gt;ウェブアプリを単独で起動させる Mozilla “Prism”&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;なんてのは別に利点じゃねえよなあ……。　現状では拡張機能が使えないらしく、本当に別ウィンドウでWebアプリが起動しているだけなんだよなあ。&lt;/p&gt;

&lt;p&gt;いずれ、拡張機能が使えるようになるとして、2ちゃんブラウザがやっているようにHTTPレスポンスを拡張機能がフックして加工して出力することができれば、特定のWebアプリについてそのインターフェースをチューニングして使い勝手を向上させることができるだろう。　現在のヴァージョンが0.8なので1.0になった時にその将来性が見えてくるだろう。　また、ウェブサイト側はウェブサービスとして構築してひたすらXMLを送出するだけににし、全ての操作はローカルで行うといったことも可能になるのかもしれない。　もし、そこまでやる気があるならちょっとしたパラダイム・シフトになる可能性もあるだろう。　今後に期待しようと思う。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-7701290380587183257?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/7701290380587183257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=7701290380587183257' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7701290380587183257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7701290380587183257'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/mozilla-prism.html' title='Mozilla Prism'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-7227830471047071620</id><published>2007-11-10T00:03:00.000+09:00</published><updated>2007-11-10T00:04:52.696+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><title type='text'>microformats</title><content type='html'>ここのところ、激しく暇なので、一年ほど前から気になっていたmicroformatsについて調べてみた。&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://microformats.org/wiki/Main_Page-jp" title="Main Page-ja - Microformats"&gt;Main Page-ja - Microformats&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;要するにマークアップしたデータに対してメタデータを付与して、意味づけを強化しましょうということのようだ。　詳しくは&lt;a href="http://d.hatena.ne.jp/naoya/20050715/1121411871" title="microformats ってなんだ？ - naoyaのはてなダイアリー"&gt;microformats ってなんだ？&lt;/a&gt;や&lt;a href="http://yohei-y.blogspot.com/2005/06/microformats_19.html" title="yohei-y:weblog: Microformats の夢"&gt;Microformats の夢&lt;/a&gt;を読めばよくわかるだろう。&lt;/p&gt;

&lt;p&gt;はっきり言って、現在はCGM全盛の時代であり、タグをチマチマと手で打ってるのは一部の数寄者だけでなので、CGMのツールが対応しないことにはまったく流行らないだろう。　実用段階になっているのは&lt;code&gt;rel="nofollow"&lt;/code&gt;くらいなものだし、これにしたところで、Googleというツールが対応したことが大きい。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/NEWS/20070419/268845/" title="【Web 2.0 Expo】「データ形式Microformatsがブラウザを進化させる」，Mozillaがアピール：ITpro"&gt;Firefox 3&lt;/a&gt;で何らかの動きがあるようだが、これにしたところで、肝心のサイト側が対応していなければ意味がない。　やはりブログが対応しないことには進まないと思う。　&lt;a href="http://google.co.jp/reviews" title="映画レビュー - Google 検索"&gt;Google Reviews&lt;/a&gt;を見る限り、ブログが対応するだけで検索精度が大幅に向上するだろう事は容易に想像がつく。　&lt;a href="http://microformats.org/wiki/hreview-ja" title="hreview-ja - Microformats"&gt;hReview&lt;/a&gt;と&lt;a href="http://microformats.org/wiki/rel-tag-ja" title="rel-tag-ja - Microformats"&gt;rel-tag&lt;/a&gt;についてはすぐにでも効果を発揮することができるだろう。&lt;/p&gt;


&lt;dl&gt;
 &lt;dt&gt;参考リンク&lt;/dt&gt;
 &lt;dd&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://microformats.org/wiki/Main_Page-jp" title="Main Page-ja - Microformats"&gt;Main Page-ja - Microformats&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://d.hatena.ne.jp/naoya/20050715/1121411871" title="Microformats って何だ？ - naoyaのはてなダイアリー"&gt;Microformats って何だ？ - naoyaのはてなダイアリー&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/NEWS/20070419/268845/" title="【Web 2.0 Expo】「データ形式Microformatsがブラウザを進化させる」，Mozillaがアピール：ITpro"&gt;【Web 2.0 Expo】「データ形式Microformatsがブラウザを進化させる」，Mozillaがアピール：ITpro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://blogs.itmedia.co.jp/randomwalk/2006/05/microformat_ce66.html" title="大型連休なのでMicroformatについて調べてみた - Randomwalk [ITmedia オルタナティブ・ブログ]"&gt;大型連休なのでMicroformatについて調べてみた - Randomwalk [ITmedia オルタナティブ・ブログ]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/search/label/microformats" title="yohei-y:weblog"&gt;yohei-y:weblog&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;&lt;a href="http://pyonchang.blogspot.com/2007/11/xhtml-role.html" title="馬鹿につける薬: XHTML Role属性"&gt;Role属性&lt;/a&gt;といいmicroformatsといい、時代はメタ情報なんだろうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-7227830471047071620?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/7227830471047071620/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=7227830471047071620' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7227830471047071620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/7227830471047071620'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/microformats.html' title='microformats'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6159221773595287113</id><published>2007-11-04T16:27:00.000+09:00</published><updated>2007-11-04T16:38:54.187+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Role属性'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><title type='text'>XHTML Role属性</title><content type='html'>XHTML Role属性モジュールなるものの策定が進められているらしいことを下記のページで知った。&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://taken.s101.xrea.com/blog/article.php?id=812" title="Taken SPC : role 属性値を基にノードを選択する"&gt;Taken SPC : role 属性値を基にノードを選択する&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;で、&lt;a href="http://www.w3.org/TR/2007/WD-xhtml-role-20071004/" title=" XHTML Role Attribute Module"&gt;最終草案（Working Draft）&lt;/a&gt;が出されており、早速&lt;a href="http://standards.mitsue.co.jp/resources/w3c/TR/2007/WD-xhtml-role-20071004/" title="XHTML Role 属性モジュール"&gt;和訳&lt;/a&gt;も行われている。&lt;/p&gt;

&lt;p&gt;で、Role属性という名前から推測できるように、「要素の役割を示す」ための属性のようなんだが……class属性とどう違うのか、どう使い分けるのか、良くわかりません。　草案を読んでも良くわからない。　「4. XHTML Role属性」の章に乗っている標準roleをみんなで使用してドキュメント中の役割をわかりやすくしましょうって事なんだろうけど……。　そのうち拡張されてどえらい量になったり、誰かが勝手に追加したroleがデファクト・スタンダードになったりするんだろうなあ。&lt;/p&gt;

&lt;p&gt;そもそも、&lt;a href="http://www.w3.org/TR/xmlschema-2/#QName" title="XML Schema Part 2: Datatypes Second Edition 3.2.18 QName"&gt;QName&lt;/a&gt;とか&lt;a href="http://www.w3.org/TR/2007/WD-curie-20070307/" title="CURIE Syntax 1.0"&gt;CURIE&lt;/a&gt;ってなんじゃい？　という自分のアホさ加減が嫌になっちゃったりするわけだが、XML系の仕様って膨らみすぎてないか？&lt;/p&gt;

&lt;dl&gt;
 &lt;dt&gt;参考リンク&lt;/dt&gt;
 &lt;dd&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://taken.s101.xrea.com/blog/article.php?id=812" title="Taken SPC : role 属性値を基にノードを選択する"&gt;Taken SPC : role 属性値を基にノードを選択する&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.w3.org/TR/2007/WD-xhtml-role-20071004/" title=" XHTML Role Attribute Module"&gt; XHTML Role Attribute Module&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://standards.mitsue.co.jp/resources/w3c/TR/2007/WD-xhtml-role-20071004/" title="XHTML Role 属性モジュール"&gt;XHTML Role 属性モジュール&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;それにしてもHTMLの時はあまり使用されなかった（見た目の制御には使用された）、要素の属性という概念がXHTMLの時代になって急に脚光を浴び始めたような気がする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6159221773595287113?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6159221773595287113/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6159221773595287113' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6159221773595287113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6159221773595287113'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/xhtml-role.html' title='XHTML Role属性'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-8284817281609198879</id><published>2007-11-03T23:01:00.000+09:00</published><updated>2007-11-04T16:39:41.566+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ショート・コーディング'/><title type='text'>半画面プログラムのテトリス</title><content type='html'>久しぶりに感動的なコードを見た。&lt;/p&gt;
&lt;p&gt;「&lt;a href="http://blog.livedoor.jp/dqnplus/archives/1049253.html" title="往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト"&gt;往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト&lt;/a&gt;」で紹介されたJavaScriptのテトリスだ。　わずか565バイト（79文字＊7行）で実現されている。&lt;/p&gt;
&lt;p&gt;仕事でこんなコード書いた日にはコードレビューで半殺しにされるわけだが、往年の一画面プログラムを知っている世代にとっては懐かしさのあまり走馬灯が見えそうになる。&lt;/p&gt;
&lt;p&gt;で、案の定、全国のショート・コーダーの皆様の琴線に触れたらしく、方々で話題になっている。　&lt;a href="http://d.hatena.ne.jp/Ozy/20071101#p1" title="もっと縮めようゼ - Cozy Ozy"&gt;さらに縮めようとするひと&lt;/a&gt;まで現れてる。　失敗したみたいだけど。&lt;/p&gt;
&lt;p&gt;こういうのを見ると富豪的プログラミングはプログラマから職人魂を奪っていく考え方なんだというのが良くわかるなあ。&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;参考リンク&lt;/dt&gt;
&lt;dd&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="http://blog.livedoor.jp/dqnplus/archives/1049253.html" title="痛いニュース(ﾉ∀`):往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト"&gt;痛いニュース(ﾉ∀`):往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://zapanet.info/blog/item/1125" title="わずか565バイトテトリスのプログラミング解説"&gt;わずか565バイトテトリスのプログラミング解説&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://zapanet.info/blog/item/1126" title="続・わずか565バイトテトリスのプログラミング解説"&gt;続・わずか565バイトテトリスのプログラミング解説&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://d.hatena.ne.jp/Ozy/20071101#p1" title="もっと縮めようゼ - Cozy Ozy"&gt;もっと縮めようゼ - Cozy Ozy&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;dd&gt;
&lt;/dl&gt;
&lt;p&gt;ところで、マリオについては「&lt;a href="http://www.geocities.co.jp/SiliconValley-Sunnyvale/6160/newtech/smb111.htm" title="マリオ研究"&gt;マリオ研究&lt;/a&gt;」なるページがあるんだが、これを見るとスーパーマリオブラザーズは奇跡の産物ではなく、周到に計算された努力の産物だというのが良くわかる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-8284817281609198879?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/8284817281609198879/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=8284817281609198879' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/8284817281609198879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/8284817281609198879'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/11/blog-post.html' title='半画面プログラムのテトリス'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-1751185067202052329</id><published>2007-10-30T00:38:00.000+09:00</published><updated>2007-11-04T16:40:20.255+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ポリフォニーデジタル'/><category scheme='http://www.blogger.com/atom/ns#' term='日産'/><category scheme='http://www.blogger.com/atom/ns#' term='ユーザインターフェース'/><title type='text'>日産とポリフォニーデジタルが共同開発</title><content type='html'>こないだの&lt;a href="http://pyonchang.blogspot.com/2007/10/cellrubygui.html#links" title="Cell+Rubyでデジタル家電向けGUI"&gt;Cell+Rubyでデジタル家電向けGUI&lt;/a&gt;で以下のようなことを書いた。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;デジタル家電とやらのUIを見てて思うのは、リモコンのような物理的なUIではなく、ディスプレイ(TV)に表示するGUIについては家電メーカよりもゲーム業界のほうがノウハウを持ってそうな気がする。　となると、SCEを抱えているソニーが有利な気もするが、Play Station のシステム画面を見てると使いやすさよりも見た目っぽいんだよなあ。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;とっくに日産がやっちゃってたらしい。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/NEWS/20071025/285455/" title="【東京モーターショー】SCE子会社が明かすGT-R開発秘話，「多機能メーターを共同開発した」：ITpro"&gt;【東京モーターショー】SCE子会社が明かすGT-R開発秘話，「多機能メーターを共同開発した」：ITpro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;その中で山内プレジデントはGT-Rの「マルチファンクションメーター」を，日産自動車とポリフォニー・デジタルが共同開発したことを発表した。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SCEの子会社だったのは知らなかったが、ポリフォニー・デジタルってのはグランツーリスモ作ってるところだ。&lt;/p&gt;

&lt;p&gt;ただ、記事を読んでもマルチファンクションメーターとやらの写真を見てもゲームメーカのノウハウが生かされてるかどうかさっぱりわからなかったんだけど……。　日産にとってはどんなメリットがあったんだろうか？　そこら辺を突っ込んで取材しなかったんだろうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-1751185067202052329?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/1751185067202052329/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=1751185067202052329' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1751185067202052329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/1751185067202052329'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/blog-post_30.html' title='日産とポリフォニーデジタルが共同開発'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-3864846181095698723</id><published>2007-10-29T22:13:00.000+09:00</published><updated>2007-11-04T16:40:51.997+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='ステートレス'/><title type='text'>ステートレスってたとえばどんなの？</title><content type='html'>というわけで、RESTについて調べていると必ず出てくるステートレスとステートフル。　なんとなく理解はできるんだけど、他者に説明する際に適当なたとえが思いつかなかったところにいい説明を見つけた。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2007/10/blog-post.html" title="yohei-y:weblog: ステートレスとは何か"&gt;yohei-y:weblog: ステートレスとは何か&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;おおぉ、なるほどぉ。　で、これを踏まえてステートレスな世界でステートフルのように見える世界を実現するためにCookieが導入される。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.livedoor.jp/dankogai/archives/50938900.html" title="404 Blog Not Found:ステートレスなお買い物"&gt;404 Blog Not Found:ステートレスなお買い物&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;最初は受け取り票ではなく買い物のメモそのものが店員と客の間でやり取りされていたんだが、当然、そのメモを盗み見られてしまうと買い物時に店に提供した情報がすべてバレてしまう。　そこで、店員と客の間でやり取りする情報には受け取り票となる番号札だけに絞り、買い物の詳細は店側が保持するようになったと。　で、店側は番号札に対応する買い物の詳細を店員にしか見えない場所に掲示しておくことで、異なる店員でも商品の受け渡しを行えるようになる。&lt;/p&gt;

&lt;p&gt;しかし、店員でも客でも無い第三者が客の持っている番号札を奪うもしくは偽造することで、客に成りすまして店員とのやり取りを継続してしまうことが可能だ。　これがセッションハイジャックなのだろう、&lt;strong&gt;多分&lt;/strong&gt;。　また、店員でも客でもない第三者が店員に成りすまして以下のようなことをすることもできる。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;客&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;A店に偽装した店舗に買い物に来る&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;偽店員&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;いらっしゃいませ。&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;客&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;黙ってメモとクレジットカードを渡し、暗証番号を入力する「ハンバーガーセットをポテトとジンジャーエール(M)を100個。クレカと暗証番号はこちら。」&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;偽店員&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;黙って釣りと伝票を渡す。「受取表:2007-10-28 18:00 Foo様」　そして裏口から本物のA店に行って買い物をする。&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;客&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;黙って伝票を出す。「受取表:2007-10-28 18:00 Foo様」&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;偽店員&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;黙って商品を渡す&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;こうすることで、偽店員はめでたく（？）客の暗証番号を手に入れてしまえる。　で、これがマン・イン・ザ・ミドル（中間者）攻撃と呼ばれるのだろう、&lt;strong&gt;多分&lt;/strong&gt;。　で、A店に偽装した店がフィッシング・サイトになるのだろう、&lt;strong&gt;多分&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;これを見れば店の場所（URL）はちゃんと確認しましょうというのも納得がいくし、その店員が本物のA店の店員かどうか調べるために、自分が信頼する第三者に保証してもらおうという発想が認証局という仕組みだというのも理解できそうだ。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;ところで、マン・イン・ザ・ミドル（Man in the middle）攻撃のManについてフェミの皆さんは抗議しないんだろうか？　「中間者攻撃は女性も行うのだからPerson in the middle攻撃と呼ぶべきだ！」とか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-3864846181095698723?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/3864846181095698723/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=3864846181095698723' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3864846181095698723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3864846181095698723'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/blog-post_29.html' title='ステートレスってたとえばどんなの？'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-775320901055508368</id><published>2007-10-25T23:01:00.000+09:00</published><updated>2007-11-04T16:41:18.609+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>WITH句について</title><content type='html'>WITH句とやらについて試してみたんだけど……。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;with TMP_TABLE_NAME (TMP_COLA, TMP_COLB) as (
    select
    ……略……
&lt;code&gt;&lt;/pre&gt;
&lt;p&gt;という記述はできないっぽいよ？　なんで？&lt;/p&gt;
&lt;blockquote&gt;
ORA-32033: 列はサポートされていません。
&lt;/blockquote&gt;
&lt;p&gt;なるエラーが出ちゃうよ。　で、原因は「WITH句の列のエイリアシングはサポートされていません。」なんだそうだが……。　これはORACLEが対応してないだけでSQL99の仕様ではOKなのか？　MySQLやDB2はサポートされているのか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-775320901055508368?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/775320901055508368/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=775320901055508368' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/775320901055508368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/775320901055508368'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/with_25.html' title='WITH句について'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-514696106371586467</id><published>2007-10-25T00:01:00.000+09:00</published><updated>2007-11-04T16:41:45.179+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>共通表式WITH句ってなんだ？</title><content type='html'>いまだかつて無かったほどに暇なので、勤務時間中にお勉強してたら、SQLにWITH句なるものがあるらしい。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html" title="新しい業界標準「SQL99」詳細解説"&gt;新しい業界標準「SQL99」詳細解説&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;すげぇ。　外部結合する際等にうまく使えば、ずいぶん高速化されるような気がするが、どうなんだろう。　メッチャメモリ食いますとかだったら死ねるが、試してみる価値はありそうな気がする。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;参考リンク&lt;/dt&gt;
&lt;dd&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html" title="新しい業界標準「SQL99」詳細解説"&gt;新しい業界標準「SQL99」詳細解説&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://oracle.se-free.com/dml/08_with.html" title="ＯＲＡＣＬＥ／オラクルＳＱＬリファレンス（WITH句）"&gt;ＯＲＡＣＬＥ／オラクルＳＱＬリファレンス（WITH句）&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-514696106371586467?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/514696106371586467/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=514696106371586467' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/514696106371586467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/514696106371586467'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/with.html' title='共通表式WITH句ってなんだ？'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-6883967128834413668</id><published>2007-10-21T16:55:00.000+09:00</published><updated>2007-11-04T16:42:18.732+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cell'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Cell+Rubyでデジタル家電向けGUI</title><content type='html'>CEATEC 2007で東芝がRubyで構築されたデジタル家電向けGUIを発表したようだ。　プロセッサにはCellを使用して。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://techon.nikkeibp.co.jp/article/NEWS/20071005/140327/" title="【CEATEC続報】CellでRubyを動かす，東芝が家電向けUIを試作 - 組み込み開発 - Tech-On!"&gt;【CEATEC続報】CellでRubyを動かす，東芝が家電向けUIを試作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;工場もかっちゃたし、東芝は本気でCellを推し進めようとしているようだ。　Play Station 3 がポシャッたから積極的に使用することで費用を回収したいんだろうなあ。&lt;/p&gt;
&lt;p&gt;というような話はおいておいて。　Cellを使用したのはある意味当然としても、Rubyを使用する必要がどこに有ったんだろうか？　ruby-listに投稿された&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/44057" title="Rubyを使った家電向けプラットフォームのデモ"&gt;なかのひと&lt;/a&gt;の発言を読むと、スクリプト言語でやりたかっただけのようだが。&lt;/p&gt;
&lt;p&gt;ところで、GUIを開発する言語としてRubyはどうなんだろう、オレのようなおじさんにはTcl/Tkじゃねえの？　とか思っちゃうわけだが。　Linuxの上でRubyとCairoとDirectFBという構成のようだが、DirectFBってなんだ？&lt;/p&gt;
&lt;p&gt;デジタル家電とやらのUIを見てて思うのは、リモコンのような物理的なUIではなく、ディスプレイ(TV)に表示するGUIについては家電メーカよりもゲーム業界のほうがノウハウを持ってそうな気がする。　となると、SCEを抱えているソニーが有利な気もするが、Play Station のシステム画面を見てると使いやすさよりも見た目っぽいんだよなあ。&lt;/p&gt;
&lt;p&gt;まあともかく、現状のRubyのまま出荷って線はないだろうな。&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;参考リンク&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ruby-lang.org/ja/" title="オブジェクト指向スクリプト言語 Ruby"&gt;オブジェクト指向スクリプト言語 Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cairographics.org/" title="cairographics.org"&gt;cairographics.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.directfb.org/" title="directfb.org"&gt;directfb.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;ところで、デジタル家電ってTV以外に何があるんだ？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-6883967128834413668?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/6883967128834413668/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=6883967128834413668' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6883967128834413668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/6883967128834413668'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/cellrubygui.html' title='Cell+Rubyでデジタル家電向けGUI'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-3193840121312105562</id><published>2007-10-20T01:09:00.000+09:00</published><updated>2007-11-04T16:42:53.882+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>RESTの入り口で溺れる。</title><content type='html'>というわけで、早速。&lt;/p&gt;
&lt;p&gt;今年の一月からスポットで入っているプロジェクトの内容がひたすらレガシーなので、まったく刺激のないまま十ヶ月も過ぎてしまった。　その前のプロジェクトも最先端かといえばそうでもないんだが……三年も続くと古びてくるし。
&lt;p&gt;このままでは浦島太郎になっちゃうよ、と思って色々と勉強を再開してみることにした。&lt;/p&gt;
&lt;p&gt;で、前から興味のあったWebAPIについてちょいと調べてみようと思い立ったんだけど、調べれば調べるほど&lt;strong&gt;よくわかりません&lt;/strong&gt;と言うことに。&lt;/p&gt;
&lt;p&gt;WebAPIといえばSOAPとか言うのがあったんだっけ？　とか思いながら調べていくと「SOAP」と「REST」の対立場面に出くわすことになった。　SOAPは難しすぎてよくわからなかったので、いったん諦めてRESTとかいうものについて調べてみることにした。　そこで、出くわしたのが以下のページ。&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;yohei-y:weblog:REST入門&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;大変わかりやすかった。　そうか、特定のAPIの仕様じゃなくて&lt;strong&gt;アーキテクチャのスタイル&lt;/strong&gt;のことだったのか。&lt;/p&gt;
&lt;p&gt;へぇ～、と思いながら読んでいくと「&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html"&gt; REST 入門(その6) ハイパーリンクと XML&lt;/a&gt;」で引っかかることに……。　新規登録、変更、削除まではちゃんとHTTPのメソッドに合致しているのに検索だけが微妙なことになってる。　このページでの説明では「検索結果リソース」に対して&lt;code&gt;GET&lt;/code&gt;を「適用」させることでリソースの状態を取得するわけだが、なんかおかしくないか？　「検索結果」ってのは「動作」の結果、生じる状態のはずだ。　検索という動作によって発生した状態を取得するなら、リソースに対して検索という動作を行うのが筋だ。&lt;/p&gt;
&lt;p&gt;というわけで、RESTはHTTPを拡張して&lt;code&gt;SEARCH&lt;/code&gt;とかいうメソッドを追加するべきじゃないだろうか？　以下のように、RESTの概念にはSQLのクエリが対応するのだから&lt;code&gt;SELECT&lt;/code&gt;に対応する何かが必要なんじゃないだろうか？&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST&lt;/code&gt;は&lt;code&gt;INSERT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT&lt;/code&gt;は&lt;code&gt;UPDATE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE&lt;/code&gt;は&lt;code&gt;DELETE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;GET&lt;/code&gt;は状態を取得するメソッドなので、この場合だと主キーで&lt;code&gt;SELECT&lt;/code&gt;するようなものか。&lt;/p&gt;
&lt;p&gt;しかし、現状、&lt;code&gt;PUT&lt;/code&gt;が有効に活用されているサービスはあるんだろうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-3193840121312105562?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/3193840121312105562/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=3193840121312105562' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3193840121312105562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/3193840121312105562'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/rest.html' title='RESTの入り口で溺れる。'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6293224381723023880.post-125956766046441266</id><published>2007-10-20T00:53:00.000+09:00</published><updated>2007-10-20T00:57:52.218+09:00</updated><title type='text'>ブログ始めました。</title><content type='html'>voxにもうひとつブログ持ってるんだけど、あっちではあまり技術的なことができそうにないので、こっちでやることにする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6293224381723023880-125956766046441266?l=pyonchang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pyonchang.blogspot.com/feeds/125956766046441266/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6293224381723023880&amp;postID=125956766046441266' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/125956766046441266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6293224381723023880/posts/default/125956766046441266'/><link rel='alternate' type='text/html' href='http://pyonchang.blogspot.com/2007/10/blog-post.html' title='ブログ始めました。'/><author><name>ぴょん吉</name><uri>http://www.blogger.com/profile/12871630425419507872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
