2011年12月12日月曜日

wsgiref を使ってpythonで書いた HTTPサーバで画像をアップロード


結構大変だったのでメモ。参考文献は忘れたのでパス。
HTTPでアクセスできるサーバを、 wsgiref というモジュールで書きました。

以下のプログラムどっかでを実行して、
http://localhost:8080 にブラウザからアクセスすると、フォームが現れます。
ブラウザから画像を選択 -> サーバがカレントディレクトリに aaa.png という名前で保存します。

import cgi, StringIO
from wsgiref import simple_server
import numpy, Image

class Selector(object):
    def __init__(self, table, notfound = None):
        tmp = sorted(table, key=lambda x:len(x), reverse=True)
        table = [(x, table[x]) for x in tmp]
        self.table = table # url table
        if notfound:
            self.notfound = notfound # when not found

    def __call__(self, environ, start_response):
        name = "SCRIPT_NAME"
        info = "PATH_INFO"

        scriptname = environ.get(name, "")
        pathinfo = environ.get(info, "")

        for p, app in self.table:
            print p, pathinfo
            if p == "" or p =="/" or pathinfo.startswith(p):
                print app
                return app(environ, start_response)

        if pathinfo == p or pathinfo.startswith(p) and pathinfo[len(p)] == "/":
            scriptname = scriptname + p
            pathinfo = pathinfo[len(p):]
            environ[name] = scriptname
            environ[info] = pathinfo
            return app(environ, start_response)

        return self.notfound(environ, start_response)

    def notfound(self, environ, start_response):
        start_response('404 Not Found', [('Content-type', 'text/html')])
        fp = StringIO.StringIO()
        fp.write(r"""<html><header><title>Not Found</title></header>
<body> 
<H1> URL not found. </H1>
<ul>
""")
        for entry in self.table:
            fp.write(r"<li/> %s %s" % (entry[0], entry[1]))
        fp.write(r"</ul></body></html>")
        fp.seek(0)
        
        return fp

def imageupload(environ, start_response):
    try:
        clen = int(environ["CONTENT_LENGTH"])
    except:
        clen = 0

    f = cgi.FieldStorage(fp=environ["wsgi.input"], 
                         environ=environ, 
                         keep_blank_values=True)
    handle = open("aaa.png", "wb")
    handle.write(f["filename"].file.read())
    handle.close()


    fp = StringIO.StringIO()
    fp.write(r"<html><body> environmental variables <dl>")

    for key in sorted(environ.keys()):
        fp.write(r"<dt>%s</dt><dd>%s</dd>" % (key, environ[key]))
    fp.write(r"</dl></body></html>")
    fp.seek(0)
    
    start_response("200 OK", [("Content-type", "text/html")])
    return fp

def showtop(environ, start_response):
    start_response("200 OK", [("Content-type", "text/html")])
    return r"""<html><body> 
imageupload 
<form action="/image" enctype="multipart/form-data" method="post">
<input type="file" name="filename"><input type="submit" value="Upload">
</form>
</body></html>"""

if __name__ == '__main__':
    application = Selector({"/":showtop, "/image":imageupload})
    srv = simple_server.make_server('', 8080, application)
    srv.serve_forever()

2011年12月8日木曜日

python の site-packagesとdist-packages


Python のインストールパスは、バージョンごと、モジュールごとで異なる。

Python 2.5 以前
  • public モジュール を python-support でインストール (apt-get)
    /usr/lib/python2.X/site-packages
  • public モジュールを ローカルでインストール (easy_install)
    /usr/local/lib/python2.X/site-packages
  • 独自モジュールをローカルでインストール
    /usr/local/lib/python2.X/site-packages
Python 2.6, 2.7
  • public モジュール を python-support でインストール (apt-get)
    /usr/lib/python2.X/dist-packages
  • public モジュールを ローカルでインストール (easy_install)
    /usr/local/lib/python2.X/dist-packages
  • 独自モジュールをローカルでインストール
    /usr/local/lib/python2.X/site-packages

Python 3
  • public モジュール を python-support でインストール (apt-get)
    /usr/lib/python3/dist-packages
  • public モジュールを ローカルでインストール (easy_install)
    /usr/lib/python3/dist-packages
  • 独自モジュールをローカルでインストール
    /usr/local/lib/python3/site-packages



