「STAP細胞に群がった悪いヤツら 」感想(あんまりお勧めできないけど目を通して良いと思う)

私が気になっている科学系の新刊書籍(教科書ではない) - アレ待チろまん 私が気になっている科学系の新刊書籍(教科書ではない) - アレ待チろまん

でスルーされてた方のSTAP本。

STAP細胞に群がった悪いヤツら

STAP細胞に群がった悪いヤツら

いわゆる「科学コミュニティ」とか「科学クラスタ」の外からSTAP細胞騒動についてどう見えてるのかについて興味を持ったので購入。

まずは良かった点。

なんのかんの言って関係する人物相関図や騒動に至るまでの顛末についてはよくまとまってる。また、市川家國教授(理研「研究不正再発防止のための改革委員会」委員)や八代嘉美准教授(京都大学iPS細胞研究所)といった関係者への独自取材も結構ある。


じゃあ良い本なのかというとちょっとというかかなり微妙で、大雑把に言って

  • STAP論文そのものの捏造疑惑についての追求(この点は結構良くまとまってる。数ページにわたって延々とオボポエム*1文体が続いたりして辟易するけど。)
  • セルシード社によるインサイダー取引疑惑についての追求
  • 再生医療について巨大な「産官学利権構造」が成立しているという話についての追求

といった記事をまとめた本なのですが、それぞれのテーマについて相互に噛み合っていない印象。

例えばインサイダー取引疑惑が事実だとしたらそれはそれで大問題ではあるんですが、でもSTAP論文の捏造疑惑とはあまり絡まない(仮に内容的に一点の曇りも無い論文だったとしても、インサイダー取引疑惑が問題で有ることには変わり無い)。
再生医療の利権構造についても同様です。この本にあるような数十億円規模の大規模利権構造が成立していたとしたら、根拠の薄いSTAP論文をネタにして世間の注目を浴びる大規模PRを打つような賭けをするよりも、あんまり目立たない程度に利権構造に浸かってた方が合理的なはず。

今回の件では、純粋な科学研究の側から見ても本書の言う「利権構造」側から見ても、(小保方氏だけではなく)理研CDB関係者の不合理な行動が目立ちますが、なぜこんな不合理な行動を取っているのか、あるいは取らざるを得ないのかについての説明なり追求なりは成されていません。
てかそれぞれのテーマについて独立して結論らしきものが出てるのですが、一つの本として通して読んだ場合、ラストは一見綺麗に締めてるけどよく考えたらそれぞれのストーリーが全然まとまって無いじゃないかっていう印象が残ります。


あと、匿名の「幹細胞研究者」による

「(略)バイオ分野は小保方論文と同じく再現できない論文が多く、米国政府は今春、不採算分野と断じてバイオ関係の研究費を廃止しました。このため米国では研究所が次々閉鎖しています。(後略)」

みたいな、「それどこ情報ー?どこ情報よー?」とドヤ顔で突っ込みたくなる証言も。
こういう「匿名関係者」とか「消息筋」の使い方って信頼性を思いっきり下げるからやめた方が良いと思うんだけどなー。

とはいえ、理系クラスタなり研究者コミュニティの人は目を通しとくべきじゃないかと思う

いや、理系クラスタなり研究者コミュニティの人はこの本読んで「はいはいワロスワロス」的な感想持つと想うんですよ。特に産官学利権構造とかの辺り。
本書によると再生医療研究ってのは、官僚が旗を振り、研究機関のトップ研究者がほしいままに研究資金を分配し、その資金に山師的なバイオベンチャーが群がってWin-Win-Winな関係を築いてるという山吹色のお菓子が乱れ飛ぶステキ業界らしいですよ奥さん。さあ!そこのうだつの上がらない生物系ポスドクもバイオベンチャーで一旗揚げようず!(死亡フラグ)。

いやまあ、確かに再生医療研究ってそこそこ大きな予算が付いて、かつ山師多めな印象はあり、またこれまでも度々問題視されてきていましたが(この辺は別に日本だけに限らず、今回の件で言うとバカンティとか)、理系クラスタなり研究者コミュニティの視点だとこういうどぎついイメージって出て来ないと思うんですよね。

