2012年10月17日水曜日

Ubuntuでbootを逼迫している古いLinuxカーネルを削除

慣習に従って/bootディレクトリのパーティションを分けていたら(確か100M)、カーネルの更新のたびに、カーネルイメージがインストールされて、それが残って、/bootパーティションを逼迫していた。dist-upgradeができない状態に。
古いカーネルは不要なので削除する。ちなみに、Ubuntuのバージョンは12.04です。
インストールされているカーネルを確認する。

[*****@*****] $ dpkg -l | grep linux-image
rc  linux-image-3.2.0-23-generic           3.2.0-23.36                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
rc  linux-image-3.2.0-25-generic           3.2.0-25.40                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
rc  linux-image-3.2.0-26-generic           3.2.0-26.41                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-27-generic           3.2.0-27.43                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-29-generic           3.2.0-29.46                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-31-generic           3.2.0-31.50                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-3.2.0-32-generic           3.2.0-32.51                             Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-generic                    3.2.0.31.34                             Generic Linux kernel image
いっぱいある。結構たくさんある。なんとなく少しは戻れるように3.2.0-29以前を削除することにする
[****@***] $ sudo apt-get remove linux-image-3.2.0-2{3,5,6,7,9}-generic -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package linux-image-3.2.0-23-generic is not installed, so not removed
Package linux-image-3.2.0-25-generic is not installed, so not removed
Package linux-image-3.2.0-26-generic is not installed, so not removed
The following packages will be REMOVED:
  linux-image-3.2.0-27-generic linux-image-3.2.0-29-generic
0 upgraded, 0 newly installed, 2 to remove and 66 not upgraded.
15 not fully installed or removed.
After this operation, 298 MB disk space will be freed.
Setting up ubuntu-keyring (2011.11.21.1) ...
...(略) ...
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-32-generic
よくみたら最初の方はrcだった。とりあえず、
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y
してOK。df -hするとbootパーティションが半分くらい空いたが、また消すのめんどくさいな。
調べてみると、今の時代ではbootを別パーティションにする必要はないっぽい。
 参考:https://forums.ubuntulinux.jp/viewtopic.php?pid=12939

2012年10月16日火曜日

pyublasのメモ(vector、matrixの受け渡し)

受け渡しに関するメモ

ublas型でも受け渡しができるので便利、ただし、参照型はconstでしか受け取れない。
// コピーなし受け渡し、しかしmatへのアクセスは遅いらしい
template
pyublas::numpy_matrix takeAndReturn(
  pyublas::numpy_matrix mat)
{
 return mat;
}

// ただ返すだけ
template
pyublas::numpy_matrix returnNumpyMatrix(int numRow, int numCol)
{
 pyublas::numpy_matrix mat(numRow, numCol, 0);
 return mat;
}

// ublasをnumpyに変換して返してくれる
template
pyublas::numpy_matrix returnUblasMatrixAsNumpyMatrix(int numRow, int numCol)
{
 ublas::matrix mat(numRow, numCol, 0);
 return mat;
}

// ublasとして返しても変換テーブルで変換して返してくれる。C++で使っている関数がそのまま使える。
template
ublas::matrix returnUblasMatrix(int numRow, int numCol)
{
 ublas::matrix mat(numRow, numCol, 0);
 return mat;
}

// ublasにコピーして渡される
template
void takeUblasMatrix(ublas::matrix mat)
{
}

// コンパイルは通るが、実行時に怒られる
template
void takeUblasMatrixRef(ublas::matrix &mat)
{
}

// ublasに変換してコピーして渡される
template
void takeConstUblasMatrix(const ublas::matrix mat)
{
}

// constだと参照でも渡せる。
template
void takeConstUblasMatrixRef(const ublas::matrix &mat)
{
}

pyublas使うまでのメモ

環境はUbuntu12.04、Boostはインストール済みとする。ちなみに1.46

まずはPyUblasのインストール
ここから最新版をダウンロード http://pypi.python.org/pypi/PyUblas
tar xvzf PyUblas-VERSION.tar.gz
解凍して
cd PyUblas-VERSION
./configure.py --boost-python-libname=boost_python --use-iterators
sudo make install

boost-python-libnameは/usr/libにあるlibboost_python*.soのlibと.soを除いた部分を設定。
今回はCMakeでサンプルをビルドしてみた。別にMakeでもよい
cd test
すると
sample_ext.cppとsample.pyがある
自分で考えろという意味なのか、Makefileとかがない。
調べると必要なものは
Include: boost, python, pyublas
Library: boost_python, python
で、自分の環境では、
Include:
/usr/local/lib/python2.7/dist-packages/PyUblas-ほげほげ/include
/usr/lib/python2.7
Library:
/usr/lib/libboost_python.so
/usr/lib/libpython2.7.so
にあった

