2012年12月11日火曜日

[nodejs]nodejs インストール

概要
nodejs をソースからインストールする。
インストール

[other]nginx インストールと設定

概要
nginx をリバースプロキシとして使ってみる。
インストール
パッケージからとソースからビルドの2通りある。
  • パッケージからインストール
    注意は任意のモジュールをインストールできない。必要なモジュールがあるならソースから。 基本的にhttp://wiki.nginx.org/InstallJa 参照で。 設定での注意としては、/etc/nginx/nginx.conf が設定ファイルだけど中で include /etc/nginx/conf.d/*.conf; みたいに 設定ファイルが読み込まれてる。/etc/nginx/nginx.conf を必死に設定しても設定かわらないときはこのあたりを疑ってみても。 設定、後勝ち??
  • ソースからインストール
    1. tar -zxvf nginx-1.2.2.tar.gz
    2. cd nginx-1.2.2
    3. yum -y install openssl-devel pcre-devel libxml2-devel libxslt-devel patch
      環境によるけど
    4. git clone https://github.com/yaoweibin/nginx_tcp_proxy_module.git
      websocket をリバースプロキシする nginx_tcp_proxy_module をモジュール追加するので http://d.hatena.ne.jp/shim0mura/20120118/1326916953
    5. patch -p1< nginx_tcp_proxy_module/tcp.patch
    6. ./configure
      ./configure --prefix='/usr/local/nginx' \
      --with-http_ssl_module \
      --with-http_stub_status_module \
      --with-http_xslt_module \
      --with-http_realip_module \
      --with-http_gzip_static_module \
      --add-module=nginx_tcp_proxy_module/
    7. make
    8. sudo make install
    9. vi /etc/init.d/nginx
      #!/bin/sh
      #
      # nginx - this script starts and stops the nginx daemon
      #
      # chkconfig:   - 85 15
      # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
      #               proxy and IMAP/POP3 proxy server
      # processname: nginx
      # config:      /etc/nginx/nginx.conf
      # config:      /etc/sysconfig/nginx
      # pidfile:     /var/run/nginx.pid
      
      # Source function library.
      . /etc/rc.d/init.d/functions
      
      # Source networking configuration.
      . /etc/sysconfig/network
      
      # Check that networking is up.
      [ "$NETWORKING" = "no" ] && exit 0
      
      #nginx="/usr/sbin/nginx"
      nginx="/usr/local/nginx/sbin/nginx"
      prog=$(basename $nginx)
      
      #NGINX_CONF_FILE="/etc/nginx/nginx.conf"
      NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
      
      [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
      
      lockfile=/var/lock/subsys/nginx
      
      make_dirs() {
         # make required directories
         user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
         options=`$nginx -V 2>&1 | grep 'configure arguments:'`
         for opt in $options; do
             if [ `echo $opt | grep '.*-temp-path'` ]; then
                 value=`echo $opt | cut -d "=" -f 2`
                 if [ ! -d "$value" ]; then
                     # echo "creating" $value
                     mkdir -p $value && chown -R $user $value
                 fi
             fi
         done
      }
      
      start() {
          [ -x $nginx ] || exit 5
          [ -f $NGINX_CONF_FILE ] || exit 6
          make_dirs
          echo -n $"Starting $prog: "
          daemon $nginx -c $NGINX_CONF_FILE
          retval=$?
          echo
          [ $retval -eq 0 ] && touch $lockfile
          return $retval
      }
      
      stop() {
          echo -n $"Stopping $prog: "
          killproc $prog -QUIT
          retval=$?
          echo
          [ $retval -eq 0 ] && rm -f $lockfile
          return $retval
      }
      
      restart() {
          configtest || return $?
          stop
          sleep 1
          start
      }
      
      reload() {
          configtest || return $?
          echo -n $"Reloading $prog: "
          killproc $nginx -HUP
          RETVAL=$?
          echo
      }
      
      force_reload() {
          restart
      }
      
      configtest() {
        $nginx -t -c $NGINX_CONF_FILE
      }
      
      rh_status() {
          status $prog
      }
      
      rh_status_q() {
          rh_status >/dev/null 2>&1
      }
      
      case "$1" in
          start)
              rh_status_q && exit 0
              $1
              ;;
          stop)
              rh_status_q || exit 0
              $1
              ;;
          restart|configtest)
              $1
              ;;
          reload)
              rh_status_q || exit 7
              $1
              ;;
          force-reload)
              force_reload
              ;;
          status)
              rh_status
              ;;
          condrestart|try-restart)
              rh_status_q || exit 0
                  ;;
          *)
              echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
              exit 2
      esac
      
    • 設定ファイルは /usr/local/nginx/conf/nginx.conf にある