ただ、このようなどぎついイメージがウケる界隈ってのはあり、いったんそういうイメージが社会的に定着してしまうと、科学研究が一昔前のゼネコン業界のように社会的・政治的なスケープゴートとしてフルボッコになる可能性も無い訳ではない。そう考えると「はいはいワロスワロス」で済ませるのは危険だと思うし、この本に目を通しておくべきだと思う。お勧めしないけど。



2014/12/21追記
本書が「陰謀論」の本かというとちょっと違ってて、陰謀論というか科学や技術を専門で追っかけてる訳ではないライターが「再生医療業界の闇を暴く」というフレームでSTAP騒動を追ってみたという感じ。科学ライター系の人が書く記事とは根本でフレームがずれてる。例えば臨床系研究者を持ち上げて基礎系・工学系研究者をDisったりするような、「素晴らしい人・叩くべき人」って感じの表現で読者を煽る技巧が散りばめられていたりとか。
例としてp140-141

今回、STAP事件に連座する人々、岡野、大和、若山はたとえ大学教授であっても「医学博士」ではない。理工系、もしくは工学系だ。笹井と丹波、小島は医学博士であっても山中や高橋とは異なり臨床医出身ではない「生物学の一研究者」なのである。本来、彼らは地味な研究職に従事する人々だ。誰一人、巨額な予算を引っ張ってきたり、ベンチャー企業の役員に収まったりするような柄ではない

すげー。科学ライター系の人には絶対書けない文章だよねこれ。凄いけどしびれないし憧れないけど。
でもやっぱ、「科学クラスタ」の外では(ストレートに表現する人は少ないと思うけど)こういう視点持ってる人は多いと思う。

あと、笹井氏の評価を巡る内容についても書かれているけど、故人の評価について現時点で触れるのは抵抗があるので上のポストでは触れてません。


*1:2ch生物板で流れていた怪情報。STAP論文が本格的に炎上する前から投稿されている点や踏み込んだ内容から関係者によるものでは無いかとの噂も・・・ まとめは http://www.poverty.jeez.jp/ura/img/kenmou01241.txt で読める

施川 ユウキ「バーナード嬢曰く。 」感想

Kindle版が出てたのに気づいて購入。
どういう漫画かというと、だいたいこんな感じ(公式Tweetから)


本読むのが苦手だけど読書家ぶるために努力を重ねる町田さわ子(自称、バーナード嬢)、めんどくさいSF小説ファン(「めんどくさいSF小説」のファンじゃなくてめんどくさい「SF小説ファン」)神林しおり、そしてブームが過ぎたベストセラー本を読むのが趣味の遠藤、といった素直じゃない面子が図書室を舞台にうだうだと過ごす日常系?コミック。
本好きあるあるネタの宝庫というか、特に神林さん(上のTweetで秘孔突かれてる人)が他人とは思えないというかお前は俺かと言いたくなるぐらい「めんどくさいSF小説ファン」でお勧め。


あ、でもちょっと思ったのが、ハインライン夏への扉」をストレートに薦めてるところは「めんどくさいSF小説ファン」として世代の差(あるいは環境の差)を感じた。

夏への扉 (ハヤカワ文庫 SF (345))

夏への扉 (ハヤカワ文庫 SF (345))

自分が自覚的にSF者になったのは中学時代で90年代前半だったけど、ちょうどこの頃は夏への扉が絶版状態で、かといって高校の図書室には入ってないし古書を漁るにしても今みたいにネット通販で買えるワケもなく、県庁所在地の古書店に行ってもSFなんてそうそう置いてるワケもなく。

なのにSFMのオールタイムベストやハヤカワの「SFハンドブック」で一位だわで、いやそりゃ図書館充実してる地方都市とかに住んでいれば読めるし、首都圏に住んでれば神保町で簡単に入手できるだろうけど、九州の片田舎で中学生の行動半径を考えると入手は絶望的なんだよな。

SFハンドブック (ハヤカワ文庫SF)

SFハンドブック (ハヤカワ文庫SF)