参考
http://www.debian.org/doc/packaging-manuals/python-policy/ch-python.html

2011年12月6日火曜日

/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory


HTK 3.4.1 を 64bit の Ubuntu 10.04 でコンパイルしようとすると、

/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory

というエラーが出る。

そんなときは:

sudo apt-get install g++-multilib


Reference:

2011年12月5日月曜日

boost::python::numeric::array に 値を渡す。 (embedded python)

Boost python に vector を簡単に渡したいときは、次のようにする。

#include <boost/python.hpp>
#include <boost/python/numeric.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
#include <iostream>
#include <vector>

namespace bp = boost::python;

int main()
{
  Py_Initialize();

  bp::object main = bp::import("__main__");
  bp::object namesp = main.attr("__dict__");
  bp::numeric::array::set_module_and_type("numpy", "ndarray");
  // use numpy.ndarray as numeric::array

  bp::class_<std::vector<int> > ("PyVecInt")
    .def(bp::vector_indexing_suite<std::vector<int> > () );
  // tell python how to access the vector

  std::vector<int> vec;
  for(int i=0; i<20; i++)
    vec.push_back(i);

  bp::numeric::array ary(vec); // vector -> ndarray
  ary.resize(bp::make_tuple(4, 5));

  namesp["pyary"] = ary;  // c++ binary --> python interpreter
  exec("print pyary", namesp);
  exec("print pyary.shape", namesp);
  exec("print type(pyary)", namesp);
}


すると、次のような結果が得られる.

[[  0   1   4   9  16]
 [ 25  36  49  64  81]
 [100 121 144 169 196]
 [225 256 289 324 361]]
(4, 5)
<type 'numpy.ndarray'>


等価な python code
#equivalent python code
import numpy
pyary = numpy.array(range(20))
pyary.resize(4, 5)
print pyary
print pyary.shape
print type(pyary)

2011年12月2日金曜日

BibTex: How to change the reference style


Assumption: 
You use cite.sty to allow the multiple references for \cite. 
\usepackage{cite}
e.g., \cite{Yukawa1900-Nature, Tomonaga1901-Nature}


When you compile the line above, you will see
[1, 2] or [Yukawa 1900, Tomonaga 1900], for instance.


If you want to change them into, e.g., (Yukawa 1900; Tomonaga 1901), 

insert the following three lines in the preamble:
\renewcommand\citeleft{(}
\renewcommand\citeright{)}
\renewcommand\citepunct{;}

Reference
The bottom of cite.sty
http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/macros/latex/contrib/cite/cite.sty

bibtex の 引用形式を調整したい。

前提
\usepackage{cite}
で、\cite コマンドに複数の入力を許可している。
e.g., \cite{Yukawa1900-Nature, Tomonaga1901-Nature}

この状態で普通にコンパイルすると、 [1, 2] とかになる。
あるいは、 [Yukawa 1900, Tomonaga 1901]
のようになる。

ここで、 \begin{document} の前に

\renewcommand\citeleft{(}
\renewcommand\citeright{)}
\renewcommand\citepunct{;}

を入れると、
(Yukawa 1900; Tomonaga 1901)
になる。



参考文献
cite.sty の最後のほう
http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/macros/latex/contrib/cite/cite.sty

2011年11月3日木曜日

lv emacs などが文字化けするとき

set-buffer-file-coding-system とかでもダメなときは、

export LC_ALL=ja_JP.UTF-8

で、ターミナルの全てのロケールを変えてみるとうまくいく

Valgrind

以下からダウンロード
http://valgrind.org/downloads/current.html


apt-get install libc6-dbg

2011年10月16日日曜日

Read m2ts videos via OpenCV

Installation
The support formats of OpenCV depend on ffmpeg. 
Thus, install 

sudo apt-get install libx264-dev yasm
git clone git://git.videolan.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure
make
sudo make install

if you can play the file with ffmpeg, you can load it.


Sample code

import cv
import numpy

capture = cv.CreateFileCapture("yourvideo.m2ts")

cv.NamedWindow("Test", cv.CV_WINDOW_AUTOSIZE)
    