HTTP リバースプロキシ
HTTP リバースプロキシとして使うための設定。/ のアクセスを upstream backend のいずれかに転送する。 proxy_pass の http://backend は upstream の backend と対応しいている。
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream backend {
      server xxxx.xxxx.xxxx.xxx:port;
      server xxxx.xxxx.xxxx.xxx:port;
      server xxxx.xxxx.xxxx.xxx:port;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   /usr/share/nginx/html;
            #index  index.html index.htm;
            proxy_pass http://backend;
            proxy_set_header  X-Real-IP  $remote_addr;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
WebSocket リバースプロキシ
WebSocket 通信(というかTCP/IP??)をリバースプロキシする。 socket.io なアプリレベルで気をつけとくのは、例えば以下の設定でHTTP通信で 60001 に割り振られた時、 javascript で io.connect(‘http://host:port/‘) するときに、ポートは 60001 にしておくこと。 リバースプロキシだからといって ポート 80 で再度割り振らせると正常に動作しなくなる。
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

tcp {
  upstream websockets {
    server 127.0.0.1:60001;
    server 127.0.0.1:60002;
    server 127.0.0.1:60003;

    check interval=3000 rise=2 fall=5 timeout=1000;
  }


  server {
    listen  0.0.0.0:80;
    server_name _;

    tcp_nodelay on;
    proxy_pass websockets;


  }
}



http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8888;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}

        location /websocket_status {
            check_status;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        #error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2012年11月29日木曜日

[other]phantomjs インストール

インストール
  • PhantomJS 入れる
    1. sudo yum install gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel
    2. git clone git://github.com/ariya/phantomjs.git
    3. cd phantomjs
    4. git checkout 1.7
    5. ./build.sh –jobs 1
      build.sh たたくと次のエラーになった
      gstreamer-app-0.10 not found
      make[1]: *** [WebCore/Makefile.WebKit] Error 2
      make[1]: Leaving directory `/home/dev/work/tmp/phantomjs-rpms/BUILD/phantomjs-1.5.0/src/qt/src/3rdparty/webkit/Source
      yum -y install gstreamer* で gstreamer のパッケージ全部つっこんどくhttp://tmcosmos.org/linux/centos/co5.html
      もう一度 build.sh たたく
      ビルドが成功した
    6. /path/to/phantomjs/bin/phantomjs が本体なのでこれを PATH の通ったところにおいとく
    7. sudo mv phantomjs/ /usr/local/src/
    8. ln -s /usr/local/src/phantomjs/bin/phantomjs /usr/local/bin/phantomjs
    ※ sudo yum groupinstall ‘Development tools’ ‘Additional Development’ あれやこれやとこれもたたきました
  • 参考URL
文字化け問題
CentOS6.2 の環境で文字化けエラー

[linux]munin のインストールと設定

概要
munin は、munin と munin-node にわかれる。munin は munin-node を束ねるサーバで、ノードと通信しノードの情報をグラフ化しWEBページとしてそれを参照できるようにする。 muni-node はターゲットサーバのリソースを監視する。
munin-master インストール
基本的にパッケージインストールでOK
[root@dlp ~]# wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
[root@dlp ~]# rpm --import RPM-GPG-KEY-EPEL-6
[root@dlp ~]# rm -f RPM-GPG-KEY-EPEL-6
[root@dlp ~]# vi /etc/yum.repos.d/epel.repo

# 以下の内容で新規作成
[epel]
name=EPEL RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
gpgcheck=1
enabled=0

# 上記リポジトリを使用してインストールする場合は、以下のようにコマンド入力
[root@dlp ~]# yum --enablerepo=epel install [パッケージ名]
ただ、EPEL リポジトリからパッケージをインストールする場合、CentOS のバージョンに注意する。下記の参考URLにあるような RPM-GPG-KEY-EPEL-5 は RPM-GPG-KEY-EPEL-6 と読み替えるといい。
[root@master ~]# yum --enablerepo=epel -y install munin munin-node   # EPELからインストール
[root@master ~]# vi /etc/munin/munin.conf

# 60行目:ホスト名に変更
[master.server.world]
  address 127.0.0.1
  use_node_name yes

[root@master ~]# vi /etc/munin/munin-node.conf

# 29行目:自ホスト名に変更
host_name master.server.world

[root@master ~]# rm /var/www/html/munin/.htaccess
[root@master ~]# vi /etc/httpd/conf.d/munin.conf

<Directory /var/www/html/munin/>
  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 10.0.0.0/24
</Directory>

[root@master ~]# /etc/rc.d/init.d/httpd restart
Stopping httpd:[ OK ]
Starting httpd:[ OK ]

[root@master ~]# /etc/rc.d/init.d/munin-node start
Starting Munin Node:[ OK ]

[root@master ~]# chkconfig munin-node on
これで munin-master サーバと同じ munin-node のリソース情報は吸い上げられるようになった
munin-node インストール
munin-master とほぼ同じ。パッケージからいれる。
[root@dlp ~]# wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
[root@dlp ~]# rpm --import RPM-GPG-KEY-EPEL-6
[root@dlp ~]# rm -f RPM-GPG-KEY-EPEL-6
[root@dlp ~]# vi /etc/yum.repos.d/epel.repo

# 以下の内容で新規作成
[epel]
name=EPEL RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
gpgcheck=1
enabled=0

[root@master ~]# yum --enablerepo=epel -y install munin-node   # EPELからインストール
[root@master ~]# vi /etc/munin/munin-node.conf

allow ^XXX\.XXX\.XXX\.XXX$(サーバのIP)
を
allow ^127\.0\.0\.1$
の下辺りに追記しておきます。

[root@master ~]# /etc/rc.d/init.d/munin-node start

Starting Munin Node:[ OK ]

[root@master ~]# chkconfig munin-node on
ここで 自分のWAN側IPアドレスはわかる http://www.cman.jp/network/support/go_access.cgi
munin-master サーバ側で次になればOK:
# telnet [ノードのIPアドレス] 4949

Connected to 略
Escape character is '^]'.
# munin node at backup
munin-master サーバの /etc/munin/munin.conf で上記のノードを追記 :
[GroupName;XXX.XXX.XXX]
address XXX.XXX.XXX
use_node_name yes
[] の中を適当にしてると動かなかくて、FQDN にしろって記述があったので IPアドレスにしたら動いた GroupName は 2.0.6 では上記の通りでちゃんと設定できた
CGI設定
munin の CGI は munin-cgi-graph と munin-cgi-html があるみたいで、 グラフの画像生成とHTMLそれぞれを動的に生成するかどうか設定できる。
以下はグラフ。グラフは詳細な時間を見ようとすると CGI の設定が必須みたい。cron だとグラフをクリックして遷移した先のHTMLで画像がリンク切れになってる。
あと、EPEL リポジトリからパッケージインストールするとなのかは不明だが、munin-cgi-graph と munin-cgi-html がどこにもなかった…。 なのでパッケージはインストールされているがソースをビルドした。
[root@master ~]# yum --enablerepo=epel -y install \
                   rrdtool perl-rrdtool perl-Module-Buildrrdtool\
                   perl-Module-Build \
                   perl-Time-HiRes \
                   perl-Digest-MD5 \
                   perl-HTML-Template \
                   perl-File-Copy-Recursive \
                   fcgi fcgi-devel perl-FCGI perl-CGI \
                   perl-IO-Socket-INET6 \
                   perl-Net-SNMP \
                   perl-Log-Log4perl \
                   perl-Net-Server

wget http://sourceforge.net/projects/munin/files/stable/2.0.6/munin-2.0.6.tar.gz
tar xfz munin-2.0.6.tar.gz
cd munin-2.0.6
vi Makefile
CONFIG = dists/redhat/Makefile.config
make
したらば /path/to/munin-2.0.6/build/master/_bin/munin-cgi-graph にできてる
vi /etc/munin/munin.conf

# 下記を変更か追記
graph_strategy cgi
cgiurl_graph /munin-cgi/munin-cgi-graph

cp /path/to/munin-2.0.6/build/master/_bin/munin-cgi-graph /var/www/cgi-bin/

vi /etc/httpd/conf.d/munin.conf

# ScriptAlias 追記
ScriptAlias /munin-cgi/ /var/www/cgi-bin/

<Directory /var/www/cgi-bin>
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>
これで graph が CGI で動作するようになった

2012年11月22日木曜日

[other]mac に ssh で接続、ssh を使って git clone する

■mac に ssh 接続する
http://d.hatena.ne.jp/dice-t/20071115/1195187150 システム環境設定 → 共有 → リモートログイン
(チャレンジレスポンスになってる。パスワード、鍵認証も sshd_config 触るとできるみたいだけどやってないのでわからん)

次で接続できることを一応確認しとく。

Windows の teraterm でホストに mac のIPアドレス、TCPポート 22、SSH2 、
ユーザ名に設定して接続許可したユーザ、「チャレンジレスポンス認証を使う」、パスワードにmacのパスワードを入力。

■git で公開用リポジトリを作る

http://d.hatena.ne.jp/takihiro/20090325/1237990865

■クライアント で git clone する

git clone ssh://user@host:port/Users/xxxxx/xxxxx/project.git

IntelliJ IDEA なら

Git Repository URL : [ssh://user@host:port/Users/xxxxx/xxxxx/project.git]
Parent Directory : [git clone 保存先ディレクトリ]

を設定すると Directory Name はたぶん勝手にはいる。
私は下みたいになった。

Directory Name : [project]

2012年11月2日金曜日

[sphinx]はじめにやることメモ

http://isann.blog2.fc2.com/blog-entry-290.html

http://isann.blog2.fc2.com/blog-entry-293.html

■sphinxって何?


ここ見たらだいたいわかります。
http://sphinx-users.jp/

わかってるからそう言うのでしょうか。
はじめはまったくわかりませんでした。

要は、テキストファイルにwiki記法みたいな簡易マークアックアップの「reStructredText」で
記述し、これをプログラムを使って綺麗なHTMLなどにする、ということです。

で、「reStructredText」はディレクティブというのがあって、
これを使ってブロック図を書いたりシーケンス図を書いたり、
「reStructredText」標準の機能に機能追加していく感じです。

Sphinxというとpython、
という感じですがpythonを知らないとsphinxを使えないことはまったくありません。

知らないといけないのは、「reStructredText」の記述方法とSphinxの使い方です。

■sphinxインストール


ではさっそくインストールします。
pythonのインストールはexeキックするだけです。
easy_installはこのへんを参考にして下さい。

http://sphinx-users.jp/gettingstarted/install_windows.html
easy-install sphinx

これだけです。

■プロジェクトを作る


sphinx-quickstart

質問には全部デフォルトで答えました。

以下だけ入力します。


  • プロジェクト名

  • バージョン番号

  • 著者の名前


■diagインストール


http://blockdiag.com/ja/blockdiag/introduction.html#id2
easy_install pillow
easy_install blockdiag


■sphinxにdiagを埋め込む


上記だけでsphinxでblockdiagを使えるわけじゃなく、
上記はテキストファイル「diag」などからpng形式の画像データを作成するものです。
埋め込むには「sphinxcontrib-blockdiag」が必要です。
easy_install sphinxcontrib-blockdiag


■confの設定


./sphinx-project/conf.py
# Enabled extensions
extensions = ['sphinxcontrib.blockdiag']

# Fontpath for blockdiag (truetype font)
blockdiag_fontpath = 'C:\Windows\Fonts\msgothic.ttc'

ちょっとpythonファイルに設定を追記します。
pythonファイルもただのテキストファイルです。

■ディレクティブ


.. blockdiag:: [diag-filename]

例えばこんな感じで使えるようになります。

■トライアンドエラー的な…



  • blockdiagのpngファイルで日本語が文字化け

    これは文字化け、なんだけれど要はデフォルトでは日本語フォント使ってなくて、
    変なUTF-8の文字見つかったけどなににしたらわからーん!って状態。
    rem set /P font=フォントのパスを指定して下さい。(日本語フォントがよい):
    set font="C:\Windows\Fonts\msgothic.ttc"
    set /P diag=diagファイルのパスを指定して下さい。:
    blockdiag -f %font% %diag%
    pause
    

    こうやって日本語フォント指定してやればいける。
    でもちょっとノード内のフォントが上きれるんだよな…。これ原因不明です。

  • Sphinxのドキュメントで日本語が文字化け

    これも上と同じような問題。
    結局CSSのfont-familyの記述によって読み込まれているフォントが日本語非対応のフォントということらしい。

    http://blog1.erp2py.com/2012/01/sphinx.html
    <転載>
    [Pythonフォルダ] → [Lib] → [site-packages] → [Sphinx-1.1.2-py2.7.egg] → [sphinx]
    sphinxdoc.css_t ファイルをコピー&ペーストする
    
    [sphinx] → [themes] → [sphinxdoc] → [static] フォルダーに sphinxdoc.css_t ファイルがあるのでコピーして、ドキュメントの [_static] フォルダに貼り付ける。
    
    ペーストした sphinxdoc.css_t ファイルをテキストエディタで開き、font-family を変更する。
    
    sphinxdoc.css_t には font-family の指定が4カ所あるので変更する。私は次のように変更した。
    
    bodyタグ指定、viewcode-backクラス指定
    
    変更前
    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
                 'Verdana', sans-serif;
    変更後
    font-family: 'Arial', 'Helvetica', sans-serif;
    
    cite, code, ttタグ指定、preタグ指定
    
    変更前
    font-family: 'Consolas', 'Deja Vu Sans Mono',
                 'Bitstream Vera Sans Mono', monospace;
    変更後
    font-family: 'Consolas', 'Courier New', monospace;
    make html コマンドで、htmlファイルを再作成する。
    
    Lucida Grandeとか悪さをしているみたいです。>

■shpinxインストールの補足的な


Sphinxの導入は下記あたりで記事にしました。
http://isann.blog2.fc2.com/blog-entry-290.html
http://isann.blog2.fc2.com/blog-entry-292.html

これにわかったことなどを追加しながら少し整理してみます。

sphinxのインストールに関してはhttp://isann.blog2.fc2.com/blog-entry-290.htmlそのままです。
pypiに登録されていますので、easy_installから簡単にインストールして、
そのままプロジェクトを作ります。
sphinx-quickstart コマンドはデフォルトで実行したディレクトリ配下にファイルを作成しますので、
自分で /usr/hoge/shpinx_doc/hogedoc みたいなディレクトリを作成してそこで実行するとよいと思います。

diagシリーズはブロック図は汎用性もあるのであるとかなりいいと思います。

easy_install sphinxcontrib-blockdiag

これに追加でシーケンス図を僕はよく使うので入れています。
easy_install sphinxcontrib-seqdiag

http://blockdiag.com/ja/seqdiag/sphinxcontrib.html

他にもアクティビティ図やネットワーク図などがあります。
必要に応じて追加するといいかもです。
はじめに全部入れておいても不都合はないと思います。
http://d.hatena.ne.jp/torutk/20110522/p1
http://d.hatena.ne.jp/hekyou/20110717/p1

shpinxドキュメントにこれらの図を埋め込むにはconf.pyを設定する必要があります。
この時点で下記リンク先のようなconf.pyになっていました。
https://gist.github.com/1978985
extensions = []
extensions.append('sphinxcontrib.blockdiag')
extensions.append('sphinxcontrib.seqdiag')
extensions.append('japanesesupport')
blockdiag_fontpath = r'C:\Windows\Fonts\msgothic.ttc'
seqdiag_fontpath = r'C:\Windows\Fonts\msgothic.ttc'

extensions.append('XXXXX')
こんな感じでどんどん拡張を追加していくとやりやすいかもです。

あと、日付フォーマットは
today_fmt = '%Y-%m-%d %H:%M:%S'

にしました。

sphinxドキュメントをHTML出力する際に日本語が含まれると思いますので、
下記のようなパスにあるsphinxdoc.css_tを
C:\TracLight\python\Lib\site-packages\Sphinx-1.1.2-py2.6.egg\sphinx\themes\sphinxdoc\static\sphinxdoc.css_t

F:\sphinxdoc\hoge\_static\sphinxdoc.css_t
みたいな感じでコピーしておきます。
https://gist.github.com/1978951
    font-family: 'Arial', 'Helvetica', sans-serif;
    ・
    font-family: 'Consolas', 'Courier New', monospace;
    ・
    font-family: 'Consolas', 'Courier New', monospace;
    ・
    font-family: 'Arial', 'Helvetica', sans-serif;

こんな順番で参考にさせて頂いたサイトと同様にfont-familyを変更しました。

シーケンス図の埋め込みはこんな感じです。
.. seqdiag::

    seqdiag admin {

      browser  -> webserver [label = "GET /index.html"];
      browser <-- webserver;
      browser  -> webserver [label = "POST /blog/comment"];
                  webserver  -> database [label = "INSERT comment"];
                  webserver <-- database;
      browser <-- webserver;
    
    }


ブロック図の埋め込みはこんな感じです。
.. blockdiag::

    blockdiag admin {
      
      // Set labels to nodes.
      A [label = "foo"];
      B [label = "bar"];
      // And set text-color
      C [label = "baz"];
   
      // Set labels to edges. (short text only)
      A -> B [label = "click bar", textcolor="red"];
      B -> C [label = "click baz"];
      C -> A;
   
    }


ブロック図に関してよく使うスタイルとか。
      node_width = 160;
      node_height = 60;
      default_fontsize = 12;
      default_node_color = "#4F81BD";
      default_textcolor = "#FFFFFF";
      class data [ shape = flowchart.input ];
      class ext_syori [color = "#9BBB59"];
      class ext_data [color = "#9BBB59", shape = flowchart.input];


あと、sphinxでテーブルの出力はまあまあ面倒くさくて、
list-tableやcsv-tableをよく使うことになる。
なんか癪だったのでpythonでtsvをうまくテーブルにするもの作ってみた。
https://gist.github.com/1977836
まだ、未完成でして、同一セル内の改行に対応できていません。

こんなところです。

2012年11月1日木曜日

[python]macへ PIL FREETYPE2 support available でのインストール

sphinx の block-diag や seq-diag を使う際にフォントをTrueTypeフォントで設定。

make html すると以下エラー。


ImportError: The _imagingft C module is not installed

この原因と対応方法はこちらの6以降参照。

ざっくりそのまま転載するとPILの
後日ためしたところ上手く行ったが、FREETYPE2 support not available となってしまっている。

が原因。

こういう感じ。

    --------------------------------------------------------------------

    PIL 1.1.7 SETUP SUMMARY

    --------------------------------------------------------------------

    version       1.1.7

    platform      darwin 2.7.2 (default, Nov  9 2011, 19:35:03)

                  [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)]

    --------------------------------------------------------------------

    --- TKINTER support available

    --- JPEG support available

    --- ZLIB (PNG/ZIP) support available

    *** FREETYPE2 support not available

    --- LITTLECMS support available

    --------------------------------------------------------------------

    To add a missing option, make sure you have the required

    library, and set the corresponding ROOT variable in the

    setup.py script.

で、これをなおすにはこれを参考にしつつ次。
$ pip uninstall PIL

$ ln -s /usr/X11/include/freetype2 /usr/local/include/

$ ln -s /usr/X11/include/ft2build.h /usr/local/include/

$ ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/

$ ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/libfreetype.dylib

$ pip install PIL

で、これでいいんだけれど、私の mac mountail lion pre install な PC だと
/usr/X11/include/freetype2 もなければ、/usr/local/include/ もない。
※ないのはX11入れてないからかな?X11いれずにXCodeいれた山ライオンだとこうなるのかもね。

探してみると

※sudo find / -name freetype2 とかね

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/include/freetype2 /usr/local/include/

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/include/ft2build.h /usr/local/include/

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/lib/libfreetype.6.dylib /usr/local/lib/

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/lib/libfreetype.6.dylib /usr/local/lib/libfreetype.dylib


となった。

多分、XCodeのコマンドラインツールをインストールしてないとダメっぽいね。

予め gcc とか make するためにXCode のコマンドラインツールはインストールしてた。

これで sudo pip install pil したら

    --------------------------------------------------------------------

    PIL 1.1.7 SETUP SUMMARY

    --------------------------------------------------------------------

    version       1.1.7

    platform      darwin 2.7.2 (default, Jun 20 2012, 16:23:33)

                  [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)]

    --------------------------------------------------------------------

    --- TKINTER support available

    *** JPEG support not available

    --- ZLIB (PNG/ZIP) support available

    --- FREETYPE2 support available

    *** LITTLECMS support not available

    --------------------------------------------------------------------

無事こうなりました。

おわり。

2012年10月30日火曜日

[IntelliJ IDEA]nodejs と npm

ぜんぜんわかんない。。。

多分、やり方間違ってる記事です。

package.json みたら書いてたバージョンそのままです。(これでいいのかもわからんす)
express3.0.0
socketio0.9.10

とりあえず、IDEA に nodejs プラグインを入れた。

mac に nodejs と npm をインストールした。
参考


IDEA 上から npm でライブラリをインストールしたりする方法がわからない。
プロジェクトディレクトリ直下には node_modules という刺激的なディレクトリがあったのでついなんとなく、
IdeaProject ディレクトリの該当プロジェクトディレクトリまで移動してそこで npm install socket.io とか
npm install cookie とかしちゃった。

参考にさせてもらったサンプルソース

まあこれで動いてるのでとりあえずこれで。

そのうち分かってくれば、本当はこうだったというのがわかるだろう。

ご指摘お待ちしております。

2012年10月25日木曜日

[IntelliJ IDEA]coffeescript が実行できない

Macです。

coffeescript を書くということだけにおいては
IntelliJ IDEAで適当な Web Module でプロジェクトつくって
*.coffee なファイルを作って開くだけ。

coffeescript のプラグイン有効にしてたら
シンタックスハイライトもしてくれる。

右クリック -> Preview Compiled CoffeeScript File...
で coffeescript を javascript に変換してくれる。

で、ここまではいいんだけど。

coffeescript そのまま実行したいんすよね。

右クリック -> Create 'XXXXX.coffee'
で Edit Configurations を表示して
確実に存在するパスを指定して(which node とかでね)
nodejs の実行パスや coffee の実行パスを指定。

Run すると次のエラー。



/usr/local/bin/coffee src/test.coffee
env: node: No such file or directory

Process finished with exit code 127

ぜんぜんわかんないの。

こんな ISSUERが登録されているみたい。

アプリケーションのplist(プロパティリスト)触ったらいいよ、ってさ。
でもなぜぼくたちがIDEを使うかというと一度設定したら二度気にしないためにIDEを使う。
こんな七面倒臭いことをIntelliJ IDEAのアップデートごとにやってたらIDEの本質を損なう、って指摘があった。
そうだそうだ!

ということで、そのうちなおすはず。

ワークアラウンドにプロパティリストで回避するのはありか。

2012年10月2日火曜日

[IntelliJ IDEA]PHP開発環境をつくってみた



窓にphp開発環境つくる

開発環境といえば、デバッグ、テストできて当たり前。
ソース管理はgitかsvnだけどこれはどのプログラミング言語でも一緒だから割愛。

Apacheいれるのめんどくさいので
php5.4 の Built in web server を使う。

http://d.hatena.ne.jp/nowokay/20120531

ぬこびーんでできるし
IntelliJ IDEA でもできるんじゃね?
ってことでIDEは使い慣れた(い)IntelliJ IDEAで。

■phpのインストール



http://memorva.jp/memo/windows/php.php

ZIP版のほうがありがたいのでZIP版で。
2012/10/02 時点でもインストーラーはないっぽい。

C:\opt\php として展開。

環境変数に PATH=$PATH;C:\opt\php を設定。
→Rapid EE が便利だよ!

コマンドラインで php -v でパス通ればOK。

■IntelliJ IDEA でプロジェクト作成



PHP Module があると思ってたけどなかった・・・。

Web Module にして Empty module で Finish.

File -> Settings の PHP で
PHP language level : 5.4
Interpreter で ... を押下して + で
C:\opt\php を指定したインタプリタを選択。
もちろんphp5.4ね。

PHP -> Servers も設定しておく。
Name は適当、Hostはlocalhost、Portは80、DubuggerはXdebugで追加。

Settings は OK にして Editor に戻る。

Edit Configurations で
PHP Built-in Web Server を設定。
Hostはlocalhost、Portは80、DocumentRootはプロジェクトフォルダでOK。

ついでに PHP Web Application で Server(PHP -> Servers で追加したやつ)、
Start URL、Browserを設定しておく。

PHP Built-in Web Server で作成した設定を実行すれば
PHP Built-in Web Server が起動する。

適当なスクリプト(phpinfo()とか)を作って
PHP Web Application で作成したい設定を実行すれば
ブラウザが立ち上がって参照できる。

■xdebugのインストール



デバッガー。

http://keicode.com/cgi/introducing-xdebug.php

phpinfo(); なスクリプトで DebugBuild が no になっているかを確認。

※no になってないときはわかんない。php.ini さわるかんじ?

php5.4 なので http://www.xdebug.org/download.php から
PHP 5.4 VC9 (32 bit) をDLした。環境にあわせてね。
あと、TS ってなに?こっちの dll だとダメでした。

php.ini に
zend_extension="C:\opt\php\ext\php_xdebug-2.2.1-5.4-vc9.dll"
を追記。
参考サイトにあるように zend_extension_ts としたけどダメでした。
php.ini の場所は Loaded Configuration File で。

C:\opt\php\php.ini-development をコピって php.ini を作った。

ここに上記の内容を追記してサーバ再起動。

IntelliJ IDEA上でブレークポイントを設置してデバッグ実行、
ブラウザを表示しようとしたらちゃんとデバッグできた。

※2012/10/06 02:56:01 追記

これだけだとうまくデバッグできないですね。
できなくなって、このメモを見返して気付きました。
リモートデバッグもうまくやったらできるんでしょうがそれはまだ調べてません。
再生マークみたいなアイコンの左くらいにあるプルダウンから Edit Configuration を選択して、
Run/Dubug Configurations 画面で +(追加) を押して
Server は Settings -> PHP -> Servers で登録してる localhost、start URL を / とか適当なもの、Browser も適当なものを選択してOK.
あとはデバッグするだけでブラウザで start URL が立ち上がってパラメータにそれっぽいのが確認できます。
もし / とかが静的ファイルだったらPHPスクリプトが動くところに移動するとCookieにXDEBUG~ってキーバリューが保存されるのでこれでパラメータなしでもデバッグで止まるようになります。
なんかもっとうまいやり方あるんだろうなって思いながらとりあえずデバッグできるのでまたやりたいことが次のステップにむいたときに調べます。
もし教えてくれると嬉しいです。

参考
http://www.jetbrains.com/idea/webhelp/php-debugging-session.html


■pearのインストール



ライブラリ管理ツール。

これはやらなくてもいいんだけど
phpunitを手で入れようとしたら失敗したからこれで。

窓のpearはめんどかった。
UNIX系は楽なんかな。
知らん。

http://d.hatena.ne.jp/takeru-c/20110912/1315796049

で、このとおりやって pear のインストールはOKなんだけど、
pear 経由でライブラリを入れようとすると

PEAR_Config::writeConfigFile fopen('C:\Windows\pear.ini','w') failed (fopen(C:\W
indows\pear.ini): failed to open stream: Permission denied)

になる。

ちゃんと回避したはずなのに。

http://www.glamenv-septzen.net/view/40

結論:PHP_PEAR_SYSCONF_DIR 環境変数を設定せよ。

とあるように環境変数を設定すればいいみたい。

PHP_PEAR_SYSCONF_DIR=C:\opt\php\pear\

として設定。

このあたりの詳細は上記サイトでちゃんと説明してくれてる。

とりまこれでOK。

■PHP Unit のインストール



http://www.atmarkit.co.jp/fcoding/articles/phptest/02/phptest02a.html

とりあえず pear 叩いてインスコした。

それっぽいのができた。

※2012/10/03 19:13:37 追記

File -> Settings の PHP で
Include path に C:\opt\php\pear みたいにパスを指定しないと
PHP Unit の補完ができないので指定しとく。



■PHP Unit をIntelliJ IDEA から



さあ テストドリブンに開発すっぞ!
ってことでIDEかららくらくテストコード生成してゴリゴリできるようにする。

Edit Configurations から PHPUnit を作成。
※PHPUnit on server ってなに?状態です・・・

http://www.jetbrains.com/idea/webhelp/run-debug-configuration-phpunit.html

Direcotory は test ディレクトリをプロジェクト配下に作成。

PHP Unit では Skeleton Generator でスケルトンクラスを出力するみたいで
PHP Unit とは別モジュールでSkeleton Generator が配られているみたいです。

http://www.jetbrains.com/idea/webhelp/generating-phpunit-test-class.html

上記サイト内のリンクに http://www.phpunit.de/manual/3.6/en/skeleton-generator.html へのリンクがあって
これをみながら pear を叩いて Skeleton Generator をインストールした。

File -> Settings で PHP -> PHPUnit -> Skeleton Generator で
Use Skeleton Generator を チェックして、
pear config-show で bin_dir の値 C:\opt\php\pear を
Path to phpunit-skelgen として設定。

これで準備万端と思いHTML内にphpスクリプト埋め込んだコードで張り切って
CTRL + SHIFT + T おしても無反応。
右クリック -> Go To -> Test がグレーアウト。
ダメじゃん。

設定間違えたかな?と思ってもあってる気がする。

ためしに PHP File じゃなく PHP Class を新規作成して
有効なスクリプトステートメントで CTRL + SHIFT + T 押したら
Go to Test... と書かれたウィンドウが!
OK して テストクラス名や出力ファイル名、出力ディレクトリを指定して OK.
生成されましたー。

で、(JSPでごりごりViewにロジック書くような汚い)テンプレートに記述したスクリプトは
さすがにテストできないのかな。
WebUnit的なもの?でノード解析とかしちゃう系?

とりま、ここまで。


2012年9月30日日曜日

[other]Apache JMeter

Apache JMeter はJavaで書かれたパフォーマンステストなどに用いるツール。


techscoreで使い方は参照しつつとりあえず使えるレベルでした。

で、今日新しく知ったこと!
  • HTTPプロキシを使ってブラウザの操作を記録できる
  • コマンドラインで実行できる
  • コマンドラインから引数(プロパティ)でスレッド数など変更できる
  • リモート上のJMeterを操作できる
ドキュメントちゃんと読んだら当たり前なんだろうけど。

HTTPプロキシでページ情報を収集できるのはすごい便利。

シナリオを作成するストレスがかなり低減された。

コマンドラインで実行できるというのも非常に楽。

●HTTPプロキシ

●コマンドライン実行

●コマンドライン引数

●リモート

2012年9月20日木曜日

[Python]mac に virtualenv を入れる

■easy_install
まずはここから。
mac だからかはわからないが、easy_install がエラーになったので、下記を参考に distribute の easy_install を入れた。
http://d.hatena.ne.jp/buta9999/20120329/1333028463

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py

このあたりのパッケージ管理は歴史的にゴタゴタしていたらしい。
東風さんの記事「パッケージ管理」がとても参考になります。
http://ymotongpoo.hatenablog.com/entry/2012/09/16/090842

■virtualenv と virtualenvwrapper

sudo easy_install virtualenv
sudo easy_install virtualenvwrapper
でインストール。

これはこれでOK。

■ログインシェルの設定
パスが通っていないので workon や deactivate できない。
どのシェルにパス通せばいいかというと
sudo find / -name "virtualenvwrapper.sh"
で検索できるそれっぽいやつ。

わっすの場合、
vim ~/.bash_profile
して
export WORKON_HOME=~/.virtualenvs
. /usr/local/bin/virtualenvwrapper.sh

これらを追記しました。

で、ログインし直すなり source ~/.bash_profile してパスを通してから
workon
するとコマンドが迷子になりません!
やりました。
成功です。
あとは、
mkvirtualenv hogehoge
して仮想環境つくって、~/.virtualenvs/hogehoge とか見に行ったりできたらOK。
deactivate で仮想環境から抜けられます。


2012年9月19日水曜日

[IntelliJ IDEA]Sphinx を使う

IntelliJ IDEA で Sphinx にて reST を変換して HTML 出力するまで。

■Sphinx のインストール
まず、easy_install をインストールします。
Mac なら次。
参考 http://d.hatena.ne.jp/buta9999/20120329/1333028463

$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py

Windows ならdistribute_setup.py をブラウザとかでDLして これを実行で。

(一応、Mac は virtualenv 環境あるので workon しとく。)
次に、sudo easy_install sphinx で依存含めてインストール。

Mac なら which sphinx-quickstart ができる、
Windows なら where shinx-quickstart ができれば正常にインストールできてます。

■sphinx-quickstart

適当に sphinx のプロジェクトレベルの設定ファイルやらソースファイルやらアウトプットやらをおくディレクトリを作ってあらかじめそこに移動。

sphinx-quickstart してプロジェクト名、作者、バージョンくらいを入力して他デフォルトOKしとく。

■IntelliJ IDEA で インポート
Create project from existing sources でさっき作ったディレクトリのパスを指定して python でプロジェクトを作る。

■ビルドの設定
Edit Configurations で Python docs -> Sphinx task を選択。


次に、Command 、Input、Output 適宜入力。


これで準備OK.

あとは makeすればできる。

■mac の場合の補足
http://memo.yomukaku.net/entries/UaLbzhE

XCode のインストールと Command Line Tools をインストールする。
gcc -v か which gcc と which make でインストール確認。

これインストールしとかないと make コマンドがたたけない。

■自分メモ
IntelliJ IDEA で virtualenv したかったらSDKの設定で普通に virtualenv 環境のパス配下にある Python へのシンボリックリンク「/Users/zono/.virtualenvs/path/hogehoge/python」みたいなのを使えばいい。

すると IntelliJ IDEA が次みたいな感じでsite-packeges も自動でロードしてくれた。
file:///Users/zono/.virtualenvs/sphinx/lib/python2.7/site-packages/*.egg

あと、隠しフォルダがもし見えないときは ln -s /Users/zono/.virtualenvs/sphinx/ /Users/zono/sphinxenv とかって適当にシンボリックリンク作るとなんとかなる。

NameError: Cannot find sphinx in selected interpreter.

こんなエラーになったときは、IntelliJ IDEA のプロンプトに表示される
/Users/zono/.virtualenvs/sphinx/bin/python "/Users/zono/Library/Application Support/IntelliJIdea11/python/helpers/rest_runners/sphinx_runner.py" -b html /Users/zono/sphinxdocs/zonote /Users/zono/sphinxdocs/zonote/_build
みたいなのを確認しよう。
私の場合はシステムの python になっちゃっていたので、Edit Configurations で実行する python を virtualenvs 配下のものに変更したら正常に動作した。

IntelliJ IDEA で無理やり?かはわかりませんが、virtualenv も問題ないのでどんどん virtualenv 環境を作っちゃいましょう。
もちろん、 virtualenvwrapper 使います。


2012年9月12日水曜日

[WebStorm]Live Edit する方法

私が迷ったのでメモ。

※IntelliJ IDEA でも Live Edit できました。プラグインから Live Edit をインストールしてWebStorm と同じようにすればOKです〜。

■環境

WebStorm 5.0
Chrome21

■Live Edit の設定

View に Live Edit があるのでチェックしておく。

Preferences -> IDE settings -> Live Edit
にオプション2つあるので両方共チェックしておく。

WebStorm の右下のほうに EventLog があるのでこれを押下。

23:37:59 JetBrains Chrome Extension
         JetBrains Chrome Extension for Live Editing will be automatically installed after you restart Google Chrome.
         If you wish to install it manually without restarting Chrome, follow this procedure (link opens in a new Chrome window).

このように書いてるのでリンクをクリック。

ポートはそれぞれ変わるような気もしますが http://localhost:63363/index.html にリンクしました。

こんな画面が出ます。

ここに書かれている通り、 Chromeプラグイン jb.crx を名前を付けて適当なパスに保存する。

Chromeの 設定 -> ツール -> 拡張機能 で画面を開き、さっきの jb.crx ファイルをドラッグ・アンド・ドロップする。

これでプラグインをインストールできる。


Chrome21ではChromeウェブストア以外からはプラグインをインストールできないようなので、一旦自分のローカルマシン上にプラグインファイルをDLしてこれを拡張機能の画面へドラッグ・アンド・ドロップすることでプラグインをインストールできるみたいです。


あとは WebStorm に戻って View ー> Open in Browser で Chrome で HTML を開く。

こんな感じで表示されていれば Live Edit できます。


2012年9月4日火曜日

[linux]cicindelaのデモ動かすまで

perlゴリゴリなモジュールとかトライ・アンド・エラーなメモ。
cicindelaのデモを動かすところまででつまったところなど。

■まずはじめに

すべてはここからはじまった。
http://labs.edge.jp/cicindela/

お、簡単そうじゃんと思ったんだけどな。
使うのは簡単かも、環境構築と設定は…どうだろうか。

■環境
AWS(Amazon Linux OS AMI)
apche 2.2
perl 5.10.XX(失念)
mysql 5.X(失念)

yum でインストールできる 2012.09.04時点のバージョンのままでソースからビルドとかレベル高いことはやってません。

■AWSインスタンス作成

とりあえず、AWSでmicro(あとでメモリサイズ600MBではダメなのでsmallに変更するハメになります)インスタンスでサーバセットアップ。

■cicindelaインストール

さあやるぞと公式ドキュメントをみつつ。
http://code.google.com/p/cicindela2/wiki/Install

ここに書かれていることが素直にできればデモまではかんたんです。
私がつまってしまったのは私に問題のノウハウがなかったからです。

svnからソースDLしろってかいてるので
sudo su - して
yum -y install svn

ソースを/home/cicindela へチェックアウト。
パス書き換えるのが面倒なのでとりあえず動きや設定を理解するためにパスはドキュメントに従います。

■MySQLインストール

今度は、mysql がいるのでRDS使わずに1つのサーバでとりあえず全部すませてしまいます。

yum -y install mysql-server

で、my.cnf の設定はシンボリックリンク作らずに手動でマージします。
ここでテーブルヒープメモリのサイズが1GBをこした設定になっていることに気が付かず…。
さきに言っとくとあとで面倒なエラーになるので1GB以上のメモリつんでるサーバにmysqld インスコしないといけないです。
私はあとでmicro→smallにインスタンスタイプを変更しました。

■perlモジュールのインストール

次にperlモジュールのインスコ。

ここハマった。

インストールで依存関係とかよくわかんなにのでCPANでperlモジュールはインストールしたい。

なので下記コマンドでCPAN経由でインストールする。

perl -MCPAN -e shell

まず、AWS環境(Amazon Linux OS AMIだけ?)特有ですが、gcc 入ってません。

なので yum -y install gcc します。

ただ、これでもダメです。

make ができません。

デフォルトでは開発ツールが入っていないようなのでインスコします。
http://memo-off.blogspot.jp/2012/07/make-command-not-found-on-amazon-linux.html

これでいくつかはインスコできるようになりますが、DBD::mysql がエラー。

私の場合は、C/C++からmysql参照するAPIがなく。
http://blogs.yahoo.co.jp/take_low_6/23542159.html


yum -y install mysql-devel

これでDBD::mysql通った。

あと perl --version でたしか5.10.XXだったのでModule::Pluggableはインスコいらなかった。

ためしに perl -e "use Module::Pluggable;" してみてエラーなかったらインスコいらんぽい。

■apache + mod_perl インストール

で、次は apache + mod_perl のインスコ。

これはふつうに yum -y install httpd mod_perl した。

Redhat系OSならIncludeディレクティブはいらない。
http://futuremix.org/2004/05/mod_perl

もし気になるようなら /etc/httpd/conf.d/perl.conf コメントアウトして /etc/httpd/conf/httpd.conf に。

ただどちらにしても次の設定は必要。

Include /home/cicindela/etc/httpd/modperl.conf

この設定によって、http://hostname:80/cicindela/ 以下にアクセスすると perl スクリプトが実行されるようになる。

あと、deamontools はインスコしなかった。

ログは touch と chmod して、ログローテの記述を足した。

これでインスコOK。


■デモの確認

デモを動かしつつほんとにインスコOKなのか確認します。

デモ
http://code.google.com/p/cicindela2/wiki/Demos

デモソースを svn switch で。

cd /home/cicindela/misc
 perl create_init_sql.pl --db_name=cicindela_clip_db | /usr/local/mysql/bin/mysql -uroot

私はmysqlでいつもの調子でパスワードの設定していたので
perl create_init_sql.pl --db_name=cicindele_clip_db | mysql -u root -p

で実行した。

次のデータインポートで問題が。

DBD::mysql::st execute failed: The table 'item_similarities' is full [for Statement "
insert into item_similarities (item_id1, item_id2, score)
...


なにこれ?
ぐぐると先人はおりますもので。

mysqlサーバのメモリ不足。。。
microの600MBサーバにapache + mysql やっちゃってるよってことで、smallにインスタンスタイプ変更。

で、service mysqld start したらエラー。

tail -f /var/log/mysql/error.log 見ると

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

InnoDB: than specified in the .cnf file 0 268435456 bytes!

こんな感じのエラーがね。
http://teketeke55.hatenablog.com/entry/2011/12/04/125227

おっしゃるとおりにやってみる。

/var/lib/mysql/mysql
ib_logfile0
ib_logfile1

上記をmvする。

mysql起動したら正常に立ち上がった。

もう一度データインポートしたら今度はちゃんとつっこめたみたい。

次に設定の_common.pm で datasouce => ["", "", ""]  の2つ目ユーザ名と3つ目パスワードを自分のサーバ設定に変更。

で、batch.pl を起動。

うおーい!
モジュールたらんぞ!

これCPANからインスコ。
http://isann0330.tumblr.com/post/30788996849/vps-1g-centos6-2-unixbench

で、もっかい。
やったー動いたー!

apache 起動してURL叩いたらなんかそっけいない数字の羅列が。

どうやらこれでOKぽい。

まああとはこのリコメンド結果のIDを自サイトのコンテンツと紐付けてかっこよく表示してやればリコメンドの出来上がり!ってわけで。

設定は大変でした。

おわり。













2012年8月31日金曜日

[java]JavaでPDF出力

やりたいことはなんとなくPDF出力。
POIでさわって動的に作ったExcelをJODConverterでLibreOffice経由してPDFに出力できるとそれっぽいなっと。

やり方や考え方はここで示してくれている通りです。
http://d.hatena.ne.jp/s-ishigami/20110520/p1
ただ、いくつかハマったのでメモしときます。
Webでやる前に下記のようにコマンドラインで確認すればまあ問題ないと思いますので、コマンドラインまでのメモになります。

■環境とか

ubuntu-12.04-server-amd64.iso
java version "1.6.0_24" (OpenJDK)
JODConverter2.2.2
LibreOffice 3.5

■手順


1.フォントをインストール

sudo apt-get install otf-ipafont
これやらないと日本語が豆腐になります。もちろんなりました。
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0153

2.LibreOfficeをインストール
http://d.hatena.ne.jp/pochio_pochiyama/20110126/p1

$ sudo apt-get purge "openoffice*.*"
$ sudo add-apt-repository ppa:libreoffice/ppa
$ sudo apt-get update
$ sudo apt-get install libreoffice libreoffice-gnome libreoffice-l10n-ja

add-apt-repository がなかったので。
http://vmem.jp/2010/11/10/add-apt-repository%E3%81%8C%E3%81%AA%E3%81%84/
$ sudo aptitude install python-software-properties

3.LibreOfficeをサービスで起動
http://www32.atwiki.jp/parepan/pages/144.html
結論・・・・

OpenOfficeは「2.4.1日本語版のRPM, JRE付き」を使用した。
 OOo_2.4.1_LinuxIntel_install_wJRE_ja.tar.gz
 解凍してX-windowからsetupを実行してインストールした。

OpenOfficeをサービスで起動する場合は
 # soffice -headless -accept="socket,port=8100;urp;" -nofirststartwizard
 ※「-nofirststartwizard」で起動しないとダメです。

jodconverter-2.1.1を使う。
java -jar jodconverter-2.1.1/lib/jodconverter-2.1.1.jar test.ppt test.pdf

私の環境ではオプションの指定で怒られたので、こんなコマンドでした。
soffice --headless --accept="socket,port=8100;urp;" --nofirststartwizard

実はフォントをこのあとにインストールしてサービス起動し直さず、文字化けの豆腐が直らない直らないとわめいておりましたw
この手順通りにすれば豆腐にはならないです。

4.JODConverterをインストール(というかzip解凍)
http://sourceforge.net/projects/jodconverter/files/JODConverter/2.2.2/

DLするのはこれ。
jodconverter-2.2.2.zip

tomcatやjettyで使うならこれ。
jodconverter-webapp-2.2.2.zip

5.JODConverterを実行して変換
http://chipmunkland.blog104.fc2.com/blog-entry-198.html

java -jar jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar input.xls output.pdf


ここまでできればきっとWebアプリでの連携もできると思います。
フロントエンドのWebアプリでリクエストを受けて、その内部でlocalhost:8080 的なサーバにリクエストレスポンスでバイナリを受け渡すか、Webアプリ内でシェルを実行するかの違いかな。
初めてやったんですが、なかなかおもしろかった。

2012年8月30日木曜日

[IntelliJ IDEA]カーソルがおかしくなったときに見直す設定

こんなカーソル(あとから知ったがcaretというみたい)


こんな感じに戻す


これなんでかなー?と必死だったけど自分で実は設定していたという…


Use block caret の設定を非チェックにしたら元に戻った。
Column Selection Mode とか windows の 上書きモードみたいなんかと思ったけどもっと初歩だった。

2012年8月27日月曜日

[python]py2exe で RuntimeError: EndUpdateResource

python setup.py py2exe でエラーが。

RuntimeError: EndUpdateResource: 指定されたデバイスまたはファイルを開けません。
なんだこれ。


Turns out it was anti-malware software (panda cloud)  i installed that interferred with the creation of the executable.
Since i uninstalled the software everything works smooth.
ウイルスソフト?
一時的にオフにしてやってみるとできたー。

マジでか。

setup.py はこんなやつ。

# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe

py2exe_options = {
    "compressed": 1, #圧縮する
    "optimize": 2,
#    "bundle_files": 2,# dllとexeが別
    "bundle_files": 1,# 1ファイル
}

setup(
    options = {"py2exe": py2exe_options},
    name="hello",
    console=["hello.py"],
#    data_files=[("static", glob.glob("static\\*.html")), ("templates", glob.glob("templates\\*.html"))],
    zipfile = None,
)