タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2014/02/03/JAX-RS 2.0, Jersey のメモ | msakamoto-sf | 2014-02-03 00:23:26 |
技術/Linux/CentOS/512MB以下のメモリ搭載マシンにインストールメモ | msakamoto-sf | 2014-01-19 14:19:58 |
Java/SSH実装 | msakamoto-sf | 2014-01-19 14:16:11 |
Python/MultiVersionCoexisting(複数バージョン共存) | msakamoto-sf | 2014-01-19 12:24:32 |
Python/インタープリタがコンパイルされた時のコンパイルオプションを確認する | msakamoto-sf | 2014-01-19 00:32:47 |
Python/setuptools, easy_install, eggパッケージ, pipメモ | msakamoto-sf | 2014-01-19 00:16:39 |
技術/Windows/バックアップのお供, robocopy | msakamoto-sf | 2014-01-13 12:56:09 |
技術/VirtualBox/ネットワークアダプタの設定メモ | msakamoto-sf | 2014-01-13 12:50:15 |
技術/RCS/Git/GitHubClone/GitBucket | msakamoto-sf | 2014-01-12 23:08:59 |
Java/FindBugs | msakamoto-sf | 2014-01-12 12:55:39 |
割りと使える感じ。あとはIDEでのHotDeploy連携が動作すれば大体実用に問題ない。
JAX-RS 2.0 仕様
Wiki:
http://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services
実装:
JAX-RSの入門
HTTPリクエストヘッダの取得
セッションやCookie使いたい:
HTTPレスポンスヘッダの操作
脱線。Ninja Web Frameworkというのを見つけて、Servlet 3.1, JAX-RS 2.0 とちょっと比べてみたよ!という記事。
NettyとJAX-RSのBindingってあるんだっけ?
JAX-RS 2.0 ではasyncも登場してるだけあり、Servlet 3.0をメインに対応を進めている。TomcatでServlet 3.0に対応しているのはTomcat7になる。が、そもそもTomcat7で何が変わるの?
512MBしかメモリ載せてないVMにCentOS 6.3をインストールしたら、テキストモードのインストーラが強制され、インストールタイプもMinimalが強制された。
関連?:
JVM言語で使えるSSH実装ライブラリのメモ
メジャー:
一つのマシンで複数バージョンのPythonを共存させるメモ。
複数バージョンといっても、Pythonのインタープリタを共存させるのか、site-packages以下のライブラリ空間を共存させるのか、あるいはその両方か、でアプローチが変わる。
site-packages以下のライブラリ空間を共存させたい場合:
Pythonインタープリタを複数バージョン共存させたい場合:
なお、virtualenv(wrapper)は手動コンパイルやpyenvと組み合わせることも出来る。そのため、Pythonインタープリタ+ライブラリ空間をペアにして、丸ごと分離したsandbox環境を構築することも可能。
Pythonインタープリタがコンパイルされた時の、コンパイルオプションを確認するメモ。
Python 2.6:
import distutils.sysconfig print distutils.sysconfig.get_config_vars()
Python 2.7以降:
import sysconfig print sysconfig.get_config_vars()
参考:
"get_config_vars()"の戻り値はdictionaryなので、そのままget()で取り出したりkeysでfor文に回せます。
また、"get_config_vars(key名)"で直接オプション名を指定して値を取り出せます。
インタプリタがコンパイルされた時のコンパイルオプションに関連しそうなkey名:
CONFIG_ARGS : "./configure" スクリプトのオプション CFLAGS, OPT : コンパイラのオプションぽい。 PY_CFLAGS : 謎。
例1: CentOS 6.3ベースの python-2.6.6-51.el6.x86_64:
$ python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import distutils.sysconfig >>> distutils.sysconfig.get_config_vars('CONFIG_ARGS') ["'--build=x86_64-redhat-linux-gnu' ...
例2: CentOS 6.3に自前でインストールしたPython 2.7
$ workon py27t1 (py27t1)[...]$ python Python 2.7.6 (default, Jan 18 2014, 20:36:47) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sysconfig >>> sysconfig.get_config_vars('CONFIG_ARGS') ["'--prefix=/work/pythonbuilds/2.7.6' '--enable-ipv6' '--enable-unicode=ucs4' '--enable-shared'"]
基本的に本家一次サイト群およびGoogle検索を駆使して閲覧できる先人達のドキュメントを元に、easy_install, pipを中心とした使い方やノウハウを調べられる。
JavaのJarファイルに相当するPythonにおけるパッケージフォーマット。拡張子は ".egg" 。
setuptoolsの導入により、.eggファイル中のPythonモジュールや設定ファイルを展開せずにそのまま読み込むことが可能になる。(拡張Cモジュールの場合は別)
冒頭には自己拡張方式のシェルスクリプトが埋め込まれている為、UNIX系のシェルが動作する環境であれば
sh abc-0.0.1.egg
のように直接実行してインストールすることも可能。
参考:
distutilsを発展させたPythonパッケージで、Eggファイルの生成とロード機能を提供する。easy_installもこの中に含まれる。
RubyGemsを知っている人であれば分かりやすいかも知れない。
一時期開発が停滞し、"distribute"というパッケージに引き継がれた。
ところが2014年1月時点では、distributeがsetuptoolsにマージされ、結果としてdistributeが非推奨扱いになってしまっている。
Python - setuptools - pip はバージョン依存の問題で、新しいのと古いのの組み合わせだとトラブルにつながりやすいので、十分注意が必要。
"easy_install"はsetuptoolsを導入するとインストールされるライブラリセットアップ用コマンド。
つまり、easy_installコマンドを使う=setuptoolsを導入することと同義である。
インストール方法についてはsetuptoolsの公式ドキュメントを参照するのが確実だろう。OSとPythonのバージョン、Pythonのインストール場所、site-packageの場所など、Pythonのインストール状態を丁寧に確認しておくと、トラブルになっても自信をもって調査・対処出来るだろう。
インストール例:
$ curl -O http://python-distribute.org/distribute_setup.py $ python distribute_setup.py
(2014-01時点でやや時代遅れとなった参考記事:)
setuptoolsによるEggファイルおよび、Pythonライブラリのソースツリーのビルド・インストールや管理を行うコマンド。
tarボールやURL、さらにはSVNリポジトリなどから直接ソースツリーを取得してEgg化し、インストールすることも可能。
ネット上にも先人達の苦労の跡が沢山見つかる為、使うのに困ることは少ないだろう。
Pythonパッケージのインストール・管理に特化したパッケージ。
easy_installよりも、pipの方がパッケージ管理としてはモダンで洗練された機能を提供している・・・と、思います。(超大雑把な肌感覚レベル。)
インストールはeasy_installからインストールするのが簡単なようです。
$ easy_install pip
setuptoolsを入れ終わったら、最初にeasy_installでインストールするパッケージ、のようです。
rpmなりdpkgなり、yumやaptなりを使ったことがあれば、あるいはgemやPEARやcpanなど扱ったことがあれば、すぐ使えると思います。
上述の通り、setuptoolsの開発が一時期停滞していた時期があり、"distribute"というパッケージが後継として開発された。
参考:distributeがsetuptoolsの後継として頑張っていた時代。
ところが、2014-01時点でdistributeの公式ページを確認してみると・・・
ということで、2014-01現在は素直に最新版のsetuptoolsを導入すれば、distributeは不要です。
もしインストールしてしまっていたら、以下の手順で綺麗にアンインストール出来ます。
例: # rm /usr/bin/pip # rm /usr/bin/pip2.6 # rm /usr/bin/pip2 # rm /usr/bin/easy_install # rm /usr/bin/easy_install-2.6 # rm -rf /usr/lib/python2.6/site-packages/pip-1.5-py2.6.egg # rm -rf /usr/lib/python2.6/site-packages/setup* # rm -rf /usr/lib/python2.6/site-packages/distribute-0.6.49-py2.6.egg # rm -rf /usr/lib/python2.6/site-packages/easy_install*
2014-01時点の最新のsetuptoolsのドキュメント
distributeマージ後の最新のsetuptoolsを使ったeasy_install, pipの導入参考:
非常に便利だったのでメモ。
スペースが入るフォルダを扱う場合は "" で囲むこと。
実例:
空白混じりのフォルダ名を扱う robocopy C:\Users\Foobar\Pictures "D:\backup2\My_Documents\My Pictures" /mir USBメモリの"M:"ドライブのツリーを丸ごと、別のドライブのフォルダにミラーリング robocopy "M:" "D:\backup2\refs" /mir
VirtualBoxのネットワーク設定がよく分からなかったので実際に実験したメモ。
実験日 : 2014-01-13 Host : Win7SP1 VirtualBox : 4.3.6
名称 | 外部 <- Guest | Guest <-> Guest | Guest <- Host |
NAT | OK | NG | NG(要ポートフォワーディング) |
NAT Networks(NATネットワーク) | OK(?) | OK | NG(要ポートフォワーディング) |
Host-only networking(ホストオンリーアダプター) | NG | OK | OK |
Inetrnal networking(内部ネットワーク) | NG | OK | NG |
実験時に遭遇したトラブル(いずれも原因不明で、未解決):
Host側(Win7)
イーサネット アダプター VirtualBox Host-Only Network: 接続固有の DNS サフィックス . . . : 説明. . . . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter 物理アドレス. . . . . . . . . . . : 08-00-27-00-EC-FB DHCP 有効 . . . . . . . . . . . . : いいえ 自動構成有効. . . . . . . . . . . : はい リンクローカル IPv6 アドレス. . . . : fe80::d84:62c8:29f7:2c64%25(優先) IPv4 アドレス . . . . . . . . . . : 192.168.56.1(優先) サブネット マスク . . . . . . . . : 255.255.255.0 デフォルト ゲートウェイ . . . . . : DHCPv6 IAID . . . . . . . . . . . : 419954727 DHCPv6 クライアント DUID. . . . . . . . : 00-01-00-01-17-D7-6E-11-94-DB-C9-3A-8A-E4 DNS サーバー. . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS over TCP/IP . . . . . . . : 有効
Guest1(CentOS6):
eth0 Link encap:Ethernet HWaddr 08:00:27:01:26:50 inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe01:2650/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:58 errors:0 dropped:0 overruns:0 frame:0 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12175 (11.8 KiB) TX bytes:8864 (8.6 KiB)
Guest2(CentOS6):
eth0 Link encap:Ethernet HWaddr 08:00:27:1B:8A:69 inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe1b:8a69/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:50 errors:0 dropped:0 overruns:0 frame:0 TX packets:61 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7631 (7.4 KiB) TX bytes:7735 (7.5 KiB)
NAT/NAT Networks/Host-onlyの組み合わせで皆さん、それぞれ苦労されているようです。
"NAT Networks"はexperimentalというだけ有り、まだ安定してないかも。
GuestOS単体で完結するような環境構築であれば、そのGuestにNATとHost-onlyの2つのアダプタを設定するだけで問題ないだろう。
Webサーバ <> DBサーバ構成など2台以上のGuestが相互に通信できるようにする場合も、それぞれにNATとHost-onlyの2つを設定する方式でも良いが、やや設定が冗長であるし、実運用環境とネットワーク設定が異なりそれによる諸問題が発生する可能性もある。
その場合は、個人的には以下のような構成の方がシンプルで、実運用環境にも近くなると考えます。Guest1, Guest2のdefault gatewayはGuest3のHost-onlyアダプタになるように設定し、Guest3側はルータとして、Host-onlyに入ってきたoutboundをNAT側のアダプタにルーティングします。
[Guest1] Host-only <--------+ | [Guest2] | Host-only <--------+--------> [Host] | [Guest3(router)] | Host-only <--------+ NAT ------------------> Internet
デメリットとしては、Host-onlyアダプタについて、DHCPではなく静的に色々設定する必要があります。また、1台分余分に動かす必要があります。とはいえ、これもこれで構成パターンの一つとしてアリではなかろうかと。
Scalaで開発され、Gitの実装にはJGit(JavaのOSS)を使用したGitHubクローン。
紹介記事:
FindBugsの利用メモ。
FindBugs
メモ:
Requirements:
参考:
感想: