devlog

http://twitter.com/yusukei

tmuxでコピーモードでコピーした際にpasteboardにもコピーする

tmuxが非常に便利で愛用しているのですが、コピーモードでコピーを行った際に、pasteboardにも一緒にコピーして欲しいとずっと思っていたので、パッチを書いてみました。

こちらにおいてあります。

また、このパッチはtmux-MacOSX-pasteboardが必要になります。

homebrew用のFormulaも作ってみました。

こちらにおいてあります。

はじめてのInfiniBand

先日、InfiniBnadのカードを借りることができたのでさっそく自宅のマシンに入れてみました。マシン構成としてはWindows 7CentOS 5.6の2台の間をInfiniBandで接続しました。

CentOSの方は適当にlibib*とかlibrdma*とか必要そうなものをいれてopenibdとopensmdを動かせばOK。

IPoIBを行うために、
/etc/sysconfig/network-scripts/ifcfg-ib0
に適当にIP Address振ってifup ib0とかすればOK。

Windows 7の方は
http://www.mellanox.com/content/pages.php?pg=products_dyn&product_family=32&menu_section=34
からドライバとツールが一式になっているので、落としてきてインストール。

あとはこちらもIPoIBを行うためにIP Addressの設定を行えば通信できます。


で、CentOS側にSambaを入れてみました。
それをWindows 7側でマウントしてベンチマークをとってみました。また、ディスクの性能に引っ張られないようにCentOS側はtmpfsを使っています。



Samba on InfiniBand (10Gbps)



Samba on Ethernet (1Gbps)


さすがに10倍とはいかないですが、1Gbpsを超えた値が出てます。またInfiniBandを使っているとはsmbのCPU負荷が80%を超えていたりするので、CPUパワーが足りないかもしれないです。

Sphinxで日本語PDFを出力する

Sphinxを使ってlatexpdfでPDFを出力しようとしたところ、日本語でこけてしまいます。
でなんとかPDFを出せないものかと思って試行錯誤しました。

エラーが出ているのはpdflatexコマンドで起きています。
もともとpdflatexコマンドは日本語を通すのが大変そうなので、
とりあえずplatex->dvipdfmx経由でPDFを出力してみました。

こちらを参考にしてみました。
http://d.hatena.ne.jp/s_yano/20100921/1285048025

ここまでで、手動でPDFを作れるようになったので自動化したいな、と思います。
で、何はともあれ、毎回sphinx.styを書き換えるのは面倒なので、オリジナルを直接書き換えます。
オリジナルは

/Library/Python/2.6/site-packages/Sphinx-1.0.7-py2.6.egg/sphinx/texinputs

以下にsphinx.styがあったので直接書き換えました。

どこにあるのか分からない!って場合は
ターミナルで

# python
>>> import sphinx
>>> print sphinx


のようにすれば場所を探す時の参考になるかと思います。


これで毎回sphinx.styを書き換える必要がなくなったので、
あとはmakeコマンドからビルド出来るようにしたいです。

で、よくよくbuild/latex/Makefileをみてみると
all-pdf-ja
なんてものが定義されているじゃありませんか。
早速呼び出してみるとちゃんとPDFができあがります。

というわけで、あとは普段makeする場所にあるMakefile

latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
make -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."


とあるはずなので

latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
make -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."


と書き換えます。
これで無事にmake latexpdfでビルド出来るようになりました!


ちなみにこのMakefileも書き換えたい場合は

/Library/Python/2.6/site-packages/Sphinx-1.0.7-py2.6.egg/sphinx/quickstart.py

を書き換えればOKです。

RTX1100導入

GW直前にRTX1100が手に入ったこともあって、自宅内ネットワークの刷新を行ってみました。今まではTime Capsuleをベースとして構築されていたものを、RTXをベースに置き換えました。ただし、そのまま置き換えたのではRTXは100Baseなので1GBaseのTime Capsuleよりも遅くなってしまい、また無線LANもないためTime Capsule自体をなくすことはできなくなってしまいます。


そこでルータの機能はRTXで行い、ブリッジモードにしたTime Capsuleにはアクセスポイントと、1G Hubの役割を担ってもらうことにしました。


ちなみにこのRTX1100はご存知の方も多いかと思いますが、ほとんどの操作をコマンドベースで行います。最初は面倒だなと思っていたのですが、設定変更をした際に再起動がいらないということや、設定をコマンド一発で表示できたりと素晴らしいの一言。
一度使い始めると手放せなくなります。さすがは業務用と言ったとことです。


さて、その設定ですが、自宅はマンションの回線共有タイプなのですが、WANにつなぐための設定は、PPoEではなく単純にDHCPでとってくるだけというお手軽なものです。
しかしながらWAN側の設定をDHCPで取得するような設定がWeb上でもほとんど見受けられませんでした。
一応、メモ代わりにConfigを記載しておきます。