while 1:
    img = cv.QueryFrame(capture)
    cv.ShowImage("Test", img)
        
    c = cv.WaitKey(2)
    if c ==ord('q'):
        break

Python and OpenCV2.2



IPLImage (opencv) and Nnmpy Array converter
just copied from
http://opencv.willowgarage.com/wiki/PythonInterface

save the following code as adaptor.py

import cv
import numpy as np

def cv2array(im):
  depth2dtype = {
        cv.IPL_DEPTH_8U: 'uint8',
        cv.IPL_DEPTH_8S: 'int8',
        cv.IPL_DEPTH_16U: 'uint16',
        cv.IPL_DEPTH_16S: 'int16',
        cv.IPL_DEPTH_32S: 'int32',
        cv.IPL_DEPTH_32F: 'float32',
        cv.IPL_DEPTH_64F: 'float64',
    }

  arrdtype=im.depth
  a = np.fromstring(
         im.tostring(),
         dtype=depth2dtype[im.depth],
         count=im.width*im.height*im.nChannels)
  a.shape = (im.height,im.width,im.nChannels)
  return a

def array2cv(a):
  dtype2depth = {
        'uint8':   cv.IPL_DEPTH_8U,
        'int8':    cv.IPL_DEPTH_8S,
        'uint16':  cv.IPL_DEPTH_16U,
        'int16':   cv.IPL_DEPTH_16S,
        'int32':   cv.IPL_DEPTH_32S,
        'float32': cv.IPL_DEPTH_32F,
        'float64': cv.IPL_DEPTH_64F,
    }
  try:
    nChannels = a.shape[2]
  except:
    nChannels = 1
  cv_im = cv.CreateImageHeader((a.shape[1],a.shape[0]),
          dtype2depth[str(a.dtype)],
          nChannels)
  cv.SetData(cv_im, a.tostring(),
             a.dtype.itemsize*nChannels*a.shape[1])
  return cv_im




Sample cod: Yellow image
import cv
import numpy
import adaptor

capture = cv.CaptureFromCAM(0)#CreateCameraCapture(0)
cv.NamedWindow("Test", cv.CV_WINDOW_AUTOSIZE)
    
while 1:
    img = cv.QueryFrame(capture)
    array = adaptor.cv2array(img)
    array[:, :, 0] = 0
    
    cv.ShowImage("Test", adaptor.array2cv(array))
    
    c = cv.WaitKey(2)
    if c ==ord('q'):
        break

Compiling and Installing OpenCV 2.2 on Ubuntu

Compiling and Installing
Download source from:
http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.2/


Then apply the following modifications
https://code.ros.org/trac/opencv/changeset/5206

Then,
cd OpenCV-2.2.0
mkdir build
cd build
cmake .
make 
sudo make install


Sample python code
A sample code  to grab images and show it.
Press q to finish.


import cv


capture = cv.CaptureFromCAM(0)#CreateCameraCapture(0)
cv.NamedWindow("Test", cv.CV_WINDOW_AUTOSIZE)
    
while 1:
    img = cv.QueryFrame(capture)    
    cv.ShowImage("Test", img)
    c = cv.WaitKey(2)
    print c
    if c ==ord('q'):
        break



2011年7月23日土曜日

wmf2eps on windows 7

以下の URL から wmf2eps と  windows 7 用の ps プリンタドライバをダウンロード
http://www.wolf-s.homepage.t-online.de/wmf2eps/win7.htm

で、
デバイスとプリンタをクリック
WMF2EPS Color PS L2 を右クリック
印刷設定を選択
詳細設定
(1) グラフィックスの
TrueType フォントをソフトフォンととしてのダウンロードに
(2) 一番下の PostScript オプションで
PostScript 出力オプションを EPS に
TrueType フォントダウンロードオプションを アウトラインに

とすると、wmf2eps がつかえる。


参考文献:
http://yuu.nkjm.info/diary/20091116.html
http://yuu.nkjm.info/diary/20100409.html

2011年7月1日金曜日

Could not find encoding file "H"

Ubuntu 10.04 LTS  で dvipdfmx で dvi -> pdf に変換しようとすると、

Could not find encoding file "H"

というエラーが出る。

そういうときは、

