2016年12月31日土曜日

2017年を論じた本まとめ

2016年末ということで、2017年を論じてる本を何冊か読んでみた。

はじめの3つは経済・政治に着眼点をおいて書いた本で、最後のは技術トレンドだけに絞った本。

ちょっと毛色が違う最後の本だけ除いて、はじめの3つだけ横断的にコメントしてみると、IT技術としてはAI、IOT、VR・AR・MRが来て、世界情勢的には選挙を控えたヨーロッパでポピュリズムの波が来るぞ、という聞き飽きた話をカバーしながらそれぞれちょっとずつ独自色を出している様子。



2017年 日本はこうなる


話題は多岐に渡っているが一つ一つの掘り下げが甘い。
表面的な説明と根拠のない展望が記載されているだけという印象が拭えない。
例えば、ロボット開発の項目では、政府が「ロボット新戦略」を打ち出していること、それを受けて自治体が動き出していること、そして公と民が連携する必要があることしか記述されていなく、肩透かしを食らった印象がある。

VRの項目では、最後に「本稿では紹介しきれないほど、VRは進化を遂げている」と述べられているので、そもそもあまり深く伝えようとする意図が本書にはないのかもしれない。

日頃から新聞やネットニュースに目を通している方であれば、あえて本書を読んで得るものはないだろう。

おすすめ度★☆


経済がわかる 論点50 2017



三菱UFJリサーチ&コンサルティングの「2017年 日本はこうなる」はトレンドをカバーすることを意識しすぎて表面的になっていたのに対し、本書は「論点」に着眼したために、昨今の変化を見据えて本質的に考えなければいけないこと、これから情報をフォローしていかなければいけないことを得るのに最適であった。それぞれ、きちんと資料と出処が引用されていて、論理に信頼感がある。

2017年末にも、本書の翌年度版をぜひ読みたい

おすすめ度


日本の論点2017~18 

大前研一が論点と考えることについて、更に彼独自の観点から見解が述べられていて非常に読み応えがあった。
類書と類似のテーマは多いが、イタリアから日本が学べることや、台湾と中国の関係、ミャンマーの政治事情などそもそも情報源としても他ではあまり聞いたことがない話が多く、彼の情報網の厚さに唸らされる。

類書では「経済がわかる 論点50 2017」などもあるが、こちらでは執筆者一覧としてズラリ数十人の名前が記載されているが、それに匹敵する書籍を一人で書き上げられる実力は流石といったところだ。

日本の論点とあるが、後半ではドイツ・イタリア・中国・台湾・ミャンマーなど国外の論点についても論じられている。
実質「世界の論点」について語られているので、タイトルは無駄に小さくしてしまった印象。


2016年12月26日月曜日

Githubでフォーク元の修正を取り込む手順メモ

1. フォーク元を追加
git remote add upstream git://github.com/<username>/<reponame>.git
2. 修正をフォーク先に取り込む
git fetch upstream
git merge upstream/master

3. 修正をfortした自分のレポジトリに反映
git push

これ、githubのweb上でできてほしいんだけどな。
なんでremoteとかも自動で設定されてないのか(そういうもんなんだろうか)



参考文献
http://rcmdnk.github.io/blog/2014/06/09/compouter-git/

2016年7月20日水曜日

RestEasyを理解するためのサンプルコード集

RestEasyはJBossにバンドルされているJAX-RS実装。
日本語・英語問わず、あまり親切な情報がなかったのでサンプルとして纏めておく。

JBOSS系は公式ドキュメントがわかりづらい上に、Updateがきちんとされてなかったり、いつもながらとっつきにくい。Glassfish実装のJerseyの方がドキュメントが親切だし、mavenのarchetypeもある。選べるのならばJerseyの方がいいだろう。


RestEasySample1

まず単純なHelloworld。これが動けばとりあえず設定系は成功しているとみなして良いはず。
個人的にはweb.xmlに何も書かなくていいというのに嵌った。Jerseyでは確かここに定義を書かなければ行けなかったと記憶している。

RestEasySample2

GETとPOSTを使ったサンプルを少し。

RestEasySample3

JAXBと組み合わせた時のサンプルを少し。
メソッドの戻り値にJAXBのAnnotationをつけたクラスを指定すれば、勝手にxmlに変換してhttpの戻り値としてくれるのはちょっと感動した。