そうそう「SFハンドブック」と言えば、取り上げられてた本の半分以上は当時絶版だった記憶があって、ハンドブックで推薦するんならその前に復刊しやがれぐぬぬぬぬぬぬぬぬぬちゃんと商売しろハヤカワ!・・・ゼェハァ・・・・・・お見苦しい所をお見せしました、今しばらくお待ちください。


とまあ、そういうコンプレックスがあって未だに「夏への扉」読んでないんだけど、SF読みたいって人へ素直に「夏への扉」を薦めれるような大人に成りたかった。

まあ何が言いたいかというと、俺ってほんと「めんどくさいSF小説ファン」だなあと再認識させてくれた本。めんどくさい人へお勧め。

今更だけどKerbal Space Programやらないか?

今、Steamでセール中なので今更だけどKerbal Space Programについて紹介。

Save 25% on Kerbal Space Program on Steam

Kerbal Space Programとはどんなゲームなのか?


一言で言うと、架空のKerbol星系を舞台とした宇宙探査ゲームです。好きなように部品を組んでロケットを組み立て、惑星探査機を打ち上げるだけのゲーム。戦闘とかそういうのは無い。
取り敢えず、ニコニコ大百科の記事読んだほうが早い。

Kerbal Space Programとは (カーバルスペースプログラムとは) [単語記事] - ニコニコ大百科

プレイの雰囲気についてはこの動画を参照。
D

特徴としては、物理演算により(大分端折ってる感じはするものの)かなり「それっぽい」動きをすることです。具体的に言うと、打ち上げ時はある程度高度を取った後は東向けにする必要があったり(参照: 人工衛星を載せたロケットは、なぜ東向きに打ち上げるのですか? | ファン!ファン!JAXA! )、スイングバイやホーマン軌道( Interactive Illustrated Interplanetary Guide and Calculator for KSP )を考慮したりといった工夫がそのままゲームプレイ上の面白さにつながってくるという点です。まあ、正直な所そこまで厳密ではない部分もありますが、リアリティとゲームプレイ上の面白さとのバランスが絶妙です。
とは言え、欠点は結構あります。軌道計算UIは上手くできているものの、理解するにはそれなりの背景知識が必須です。また、UIは不親切ですし、手取り足取りチュートリアルもありません。例えば

操作説明 - Kerbal Space Program Wiki*

のキー操作を覚えておかないとまともにロケットを飛ばす事は難しいですが、操作の解説などは未だにゲーム中には存在していません。


とまあ、色々と欠点は山積みな、「自由にロケットを組み立てて架空の太陽系で宇宙探査出来る」ってだけのゲームですが、「自由にロケットを組み立てて架空の太陽系で宇宙探査出来る」事にワクワク出来るようであれば間違い無く面白いゲームです。

スクリーンキャプチャ

サイエンスモード(宇宙探査に成功することで使用できる部品が増えていくキャンペーン)中のスクリーンキャプチャですが、最祖はこの辺の小さめのロケットで大気圏脱出が精一杯。

f:id:ka-ka_xyz:20141130181046p:plain


探査計画を積み重ねることでパーツが増えていき、有人火星探査(正確に言うと、Kerbol星系の火星に相当する惑星への探査)も可能な超大型ロケットを建造。適切なタイミングで点火しないと、発射台の上で大炎上する危険性が在ることは秘密。

f:id:ka-ka_xyz:20141130181222p:plain


まあ、軌道に到達するのは先っぽの方の惑星間巡航モジュールだけなんですけどね。

f:id:ka-ka_xyz:20141130181427p:plain


祝!火星初上陸
f:id:ka-ka_xyz:20141130181532p:plain


金星(に相当する惑星)上の無人探査機。地球並みの重力と分厚い大気のため、着陸後に再度離陸して軌道に戻る事は非常に困難です
f:id:ka-ka_xyz:20141130181717p:plain


金星周回軌道上を回る別の無人探査機。日光を浴びて濃密な大気の層が輝いている事が確認できます(つまりは、一低高度を切ると大気との衝突抵抗によりブレーキがかかる事を示しています)。

f:id:ka-ka_xyz:20141130182828p:plain