エンコーディングファイルH があるパス   (/usr/share/fonts/cmap/adobe-japan1)
を、 /usr/share/texmf/web2c/texmf.cnf の
CMAPFONTS = の行に追加すればよい。
% CMap files.

CMAPFONTS = .;$TEXMF/fonts/cmap//;/usr/share/fonts/cmap/adobe-japan1/

ここの最後。



ちなみに、
find /usr/share/ -name H  で、 H があるパスは分かるし、
find /usr/share/ -name texmf.cnf で texmf.cnf があるパスは見つかる。


参考文献
https://groups.google.com/group/fj.comp.texhax/browse_thread/thread/72b421245869931d?hl=ja&pli=1
http://www.massi.mydns.jp/massis_easy_laboratory/2009/08/latexdvipdfmxencoding-file-h.html

2011年6月2日木曜日

zip の引数にアスタリスクをつけるとくっつける順番がかわる。

いわゆる可変長引数の展開の有無です。


zip([range(5), list("abcde")])
[([0, 1, 2, 3, 4],), (['a', 'b', 'c', 'd', 'e'],)]

zip(*[range(5), list("abcde")])
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]

アスタリスクをつけると展開されるので、下の例は

zip(range(5), list("abcde"))
[([0, 1, 2, 3, 4],), (['a', 'b', 'c', 'd', 'e'],)]

と等価。

2011年5月20日金曜日

Ubuntu 10.10 で /dev/dsp が無い問題の解決方法

Ubuntu 10.10 には /dev/dspが標準では存在しません。
参考:  http://d.hatena.ne.jp/kakurasan/20110218/p1
どうやら PulseAudio に完全に?移行したようです。



でも、/dev/dsp を使いたい機会はざらにある訳です。
で、どうするか?
                    padsp
を使います。


コマンドの前にただ padsp とつければ、勝手に OSS のをエミュレートして PulseAudio に送ってくれます。


以上

2011年5月17日火曜日

Anime recommendation for foreign people 2011 Spring (2nd)

This is the best of this season.

あの日見た花の名前を僕たちはまだ知らない
(We still do not know the name of the flower we saw these days.)
http://www.anohana.jp/
http://en.wikipedia.org/wiki/Ano_Hi_Mita_Hana_no_Namae_o_Bokutachi_wa_Mada_Shiranai

5 people (3 boys and 2 girls) were best friends in childhood.
However, because of an accident, a girl in the group died.
After a few years, the main character, Jintan, suddenly can see and talk with the girl (ghost?),
and she asks Jintan to grant her request (the request is not known even by the girl herself).
Then, Jintan tries to grant her unknown wish.

This is a tragedy, but not only a sad story.
The characters tries to get over the tragedy.

2011年5月16日月曜日

Anime recommendation for foreign people 2011 Spring

I recommend a few animations in this season.

1. 花咲くいろは Hana-saku Iroha
http://www.hanasakuiroha.jp/
http://en.wikipedia.org/wiki/Hanasaku_Iroha
A female high school student, Iroha, starts working at a ryokan, a Japanese hotel
because her parents escaped from their debts.
They put Iroha in the ryokan whose Okami is Iroha's grandmother.

You can watch the backstage of a Japanese ryokan,
and the growth of Iroha.


2. 日常 Nichijou
http://www.shinonome-lab.com/
http://en.wikipedia.org/wiki/Nichijou#Anime
Comedy animation. A set of short stories.
The same company as Haruhi makes it.
It is easy because each story is short,
but difficult because this is a absurd comedy.
# Understanding comedy is the most difficult task!

Even if you cannot understand the story,
you can enjoy the cute and dynamic animation.


3. 逆境無頼カイジ  Gyakkyou Burai Kaiji
http://www.ntv.co.jp/kaiji_hakairoku/
http://en.wikipedia.org/wiki/Kaiji_(manga)
A gamble animation.
The central character カイジ, who is a son of Belial with a lot of debts,
tries a dangerous gamble to clean his debts.

This is the 2nd season of 賭博黙示録カイジ (Tobaku Mokushiroku Kaiji).
I recommend you to watch the 1st season since
you are required some back story about カイジ.

You will hear a lot of slangs.

2011年5月4日水曜日

戦術と指揮