RestEasySample4

Basic認証を使ったサンプルを少し。
web.xmlでBasic認証を設定すると、JAX-RSがその先でEJBを呼び出したとしても、認証が通った状態になっている。JBOSS全体で認証をパスした扱いになっているのかも(未確認)



2016年6月24日金曜日

Resteasyメモ

org.jboss.resteasy.pl
ugins.providers.jaxb.JAXBUnmarshalException: Could not find JAXBContextFinder for media type: application/x-www-form-urlencoded;charset="UTF-8"

content-typeが受け付けてもらえてない様子。
jqueryでcontent-typeを下記のように設定する。

$.ajax({
  type: 'POST',
  url: 'http://localhost/post',
  data: '<hoge>aa</hoge>',
  dataType: "xml",
  contentType : "application/xml",
  success: function(value){
    alert("ok");
  },
  error:function(value){
    alert("fail");
  }

});


2016年3月29日火曜日

Resteasy memo


動くサンプルコード

https://github.com/resteasy/Resteasy/tree/master/jaxrs/examples/oreilly-workbook-as7

ネット上に転がってるサンプルコードは、バージョンが合わないせいか、動かないものが多かった。
JBossの公式サイトをみて、コードを書いてみてもなんだかイマイチよくわからなくてdeployでエラーが出てばかりだった。とりあえず上のgithubコードを使うと動くものが手に入る。

なお、とりあえずmvn installしてみるといろいろとエラーが出る。

[ERROR] Failed to execute goal org.jboss.as.plugins:jboss-as-maven-plugin:7.1.1.Final:deploy (jboss-deploy) on project workbook-ex03_1-as7: Error executing FORCE_DEPLOY: Could not execute operation '{
[ERROR] "operation" => "read-children-names",
[ERROR] "child-type" => "deployment"
[ERROR] }': java.net.ConnectException: JBAS012144: Could not connect to remote://localhost:9999. The connection timed out

JBossがビルド環境で動いてないのが原因かと推測するが、とりあえずpackageフェーズは通過しているのでwarはできている。動くwarが欲しいだけであれば無視して良い。
またはmvn installではなくmvn packageとすれば、エラーは出なくなる。(もちろん本質的には何ら解決してないが)

2016年2月18日木曜日

VMWare PlayerでIPv6通信

VMWare Playerで動かした仮想マシン上でIPv6通信を行った時のメモ。

VMWareのバージョン

7.1.0 build-2496824

仮想マシン1

Windows 7

仮想マシン2

Red Hat Enterprise Linux Server release 6.0 (Santiago)

やったこと

  • 仮想マシン1,2のping6
  • ホスト(Windows7)と仮想マシン1のping6
  • ホスト(Windows7)と仮想マシン2のping6

結果

  • 仮想マシン1 => 2 へのping6 成功
  • 仮想マシン2 => 1 へのping6 成功
  • ホスト=>仮想マシン1へのping6 成功
  • 仮想マシン1=>ホストへのping6 失敗
  • ホスト=>仮想マシン2へのping6 成功
  • 仮想マシン2=>ホストへのping6 失敗

何故かよくわからないが、仮想マシン=>ホストへのping6はUnreachableだった。
Wiresharkで見ていたところ、仮想マシンからNeighbor solicitationsが発行された後に
ホストから応答があるはずのNeighbor advertisementsが出ていなかった。
Vmware Playerのせいなのか、設定が正しくないのかは不明。

なお、IPv4でのpingの場合は、上記の全経路で通信に成功した。

重要そうな設定

ネットワークアダプタの設定をHost-onlyにした時のみ、ping6が成功した。
BridgedやNATではダメだった。

仮想マシン上のFirewallは切っておいた。ホストはOFFにする権限がなかったので切っていない。
仮想マシン => ホストのping6が通らないのはこれが原因かもしれない。ただし仮想マシン間のping6は双方向で通るので、イマイチよくわからない。



2016年2月3日水曜日

Chainerを使ったMNIST Handwitten Digit Classifier

Chainerを使って手書き数字の認識器を作ってみた。

MNIST Handwritten digit classifier


Herokuで動かしているが、学習自体は別の環境で行った。
ChanierはモデルのSerialize機能があるので、それをHerokuにデプロイして利用している。

