2012年11月5日月曜日

Mac OSX Lion で Homebrew 経由で Python の pip 使うときに苦労した話

超雑記。

portなどを使っていた環境からbrewへの移行。
portのときどんなふうにインストールしたか記憶がない。
virtualenv, virtualenvwrapperで仮想環境を作っていた。

(Homebrewのインストールは省略。ユーザー権限でインストール。rootじゃない)

brew install python でpython をインストール
.zshenvに
export PATH=/usr/local/bin:/usr/local/share/bin:$PATH
を追加。普通は.bashrc。

同時にインストールされるというpipでnumpyをインストールしようとすると
すでに入っていると言われた

とりあえず pip freezeで得られるパッケージを全削除して
foreach i (`pip freeze | awk -F== '{print $1}'`)
sudo pip uninstall $i
end
(rootでインストールされていたのでsudo)

再度インストール
しかし
/Library/... permission denied
と怒られる。
root権限のところに書こうとしている。前使っていた環境のpipでの書き込み先だ。

brew uinstall python

brew install python --universal
してみた
しかしだめだ

よくよくインストールログを見るとbrew linkが完了しなかったという情報が

brew link python

してみると
pipがすでにあるからリンク貼れなかったぜ馬鹿野郎と怒られる

brew link --overwrite python

して元からあるやつを上書き。
ちゃんと動いた。
前に使っていたpipがpath上に残っていたせいで、そちらのpipの環境を使ってしまっていたのが原因だった。


2012年10月17日水曜日

ubuntu12.04にcuda5.0をインストールしたときに苦労した話

Ubuntu12.04でCUDAでハマったのでメモ。
※CUDAでGPGPU始める人はコレ読んでください。サンプルを見て練習できるので非常に理解がしやすいです。
とにかく、うまく行かなかった。
いろいろ試したが、何が効いたかはわからない。
…が、最終的にうまくいった。

自分の環境はUbuntu12.04 64bit、Dell Precision T5500, Quadro FX 580(capability 1.1)。

とりあえず、最初ココを見て、わけもわからずこのとおりにやった。
http://d.hatena.ne.jp/iRiE/20120620/1340230211
ここでやっている人と明らかに違うのが、Cudaのバージョンが5.0にアップグレードされているというところ。

Ubuntu12.04用のインストーラはないので、11.10のものを代わりに↓からダウンロードした。
http://developer.nvidia.com/cuda/cuda-downloads

sudo sh ./cuda_5.0.35_linux_64_ubuntu11.10.run
を実行すると、libglut.soがないと怒られた。

sudo apt-get install freeglut3-dev
した後、もう一度インストールしてみたが、
やはりないと言われる。

調べてみると、12.04 64bitではlibglut.soが変なところにインストールされることがわかった。

sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so
してちゃんとしたところにシンボリックリンクを貼る。

再度インストールするもInstall failed、失敗。
ログ見てみると、gdm止めねばならないことが判明。

 自分の場合、Shift+F1でtty1のコンソールを起動して、

sudo service lightdm stop
としてデスクトップマネージャーを止める。(12.04からgdmからlightdmに変わったらしい)

再度チャレンジすると、Installed、成功!

とりあえず、再起動。




デスクトップが起動しないではないか。
そのままtty1に飛ばされる。
ログを見てみると、plymouthに繋げなかったとか言っている。

よくわからないが、ウェブで調べた結果、xserver-xorg-nouveauを消してみたり、nvidia-currentをreinstallしてみたりした。

デスクトップが起動した。

しかし、compizが起動していない。なぜだ。

とりあえず、気にせずCUDAのサンプルをmakeしてコンパイルして、bin/linuz/releaseにいき、

./deviceQuery

したが、capableなビデオカードが見つからないとエラーを出された。
(通常はビデオカードの情報が出力される)

うおーっ!ってなって、

sudo sh ./cuda_5.0.35_linux_64_ubuntu11.10.run --uninstall
でアンインストールして、もう一回インストールしたりしたが、また、デスクトップが起動しなくなった。

最後の方は、記憶がないが、効いたっぽいのが、
http://sn0v.wordpress.com/2012/05/11/installing-cuda-on-ubuntu-12-04/
に書いてある。

sudo apt-get remove --purge nvidia*
によるnvidia関連のソフトウェアの全削除。

これやったあとに、

sudo sh ./cuda_5.0.35_linux_64_ubuntu11.10.run
でCUDAドライバのインストールをやり直したら、Compizも復活して、

./deviceQuery
でちゃんと結果が出力された。


どれが良かったか、わからないがこの中のどれかであるはず。

あと、「追加のドライバ(Additional driver)」から適当にExperimentalの一番新しいっぽいやつをインストールしたりもしたな…

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')

2012年6月21日木曜日

Ubuntu 12.04 LTS のプロキシで無視リストを設定