ちなみに、PyUblasのIncludeパスはhttp://documen.tician.de/pyublas/faq.html#where-do-the-headers-get-installedを参考に見つけた。

これを元に、Makefileを作っても良いが、楽をするために、CMakeでやった。

cmake_minimum_required(VERSION 2.8)

find_package(Boost COMPONENTS python REQUIRED)
find_package(PythonLibs REQUIRED)
find_path(PYUBLAS_DIR pyublas /usr/local/lib/python2.7/dist-packages/PyUblas-2011.1-py2.7-linux-x86_64.egg/include)

# 共有オブジェクトを作成する
add_library(
  sample_ext
  SHARED
  sample_ext.cpp
)

# インクルードディレクトリ -Iにあたる
include_directories(
  ${Boost_INCLUDE_DIRS}
  ${PYTHON_INCLUDE_DIR}
  ${PYUBLAS_DIR}
)

# リンクディレクトリ -Lにあたる
link_directories(
  ${Boost_LIBRARY_DIRS}
)

# リンク -lにあたる。libboost_python.soとlibpython2.7.soが設定されている
target_link_libraries(
  sample_ext
  ${Boost_LIBRARIES}
  ${PYTHON_LIBRARIES}
)

# libsample_extとならないようにする
set_target_properties(
  sample_ext
  PROPERTIES PREFIX ""
)

パッケージが見つからなかったときの処理とかは書いていない。
これをCMakeLists.txtというファイル名でsample_ext.cppと同じディレクトリにおいて、
そこから
mkdir build
ccmake ..
して見つからなかったところを設定して、(特にPYUBLAS_DIRのところ)
ジェネレートして、makeして、OKだったら
mv sample_ext.so ../
cd ..
python sample.py

2倍されている結果が帰ってくる

2012年8月23日木曜日

jqueryとjquery uiを使ったマウスオーバーによるポップアップ

水色のボックスにマウスをのせるとポップアップが出ます。
ツールチップ的な使い方もできます。
jquery uiのpositionを使って、ポップアップの位置をマウスのポジションからの相対的に決めています。


2012年8月12日日曜日

djangoでsyncdbで管理者ユーザーを設定する

fixtureという機能で設定します。
ココを参考にして、initial_data.json(settings.pyのFIXTURE_DIRSに設定したディレクトリ内)を作成して

 [
   {   
        "pk":1,
        "model": "auth.user",
        "fields": {
            "username": "admin",
            "password": "pbkdf2_sha256$10000$Z9TQtBh3bSmV$gq99AxSMLIHyIjDCSsVRjX8doLYgJxl1p1z7QZMWBr4=",
            "is_staff": true,
            "is_superuser": true
        }
    }
]

を設定する。ちなみにこのパスワードはmanage.py shell(自分はDJANGO_SETTINGS_MODULE=settings ipythonでやる)で次をやって生成する。
>>> from django.contrib.auth.models import User
>>> u = User()
>>> u.set_password('admin') #adminというパスワードを作成
>>> u.password
'pbkdf2_sha256$10000$Z9TQtBh3bSmV$gq99AxSMLIHyIjDCSsVRjX8doLYgJxl1p1z7QZMWBr4='

これでmanage.py syncdbすると自動的にユーザーadminが設定される。

Twitter Bootstrap - tabの中のdropdown menuの表示問題

bootstrap v2.0.4での問題

bootstrapのtabの中にdropdownを置くとはみ出す部分が切り取られてしまう。Stack overflow 再生ボタンをおして、Actionsボタンを押してみてほしい。(+ボタンを押すとソースを見れるページに飛びます)

とりあえずの解決方法

bootstrap.jsの中身を見ていると.tab-contentにはoverflow:auto;が設定されている。 .tab-contentにoverflow:visible;を上書き設定すると直った。

何か他のところで問題がでるかもしれない。 とりあえず、Chrome、Firefox、Safariでちゃんと動いている。

2012年8月1日水曜日

Django - settings.py url.pyでreverseを使う

自分用メモ
url.pyなどで、reverseを使うとurl.pyが実行される時点では、urlの設定はされていないため、うまく動かない。
そこで、django.utils.functionalのlazyを使って、reverseを遅延評価させる。
http://stackoverflow.com/questions/1794655/reverse-django-generic-view-post-save-redirect-error-included-urlconf-doesnt

lazyの解説はここがわかりやすい。

追記
Django1.4からreverse_lazyというメソッドが追加されているのでそれを使えば良い
https://docs.djangoproject.com/en/dev/releases/1.4/#reverse-lazy

例えば、

from django.core.urlresolvers import reverse_lazy

LOGIN_URL = reverse_lazy('accounts-login')