マシンリソースがあまりないので、エポック数とか削ってしまったが、まあまあきちんと認識してくれてるような気がする。

ソースコードはGithubを参照

html部分はこちらのソースコードを流用させていただきました。

HerokuでChainerを動かそうとして成功したときのメモ

ChainerをHerokuで動かして成功したのでそのメモ。


Google App Engineでは、GAEにプリインストールされているnumpyのバージョンや.soファイルを利用したpythonライブラリのデプロイ制限などのために上手く動かなかったが、Herokuでは無事に動いた。

1. Chainerのバージョンは1.5.1以降で

Herokuでは基本的にpipでインストールできるものは、何でも利用できるようでGoogle App Engineよりも自由度が高い。

ただし、Herokuの環境ではlibhdf5-devなどのh5pyのインストールに必要な開発モジュールが入ってないようで、h5pyだけはインストールできなかった。

幸運なことにChainer 1.5.1からはh5pyがオプショナルになっていたようで、これは大きな問題にならなかった。

githubを見ても特に変更の理由はわからないが、もしこのような事態を想定して変更してたのならば、開発者たちの慧眼は賞賛ものである。


2. その他の環境

下記のバージョンを利用。

Flask==0.10.1

numpy==1.9.2

six ==1.9.0

chainer==1.6.0


またデフォルトでは2系のpythonを3系に変更するためにruntime.txtに下記のように書く。なお、Chainerは2.7にも対応しているので、2系のままでもたぶん動くが未検証。

python-3.4.0

3. ソースコード



2016年1月24日日曜日

Google App EngineでChainerを動かそうとして諦めた時のメモ

表題どおり、Google App EngineでChainerを動かしてみようと思ったが、上手くいかなかった。
そのときのメモを書いておく。


1. numpyのバージョン

GAEはデフォルトでnumpyが用意されているが、これのバージョンは1.6.1
しかしChainerでは1.9,1.10が前提のようなので、これは使えない。

実際に、1.6.1のまま動かそうとすると、numpyのfull関数がないとかでエラーが出た。
githubのソースを見る限り、1.6.1では確かにfullはない様子。

そのため、自前のライブラリとしてnumpyの1.10を用意し、GAEにデプロイする。

2. 自前ライブラリのデプロイ


デプロイ対象のアプリケーションのルート直下にlibという名称のファイルを用意する。
そのlib以下にnumpyをインストールする。

$ pip install -t lib numpy

chainerとchinerが必要とするh5pyもついでにインストールする

$ pip install -t lib h5py


$ pip install -t lib chainer



そして、同じくルート直下にappengine_config.pyという名称のファイルを作成し、下記の内容を記載する。

from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')

3. SDKで実行
SDKで実行したところ、下記のエラーが出た。


  File "<app path>\lib\numpy\core\__init__.py", line 14, in <module>
    from . import multiarray
ImportError: cannot import name multiarray

multiarrayというモジュールがないとのこと。
ディレクトリを見てみるとmultiarrayはsoファイルでできたモジュールだった。

Google App EngineのドキュメントにははっきりとC extensionがだめと書いてあるので、おそらくこいつは動かないのだろう。

You can add any third-party library to your application, as long as it is implemented in "pure Python" (no C extensions) and otherwise functions in the App Engine runtime environment. The easiest way to manage this is with a ./lib directory.

ということでここで諦めた。
pythonのバージョンも2.7だし、やっぱグーグルさん的にはもうGoogle App Engineに力入れる気ないのかなあ。

2016年1月4日月曜日

英辞郎の単語帳をKindleみたいなフラッシュカードにするChrome拡張公開

スペースアルクの英辞郎の単語帳をKindleのフラッシュカードのように使ってみたくなり、Chrome拡張を作ってみました。



InstallはChrome Web Storeのこちらから。
アイコンを押すと、単語帳からデータの取得し、ランダムな順序で単語を表示します。
はじめは単語しか表示されてませんが、クリックすると辞書を引いたときの定義が表示されます。



Undermineをクリックすると..


辞書の中身が表示されます。

右上のnextを押すと次の単語へ、previousを押すと一個前の単語へ。
単語を覚えたら「単語帳から削除する」をクリックして削除できます。


前提条件
  • 英辞郎on The web Pro(有料)のアカウントを持っている必要があります。
  • また拡張を起動する前にあらかじめログインをしておいてください。