同じ探査機をオービタルマップ(航法のために軌道を確認するための画面)上で見た画面。
画面中央の変なアイコンをグリグリすることで、進行方向への加減速・進行方向上方/下方への加減速・進行方向左右への加減速を設定した場合の軌道を確認できます。ただし、設定したとおりに手作業でエンジンを吹かしてやる必要があります(オートパイロット機能ではなく、あくまで加速・減速のタイミング、方向、強さ、長さをマーキングするためのツール

f:id:ka-ka_xyz:20141130182924p:plain

atom editorのパッケージを書いた

30時間完徹マラソンでコード書いたった。

ka-ka-xyz/atom-charcode · GitHub

atomの設定画面で"Packages"を選び、"Atom Charcode"で検索したら候補に上がるはず。

f:id:ka-ka_xyz:20141116002640p:plain



現状のatomエディタにはカーソルの右にある文字の文字コードを表示する機能がありません(少なくとも設定画面にもドキュメントにも無い)。
これはさすがに不便っていうかホワイトスペース(U+0020)とノーブレークスペース(U+00A0)を見分けたりとか、中黒(U+30FB)とビュレット(U+2022)を見分けたりとかは流石に無理ゲーっぽいので、パッケージ(機能拡張)で何とかしました。

f:id:ka-ka_xyz:20141115223919p:plain

こんな感じでステータスバーに現在使用中のエンコード方式での文字コードと、Unicodeコードポイントが表示されます。
一応、Unicodeサロゲートペア文字列(例えば「𠀋」、UnicodeコードポイントU+2000B、UTF-8使用時の文字コードは0xF0A0808B)にも対応済み。

ただ一点どうにも成らない問題が合って、改行コードを取得できないこと。Atomエディタの中の人はChromeで、入力されたテキストはhtmlとして扱われるのですが、改行コードの情報はhtml側には入っておらず、取ってくる事が出来ませんでした(方法は在るかもしれませんが)。

あと、atomエディタpackageの開発について、最初の取っかかりとなる情報は日本語でも結構整っていますが、それ以上の事をやろうとすると途端に難易度が跳ね上がります。一応APIドキュメントは用意されていますが、最初の取っかかりとAPIドキュメントとの間を繋ぐハウツー的な情報がかなり不足しており、何かやろうとするたびに他のパッケージのソースを確認するはめに。
あとCoffeeScriptじゃなくてjavaScriptだけで開発出来るようにして欲しい所。

まあ、取り敢えず自主マラソン開発は終了ってことで、戦場のヴァルキュリア(PC版)を本格的にやり込むぞと。

久住昌之・加藤総夫「脳天観光」を改めて読みなおす

脳天観光 (扶桑社文庫)

脳天観光 (扶桑社文庫)

夢って何なのか?記憶ってどうやって残されているのか?感動って?ココロって科学的に言うとどういうものなの?人間に関する謎は、元をたどっていけば、みんな脳に関することだ。だけど、今まで何を読んでも脳が理解できなかったり、『賢くなれる脳科学の本』の類を読んでもあまり効果がなかったと感じたりで、脳って難しくてわかんない、とあきらめてるアナタ!科学者は一体何が楽しくて研究なんて訳分からないことをしているの?と思っているキミ。そんなみんなにオススメの、観光気分で脳がわかる1冊。

孤独のグルメ」原作者として今をときめく久住昌之氏と、現役バリバリ研究者な加藤総夫氏(現在は慈恵会医科大学教授)がタッグを組んで書いた脳研究入門書。
元々は1990年「月刊SPA!」連載だったんですが、1992年に単行本化、1996年に大幅な改訂・加筆訂正の上で文庫化されています。

と、まずべた褒めの前に予め難点を揚げておくと、最大の難点はやっぱり古いこと。日進月歩な勢いで研究が進んでいる分野な訳で、やっぱ18年前の内容で新しいトピックが含まれてないというのは辛いところです。


ただ、古いという欠点はあるものの、高校生~大学教養課程ぐらい、あるいはあんまり科学とか普段は縁のない社会人向けの入門書としては今でも最強クラスなんじゃないかなーと思います。

なんつーか、研究者と文化人との対談本って色々ありますが、パターンとして「功績を積み上げてきたエライ教授」と「功績を積み上げてきたエライ文化人」的な感じがあります。一冊例を挙げると

とか。まあエライ人とエライ人が対談してっていうのはそれはそれで面白い物ですが、やっぱり退屈というか正座して傾聴的なフォーマルさがあってどうにも「入門書」として食いつきが良いかどうかっていうと微妙な部分があります。

で、本書なんですが、加藤総夫氏はここの略歴を見る限り、1990年の雑誌連載当時は助手。その後はフランスで研究生活を送った後、文庫版出版時には慈恵会医科大学講師です。つまり、バリバリ研究して成果を出し、キャリアを積み上げていく真っ最中な若手研究者なんですな。「地位を固めた後のエライ人」ではなく「油の乗った現役バリバリな研究者」が、久住昌之氏の絶妙にボケの入った質問にノリノリで答えていくわけで、面白くない訳が無い。

また、扱っている内容も、神経細胞の基本構造とか、神経細胞内での情報伝達の仕組みとか、神経回路網が形成される基本的仕組みとか、あるいは脳内での情報処理(立体視や「漫画を読むときにバックグラウンドで処理されてる情報」みたいな)とかそういった、当時としても最新の知見では無いけれど、でも脳研究とは縁のない普通の人にとっても興味深いトピックがてんこ盛りです。

いやほんと、どれだけ面白いかって言うと、文庫版出版等時に高校生だった自分の生涯所得を数百万円単位で削っていった(工学部へ入ったもののやっぱりバイオ系へ転科したけど、研究者に成れず退学して一般企業に入ったって事だ書かせんな恥ずかしいってアレコレの一因になった)ぐらい破壊力がある。

ということで、この本はもっと評価されても良いと思います。
久住昌之人気に火が着いてる今、再度加筆訂正+最新トピックの補足を入れて再刊したら売れると思うんだけどなあ。

この辺は他にも、「アシモフの科学エッセイ」シリーズとか

斉田博「おはなし天文学」シリーズとか

おはなし天文学〈1〉

おはなし天文学〈1〉


内容的にはかなり古いものの、トピックごとに現在の専門家から見た補足説明や解説を入れれば、今でも十分以上に面白い入門書は色々あるんですが、科学入門書の「アップデート版」って出版社的には難しいんですかねえ。

SwaggerでREST APIドキュメントを生成する


2016/06/24 追記
www.itmedia.co.jp

今のところまだこの脆弱性の対策版がリリースされていないので注意。


だいぶ昔にJersey(JAX-RS参照実装)についての記事を書いてからずっと気になっていたんですが、せっかくアノテーションを使ってURLとメソッドとの間にヒモ付が出来たのに、このアノテーション情報からJavadoc的なAPIドキュメントを生成する方法は無いものかと思っていました。
追記: いやjerseyでwadlを生成できるけどレスポンスのJSONXMLの構造については何も情報が出ないので・・・)