元自衛官が書いた、戦術の問題集。
最初に戦術の基本原則を述べ、
次に1ページ1問の基本問題を解き、
最後に一連の戦いの中の戦術の決定問題を解く。

基本的に
(1) 状況説明
(2) 取り得る選択肢の説明
を行い、
選択肢から一つを選ぶ。
その後、著者が書く選択肢の善し悪しとその理由を述べる。



他の人が書いているとおり、ビジネスに直接役立つかは不明だが、
自分で考える戦記物と思えばとてもおもしろい。

また、はじめの基本問題を解いて、
その応用として後半の島での戦闘の指揮を考えるので、
よくできた戦術の教科書だとおもった。



これを読んで Cossacks とかをもう一回やりたくなった。



2011年4月19日火曜日

customizing citep

tex で
\citep を使ったとき、引用される方が
(G. Bill, 1999)

(G. Bill 1999)
にしたいときはプリアンブルで
\renewcommand{\citep}[2][\empty]{(\citealt[#1]{#2})}
とすれば良い

参考文献
http://d.hatena.ne.jp/kamo_negitoro/comment?date=20090130

2011年4月6日水曜日

Chrome Customized Search

Chrome はアドレスバーに検索したい語を入れてエンターキーを押すと検索ができる。
実はそれだけじゃなくて、
キーワード + タブ + 検索語
で、特定の検索エンジンで検索ができる。

例えば、僕は次の3つのキーワードを使っている。
「ae + Tab + 語」 でALC で検索
「lm + Tab + 語」 でLongman 英英辞典で検索
「gs + Tab + 語」 で Google Scholar で検索

こうすると、同じ方法でいきなり専門の検索ができて便利。


やり方は以下の通り。
1. Chrome の設定-基本設定(デフォルト)-検索エンジンの管理をクリックして、
「その他の検索エンジン」の下にあるボックスに注目する。
# 設定は、スパナアイコンをクリックして、出てくるメニューにある。

2. すると、下のようなテキストボックスたちがみつかる
新しい検索エンジンを追加 キーワード 検索キーワードの代わりに~
で、左端から順に
名前 (なんでもいい)、 キーワード (aeとか)、 URLでクエリを%sに置き換えたもの
を入力すればよい。



具体的には次の3つを足すと終了。
Google Scholar + gs +  http://scholar.google.co.jp/scholar?q=%s
Longman + lm + http://www.ldoceonline.com/search/?q=%s
ALC + ae + http://eow.alc.co.jp/%s/UTF-8/

2011年3月30日水曜日

python で list/array の中身をaccumulateする

つまり、
[1, 3, 10, 1, 3]
という list / array から
[1, 4, 14, 15, 18]
を求める。


import numpy
import numpy.random
x = numpy.random.uniform(0, 100, 100)
accum = [sum(x[:i]) for i in range(1, x.shape[0])]


# x が listのとき
x = list(x)
accum = [sum(x[:i]) for i in range(1, len(x))]

2011年3月23日水曜日

pylab でプロットした画像の余白を消す方法

次のようなプロットを行う。
import pylab
pylab.plot([1,2,3])
pylab.savefig("test.eps")


で、次のようなtexで埋め込む。
\documentclass[a4paper]{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}
\includegraphics{a.eps}
\end{figure}
\end{document}

すると、画像の周囲に余白ができてしまう。
この余白を、(1) ベクトル画像を保ったまま、(2) フリーのツールを使って、消す方法。

ポイントは、 inkscape を使う。
Ubuntu ならインストールは sudo apt-get intall inkscape でおk

(1) inkscape で読み込み
ターミナルから
inkscape test.eps

(2) 出てきた画像を右クリック - グループ解除を選択

(3) いったん画像と関係ないところをクリックしてフォーカスを外す。

(4) 余白だけを左クリックして DEL キー
すると、余白だけが消える。

(5) ファイルー名前をつけて保存で、EPS を選んで保存。



Adobe Illustrator を持っている場合は、
まったく同じ事がそれでできる。

ubuntu10.04で、platexによるtexのコンパイルを行ったら文字化けするときの対処方法

日本語環境セットアップヘルパでフォントたちをインストール (IPAフォントとか全部)
ubuntu-ja-setup-helper

これでも文字化けすることがあるので、
sudo update-vfontmap

を一回行えばフォントが適用されて、文字化けが無くなる

2011年3月8日火曜日

How to write MATLAB .mat by python (scipy)

Thanks to my colleague, we found how to write a .mat file.

The following is how to read a .mat file
http://mzmttks.blogspot.com/2011/01/how-to-read-matlab-mat-by-python-scipy.html






import numpy
import scipy.io.matlab.mio

outdict = {'string':'string', 'value':2, 'complex':1+3j,
'array':numpy.ones([2,3],'float')}
obj = scipy.io.matlab.mio.MatFile5Writer(open('hoge.mat','w'))
obj.put_variables(outdict)

2011年3月7日月曜日

git through http proxy

http proxy 経由でgit を使う方法。

なんだか corkscrew を入れたり色々している方法が
よく見るけども、git の設定でできる。

git config --global http.proxy http://proxy.server.name:port

2011年2月28日月曜日

日本人のための科学論

元宇宙飛行士で、現在日本科学未来館館長の毛利さんが書いた本。

科学研究は社会へ還元するために行われるべきだと主張している。
そして、「役に立つ」ことはすべての研究が主張すべきだと言っている。
そして、科学コミュニケータを含む未来館の取り組みを紹介している。

(1) には同意する。
なぜなら、遠い未来だとしても役に立つことをあきらめたら
最終目標を決めるのが難しいからである。
少なくとも税金で研究費をもらっている以上それを主張するのは必要だと思う。
仮に研究費をもらっていなくても、どこからか給料をもらっているなら
その給料に見合う分は役に立つような研究をする、
というか、どう役に立つかを考える時間を割くのは必要だと思う。


(2) は、人材育成にとても役立っているようで、
前に一度言ったがもう一度未来館を訪れてみたいと思った。
各展示には研究者が企画から関わっているらしくて、
本当にすごいと思った。



2011年2月7日月曜日

python で 値の最大・最小を定める関数

Guarantee that the returned value is in [minlim, maxlim].


def inrange(val, maxlim, minlim):
     min(max(val, minlim), maxlim)

Generate the same "random" values with Python

一度乱数の状態をpickle で保存しておいて、
次からはそれを読み出して生成する。


状態の保存 (save state)
import random
import pickle


pickle.dump(random.getstate(), open("randomseed.pickle", "w"))



状態の読み込み (load state)
import random
import pickle


random.setstate(pickle.load(open("randomseed.pickle")))


x = range(100)
random.shuffle(x)

fancy index を使って配列を足す

Input
(1) 繰り返しを許すインデックスの配列
   index = numpy.array([1, 2, 2])
(2) インデックス配列に対応する足したい値の配列
   weight = numpy.array([1,2,3])
(3) 足される値の配列
   value = numpy.zeros(5)


Output
(1) の回数だけ (2) を足す


Problem 
value[index] += weight
--> 最後に indexに出て来る値だけが足される
value = [0, 1, 3, 0, 0]

でも、繰り返し文足してほしい
desire:  value = [0, 1, 5, 0, 0]


Solution 
value[list(set(index))] += [sum(weight[numpy.where(index == key)]) for key in set(index)]


でも
for x in zip(index, weight):
   weight[x[0]] += x[1]
の方が計算量的にも断然はやい

玄柴購入

faith から、玄人志向が出している小型サーバの玄柴を購入してみた。

USB ポートを使ったシリアル通信をするので、

apt-get install gtkterm

をインストールすると使いやすい。

メニューバーの
Configuration をクリックして、 Port をクリック。
以下のように設定をする

Port:  /dev/ttyUSB0
Speed: 115200
Parity, Bits, Stopbits, Flow control そのまま

そして、

玄柴の電源ケーブルとUSB ケーブルを差して、電源を入れる。
ユーザ名は root
パスワードはnosoup4u
でいける。



最後に、以下の URL に従って設定を行うと、
自動的に DHCP サーバを探し出して、接続してくれる。

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0101


最後に
apt-get update
apt-get upgrade


で最新版に。

これを使って何してあそぼうかな

2011年2月2日水曜日

tex で ギリシャ文字を太字に

\bf のかわりに \boldstyle


参考:
http://homepage.seesaa.net/article/12246140.html

視聴アニメ (更新)

まどかマギカは本当におもしろい。


魔法少女まどかマギカ
バクマン
べるぜバブ
みつどもえ
夢食いメリー
ドラゴンクライシス
これはゾンビですか?
とある魔術の禁書目録
かみちゅ!
STAR DRIVER

フラクタル
インフィニットストラトス


終了
それでも町は廻っている



切ったもの
放浪息子

2011年1月16日日曜日

今期の視聴リスト

魔法少女まどかマギカ
バクマン
べるぜバブ
みつどもえ
夢食いメリー
ドラゴンクライシス
これはゾンビですか?
それでも町は廻っている
とある魔術の禁書目録
かみちゅ!
STAR DRIVER


未視聴
フラクタル
放浪息子
インフィニットストラトス

2011年1月7日金曜日

tar.gz ファイルを展開してファイルを一つずつ取ってくる python スクリプト

tar.gz で固めたファイルを HDD に書き出すこと無く取り出すスクリプト。


import tarfile


x = tarfile.open("something.tar.gz", "r:gz")


for f in x.getmembers():
    fileobj = x.extractfile(y.name)

2011年1月6日木曜日

kinect から 距離画像を取ってくるROSパッケージ

kinect の記事を書いたらアクセスが増えたので追加してみます。
今回は、ROS 経由でkinect の距離画像を取ってくる方法です。



(1) ROS パッケージを作成
ここでは kinectTest という名前にしてみます。

roscreate-pkg kinectTest rospy roscpp std_msgs

この辺は、 ROS のチュートリアル (http://www.ros.org/wiki/ROS/StartGuide) にあります。



(2) ROS_PACKAGE_PATH に kinectTest へのパスを通す。
ディレクトリが /opt/kinectTest だとすると、
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/opt/kinectTest



(3) node 作成。
kinectTest ディレクトリ以下に node ディレクトリを作成し、
以下のスクリプトをおく。
そして、実行権限を与える。  (chmod +x ファイル名)

#!/usr/bin/env python


import roslib
roslib.load_manifest('kinectTest')
roslib.load_manifest('openni_camera')
import rospy
from sensor_msgs.msg import PointCloud2
import numpy
import pylab
import time




def callback(data):
    resolution = (data.height, data.width)
    # 3D position for each pixel
    img = numpy.fromstring(data.data, numpy.float32)
    x = img[0::4].reshape(resolution)
    y = img[1::4].reshape(resolution)
    z = img[2::4].reshape(resolution)
    
    # show them
    print time.asctime()
    pylab.clf()
    pylab.imshow(numpy.flipud(z), interpolation="nearest",
                 vmax=3, vmin=0)
    pylab.xlim([0, data.width])
    pylab.ylim([0, data.height])
    pylab.colorbar()
    pylab.draw()




def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('/camera/depth/points2',
                     PointCloud2, callback)
    rospy.spin()


if __name__ == "__main__":
    pylab.ion()
    listener()


(4) 走らせる。
まず kinect から画像を取得する。
roslaunch openni_camera openni_kinect.launch 

次に、本プログラムを実行
rosrun kinectTest showDepth.py

すると、距離画像がリアルタイムで表示されます。
やや遅いのは pylab.draw を使っているからでしょう。


--- 
これで z に距離画像の2次元配列を得ることができるので、
色々やると何か新しいことができそうです。

2011年1月5日水曜日

How to read MATLAB .mat by python (scipy)

python で MATLAB の .mat ファイルを読む方法



MATLAB の .mat ファイルとは、 MATLAB のコンソールで

save ファイル名 保存したい変数名

で生成される MATLAB 用のファイル。
計算結果の保存とかに使う。
例:
     save result.mat resultMatrix


scipy.io.matlab.mio を使う。
これが .mat ファイルのインターフェイスになっている。


import scipy.io.matlab.mio
import numpy
import sys


filename = sys.argv[1]
obj = scipy.io.matlab.mio.MatFile5Reader(open(filename))
var = obj.get_variables()['var'] 
#var is the name of a variable you want to get



matlab で保存した計算結果を python で扱いたいときに便利。