Ubuntuを10.04LTSから12.04LTSに移行したらプロキシ設定のUIが変わってた。

めちゃくちゃシンプルになっていて、今まであったプロキシの例外設定を加える項目が見当たらない。

調べてみると見つかった。
Where to set proxy ignore list?

まず、設定するためのソフトウェアdconf-toolsを入れる。
sudo apt-get install dconf-tools

Superキー(Winキー)を押してUbuntuメニューを表示し、dconfと入力すると、「dconf Editor」というものが出てくるのでそれを実行。

gconf editor設定画面

proxyのところにignore-hostsという項目があるので、Valueのところをクリックして、無視リストを追加する。例えば、['localhost','127.0.0/8','*.example.com']とか。

以上。

2012年6月15日金曜日

管理者権限のない人がpip, virtualenv, virtualenvwrapperをhomeにインストールする

管理者権限のない人がPython2.7とPython3.2.3をインストールしたときのやり方はコチラ

目的

virtualenv環境を入れて、複数の仮想python環境を構築する。

やり方

基本的には以前に書いた記事と同じやり方。setuptools入れるときは、どのバージョンのpythonでもいいはずなので、とりあえずpython2.7を使うことにする。
まずは、ちゃんとhomeのpythonにパスが通す。(bashrcとかで通している人はOK)
export PATH=$HOME/.local/bin:$PATH
つぎに、setuptoolsのインストーラをダウンロード。ちゃんと2.7用のものをダウンロード。
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
sh setuptools-0.6c11-py2.7.egg
easy_install-2.7 pip
pip install vitualenv virtualenvwrapper
ここで、easy_installでpipをinstallするときに、easy_install-2.7を呼ぶようにしないとダメだった。
次に、virtualenvwrapperを設定する。 次を実行するか。(次回起動時にも反映させるために.bashrcや.zshrcなどに追加しておくべき)
source $HOME/.local/bin/virtualenvwrapper.sh
python仮想環境を作成。例えば、python27用をpy27という名前で作成。
mkvirtualenv py27 -p python2.7
python3.2だったら
mkvirtualenv py32 -p python3.2
仮想環境に有効にするには
workon py32
抜けるときは
deactivate

追記

ログイン時に反映させたい場合は.bashrcなどに
export VIRTUALENVWRAPPER_PYTHON=$HOME/.local/bin/python
source $HOME/.local/bin/virtualenvwrapper.sh
virtualenvをインストールしたときのpythonへのパスを書かなくてはならないっぽい。

2012年6月14日木曜日

ユーザーhomeにpython2.7.3(ついでにPython3.2.3も)をインストールしたときのメモ

目的

職場のRHEL5上のhomeにpython2.7をインストールしたい。管理者権限はない。

やり方

インストール先は$HOME/.localとする。.local/以下にbin, libなどが作成される。

Pythonをインストール

pythonのソースを本家からwgetして持ってきて、configure(インストール先の指定は--prefix)してmake installすれば良いかと思ったが、
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
tar xvzf Python-2.7.3.tgz
cd Python-2.7.3
.configure --prefix=$HOME/.local
make install
ここで、
hg identify: option -i not recognized
hg identify: option -t not recognized
hg identify: option -b not recognized
./Modules/getbuildinfo.c: In function ‘Py_GetBuildInfo’:
./Modules/getbuildinfo.c:45: error: missing terminating " character
./Modules/getbuildinfo.c:45: error: expected expression before ‘)’ token
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:53: error: ‘buildinfo’ undeclared (first use in this function)
./Modules/getbuildinfo.c:53: error: (Each undeclared identifier is reported only once
./Modules/getbuildinfo.c:53: error: for each function it appears in.)
./Modules/getbuildinfo.c: In function ‘_Py_hgversion’:
./Modules/getbuildinfo.c:72: error: missing terminating " character
./Modules/getbuildinfo.c:72: warning: ‘return’ with no value, in function returning non-void
./Modules/getbuildinfo.c: In function ‘_Py_hgidentifier’:
./Modules/getbuildinfo.c:79: error: missing terminating " character
./Modules/getbuildinfo.c:79: error: expected expression before ‘;’ token
./Modules/getbuildinfo.c:83: error: missing terminating " character
./Modules/getbuildinfo.c:83: error: expected expression before ‘;’ token
make: *** [Modules/getbuildinfo.o] Error 1
こんな感じのエラーがでた。調べてみると、自分の環境では、Mercurialのバージョンが古いらしい。
$ hg --version
Mercurial Distributed SCM (version 0.9.3)

Copyright (C) 2005, 2006 Matt Mackall 
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Mercurialの新しいのをインストール