JAX-RSでは今のところAPIドキュメント生成についてはカバーして無いようですが、最近仕事でREST APIドキュメントを生成出来ないかという話が出てきたので調べてみるとSwaggerというREST APIドキュメント生成フレームワーク?が有るようなので触ってみました。

Swaggerを使ったREST APIドキュメントはこんな感じです

Swagger-UI デモサイト


URLとHttpメソッドの組み合わせで、どのようなパラメータを受け付けるのか、戻ってくるJSONの構造、エラー時のhttpステータスコードといった情報を一覧取得することが可能です。

例: http://petstore.swagger.wordnik.com/#!/pet/getPetById



ちょうどJersey(Jax-RS) + AngularJSの組み合わせでサンプルを作っていたので、こいつをSwaggerによるREST APIドキュメント生成に対応させてみます。
というか、あっけなくREST APIドキュメントが生成されてちょっと感動したので、手順を書いてみます。

JerseyベースのRESTサービスでREST APIドキュメントを生成するためのステップ

以下の環境を前提としています。

  • Java8
  • Tomcat8
  • maven2以降
  • Jerseyを使用したREST APIが既に作成済み

 (ソースについては後日githubへpush予定)

1. pom.xmlの編集(maven使用時)

dependenciesエレメントに下記のdependencyを追加してください。

        <dependency>
            <groupId>com.wordnik</groupId>
            <artifactId>swagger-jersey-jaxrs_2.10</artifactId>
            <version>1.3.0</version>
        </dependency>