# show config
# RTX1100 Rev.8.02.31 (Fri Jan 14 11:04:37 2005)
# Memory 32Mbytes, 3LAN, 1BRI
console character ascii
login timer 300
ip route default gateway dhcp lan2
lan type lan1 auto
ip lan1 address 192.168.11.1/24
ip lan1 proxyarp on
lan type lan2 auto
ip lan2 address dhcp
ip lan2 intrusion detection in off reject=off
ip lan2 intrusion detection out off reject=off
ip lan2 nat descriptor 1
pp select anonymous
pp bind tunnel1
pp auth request mschap
pp auth username USERNAME PASSWORD
ppp ipcp ipaddress on
ppp ipcp msext on
ppp ccp type mppe-any
ip pp remote address pool 192.168.11.200-192.168.11.209
pptp service type server
pp enable anonymous
tunnel select 1
tunnel encapsulation pptp
tunnel enable 1
nat descriptor type 1 nat-masquerade
nat descriptor address outer 1 primary
nat descriptor masquerade static 1 3 192.168.11.1 tcp 1723
nat descriptor masquerade static 1 4 192.168.11.1 gre
dhcp service server
dhcp scope 1 192.168.11.100-192.168.11.110/24
dns server dhcp lan2
snmp host IPADDRESS
snmp community read-only public
pptp service on
httpd service off
httpd host lan1
upnp use on

Firewallの設定がまだだったりNAT設定が怪しかったりしますが、その辺は追々やります。ひとまずTime Capsuleの時に比べてPPTPによるVPNが出来るようになったのが一番のメリットでしょうか。これで会社からでも出先からでも自宅のNASにアクセスすることが出来るようになりました。


ついでにZabbixを導入してRTX1100のモニタリングを行うようにしてみました。

可視化を行うと使っていない時間も思いのほか通信していることが分かったりと面白いです。

PySide + QUiLoaderを使ったテスト その2

UIファイルをロードしてSignalとSlotを設定してみます。
基本は前回と同じ。UIファイルは前回と同じものを使っています。
ボタンを押すと標準出力にpushed!と表示されます。


test02.py

from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader

class MyQUiLoader(QUiLoader):
    def __init__(self, baseinstance):
        QUiLoader.__init__(self)
        self.baseinstance = baseinstance

    def createWidget(self, className, parent=None, name=""):
        widget = QUiLoader.createWidget(self, className, parent, name)
        if parent is None:
            return widget
        else:
            setattr(parent, name, widget)
            return widget

def loadUi(uifile, baseinstance=None):
    loader = MyQUiLoader(baseinstance)
    ui = loader.load(uifile)
    QtCore.QMetaObject.connectSlotsByName(ui)
    return ui
        
class TestDialog(object):
    def __init__(self):
        self.ui = loadUi('test.ui')
        
        self.ui.formLayoutWidget.pushButton.clicked.connect(self.onPushButton)
        self.ui.show()
        
    def onPushButton(self):
        print 'pushed!'
        
    def loadUi(uifile, baseinstance=None):
        loader = MyQUiLoader(baseinstance)
        ui = loader.load(uifile)
        QtCore.QMetaObject.connectSlotsByName(ui)
        return ui

    
if __name__ == '__main__':
    
    import sys
    app = None
    if QtGui.QApplication.instance() is None:
        app = QtGui.QApplication(sys.argv)
    else:
        app = QtGui.QApplication.instance()
    
    w = TestDialog()

    app.exec_()

PySide for Windows 64bit

PySideのwin64向けにビルドを行ってみました。
またビルドを行うのに手間を省くためのバッチファイルも作ってみました。

結論から言うと、

cmakeを行う際に-G "NMake Makefiles"を付けること。
コマンドプロンプトでは対象となるVisualStudioの環境が設定されていること。

この2点さえ守れば問題なくビルドできるはずです。

Maya 2011向けにビルドを行ったバイナリは以下に置いてあります。
http://www.yusukei.mydns.jp/

以下にPySideビルド用のバッチスクリプトの使い方などを記します。


1.はじめに
今回の説明ではVisualStudio 2005を使っていますが、
それ以降のバージョンでも問題ないと思います。
それぞれの環境に合わせて読み替えてください。
また、CMakeおよびPython2.6もしくは2.7のインストールを行っておいてください。


次に以下のものを用意します。
Qt SDK 4.7
apiextractor 0.10.0
generatorrunner 0.6.7
shiboken 1.0.0
pyside qt4.7+1.0.0
pyside-buildscripts (download)


2.Qt4.7のビルド
Qt SDKをインストールした後に
Visual Studio 2005 x64 Win64 コマンド プロンプト」を呼び出し、

> cd C:\Qt\2010.05\qt
> configure

を実行します。オープンソース版もしくは商用版を選択すると自動的に設定が行われます。
設定後、nmakeとすることでビルドが開始されます。


3.PySideのビルド
Qtのビルドが出来たらpyside-buildscriptsのsrcの中にapiextractor, generatorrunner, shibokenそれぞれを配置します。
PySude-buildscriptsの中のbuild-config.batの中にQTDIRやPYTHON_BASENAMEなどがあるので必要に応じて変更してください。

あとは「Visual Studio 2005 x64 Win64 コマンド プロンプト」の中で
build-all.batを呼び出せばPySideが出来あがります。


4.モジュールのインストール
コンパイルが出来あがったら
PySide-buildscripts\build\lib\site-packages
の中にPySideディレクトリがあるので、PYTHONPATHを設定するか、PYTHONPATHの通ったところへコピーしてください。
また、PySide-buildscripts\binの中にあるpyside-python2.6.dll、shiboken-python2.6.dllがPATHの通った場所へ置くか、もしくはPySideモジュールの中へコピーしてください。