Hatena::ブログ(Diary)

And then I shall be free

2011-11-02

ローカルに作った gem の中身を irb の中から読むには

21:04

今まで知らなかったのがアホなだけなのだが、

gem では、ホームディレクトリにローカルにリポジトリを作ることができる。

gemには、$HOME/.gemrc を通して、その場所を伝える。

rubyirb は、そんなファイル、知ったことではない。

そこで、

require 'rubygems'

と書くと、gemの環境定義を調べて、gemの中のlibに、パスを通してくれる。

だから、冒頭で、 require rubygems とやるのは大事。

.gemrcの中で gemhome とかいって、パスを指定するのだが、そこにチルダを書くと、gemコマンドは認識するが、 require rubygems の方は、認識しないので、注意!!

ほげほげ does not appear to be a gem repository というエラーを食らう。

qpidd 設定メモ

09:30

前回のTurboGearsは、なにもできてないんだけど、それはさておき、

CentOSでqpidを動かしてみるメモ。

Apache qpid は、AMQPプロトコルをサポートしたMOM。

RabbitMQはErlangで書かれていて、性能をずいぶん追求してるみたいだけど、こちらはおとなしくC++で実装されている。

CentOSでRabbitMQを探したら、入ってなくって、代わりにqpidが入っていたので、動かしてみる。

http://qpid.apache.org/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/ch01.html#section-Running-a-Qpid-CPP-Broker

これを読みながら進める。

まず、qpidをインストールすると、デーモンの起動・停止スクリプトが普通にインストールされるので、それをたたいてみる。

% sudo /etc/init.d/qpidd start

で起動

% sudo /etc/init.d/qpidd stop

で停止。

認証するには、saslとかいう仕組みをつかうらしい。それには、

(1) qpidd の起動時設定ファイルの中で、realm名を決めて指定しておいて

(2) saslのツールを使ってパスワードファイルを所定の場所に作成し、

(3) パスワードファイルのオーナーを qpidd の実行ユーザ (centos では "qpidd")のみにして600 にしておく

ということをする。

(1)について、/etc/qpidd.conf の中に、以下を書く。

auth=yes
realm=myrealm

(2) については、saslのコマンドをたたく

% sudo saslpasswd2 -f /var/lib/qpidd/qpidd.sasldb -u myrealm mb25010

パスワードを求められる。

登録されているパスワード一覧を見るコマンドがある。

% sudo sasldblistusers2 -f /var/lib/qpidd/qpidd.sasldb
mb25010@myrealm: userPassword

(3)は省略。

デーモンを起動したあとで、これらの設定をしてしまったので、デーモン再起動

% sudo /etc/init.d/qpidd restart

2011-10-25

TurboGears 練習

00:17

OSxubuntu 11.10 amd64.

見るのは、http://www.turbogears.org/book/part1/wiki20.html

  1. virtualenv のインストール

virtualenvは、pythonの追加ライブラリインストール先として、マシンのデフォルトディレクトリではないディレクトリを作るもの。そのディレクトリインストールする分には、マシンのデフォルトライブラリ一式を汚す心配がない。

ubuntuで使えるようにするには、python-virtualenv をインストールする。

% sudo apt-get install python-virtualenv
  1. ipythonのインストール

ipython を使うと、入力補完とか、できるらしい。

チュートリアルにはeasy_installの利用例が示されているが、うまくいかなかった。

ふつうにapt-getしたらうまくできた。

% sudo apt-get install ipython

ずいぶんいろいろと、前提で取り込まれたぞ。

そしたら仮想環境を作る。

% virtualenv myenv

その仮想環境に入る

% . myenv/bin/activate
(myenv)%

入るとプロンプトが変わる。

この中で、turbogearsインストールする。

(myenv)% easy_install tg.devtools

チュートリアルにいわれるままに、paster quickstart を起動。rails に相当するコマンドですね。

(myenv)% paster quickstart
Enter project name: Wiki 20
Enter package name [wiki20]: wiki20
Would you prefer mako templates? (yes/[no]): no
Do you need authentication and authorization in this project? ([yes]/no): yes
Selected and implied templates:
  tg.devtools#turbogears2  TurboGears 2. Standard Quickstart Template

Variables:
  auth:          sqlalchemy
  cookiesecret:  a271a731-563d-41e4-b93a-5d264b1e3e24
  egg:           Wiki_20
  geo:           None
  mako:          False
  migrations:    True
  ming:          False
  package:       wiki20
  project:       Wiki-20
  sqlalchemy:    True
  tgversion:     2.1.3