今は2.2とからしい。古すぎだろw。ということで、先にMercurialの2.2.2をhomeにインストールする。
cd ..
wget http://mercurial.selenic.com/release/mercurial-2.2.2.tar.gz
tar xzvf mercurial-2.2.2.tar.gz
cd mercurial-2.2.2
PREFIX=$HOME/.local make install
インストール先はPREFIXに指定するらしい。なんか最後の方にpython-docutilsかなんかをinstallしろ、とerrorがでるが無視。一応インストール完了。インストール先のbinディレクトリをPATHの先頭に加えれば、2.2.2のhgが呼ばれる。
$ export PATH=$HOME/.local/bin:$PATH
$ $HOME/.local/bin/hg --version
Mercurial Distributed SCM (version 2.2.2)
(see http://mercurial.selenic.com for more information)

Copyright (C) 2005-2012 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Pythonのインストール続き

Pythonのディレクトリに戻り、再度make installする。
cd ../Python-2.7.3
make install
インストールできた。 $HOME/.local/bin/pythonにaliasもしくはPATHを通せば、使えます。
alias python=$HOME/.local/bin/python
# OR
export PATH=$HOME/.local/bin:$PATH
$ python --version
Python 2.7.3

ついでにPython3.2.3もインストール

wget http://www.python.org/ftp/python/3.2.3/Python-3.2.3.tgz
tar xvzf Python-3.2.3.tgz
cd Python-3.2.3
./configure --prefix=$HOME/.local
make install
何の問題もなくインストール完了。$HOME/.localにはパスを通してあったので、
$ python3
Python 3.2.3 (default, Jun 15 2012, 11:09:08) 
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
とpython3で呼べる。
ソースファイルへのリンクが切れていたらコチラ。Python mercurial Python-3.2.3

2012年6月13日水曜日

ユーザーhomeにsubversionインストールしたときのメモ

管理者権限がないのにシステムにインストールされているsubversionが自分の使いたいバージョンと違うことってありますよね。例えば、v1.4以下とv1.5以降でこんなふうに違いがあります。
http://www.asahi-net.or.jp/~iu9m-tcym/svndoc/svn_externals_relative.html
  • 相対リンク設定可能
  • URLとディレクトリの順番が逆
  • など
ということで、homeに自分の使いたいsubversionをいれて使いましょう。 ちなみに、ここではRHEL5でやったやり方を書きます。 他でも同様にやれば、まぁ動くと思います。 ここではv1.6.18とv1.7.5でやったやり方を書いておきます。
※wgetのリンクが切れてたら適宜自分でさがしてください。subversionは本家から

v1.6.18のインストール

wget http://subversion.tigris.org/downloads/subversion-1.6.18.tar.gz
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.18.tar.gz
tar xvzf subversion-1.6.18.tar.gz
tar xvzf subversion-deps-1.6.18.tar.gz
cd subversion-1.6.18
depsはdependenciesのことで、依存パッケージを同じディレクトリに展開してくれる(sqlite,neonなど)。
./configure --prefix=$HOME/mybin/subversion-1.6.18 --without-apxs --with-ssl --without-serf
make install
基本的にクライアント機能だけでいいので、apxsとかはずす。じつは、あまり良く解っていない。neonを入れるのでserfはいれていないっぽい。もし、何か足りなくてconfigureで怒られたら、INSTALLを読んで、必要なものをとってきてください。prefixでインストール先を指定する。prefixで指定した先に、bin,share,libなどのディレクトリが作られます。

v1.7.15のインストール

wget http://mirrors.axint.net/apache/subversion/subversion-1.7.5.tar.gz
tar xvzf subversion-1.7.5.tar.gz
cd subversion-1.7.5
wget http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz
tar xvzf sqlite-amalgamation-3.6.13.tar.gz
mv sqlite-3.6.13 sqlite-amalgamation
wget http://www.webdav.org/neon/neon-0.29.0.tar.gz
tar xvzf neon-0.29.0.tar.gz
mv neon-0.29.0 neon
1.7.5は2012.06.12現在ではdepsは存在しないので自分でとってくる。v1.6のdepsからコピってきても良いと思われる。
cd neon
./configure --prefix=$HOME/mybin/subversion-1.7.5 --with-ssl
make install
cd ../
neonはv1.6と違い、なぜか普通にconfigureしても、インストールしてくれないので、自分でインストールする。--with-neonでneonをインストールしたディレクトリを指定してsubversionをインストール。
./configure --prefix=$HOME/mybin/subversion-1.7.5 --with-neon=$HOME/mybin/subversion-1.7.5 --without-apxs --with-ssl --without-serf
make install

使用するsvnを指定する

svnへのコマンドのエイリアスを付ければ良いので、ターミナルで
alias svn=$HOME/mybin/subversion-1.6.18/bin/svn
と打てば、指定したバージョンのsvnを使える。または、
export PATH=$HOME/mybin/subversion-1.6.18/bin:$PATH
としてパスを通してしまう。(通すディレクトリが先。後ろにつなぐとシステムの方のsubversionが呼ばれる。)
$ svn --version
svn, version 1.6.18 (r1303927)
   compiled Jun 12 2012, 20:08:51

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
もちろん、.bashrcなどに書いてしまった方がいい
ソースファイルへのリンクが切れていたらコチラ。 v1.6 v1.6deps v1.7。 v1.7のneon,sqliteはdepsの中のものをコピーして配置すれば使えると思います。

2012年5月18日金曜日

pip searchがproxyを通さない

会社でプロキシ使っていると色々困ること多いですよね。
pythonの便利なパッケージ管理システムのpip
会社で使っていたら、searchするとエラーを吐くことが判明。
pipのバージョンは1.1。


調べてみると、pip searchがプロキシを通さないという問題があるらしい
The search command ignore proxy settings
多分こんな感じのエラーが出る。
  File "/usr/lib/python2.6/httplib.py", line 776, in _send_output
    self.send(msg)
  File "/usr/lib/python2.6/httplib.py", line 735, in send
    self.connect()
  File "/usr/lib/python2.6/httplib.py", line 716, in connect
    self.timeout)
  File "/usr/lib/python2.6/socket.py", line 500, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known