2. web.xmlの編集

まずはjerseyのservletについて。
元々のservlet定義は

    <servlet>
        <servlet-name>Example Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>jp.gr.java_conf.ka_ka_xyz.example.service</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Example Web Application</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>


ですが、以下のように"com.sun.jersey.config.property.packages"にswaggerのパッケージ名を追加してください。

    <servlet>
        <servlet-name>Example Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>jp.gr.java_conf.ka_ka_xyz.example.service;com.wordnik.swagger.jersey.listing</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Example Web Application</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>


また、以下のservlet定義を追加してください。

    <servlet>
      <servlet-name>JerseyJaxrsConfig</servlet-name>
      <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
      <init-param>
        <param-name>api.version</param-name>
        <param-value>1.0.0</param-value>
      </init-param>
      <init-param>
        <param-name>swagger.api.basepath</param-name>
        <param-value>http://localhost:8080/AngularjsWithSwagger/service</param-value>
      </init-param>
      <load-on-startup>2</load-on-startup>
    </servlet>


初期パラメータ"api.version"はREST APIバージョン、 "swagger.api.basepath"はREST APIのURLを指定します。

3. リソースクラスの編集

もともと、クラス自体に@Pathアノテーションが付いていましたが

@Path("/employee")
public class EmployeeService {
    //

このようにjavax.ws.rs.Pathとcom.wordnik.swagger.annotations.Apiアノテーションを追加してください。

@Path("/employee")
@Produces(MediaType.APPLICATION_JSON)
@Api(value = "/employee", description = "社員に関するサービス")
public class EmployeeService {
    //略

また、もともとこんな感じでメソッドとURL・戻り値のMediaTypeを対応付けていましたが、

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/all")
    public List<Employee> getEmployees(){
    //略

以下のようにcom.wordnik.swagger.annotations.ApiOperation, com.wordnik.swagger.annotations.ApiResponses, com.wordnik.swagger.annotations.ApiResponseアノテーションを使ってREST APIドキュメント用の説明を書いてください。

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/all")
    @ApiOperation(value = "全ての社員情報を取得", notes = "条件指定せず、すべての社員情報を取得する", response = Employee.class)
    @ApiResponses(value = {
      @ApiResponse(code = 500, message = "サーバー内部エラー") 
    })
    public List<Employee> getEmployees(){

4. モデルクラスの編集

もともとこんな感じでJax-RBアノテーションを使用してJSONとの対応付けていましたが

@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee implements Serializable{
    
    /**内部的に使用されるUUID*/
    @XmlAttribute
    private String id;
    /**一意な社員コード*/
    @XmlAttribute
    private String employeeCode;

以下のように、com.wordnik.swagger.annotations.ApiModel、 com.wordnik.swagger.annotations.ApiModelPropertyアノテーションを使ってREST APIドキュメント用の説明を書いてください。

@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
@ApiModel(value = "社員情報")
public class Employee implements Serializable{
    private static final long serialVersionUID = -7816174850279421158L;
    
    /**内部的に使用されるUUID*/
    @XmlAttribute
    @ApiModelProperty(value = "内部的に使用されるUUID", required=true)
    private String id;
    /**一意な社員コード*/
    @XmlAttribute
    @ApiModelProperty(value = "社員コード", required=true)
    private String employeeCode;

5. api-doc JSON生成を確認

さて、mavenでビルドしてwarファイル(AngularjsWithSwagger.war)をデプロイします。

http://localhost:8080/AngularjsWithSwagger/service/api-docs

へアクセスすると、

{"apiVersion":"1.0.0","swaggerVersion":"1.2","apis":[{"path":"/employee","description":"社員に関するサービス"}]}

のようなJSONを取得できるはずです。これはweb.xmlおよびリソースクラスのアノテーションで記述したREST API全体についての情報がJSON形式で出力されているものです。

また、

http://localhost:8080/AngularjsWithSwagger/service/api-docs/employee

へアクセスすると("employee"はリソースクラスのcom.wordnik.swagger.annotations.Apiアノテーションで指定されたパス)、swaggerが生成したREST APIに関する説明を示すJSON文字列が出力されるはずです。

6. swagger-uiでドキュメントを見る

さて、取得したJSONをユーザーフレンドリーな形で表示するには、swagger-uiを使用する必要があります。

とりあえず

GitHub - swagger-api/swagger-ui: Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.

からzipをダウンロードし、binフォルダの内容を適当な名前(swagger-ui)に変更し、webappsフォルダへ配置します。

その後

http://localhost:8080/swagger-ui/?url=http://localhost:8080/AngularjsWithSwagger/service/api-docs

へアクセスすると、

f:id:ka-ka_xyz:20141030003117p:plain

と、REST APIドキュメントが表示されます。各メソッドをクリックすると

f:id:ka-ka_xyz:20141030003145p:plain

のように、JSON構造やパラメータ、レスポンスコード情報等が表示されます。



追伸(業務連絡)東宝怪獣的なサーバー名に心当たりのある人は「これ書いたのはアイツか」とか思わずに素知らぬ顔でスルーしてください。

「金持ちは税率70%でもいいVSみんな10%課税がいい」感想

金持ちは税率70%でもいいVSみんな10%課税がいい: 1時間でわかる格差社会の増税論

金持ちは税率70%でもいいVSみんな10%課税がいい: 1時間でわかる格差社会の増税論

金持ちからもっと税金をとるべきか。

この、現代社会のきわめて重要なテーマについて、
4人の知性が激論を交わします。

クルーグマンとパパンドレウは、金持ち増税に賛成。

・スーパーリッチの税負担をちょっと増やしても経済に悪影響はない。
・平等な社会のほうがいろいろな面で望ましい、

というのがその根拠です。

一方のギングリッチとラッファーは、金持ち増税に反対。

・がんばって成功した人からむしりとってそうでない人に渡すような社会でいいのか。
増税しても、金持ちは賢い弁護士をやとって抜け道を探し出す。
増税の前に、政府を改革して効率化するべきだ、

というのがその根拠です。

税の問題は、つきつめれば、誰からとって誰に与えるか、という問題になります。
その問題を考えるときの主要な論点を網羅した本です。

この手のディベート本は初めて読むけど、「朝まで生テレビ」的なgdgdに陥らずに議論できてるってだけでもう羨望モンですよ。
で、争点な累進課税について。日本でも所得税最高税率は80年代中盤まで70%以上( 所得税 - Wikipedia )だったんですが、この辺は米国も同様に昔は結構最高税率が高かったという話が出てて意外。まあ、そういう制度が妥当かどうかという点はともかくとして、それでも社会は回る(むしろ日本でも米国でも結構景気がいい時代には最高税率が高い)という所は面白い。


あと、この本の笑いどころ。元米下院議長のニュート・ギングリッチ氏が「累進課税なんか止めて公平に課税しようぜ派」として熱弁をふるっているのですが。

[ギングリッチ] (前略。「金持ちからもっと税金を取るべきか?」という質問に対して)ビル・ゲイツの財産を没収すべきなのか?結局のところ、何十億も持っている必要は無い訳で。
 
[グリーン(インタビュアー)] そんな簡単な話ですか?
 
[ギングリッチ] 政府がやるのはそういうことですよ。政府は奪うんです。政府は権力であって、慈善団体では有りません。「僕等に手を貸してくれたらうれしいんだけど」なんて政府は言わないわけです。(後略)

すげーよ。元下院議長で大統領選候補にもなったガチな政治家が、

「政府は奪うんです。」

発言ですよ。もしホントにそう思ってるんなら政治家になって泥棒の片棒を担ぐなんてことやらずに「アメリカリバタリアン革命軍」でも作ってゲリラ活動するべきでは?
(まあ、「行政府と立法府は違う。行政府の専横を抑えるのが立法府なのだ」って理屈かもしれないけど、「奪った」お金の分配方法について議論する場の元責任者がそういうこと言ってもな~)