Creating template turbogears2
Creating directory ./Wiki-20
  Recursing into +package+
    Creating ./Wiki-20/wiki20/
    Copying __init__.py_tmpl to ./Wiki-20/wiki20/__init__.py
    Recursing into config
      Creating ./Wiki-20/wiki20/config/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/config/__init__.py
      Copying app_cfg.py_tmpl to ./Wiki-20/wiki20/config/app_cfg.py
      Copying deployment.ini_tmpl_tmpl to ./Wiki-20/wiki20/config/deployment.ini_tmpl
      Copying environment.py_tmpl to ./Wiki-20/wiki20/config/environment.py
      Copying middleware.py_tmpl to ./Wiki-20/wiki20/config/middleware.py
    Recursing into controllers
      Creating ./Wiki-20/wiki20/controllers/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/controllers/__init__.py
      Copying controller.template_tmpl to ./Wiki-20/wiki20/controllers/controller.template
      Copying error.py_tmpl to ./Wiki-20/wiki20/controllers/error.py
      Copying root.py_tmpl to ./Wiki-20/wiki20/controllers/root.py
      Copying secure.py_tmpl to ./Wiki-20/wiki20/controllers/secure.py
      Copying template.py_tmpl to ./Wiki-20/wiki20/controllers/template.py
    Recursing into i18n
      Creating ./Wiki-20/wiki20/i18n/
      Recursing into ru
        Creating ./Wiki-20/wiki20/i18n/ru/
        Recursing into LC_MESSAGES
          Creating ./Wiki-20/wiki20/i18n/ru/LC_MESSAGES/
          Copying +package+.po_tmpl to ./Wiki-20/wiki20/i18n/ru/LC_MESSAGES/wiki20.po
    Recursing into lib
      Creating ./Wiki-20/wiki20/lib/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/lib/__init__.py
      Copying app_globals.py_tmpl to ./Wiki-20/wiki20/lib/app_globals.py
      Copying base.py_tmpl to ./Wiki-20/wiki20/lib/base.py
      Copying helpers.py_tmpl to ./Wiki-20/wiki20/lib/helpers.py
    Recursing into model
      Creating ./Wiki-20/wiki20/model/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/model/__init__.py
      Copying auth.py_tmpl to ./Wiki-20/wiki20/model/auth.py
      Copying model.template_tmpl to ./Wiki-20/wiki20/model/model.template
    Recursing into public
      Creating ./Wiki-20/wiki20/public/
      Recursing into css
        Creating ./Wiki-20/wiki20/public/css/
        Copying admin.css to ./Wiki-20/wiki20/public/css/admin.css
        Copying style.css to ./Wiki-20/wiki20/public/css/style.css
      Copying favicon.ico to ./Wiki-20/wiki20/public/favicon.ico
      Recursing into images
        Creating ./Wiki-20/wiki20/public/images/
        Copying add.png to ./Wiki-20/wiki20/public/images/add.png
        Copying contentbg.png to ./Wiki-20/wiki20/public/images/contentbg.png
        Copying delete.png to ./Wiki-20/wiki20/public/images/delete.png
        Copying error.png to ./Wiki-20/wiki20/public/images/error.png
        Copying header_inner2.png to ./Wiki-20/wiki20/public/images/header_inner2.png
        Copying headerbg.png to ./Wiki-20/wiki20/public/images/headerbg.png
        Copying info.png to ./Wiki-20/wiki20/public/images/info.png
        Copying inputbg.png to ./Wiki-20/wiki20/public/images/inputbg.png
        Copying loginbg.png to ./Wiki-20/wiki20/public/images/loginbg.png
        Copying loginbottombg.png to ./Wiki-20/wiki20/public/images/loginbottombg.png
        Copying loginheader-left.png to ./Wiki-20/wiki20/public/images/loginheader-left.png
        Copying loginheader-right.png to ./Wiki-20/wiki20/public/images/loginheader-right.png
        Copying menu-item-actibg-first.png to ./Wiki-20/wiki20/public/images/menu-item-actibg-first.png
        Copying menu-item-actibg.png to ./Wiki-20/wiki20/public/images/menu-item-actibg.png
        Copying menu-item-border.png to ./Wiki-20/wiki20/public/images/menu-item-border.png
        Copying menubg.png to ./Wiki-20/wiki20/public/images/menubg.png
        Copying ok.png to ./Wiki-20/wiki20/public/images/ok.png
        Copying pagebg.png to ./Wiki-20/wiki20/public/images/pagebg.png
        Copying pencil.png to ./Wiki-20/wiki20/public/images/pencil.png
        Copying star.png to ./Wiki-20/wiki20/public/images/star.png
        Copying strype2.png to ./Wiki-20/wiki20/public/images/strype2.png
        Copying under_the_hood_blue.png to ./Wiki-20/wiki20/public/images/under_the_hood_blue.png
        Copying warning.png to ./Wiki-20/wiki20/public/images/warning.png
      Recursing into javascript
        Creating ./Wiki-20/wiki20/public/javascript/
        Copying empty to ./Wiki-20/wiki20/public/javascript/empty
    Recursing into templates
      Creating ./Wiki-20/wiki20/templates/
      Copying __init__.py to ./Wiki-20/wiki20/templates/__init__.py
      Copying about.html to ./Wiki-20/wiki20/templates/about.html
      Copying authentication.html to ./Wiki-20/wiki20/templates/authentication.html
      Copying data.html to ./Wiki-20/wiki20/templates/data.html
      Copying debug.html to ./Wiki-20/wiki20/templates/debug.html
      Copying environ.html to ./Wiki-20/wiki20/templates/environ.html
      Copying error.html to ./Wiki-20/wiki20/templates/error.html
      Copying footer.html to ./Wiki-20/wiki20/templates/footer.html
      Copying header.html to ./Wiki-20/wiki20/templates/header.html
      Copying index.html to ./Wiki-20/wiki20/templates/index.html
      Copying login.html to ./Wiki-20/wiki20/templates/login.html
      Copying master.html to ./Wiki-20/wiki20/templates/master.html
      Copying sidebars.html to ./Wiki-20/wiki20/templates/sidebars.html
    Recursing into tests
      Creating ./Wiki-20/wiki20/tests/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/tests/__init__.py
      Recursing into functional
        Creating ./Wiki-20/wiki20/tests/functional/
        Copying __init__.py_tmpl to ./Wiki-20/wiki20/tests/functional/__init__.py
        Copying test_authentication.py_tmpl to ./Wiki-20/wiki20/tests/functional/test_authentication.py
        Copying test_root.py_tmpl to ./Wiki-20/wiki20/tests/functional/test_root.py
      Recursing into models
        Creating ./Wiki-20/wiki20/tests/models/
        Copying __init__.py_tmpl to ./Wiki-20/wiki20/tests/models/__init__.py
        Copying test_auth.py_tmpl to ./Wiki-20/wiki20/tests/models/test_auth.py
    Recursing into websetup
      Creating ./Wiki-20/wiki20/websetup/
      Copying __init__.py_tmpl to ./Wiki-20/wiki20/websetup/__init__.py
      Copying bootstrap.py_tmpl to ./Wiki-20/wiki20/websetup/bootstrap.py
      Copying schema.py_tmpl to ./Wiki-20/wiki20/websetup/schema.py
  Copying MANIFEST.in_tmpl to ./Wiki-20/MANIFEST.in
  Copying README.txt_tmpl to ./Wiki-20/README.txt
  Copying development.ini_tmpl to ./Wiki-20/development.ini
  Recursing into ez_setup
    Creating ./Wiki-20/ez_setup/
    Copying README.txt to ./Wiki-20/ez_setup/README.txt
    Copying __init__.py to ./Wiki-20/ez_setup/__init__.py
  Recursing into migration
    Creating ./Wiki-20/migration/
    Copying __init__.py_tmpl to ./Wiki-20/migration/__init__.py
    Copying migrate.cfg_tmpl to ./Wiki-20/migration/migrate.cfg
    Recursing into versions
      Creating ./Wiki-20/migration/versions/
      Copying __init__.py_tmpl to ./Wiki-20/migration/versions/__init__.py
  Copying setup.cfg_tmpl to ./Wiki-20/setup.cfg
  Copying setup.py_tmpl to ./Wiki-20/setup.py
  Copying test.ini_tmpl to ./Wiki-20/test.ini