どうやらxmlrpcがproxyを使わないらしい。
解決方法が示されているが、違うチケットに投げられ、放置されているくさい

そこでリンク先の上の方に書いてあるパッチを当てる。
リンク先ではlstripを使って「http://」を削除しているが、
実はこれだと、host名の先頭にhttpのいずれかの文字があるとそれも消されてしまう。

以下修正版のdiff。

*** download.py 2012-05-17 14:58:47.800679029 +0900
--- download.py.mod20120517 2012-05-17 14:58:01.300737662 +0900
***************
*** 6,11 ****
--- 6,12 ----
  import shutil
  import sys
  import tempfile
+ import httplib
  from pip.backwardcompat import (md5, copytree, xmlrpclib, urllib, urllib2,
                                  urlparse, string_types, HTTPError)
  from pip.exceptions import InstallationError
***************
*** 22,28 ****
             'unpack_file_url', 'is_vcs_url', 'is_file_url', 'unpack_http_url']
  
  
! xmlrpclib_transport = xmlrpclib.Transport()
  
  
  def get_file_content(url, comes_from=None):
--- 23,44 ----
             'unpack_file_url', 'is_vcs_url', 'is_file_url', 'unpack_http_url']
  
  
! class ProxiedTransport(xmlrpclib.Transport):
!     def make_connection(self, host):
!         self.realhost = host
!         proxy = urlopen.get_proxy()
!         if proxy: 
!             if proxy.startswith("http://"):
!                 proxy =proxy[len('http://'):]
!             h = httplib.HTTP(proxy)
!         else: 
!             h = httplib.HTTP(host)
!         return h
!     def send_request(self, connection, handler, request_body):
!         connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))
!     def send_host(self, connection, host):
!         connection.putheader('Host', self.realhost)
! xmlrpclib_transport = ProxiedTransport()
  
  
  def get_file_content(url, comes_from=None):


上記の通りに、pipの中のdownload.pyを変更すればOK.
間違った変更を加えると、動かなくなるので注意。

ちなみに、download.pyはわたしの環境では、
/usr/local/lib/python2.6/dist-packages/pip-1.1-py2.6.egg/pip/download.py
とかにある。

これがベストなやり方ではないかもしれないが、とりあえず動く。

2012年5月17日木曜日

ipythonのedのeditorを変更する方法

terminalで
ipython profile create
すると、~/.ipython/profile_default/ipython_config.pyができるので
c.TerminalInteractiveShell.editor = 'emacs -nw'
を加える。 これでedしたときにemacsが開く

職場のred hat el5上に勝手にpip, virtualenv, virtualenvwrapper環境作ったときのメモ

python2.6はすでにインストール済み

まずはsetuptoolsをインストール
ここから、python2.6の.eggファイルをゲットして、

rootで
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086
sh setuptools-0.6c11-py2.6.egg
rm -f setuptools-0.6c11-py2.6.egg
easy_install pip
pip install virtualenv
pip install virtualenvwrapper
ユーザーで
which virtualenvwrapper.shの場所を確認して、
$ emacs .zshrc # bashの人は.bashrc
[ -f /usr/bin/virtualenvwrapper.sh ] && source /usr/bin/virtualenvwrapper.sh # added

2012年4月13日金曜日

Chrome to Phoneのログインができない


Chrome ウェブストア - Google Chrome to Phone 拡張機能

Google Chrome to Phone - Google Play の Android アプリ


PCのChromeブラウザで見ているページや
その中のコンテンツなどをAndroidに送信して
そのまま見ることができる便利なアプリ。

前にも使っていて、ふとまた使いたくなったのでインストールした。

Chrome extentionの方はなんなくログインまでできたが、
Androidアプリの方はログインの時に、

