2016年8月13日土曜日

Apache のサーバサイドインクルードの展開

ApacheのSSIを使っていたサイトをフラットなHTMLに置き換えるためのスクリプト。
include, echo, set に対応している。つもり。
> python expand.py < input.shtml > output.html
のようにして使う。
import sys, os, re

setPattern=re.compile('<!--#set\s+var=\"(\w*)\"\s+value\s*=\s*\"(.*)\"\s*-->')
includePattern=re.compile('<!--#include\s+file=\"(.*)\"\s*-->')
echoPattern=re.compile('<!--#echo\s+var=\"(\w*)\"\s*-->')
refPattern=re.compile('\$\{(.*)\}')

def include(filename, env, outs):
    m = refPattern.search(filename)
    if m:
        if m.group(1) in env:
            filename = re.sub(refPattern, env[m.group(1)], filename)
        else:
            print "env does not have", m.group(1)
            sys.exit(0)
    with file(filename) as ins:
        process(ins, outs, env)

def echo(line, varname, env, outs):
    if not varname in env:
        print "env does not have", varname
        sys.exit(0)
    line = re.sub(echoPattern, env[varname], line)
    outs.write(line)

def process(ins, outs, env):
    for line in ins:
        stripped = line.strip()
        ms = setPattern.search(stripped)
        mi = includePattern.search(stripped)
        me = echoPattern.search(stripped)
        if ms:
            env[ms.group(1)] = ms.group(2)
        elif mi:
            include(mi.group(1), env, outs)
        elif me:
            echo(line, me.group(1), env, outs)
        else:
            outs.write(line)

def main(ins, outs):
    process(ins, outs, {})


if __name__ == "__main__":
    main(sys.stdin, sys.stdout)

2016年6月13日月曜日

VMware内のWindowを10に

なんか知らないが大変面倒だったのでメモ。
  • VMWareの提供しているVGA 3Dとかいうドライバが非互換とかで、素直な方法ではアップグレードできない。
  • ISOイメージをダウンロードし、セットアップすれば良い、ということなのでやってみたら、1回目の再起動で続行不可能になり、もとにもどってしまう。
  • どうやらディスクをSCSIにしていたのがいけないということがわかったので、SATAに変更してためしてみると、そもそも起動しない。SATAのドライバが入っていないようだ。
  • メインのディスクの他にSATAのディスクを作り、起動してからマウントする。これでSATAのドライバが入る。
  • 新しく作った方のSATAを削除し、SCSIだったメインディスクをSATAにして起動してみたら無事起動。
  • で、ISOからアップデートしたら無事起動できた。めでたい。

2016年6月10日金曜日

pyenvp

pyenv というものがあるらしい。virtual-env とは何が違うんだろうか。
ここを参考に。
  • Python のバージョン管理システムで、複数のPythonバージョンが共存できるようにしてくれる。
  • ディレクトリごとに、Pythonを指定できるようにしてくれる。
  • もともとPythonbrew という名前だったらしい。
virtualenv のほうは、一つのバージョンのPythonの中で、複数のパッケージ環境を用意するもの。pyenv は複数のバージョンを使えるようにするもの、ということで直行しているようだ。
mac ではbrewで簡単に入る。
> brew install pyenv

> pyenv install -l
とやると利用可能なpythonのバージョンリストが表示される。
jythonとかpypy とかも選べる。
> pyenv install 3.5.1
とやると 3.5.1 がインストールされる。これをデフォルトにするには、globalを使う。
> pyenv global 3.5.1
> python --version

Python 3.5.1
特定のディレクトリに特定のバージョンのpythonをバインドするには、local を使う。
> cd /tmp
> pyenv local 2.7.11
> python --version
Python 2.7.11
> cd 
> python --version
Python 3.5.1
local は、サブディレクトリに対しても効果を持つ。また、local を解除するには—unsetを用いる。
> pyenv local --unset

virtualenv との連携

virtualenv と連携して、versionの一つとして、virtualenv を作ることができる。自動的にactivate / deactivate してくれて便利。下記のようにすると、install と同じレベルのコマンドとしてvirtualenvが追加される。
> brew install pyenv-virtualenv
でインストール。bashrcとかに下記を追加。
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi

virtualenv をつくる

既存のversion をベースにvirtualenvを構築できる。
> pyenv virtualenv 3.5.1 newenv
> pyenv local newenv
> python --version
Python 3.5.1
ただ、anaconda をベースに作ることは、どうもできないっぽい。2.7.11がダウンロード?されてまっさらな環境が作られているような気がする。

2016年6月7日火曜日

Rのグラフをtexに取り込む

デバイスをimplicitに指定する。implicitというのがどうにも気持ち悪いが。。 postscriptもしくはpdfで出力する。
> postscript("projects/R/fig.eps", horizontal = F, onefile = F)
> hist(data[,1])
> dev.off()
オプションを付けないと、eps としてはちゃんとしたものが生成されるのだが、 tex に取り込むと横倒しになる。ちゃんとboundingbox つきで生成されているようなので、 そのままincludegraphicsできる。 pdfでも同様。ただ、こちらはebb -x でboundingboxを別途作る必要がある。
> pdf("projects/R/fig.pdf")
> hist(data[,1])
> dev.off()

ちなみに、png, jpgも同様に作ることができる。 さらに
> pictex("projects/R/fig.tex")
とやると、pictexで出力することも可能。 この場合は
\usepackage{pictex}
\include{fig}
とすればよい。ただ、サイズをどうやって調節したらいいのかよくわからん。

2016年6月6日月曜日

ubuntu 16.04 でcuda

ubuntu16.04 ではgccが5になっているが、nvcc が対応していないため
 error: #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
とか言われる。

gcc 4.9, g++ 4.9 をインストール

> sudo apt-get install gcc-4.9 g++4.9
で、リンクを/usr/local/cuda/binにつくる。
> sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
> sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++

RStudio のインストール Mac OS X

brew tap homebrew/science
brew install r
brew cask install xquartz
brew cask install rstudio
普通のAppとしてインストールされるので LaunchPadから起動できる。 spotlightからも可。

2015年12月24日木曜日

apt-get upgrade でエラー

Ubuntu 14.04 で apt-upgradeしたら変なエラーが出た。
files list file for package `libqt5sql5:amd64' contains empty filename
よくわからないが、
/var/lib/dpkg/info/libqt5sql5\:amd64.list
がおかしいらしい。覗いてみると、本来ファイル名のリストのはずなのに、Cのヘッダファイルは入っていた。削除して
sudo apt-get install libqt5sql5 -reinstall
とやったら治った。しかし、検索してもあまり引っかからないし、なんでこんなことになったのか、ちょっと不思議だ。