Running /home/mb25010/tg/env/bin/python setup.py egg_info
['TurboGears2 >= 2.1.2', 'Genshi', 'zope.sqlalchemy >= 0.4', 'repoze.tm2 >= 1.0a5', 'sqlalchemy', 'sqlalchemy-migrate', 'repoze.what >= 1.0.8', 'repoze.who-friendlyform >= 1.0.4', 'repoze.what-pylons >= 1.0', 'repoze.who==1.0.19', 'tgext.admin >= 0.3.11', 'repoze.what-quickstart', 'repoze.what.plugins.sql', 'tw.forms']
running egg_info
writing requirements to Wiki_20.egg-info/requires.txt
writing Wiki_20.egg-info/PKG-INFO
writing top-level names to Wiki_20.egg-info/top_level.txt
writing dependency_links to Wiki_20.egg-info/dependency_links.txt
writing entry points to Wiki_20.egg-info/entry_points.txt
writing paster_plugins to Wiki_20.egg-info/paster_plugins.txt
reading manifest file 'Wiki_20.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'Wiki_20.egg-info/SOURCES.txt'

そうしたら、Wiki-20/setup.py を編集して、requiredなものとしてdocutilsを追加する。

install_requires=[
    "TurboGears2 >= 2.1.2",
    "Genshi",
    "zope.sqlalchemy >= 0.4",
    "repoze.tm2 >= 1.0a5",
    "sqlalchemy",
    "sqlalchemy-migrate",
    "repoze.what >= 1.0.8",
    "repoze.who-friendlyform >= 1.0.4",
    "repoze.what-pylons >= 1.0",
    "repoze.who==1.0.19",
    "tgext.admin >= 0.3.11",
    "repoze.what-quickstart",
    "repoze.what.plugins.sql",
    "tw.forms",
    "docutils"
    ]