Error: Unable to connet

とエラーが出るでて接続できないではないか!ぐぬぬ…

いつもどおりぐぐってみると、

Issue 158 -  chrometophone -  Error: Unable to connect -  Google Chrome to Phone Extension - Google Project Hosting

あった。
なんらかのアカウント問題っぽい。
良い解決法はまだ示されていないが、Googleアカウントのパスワードを再設定しなおすととりあえず治るらしい。

ちょうどパスワード変えたい気分だったので変えて解決したが、中にはパスワード変えたくない人もいるはず。
Chrome for Androidが使えるようになれば要らなくなるからそんなやる気ないのかな…

2012年4月10日火曜日

メモ:「何番目?」は英語でなんという?

以下のページがおもしろい

「何番目?」は英語でどう言うの? リベラル21

How manieth president was Mr. Harding?
ハーディン氏は何番目の大統領ですか?


 "manieth"、新造語らしい。

本当に通じるのかこれ、、、今度使ってみよう。

メモ: 位置・場所を表す前置詞

Please describe the picture shown below.


なんていうのが、英会話の勉強でよくありますが、
意外と場所をうまくいえない。

改めて覚えてしまおう、、、


中学英語の基本英単語1000

これだけじゃ全然不十分だ…

場所・位置関係・地理
これはもうちょい難しい例かな…


うむ

2012年4月2日月曜日

Ubuntu 10.04LTSでwindows7風なウインドウ分割(Copmiz Tile)

LinuxでもWindows7のウインドウを左右半分に分割して配置してくれる機能を利用したい。
似たようなことができるものとしてCompizのTileプラグインがある。




このプラグインはまだunsupported(2012/04/02時点)なので、初期状態ではapt-getで簡単にインストールできない。でも次の手順でやれば簡単にインストールできます。未サポートなので自己責任で導入してください。




参考:Ubuntu 10.04, install compiz plugins unsuported


■ もしcompizが入ってない場合は
sudo apt-get update && sudo apt-get install copmiz copmizconfig-setting-manager fusion-icon

■ 必要であれば、extraパッケージも入れておく

sudo apt-get install copmiz-fusion-plugin-extra



■ ppaの登録
sudo add-apt-repository ppa:compiz/ppa
sudo apt-get update

■ updateするとGPGエラーが発生。パブリックキーがない。
W: GPG error: http://ppa.launchpad.net lucid Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 2ED6BB6042C24D89

■ http://d.hatena.ne.jp/ktomoya/20090815/1250350901
ここに書かれているものを参考にキーをキーサーバーから取得し、信頼しているキーとして登録。
gpg --keyserver keyserver.ubuntu.com --recv-key 2ED6BB6042C24D89
gpg --export 2ED6BB6042C24D89 | sudo apt-key add -

■ update
sudo apt-get update

何もエラーがでなくなった

■ tileが入っているunsupportedパッケージをインストール。必ずupgrade
sudo apt-get install compiz-fusion-plugins-unsupported
sudo apt-get upgrade

■ Tileを有効にする
MenuのSystem->Preferences->CompizConfig Setting ManagerでTileをenabledにチェック
ホットキーは各自変えてもよいが、確かデフォルトはSuper(Win-key)+Shift+Xでトグルだったはず。


2012年4月1日日曜日

python setup.py installしたモジュールのアンインストール

間違えて違うバージョンのpythonでsetup.py installをしてしまい、どうやって消すんだろと思って調べてみた。ちなみに環境はmac osx(unix系なら同じと思う)

するとStack overflowでこんなページを発見(英語)

どうやらuninstallコマンドは存在せず、自力で消すしかないらしい。
しかし次のやり方で簡単にできるっぽいです。

まずもう一回インストールしてみる。そのときに--recordオプションをつけてインストールされたファイルを出力する。

sudo python setup.py install --record files.txt

そして、files.txtの中のファイルを全部消す。

cat files.txt | xargs rm -rvf

このコマンドはわかりますかね?
わからなくてもできますが、もし知りたい人はunixコマンドの勉強をしてください。

2012年3月28日水曜日

Ubuntu 10.04LTSのapt-getで入れたDjangoのdjango/contrib/adminのありか

Djangoの日本語版チュートリアルを見ていたら

デフォルトの Django admin 用のテンプレート置場 (django/contrib/admin/templates) から、 admin/base_site.htmlという テンプレートをコピーして、 TEMPLATE_DIRS 上の admin というディ レクトリ下に置きます。
という指示を受けた。

しかし、apt-getで入れたdjangoのソースたちがどこにいるかよくわからなかったので、
探したらここにあった。

なぜか二個
/usr/lib/pymodules/python2.6/django/contrib/admin
/usr/share/pyshared/django/contrib/admin

中を見ると、結構2個目のほうからシンボリックリンクが張られているようなので、
本体は

/usr/share/pyshared/django/contrib/admin

