shindos.Lab

プログラミング/音楽/書道をやってます。 いろいろ考えたり実験したことを書きます。たぶん。

Hibernate

JavaO/Rマッピングするためのツール

O/Rマッピングツール

Object/RDB の情報を対応付けしてくれる

以下を設定ファイルに定義し、自動的にマッピング処理を行い、APIを介してDBにアクセス

  • DBとの接続情報を設定ファイルに定義
  • クラスのフィールドとテーブルカラムの対応付け

メリット

  • 変更に強い
  • オブジェクトとRDBの構造的な違いを意識しなくて済む
  • 方言の差を吸収

Eclipseでパッケージをツリー表示に

eclipseでパッケージがフラットに表示されていて、何か違うとおもってツリー表示にする方法を調べたのでメモ。

[Package Explorer]の右上にある[▽]をクリックして[PackagePresentation] > [Hierarchical] を選択すればOK。

フォルダは階層構造で表示されているけど、パッケージはフラットに設定されているので紛らわしい。

Pythonで試しにパッケージをつくってみたものの

環境はMacOSXElcapitanconda envでPython3.5

まずはこんな感じでパッケージを作ってみた

$ mkdir package101
cd package101
  • __init__.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-

def greet():
    print('Hello, World!')
  • setup.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-

from setuptools import setup
from setuptools import find_packages

def main():
    setup(
        name='package101',
        version='0.0.2',
        description='My first package',
        author='shindos',
        author_email='email@example.je',
        packages=find_packages(),
        entry_points={
            'console_scripts': [
                'greet = package101:greet',    
            ],
        }
    )

if __name__ == '__main__':
    main()

で、

$ python setup.py install

すれば、greetがコマンドとして作成できるはず。 が、

$ greet

とすると、以下のエラーがでた。

Traceback (most recent call last):
  File "/Applications/anaconda/envs/packaging/bin/greet", line 9, in <module>
    load_entry_point('package101==0.0.2', 'console_scripts', 'greet')()
  File "/Applications/anaconda/envs/packaging/lib/python3.5/site-packages/setuptools-20.7.0-py3.5.egg/pkg_resources/__init__.py", line 542, in load_entry_point
  File "/Applications/anaconda/envs/packaging/lib/python3.5/site-packages/setuptools-20.7.0-py3.5.egg/pkg_resources/__init__.py", line 2569, in load_entry_point
  File "/Applications/anaconda/envs/packaging/lib/python3.5/site-packages/setuptools-20.7.0-py3.5.egg/pkg_resources/__init__.py", line 2229, in load
  File "/Applications/anaconda/envs/packaging/lib/python3.5/site-packages/setuptools-20.7.0-py3.5.egg/pkg_resources/__init__.py", line 2235, in resolve
ImportError: No module named 'package101'

そんなパッケージないよと。いろいろ調べてpythonにパッケージのpathが通ってないのかと考えて PYTHONPATHに、パッケージのあるディレクトリを指定してみたけどだめ。

エラーになってる__init__.pyをみてみると、こんな感じ。

#!/Applications/anaconda/envs/packaging/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'package101==0.0.2','console_scripts','greet'
__requires__ = 'package101==0.0.2'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('package101==0.0.2', 'console_scripts', 'greet')()
    

ここで無理やり、以下を加えてsysにパッケージへのpathを追加してみた。

sys.path.append("/path/to/package")

そしたら、おお。うまくいった。

$ greet
Hello, World!

setuptoolからみてるsysと、コンソールから使ってるPythonのsysの中身が違う。 ということなので、たぶん使ってるPythonが違うのね。ということで PYTHONPATHに、パッケージのあるディレクトリを指定して __init__.pysetup.pyの最初の一行を#! /usr/bin/env pythonから Applications/anaconda/envs/packaging/bin/pythonに変更してもうまくいった。

$ greet
Hello, World!

シバンの問題だった。

print(sys.version)して、setup.pygreetしたときのpythonの差異をみようとしたけど一緒だった。 よくよく見たら勘違いで、ちゃんとPYTHONPATHにpathが通ってないだけだった。