そうして、setup.pyを実行する。

% cd Wiki-20
% python setup.py develop


2011-06-11

CUDA by Example

02:05

GTX275のcapability

D:\projects\cuda\CudaByExample\chapter03>enum_gpu
   --- General Information for device 0 ---
Name:  GeForce GTX 275
Compute capability:  1.3
Clock rate:  1404000
Device copy overlap:  Enabled
Kernel execution timeout :  Enabled
   --- Memory Information for device 0 ---
Total global mem:  922091520
Total constant Mem:  65536
Max mem pitch:  2147483647
Texture Alignment:  256
   --- MP Information for device 0 ---
Multiprocessor count:  30
Shared mem per mp:  16384
Registers per mp:  16384
Threads in warp:  32
Max threads per block:  512
Max thread dimensions:  (512, 512, 64)
Max grid dimensions:  (65535, 65535, 1)

2011-05-04

clang doesn't handle non-ascii source files correctly

11:43

I am tinkering around with clang-2.9

I noticed it doesn't handle utf-8 source code correctly.

My LANG setting is ja_JP.UTF-8 This means that text oriented programs should expect the encoding of the text files are UTF-8.

gcc handles this correctly, but clang didn't.

I hope it gets supported soon.

FreeBSDでllvm, clang を使ってboostを試してみる。

11:19

今日の私のバージョンは、

% pkg_info | grep "llvm\|clang\|boost"
boost-libs-1.45.0_1 Free portable C++ libraries (without Boost.Python)
clang-2.9           C, Objective-C, and (alpha-quality) C++ compiler
llvm-2.9            Low Level Virtual Machine

コンパイルするためのコマンドラインはこんな感じ。

% clang++ prot1.o -I/usr/local/include prog1.cpp
/usr/local/bin/ld: error in /usr/lib/crtend.o(.eh_frame); no .eh_frame_hdr table will be created.

リンク時にエラーが出るけど、これはFreeBSDの問題で、FreeBSD9では治るとか。

動作に支障はないみたい。

2010-02-27

You can't extend / expand / enlarge a mounted FreeBSD partition / slice

11:23

I ran out of space for the slice that held /usr on my FreeBSD 8.0 installation.

I tried to enlarge it using fdisk => bsdlabel => growfs, but failed.

The tools will only work for an unmounted slice, which is quite natural.

You can't enlarge the slice that you boot from.

I failed in the part that bsdlabel will not write back the modified label table.

So I chose to install the OS again in a bigger partition.

The reason why I ran out of space is the work space required for building OpenOffice.org . To build it you need something like 30GB of work space, which sounds unreasonable to me.


If you ran out of space for /usr, and you don't want to install the OS again, you can try more conventional things like :

(1) Allocate a separate disk or partition

(2) make a file system on it, mount it somewhere.

(3) Copy the existing contents to your new file system

(4) modify fstab so that next time that new thing will be mounted

(5) After reboot, delete the contents of the old /usr partition.

(6) If the old /usr was not a partition in its own, boot with single user mode, and delete the contents of /usr.