か。


Facebook認証を利用したサイトログイン時のXD Proxy問題

Facebookの認証を利用したサイトにログインしようとしたら
(たとえば、English central

「XD Proxy」というタイトルの空白のポップアップウインドウがでて、
先に進まなくなるという問題が発生。
XD Proxy このポップアップが出てきて進まない


Chromeでやっていたが、ためしにIEでやってみると
全然普通にいけた。

なんでだよ!と思って調べたら見つかった(英語)。
Stack overflow: facebook connect blank pop up on chrome

どうやらChrome App StoreのFacebookアプリをインストールしていると発生する問題らしい。

というわけで消したら
Facebookアプリを削除!!

普通にログインできた。
もう一回インストールしたらログインできなくなった。おい、おい、

すべてのサイトで起こる問題ではないようだけど。
Facebookさん頼みますよー!!

とりあえずアンインストールして解決。

2012年3月22日木曜日

Androidアプリリリース1ヶ月後のインストール数


前:Androidアプリリリース1週間後のインストール数


内容は楽器アプリ。なので、ターゲットは世界中。
どんな感じで売れていくのか、ベースラインとして参考にしてください。

一ヶ月たった今、特に宣伝もせず、知り合いにも教えず、アップグレードもせず、

総インストール数(ユーザー数): 498, 有効インストール数(端末数): 267

であった。

統計情報を下に載せる。

  • さらに順調に一日あたりのインストール数が増えている!
    • 1週間後は10ちょっとだったが、今や30近い
  • 依然として、日本がダントツで多い。英語の文章を考えなおさなくては、、、
一日のインストール数の遷移



そろそろアップグレードして、広告を導入したいと思います。
AdMobがやっている広告切り替え型のAdWhirlでも使ってみようかと思っています。
また載せます。

2012年3月9日金曜日

ubuntu10.04でtex環境構築時のメモ

基本的にこのページを参考にしたが、

JapaneseLocalizedDerivative/LaTeXForJapanese

自分の環境は、Ubuntu 10.04 LTS 64-bitでインストールは通常の英語版をインストールして使っていたが、texを日本語で使おうとするといろいろ不都合がでてきたので日本語化することにした。

Ubuntuの日本語環境

このページを参考に、方法2を行った。


wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/lucid.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install ubuntu-desktop-ja

んでとりあえずリブート。


JapaneseLocalizedDerivative/LaTeXForJapanese
を続行

最後まで言うとおりにやって、

いざテスト

- test.tex
\documentclass{jarticle}
\begin{document}
\title{A test of a Japanese document}
\author{Horse Brain}
\date{20120309}
\maketitle
\section{I am a Japanese}
\subsection{I speak Japanese}
こんにちは。私は日本人です。日本語を話します。
\section{セクションタイトルも日本語で}
数式でも書いてみる
\begin{equation}
p(x) = \int p(x,y) dy
\end{equation}
\end{document}

emacsで普通に編集したら文字コードがUTF-8で保存されたので、nkfでeucに変換してpdf化するスクリプトを作成して実行
$./tex2pdf-ja test.tex

- tex2pdf-ja
#! /bin/sh 
NAME_TMP=tmp
nkf -e $1 > $NAME_TMP.tex && platex $NAME_TMP.tex && dvipdfmx -o out.pdf $NAME_TMP.dvi && exit 1

しかし、
** ERROR ** Could not find encoding file "H".

というエラーが出てしまった。ぐぐってみると、

[Latex]dvipdfmxのCould not find encoding file "H" エラー対策

こんなエントリーを見つけた。ghostscriptのバージョン通りにcmapfontのパスを設定しないといけないよう

ghostscriptのバージョンを調べてみる
$ ghostscript --version
 8.71

/usr/share/texmf/web2c/texmf.cnfをrootで編集
(略)

% CMap files.
CMAPFONTS = .;$TEXMF/fonts/cmap//;/usr/share/ghostscript/8.71/Resource/CMap/

(略)

あらためて、実行!
…できた!




slideshareより「色彩センスのいらない配色講座」

slideshareでおすすめされたスライド「色彩センスのいらない配色講座」

理系の私でもとても分かりやすくて良いと思いました。
ウェブページやモバイルアプリのデザインに使えそうです。

64-bit Chromiumブラウザでflashを有効にする

ubuntu10.04LTSの64-bit版Chromiumではflashのインストールがよくわからなかったので、調べたら下のページを見つけた
Howto enable flash support for chromium browser

やることは、

sudo apt-get install flashplugin-nonfree
sudo ln -s /usr/lib/flashplugin-installer/libflashplayer.so /usr/lib/chromium-browser/plugins

元リンクではcpしていたが、シンボリックリンク(ln -s )でいけたっぽい。

Chromiumのバージョンが17.0.963.65 の時点で、--enable-pluginsオプションはもう必要なく、普通に起動すれば動く。

2012年3月8日木曜日

google+で写真アップロードすると真っ黒になる

昨日、mac osx lion環境で、Sony NEX-5で撮影した写真400枚弱をchrome経由でアップロードした。写真は一度iphotoで取り込んで、iphoto上で画像を選択し、ドラッグアンドドロップでブラウザ上のgoogle+のアップローダに放りこんだ。

すると写真のほとんどが、真っ黒で何も表示されない。

google+のアルバムのスクリーンショット。すべての写真が真っ黒


何か、画像縮小や自動補正などの処理を行なっているのかと思い、一晩あけた今みてみたが、何も変わっていない。

しかたないので、mac版のpicasaアプリをインストールして、アップロードを行ったらうまく行った。

ちなみに、picasaには、google+に最適化されたアップローダ機能(2048pixel x 2048 pixelに最適化)がついている。ブラウザ上でのアップローダも同じ事をやってくれていると思っていたのだが…
ローカルのpicasaはサーバー側ではなく、クライアント側で縮小処理をやるっぽいので計算リソースを持ってかれる。

実はiphotoが悪かったりするのかな。iphotoってファイルの管理の仕方が独特だし。
ぐぐっても情報が出てこない。

2012年2月29日水曜日

DOMの要素を子供ごと削除

JavaScriptでDOMの一つのエレメントを子供ごと削除したい。
参考にしたページ(英語)
単に子供たちを再帰的に削除する。
自分自身を消すメソッドがよくわからなかったので、親にもどって親から見て子供の自分自身を消すようにした。
// remove an element and its children recursively
function removeElementRecursively(node)
{
    if(!node) return;
    removeChildrenRecursively(node);
    removeElement(node);
}

// remove an element
function removeElement(node)
{
    if(!node) return;
    node.parentElement.removeChild(node);
}

// remove children of an element recursively
function removeChildrenRecursively(node)
{
    if (!node) return;
    while (node.hasChildNodes()) {
 removeChildrenRecursively(node.firstChild);
 node.removeChild(node.firstChild);
    }
}

Androidアプリリリース1週間後のインストール数

前:Androidアプリリリース初日ダウンロード数


内容は楽器アプリ。なので、ターゲットは世界中。
どんな感じで売れていくのか、参考にしてください。

一週間たった今、

総インストール数(ユーザー数): 66, 有効インストール数(端末数): 41

であった。

統計情報を下に載せる。

  • 順調に一日あたりのインストール数が増えている!(なんか一日沈んでいる日があるが…)
  • 国別に見ると、日本が飛び抜けて多い。英語の説明文も付けたのに。。。心に響かなかったか。


Developer console のスクリーンショット

この調子で指数関数的に増えていって欲しい。
100超えたらバージョンアップをリリースしようと考えている。
その内また報告します。

次:Androidアプリリリース1ヶ月後のインストール数

2012年2月24日金曜日

[just a memo] tableを動的に作成する

http://msdn.microsoft.com/en-us/library/ms532998(v=vs.85).aspx
このサイトがわかりやすい(英語)

[just a memo] JavaScriptで継承

こちらのサイトが非常にわかりやすい。

というただのメモ

SyntaxHighlighterのテスト

Bloggerにソースコードを載せてハイライトするためのSyntaxHighlighter をテストしてみる。

HTMLエスケープする場合はこれ、
HTMLエスケープはこちらのサイト様でできます。 ちなみに平文はこれ

2012年2月23日木曜日

HTML, JavaScript, CSS をお手軽に試せるサービスjsFiddle

jsFiddle

これすごいっすね。知らなかったす。

 


その場でHTML、CSS、Javascriptを書いてすぐ結果が見れるなんて。
検証にも使えるし、ブログに載せるにもページ右上のshareってボタン押してフレームの埋め込みタグをコピるだけ。

emacs-railsを使う

http://d.hatena.ne.jp/higepon/20061222/1166774270
このページが一番参考になりました。

最初emacs-railsだけで良いと思ってインストールして、emacsを起動するとfind-recursiveがないと怒られた。

なるほど、rails.elの中で呼んでいるのね。と思い
のこり2つも入れたら動いた。

  1. emacs-rails
  2. find-recursive.el
  3. snippet.el

BloggerでSource codeをHighlightして綺麗に載せる方法


BloggerにおけるSyntaxHighlighterの使い方
Bloggerにソースコードをきれいに載せる「SyntaxHighlighter」

のブログ様がいうように、HTML編集のところで、<head></head>をタグを入れ、その中にSyntaxHighlighterのjavascriptやcssをインクルードし、ハイライトしたい部分を指定されたタグで囲めば良い。


わたしが思うに、いつSyntaxHighlighterのサイトが閉鎖されるかわからないので、外部サイトからスクリプトを呼ぶのは不安である。そこで、自分の所有のサーバーにSyntaxHighlighterを置きたい。

しかし、サーバーは所有しているわけではない。
そこで、何かしらのオンラインファイルサービスのところにおいて、それを読み込みたい。

ここで使うのはDropbox
Dropboxのアカウントを持っていたら、Publicフォルダに該当のJSファイルをアップ。Dropboxのサイトからファイルの右側の三角をクリックして、パブリックリンクをコピーを選択し、URLをコピー。

このリンクをHTMLにJSとしてインクルードすれば良い!


もじだけで、見づらいと思うので、たぶん、この情報をもっと綺麗にして(SyntaxHighlighterを使って)公開する予定。

2012年2月22日水曜日

Androidアプリリリース初日ダウンロード数

本日、深夜1:00に初めてのAndroidアプリをリリース。
アプリのジャンルは「楽器アプリ」といえばよいでしょう。


一日目

あえてFacebookなどで宣伝せずに、どのくらいダウンロードされるか見てみる。
アプリのダウンロード数の統計を細かくチェックしていたが、
時間 総インストール数(ユーザ数) 正味インストール数(端末数)
6:00 3 0
19:30 3 0
21:00 3 4
という具合に昼間は全然反映されていなかった。どうやら一日に一回しか反映されないっぽい。

ちなみに一人は友達です。

ちなみに、国別では
日本 2
アメリカ 1
ベトナム 1
意外と日本が多い。アメリカのほうが期待していたのに。

てか3人って…。
こんな感じが続くのか。

とりあえず、初日はこれで終わり

二日目

6:00にダウンロード数を見たら何も変わっていなかったが、7:00にみると、がっつり変わっているではないか。夜には総インストール数は増えたが、端末数がいまいち増えない。
どうやら総インストール数は細かく反映されるが、端末数は一日一回っぽい。
時間 総インストール数(ユーザ数) 正味インストール数(端末数)
7:00 10 4
12:00 12 4
22:00 14 7

日本 3
アメリカ 3
ベトナム 1


早くも伸び悩み?アメリカが伸びた。 1週間くらいしたら更新する。

次:Androidアプリリリース1週間後のインストール数

マニアックな記事のヒット数

当ブログ、現時点で超マイナーブログであり、1投稿ごとのヒット数は5くらいという残念なブログ。

しかし、以前書いたこのただの情報な投稿
boost.pythonとOpenMPとMatplotlib
はなんと60ヒット(別に一般的には超少ない)もかましているではないか。

他の記事は、今のところ、ぐぐれば他のブログに書いてあることが多いが、この事実はなかなか見つけられなかった。


こういう希少な情報の方がヒット数を稼ぐのですね。
特にこのようなマイナーブログでは。みんな必死こいて検索してくれるので。

2012年2月21日火曜日

Bloggerの新しいインタフェース使ってみる


プロフィールをGoogle+と連携するみたいな流れになったので、断った。
このブログに責任を負いたくないので。ただのメモです。

管理・編集画面はGoogle+ちっくなデザインに変わった。

追記:
ブログのデザインも洗練されたものが追加されているっぽい

Android Developer Registration が進まない

一昨日、空いてる時間を見つけて作っていたAndroidアプリをリリースするために、
Android Developer登録をした。($25)

しかし、2日たってパブリッシャーのホームに行っても、
「Android マーケットへの登録はまだ処理中です。」
の状態から進まない。

ぐぐってみると、どうやら通常は数時間で進むはずだが、結構同じ目になっている人がいるよう。
みなさん、Android Marketのサポートチームに直接問い合わせているので、自分もやってみた。

内容は
  • 2日前に登録したのに処理が完了しない。
  • ぐぐったら他にもたくさんそういう人がいた。
  • ここに質問すること以外の解決方法は見当たらなかった。
  • アカウントと支払いに何か問題がありますか?
  • 自動が動いてないなら手動で早く登録して欲しい
です。

すると、間髪入れずに自動返信がgmailに届いた。ちょっといらっとしました。
  • Know issueを見た?
  • クレジットカード変えてみ?
  • キャッシュとか消してみ?
  • JavaScriptおん?
  • 違うブラウザ使ってみ?
クレジットカードは変えるってどういうことだ?って思ったので、
  • クレジットカード以外の項目は試した
  • receiptはEメールできているから、支払いは終わっている?
  • どうやって支払いが上手くいったか確認するの?
  • 実行環境
を送り返したら、3時間後くらいに、
  • 連絡ありがとう。
  • いま担当者を割り当て作業開始する
と返ってきた。

しばらく(数時間)して、ふとパブリッシャーのページを見てみると、
「登録処理中」の表示が消えて、登録が完了しているっぽい。

なんか連絡ないんかい。
素早い対応には好感を持てたが、コンシューマー向けサービスではないものは手抜き?と思ってしまった。

ま、めでたしめでたし。