conda createでつくった仮想環境にconda install jupyterするとエラーになる(OS X El Capitan)

$ conda create -n test python=2.7 anaconda
$ source activate test
$ conda install jupyter

して、

$ jupyter notebook

するとエラーがでる。

Traceback (most recent call last):
  File "/Applications/anaconda/envs/test/bin/jupyter-notebook", line 4, in <module>
    import notebook.notebookapp
  File "/Applications/anaconda/envs/test/lib/python2.7/site-packages/notebook/notebookapp.py", line 61, in <module>
    from .services.contents.manager import ContentsManager
  File "/Applications/anaconda/envs/test/lib/python2.7/site-packages/notebook/services/contents/manager.py", line 16, in <module>
    from nbformat import sign, validate, ValidationError
  File "/Applications/anaconda/envs/test/lib/python2.7/site-packages/nbformat/__init__.py", line 33, in <module>
    from .validator import validate, ValidationError
  File "/Applications/anaconda/envs/test/lib/python2.7/site-packages/nbformat/validator.py", line 21, in <module>
    raise ImportError(str(e) + verbose_msg)
ImportError: No module named functools32

    Jupyter notebook format depends on the jsonschema package:
    
        https://pypi.python.org/pypi/jsonschema
    
    Please install it first.

原因はこれ?conda install時にeasy install 的な何かがはしっているのかしら。

ImportError: No module named paths while running the jupyter notebook · Issue #270 · jupyter/notebook · GitHub

とにかく作った環境でconda install jupyterすると、なんか変になるので、以下のようにすれば anacondaとjupyterを仮想環境で共存させることができた。 まわりくどい。

$ conda create -n test python=2.7
$ source activate test
$ pip install jupyter
$ conda install anaconda
$ jupyter notebook

Chacoをつかう

chacoというライブラリを使いたかったけど、Anacondaには入ってなかったので、インストールするまで。

Chaco

データをいい感じに見せてくれる。

Interactive plotting with Chaco — chaco 4.5.0 documentation

condaでインストール

condaを使ってインストールします。 以下を参考に。

https://anaconda.org/anaconda/chaco

conda install -c https://conda.anaconda.org/anaconda chaco

これでchacoのサンプルコードを走らせてみた。

import numpy as np
from chaco.shell import *

x = np.linspace(-2*pi, 2*pi, 100)
y = np.sin(x)

plot(x, y, "r-")
title("First plot")
ytitle("sin(x)")
show()

すると以下のエラーが。。

Unable to import the image backend for the qt4 toolkit (reason: ['ImportError: No module named kiwisolver\n']). In [ ]:

kiwisolverというモジュールがないみたいなので、インストール

conda install -c https://conda.anaconda.org/anaconda kiwisolver

そして先ほどのコードを実行してみたところ今度は以下のエラーが。

NameError: name 'pi' is not defined

これはサンプルコードが間違っていると判断。np.piにして以下のようにすれば正しく表示された。わーい。

import numpy as np
from chaco.shell import *

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.sin(x)

plot(x, y, "r-")
title("First plot")
ytitle("sin(x)")
show()

f:id:shindos:20160117210857p:plain

Jupyterインストール

環境設定時に調べたりするのがとてもめんどくさいので、ログとして書いていくことにする。

基本的には公式ドキュメントのインストールの手順にしたがってやるだけ。

http://jupyter.readthedocs.org/en/latest/install.html

AnacondaというPythonディストリビューションをインストールして設定していく。

蛇足になるけど、公式にもpipとcondaの二通りのインストール方法が説明されているので、 pipとcondaは併用できないのね。ということで、今後はcondaを使っていこう。

Rのカーネルインストールは以下のREADMEの通りやってもうまくいかなかったけど、

IRkernel/IRkernel: R kernel for Jupyter

以下のサイトを参考にしたらうまくいった。

blog.revolutionanalytics.com

打ったコマンド

conda install -c r ipython-notebook r-irkernel

ijavascript と irubyも以下を参考にすればいけた。

github.com

www.npmjs.com