2011/12/06

rootedなGalaxy note GT-N7000でOpenVPNをサクッと動かす。

先日、OpenVPNをiPot touch で動かして、公開Web鯖にしてしまおう、というpostをしたが、それに続き、今回はGalaxy Noteでやってみた。

Galaxy Noteは、メモをとるのに特化しているというユーザー視点からうれしいだけではなく、
・iPod touchにくらべるとはるかにハイスペック
・しかも/dev/tunがデフォでサポートされている
という、大きな利点があって、開発者としてもうれしい。
# ls -l /dev/tun
crw-rw---- vpn      vpn       10, 200 2011-12-06 17:46 tun

ようするに、root権をとって、OpenVPNのバイナリさえ引っ張ってこれば、この前iPod touchでやったようなことが、より高性能・高機能なハードで実現できるということだ。
ちなみに、このへんの情報を見るに、Galaxy S2でも同じようにできそう。持ってないからしらんけど。

rootとる
ぐぐれば出てくるので簡単に概要だけ。
「zergRush」というバイナリでrootシェルに入る。

suバイナリを/system/xbin/ に放りこむ

busybox --install /system/xbin で、コマンドセットを放り込む

ls と su だけはオリジナルのものを使う
# cd /system/xbin/
mv ls ls.org
ln -s /system/sbin/ls ls
みたいな感じで。

OpenVPN
前準備として、以下が必要
adb shell
# mkdir /system/xbin/bb
# cd /system/xbin/bb
# ln -s /system/xbin/ifconfig ifconfig
# ln -s /system/xbin/route route
これをしないとVPN接続時に変なエラーが出る。
---(参考)---
Tue Dec  6 21:08:53 2011 Linux ifconfig failed: could not execute external program
Tue Dec  6 21:08:53 2011 Exiting
↑/system/xbin/bb/ifconfig がないとき

Tue Dec  6 21:13:29 2011 ERROR: Linux route add command failed: could not execute external program
Tue Dec  6 21:13:29 2011 ERROR: Linux route add command failed: could not execute external program

↑/system/xbin/bb/route がないとき
 -----------------
以上の準備がそろえば、あとはバイナリ(→http://github.com/downloads/fries/android-external-openvpn/openvpn-static-2.1.1.bz2)を 適当な場所に放り込んで、
./openvpn --config client.conf
で動いた。client.confや、鍵はPCとかiPod touch で用いたものと同様の構成のもの。

2011/11/23

VPSにOpenVPN鯖を立てて、iPod touchを公開Webサーバーにする


先日、なんとなくServerMan@VPSを借りてみた。ただ、500円のプランだと、メモリ256M, HDD 10GBという、いつの時代のパソコンだ、というくらいのスペックしか保証してくれない。
しかも噂によると、Serverman@VPSは突然データがふっとぶなど日常茶飯事らしく、こいつをWebアプリケーションサーバーとして公開するには若干心もとない。
ただ、500円/月でありながら、固定でグローバルIPアドレスが持てる、というのはかなりの利点である。
そこで、考えた。

ルーターになってもらおう。

いまの自宅のネット環境は、不幸にもマンションタイプで、グローバルIPを振ってくれないのだ。これだと、せっかくiPod touchを超省電力サーバーとして運用しても、外から見られない。

そこで、
・iPod touch→Serverman でVPN接続
・Servermanの80番ポートを自宅鯖の80番ポートにフォワード
とすることで、あっさり、解決。
(実はVPNなんて使わなくてもiPod touchから
sudo ssh -R 8080:localhost 80 <servermanのip>
って感じでリモートポートフォワードすればもっと簡単に実現できるのだが、
今回はVPN張る練習も兼ねてやってみた。)

VPS側にOpenVPNサーバを準備
ServerMan@VPSは、嬉しいことにDebianがデフォルトである。デフォで入ってるバージョンはなぜか古いが、簡単に最新にできる。
まずは、OpenVPSをインストールして
sudo apt-get install openvpn
サンプルから鍵作成用のスクリプトを引っ張ってきて
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa-servermanvps/
証明書作成用のパラメータを設定する。
自分しか使わないオレオレ証明書なので、適当で良い。
cd nano /etc/openvpn/easy-rsa-servermanvps/
 sudo nano vars
##############
export KEY_COUNTRY="JP"
export KEY_PROVINCE="AA"
export KEY_CITY="adbcity"
export KEY_ORG="orz org"
export KEY_EMAIL="oreore@orz.org"
##############
ここからはrootになって作業。まずは認証局をつくる。
su
source vars
./build-ca

次に、サーバ側の鍵と証明書を作る。
./build-key-server myserver
なんか聞かれるけど、イエスマンになっておけばよい。
次に、クライアント側の鍵と証明書を作る。
./build-key-client myclient1
./build-key-client myclient2
./build-key-client myclient3
./build-key-client myclient4
必要なだけ作っておく。あとから追加するのも面倒なので、必要じゃなくても作っておく。
こちらもイエスマンになっておけばよい。

最後に、鍵ペアの登録。
./build-dh

これで、鍵の準備はOK。

サーバーの設定は、ちょっと疲れてきたので
ここから拝借。http://blog.asial.co.jp/666
あざーす。/etc/openvpn/server.confいただきます。
ついでに、どっかに1行、以下を追加する。
client-to-client
そんで、サーバーを起動
/etc/init.d/openvpn start

はい、完了。

次に、iPod touch側。
まずはCydiaからOpenVPNをインストールしておき、
クライアント設定もここからありがたく拝借し、
~/.vpn_conf
あたりに保存。
screen
sudo openvpn --config ~/.vpn_conf
 (どひゃーと、接続ログがでる。)

(IPがとれたことを確認し、Ctrl+a、d でscreenからデタッチ)

これで完了。
ServerMan側からiPod touchのIPにpingを打って疎通確認。
ping 192.168.100.6
返ってくるのを見てほくそ笑む。

最後に、サーバ側で、
sudo chkconfig apache2 off
sudo nano /etc/rinetd.conf
0.0.0.0 80 192.168.100.6 80
を追記。

で、めでたく完了。
完成品はこんな感じ。http://web-hack.org/
我が家のiPod touch 2ndが鯖になって、動いてます。

文鎮と化したiPod touchを持ってる方、こんな活用方法いかがでしょう?
禿に騙されて林檎板3G版を買った人とか、ローカルでiSSH使っていつでもどこでもサーバーメンテもできて更に便利かと。

2011/10/27

買ってみて分かった、iPhoneの強みと弱み


リンゴの製品は良くも悪くも、待っててもそんなに値下がりしない。
だったら、発売してすぐに買っても損はないはずだ。
そんなわけで、先日、衝動的にiPhoneに乗り換えてみた。 

べつに何も期待はせず、物は試し、で買った感じである。
#d社が嫌いになった、という裏の理由もあるが。 

Androidと比べるわけではないが、「んん??」と思ったところ、「おお!」と思ったところ それぞれ挙げてみる。

さくさく
今さら感はあるものの、やはり感動モノ。
他社機に比べると、「待ち」を感じる時間が圧倒的に短い。

ちなみに、誤解のないように言っておきたい。電機屋にいくとホーム画面だけ左右にスワイプして「さくさく〜」とか言ってる人が多くいるが、あれはマジで無意味。ホーム画面がだけならサクサク動かせる機種は今や当たり前。
iPhoneのサクサク感はそこではない。

タスク切り替え時の遅延がない、CPU負荷が高くてもスワイプの機敏さが失われない、などなど明らかに他社機より優っている。

日本語変換がお馬鹿さん
日本人として、使っていて非常に残念になるところである。
人名とか、軽い方言が入ると、文節区切りが変なところに入る。
かといって、AndroidのようにATOKキーボードを入れることもできない。

アプリ間の連携機能がくっっそへぼい
Android機種を3機種触っていた影響もあるのだが、一番残念に感じるのはここだ。
たとえば、写メしようと思った時。
写真の共有メニューからメール送信ができることは誰でも気づくと思うが、その逆が用意には気付けない。すなわち、新規メール作成していて、「あれ、画像ってどうやって添付するんだっけ?」ということだ。
正解は、タスク切り替えで写真アプリを開き、「こぴぺ」しないといけない。誰が気づくだろうか、そんな手順。

これだけではない。

iOS5からはtwitterが標準サポートされているのだが、これもまた一難ある。
世の中でtwitterの公式アプリを使っている人はそう多くはないはずだ。
写真アプリなどで共有のメニューに「ツイート」とあるのだが、これは固定的にtwitter公式アプリを呼び出すだけの機能しかない。
つまり、echofonやtwitbirdなど、サードパーティのアプリのユーザが写真付きのツイートをしたければ、twitterクライアントを先に開いて、なんらかのメニューから写真を追加する、という手順となる。写真アプリで「この写真、twitterに上げよう」と思ってもすぐにはできない。

intentに代わる仕組みは開発者の立場だけでなく、ユーザの立場としても必須機能。
それがないのはiOSだけである。AndroidもSymbianもWindowsPhone7も類似した機能はある。

2011/08/02

Lionが肌に合わずSnowLeopardに戻した人の独り言


先日、MacのOS X Lionがリリースされた。
あの日は早めに会社を出て、渋谷の林檎屋に行ってみたりもしたくらい、Lionを楽しみにしていた。
ただ、いざ使ってみると悪いところ尽くし(しかも2600円!)だったので、SnowLeopardに戻しました。という愚行の記録です。

世の中にはリンゴ教徒なレビュアが多すぎます。彼らは無条件にリンゴの決断を受け入れ、崇拝し、布教活動をしていますが、私としてはあまり感心できません。
ちゃんとユースケースを見極めた上でレビューしてください。

マルチタッチジェスチャー


タッチパッドのパターンが多彩です。いや、多彩すぎます。
何本指でどっち向きに動かすと何が起こるか、というのをいちいち考えなければ使えないレベルです。
また、一方で3本指の戻る/進むジェスチャが消滅しました。
必要なモノがなくなって、いらないものが増えました。
---

フルスクリーンアプリケーション


画面いっぱいにアプリケーションの領域が広がります。邪魔です。
アプリをフルスクリーンにするたびに、ワークスペースがひとつ増えます。
ゆえに、後述するMission Controlのサムネイルが小さくなり、一覧性がさらに悪くなります。

---



Mission Control


ExposéとSpacesが融合しました。出来上がったのは、両機能の良さを打ち消しあったシロモノでした。
アプリのサムネイルはより小さくなり、一覧性は悪くなりました。
ワークスペース間のアプリの移動も、できなくなりました。
ワークスペースはひたすら横に増殖するだけになりました。
Exposé・Spacesに比べて、動作が重くなりました。MC505J/Aではカクカクします。スピード感がありません。
Lionの新機能で最も著しい退化です。
---




Launchpad


アプリケーションを一覧して実行できます。
似たようなアイコンがいっぱい並んでいて、探すのが大変です。
PCの場合、日常的に使うアプリは限られています。Dockで十分ではないでしょうか。

(アプリのアンインストールはしやすくなったかも)
---



再開


シャットダウン直前の状態を、再起動後に復元することができます。
それゆえ、シャットダウン・起動時間が長くなりました。
デスクトップPCにはうれしいかもしれませんが、MacBookAirでは不要です。

---

といった感じで、表向きの機能はたいてい、不要な進化 or 退化です。

唯一「よくなった!」と賞賛できるのは



Spotlight


検索対象が広がりました。非常に賢くなりました!
動作も軽快になりました。検索結果のドラッグアンドドロップもできるようになりました。

---
あ、あと、下の方に小さくしか紹介されていませんが


  サイズ変更をどこからでも

ウインドウのサイズを、上下左右、どこからでも変更できるようになりました。

これ、地味に結構重要です。とくにWindows使い慣れてた人にとっては。
SnowLeopardまでは、サイズ変更のたびに右下までカーソルをもっていかないといけなかったので。

といった感じでしょうか。
興味本位でためしてみるのはありですが、(少なくとも、これまでSnowLeopardのSpacesをそれなりに使い込んでた人が)ずっと使い続けるにはかなりの不満が残ります。

そんなわけで、私はLionをやめてSnowLeopardに戻しました。
やはりSpacesとExposéは偉大です。
また、失ってみて初めて分かる、3本指の戻る・進むの大切さ。

WindowsVistaが派手になった時とか、MS Officeのリボンインターフェースが出た時とか、もっと非難轟々だったような気がするのに、それと同レベルなことをやっているLionはそれほど叩かれていませんね。
多くの人にとっては意外と使いやすい進化なのでしょうか。

2011/06/21

MacBook AirでPythonの開発環境(NumPy, SciPy, Matplotlib, PIL, PyQt, OpenCV)をサクっ!と整える

先日から、MacBook Airでの開発環境(Python)を整えるのに、非常〜〜〜に時間がかかっていた。
なんか64ビット対応しているしていない、PPCの対応がある、ない、やらで、非常にややこしい。
そして、数多くの人がハマった記録を残しているが、100人が100人とも違うことを言っていてわけがわからない。
とりあえず、今回はクリーンインストール状態のMacBook Airから
・NumPy, SciPy, Matplotlib
・PIL
・PyQt
・OpenCV
をまともに使えるようにした。

過去にActivePythonで
・NumPy, SciPy, Matplotlib
・PIL
・PyQt
を使う記事をここのブログで載せていたが、その後OpenCVのインストールで詰まってしまった。

ので、今回はそれを全く忘れてMac付属のPythonでインストールするようにした。
※2011/6/21時点での情報です。これから先この方法でうまくいくかは保証できません←こんなんばっかりだから(ry

1. XCode4をインストール
・MacAppStoreから購入する。開発環境を買うとか、悔しい気もするが、我慢。

2. Homebrewをインストール
・依存関係を解決しつつソースインストールしてくれる。MacPortsみたいなもんだけども、より手軽な感じ。

3. ScipySuperPackをインストール
・これひとつでNumPy,SciPy,Matplotlibがインストールされる。
★ソースインストール(easy_installやpip installを含む)だと、ほぼ100%、Fortanのエラーに悩まされる。なので、必ずこのScipySuperPackを用いること!

ちなみに、Matplotlibの日本語設定は、
↓のフォントを入れ替えて、
/Library/Python/2.6/site-packages/matplotlib-1.1.0-py2.6-macosx-10.6-universal.egg/matplotlib/mpl-data/fonts/ttf/
↓のmatplotlibにごにょごにょする。
/Library/Python/2.6/site-packages/matplotlib-1.1.0-py2.6-macosx-10.6-universal.egg/matplotlib/mpl-data/

詳細は、過去ログを。

4. PILをインストール
・sudo easy_install pip
・sudo ARCHFLAGS="-arch i386 -arch x86_64" pip install PIL
★archを指定してやらないと、PPC用の無駄なビルドプロセスが走り、当然エラーになる。

5. PyQtをインストール
・brew install pyqt
・ビルドに、ものっすっごく時間がかかる。寝る前に仕掛けておけば翌朝にはできあがっている。
・PYTHONPATHに /usr/local/Cellar/pyqt/4.8.4/lib/python:/usr/local/Cellar/sip/4.12.2/lib/python を追加

6. OpenCVをインストール
・PythonバインディングとQtを有効活用するために、必ずPyQtよりも後にインストールする。
・brew install opencv
・PYTHONPATHに /usr/local/Cellar/opencv/2.2/lib/python2.6/site-packages を追加

これだけ。なんとも簡単ですね!
手動のソースビルドをやる前にまずはお試しあれ!!

2011/06/11

敷島ガーデン

札幌地下歩行空間の一角にあるスペース。

意外といつでも空いてる。
wifiがなく、ネットしたい衝動を切り、勉強をするにはちょうどよい。

いまどき、スマホ使えば簡単にwifi飛ばせる時代ですけどね。

2011/05/31

MacBook AirにPyQt4をインストール


ぱぱぱっとGUIプログラムを書くには、PyQtが非常に便利である。
Python組み込みのTk使えばいいじゃないかという意見もあるが、個人的にはなんとなくあのUIが好きではない。

そのへんのページを見ると、
Qtインストール(dmgダウンロードしてパッケージインストール)

SIPインストール(ソース。python configure.py → make → sudo make install)

PyQt4インストール(ソース。python configure.py -q /Users/hoge/QtSDK/Desktop/Qt/473/gcc/bin/qmake -g → make → sudo make install)

しかし。


  File "a.py", line 15, in
    import PyQt4.QtGui
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/QtGui.so, 2): no suitable image found.  Did find:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/QtGui.so: mach-o, but wrong architecture



サンプルを実行するとこんなのが出てきて、激萎え。
おれがActivePython使ってるから?

でも、とりあえずActivePythonでも実行してくれないと困る。

追加設定。

まず、Qtそのものが64bitを想定しているようだ。
これを32bit向けに自前でコンパイルしないといけない。

http://doc.qt.nokia.com/4.7/install-mac.html
ここに、わりとわかりやすい手順は載っているのだが、Qtのソースをとってきて、
./configure -arch x86
make ←MacBookAirだと7時間くらいかかるので、寝る前に放置するのが懸命
sudo make -j1 install

ここからはPython側のモジュールインストール。

export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages

SIPのインストール。すでにwrong archtechtureと言われた場合は、インストール済みなので、make cleanしてあげないとダメ。
python configure.py --arch=i386
make clean
make
sudo make install

PyQtのインストール。
python configure.py --use-arch=i386
make clean
make ←2時間くらいかかる。これも放置するのが懸命。
sudo make install

2011/04/24

MacBook AirにPython開発環境とかをインストール。

Macは(よくしらんけど、たぶん)BSDの改造を重ねたOSである。
ということは、ただのネットブックじゃなくて、サブ開発マシンくらいにできるはずだ。
そんなことして、ちょっとインテリぶってみようとか、思わずにはいられなかったので、やってみた。

そんで、とりあえず手っ取り早く、しかもライブラリ豊富なPythonを、、と思ったが、かなりハマったので、メモっておく。


[前提] Pythonのインストール
ターミナルから「python -i」ってうつと


Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
こんな感じのが出てくるのだが、結論から言うと、これをそのまま使うことはできない。
なんでかは、忘れた。気になる人はggrks

で、とりあえずActivePython2.6をインストール。
難なく終了。/usr/local/bin/python, とか/usr/local/bin/easy_install とかできる。

さて、この時点ではpython と打つだけでは/usr/bin/python のほうが実行されてしまう。
ので、.bashrcと.bash_profileを以下のようにセットする。

.bashrc
alias python="/usr/local/bin/python"
alias easy_install="sudo /usr/local/bin/easy_install"
.bash_profile
if [ -f ~/.bashrc ] ; then
  . ~/.bashrc
fi

そんで、source .bash_profile を実行。
python -i とすれば
ActivePython 2.6.6.18 (ActiveState Software Inc.) based on
Python 2.6.6 (r266:84292, Jan  7 2011, 13:13:45) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
こんな感じでActivePythonのほうが起動される。

[1] numpy, scipy, matplotlib, PIL をインストールする前に。

環境さえ揃っていれば、これらはパッケージインストールすることができる。環境さえ揃っていれば!
そう、環境がそろっていなくてハマるのである。

まずはこいつを。

./configure
make
sudo make install

export PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig

numpyをインストールするために。 

あったほうがいいらしい。フーリエ変換使わないものがほとんどだと思うので、多分、なくてもある程度は動く。

scipy…多分すんなりいく。

PIL(Python-Imaging)をインストールするために。
・zlib
・jpeg-7
・libpng
ソースをネットからおとしてくる。

zlibとlibpngはふつうに./configure, make, sudo make install
jpeg-7は、
CC="gcc -arch i386"
をしてから
./configure --enable-shared --enable-static
make
sudo CC="gcc -arch i386" make install

そんで、最大の落とし穴が、1.1.6じゃないとインストールできないっぽい、ということ。
ここの1.1.6用のソースを落としてきて、
python setup.py build
sudo /usr/local/bin/python setup.py install
↑rootはaliasしてないので、絶対パスでPythonを呼び出す。

Pythonのシェルで「import _imaging」と打って、エラーにならなければ成功。

・matplotlibをインストール
パッケージから行けるんだけども。。

インストール後、
・インストールパッケージ内にあるmatplotlibrc.templateを ~/.matplotlib/matplotlibrc にコピる
・matplotlibrcの、backendのところを、MacOSXにする!
# the default backend; one of GTK GTKAgg GTKCairo CocoaAgg FltkAgg
# MacOSX QtAgg Qt4Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG Template
# You can also deploy your own backend outside of matplotlib by
# referring to the module name (which must be in the PYTHONPATH) as
# 'module://my_backend'
backend      : MacOSX
これをしないと、「TclError」とかでてきて、ハマる。
日本語フォントを表示したいときは、過去post参照。(http://plog.search-labo.net/2011/01/matplotlib.html)

[2] パッケージインストール
なにも難しくない。
numpy, scipy, matplotlib それぞれggrks

ふぅ。。

2011/03/25

札幌のコンビニでも

セブンイレブンでは、いろいろ品薄になっています。
リプトンの紅茶とか。

牛乳とかカツゲンとかは、北海道オリジナルなだけあって、強い。

2011/02/05

もうすぐ、さっぽろ雪祭り

大通では雪祭りの準備が進んでいるようです。

なんかジャンプ台が設置されています。誰が跳ぶんでしょう?

ちなみに今年の日程は2/7から2/13の1週間です。

2011/01/14

matplotlibで、日本語を表示させるための3ステップ設定

結構はまったので、メモ

1 フォントをインストール
まず、フォント。これがないと始まりません。
Takao Pゴシック/明朝 がおすすめ。
c:\Windows\Fonts に入れるのはもちろんですが、
c:\Python26\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
にも同様にコピー
しておかないといけません。

2 config追記
c:\Python26\Lib\site-packages\matplotlib\mpl-data\matplotlibrc というファイルの
##FONT
#
#
のちょっと下。
#font.serif 〜〜〜
#font.sans-serif  〜〜〜〜

font.serif : TakaoPMincho
font.sans-serif : TakaoPGothic


3 フォントキャッシュを消す
C:\Documents and Settings\Administrator\.matplotlib\fontList.cache
というファイルが存在していたら、消す。

以上。簡単なんだけど、あまりどこにも書いてない。



(2012/12/09 追記)
Linuxの場合は

/usr/share/matplotlib/mpl-data/fonts/ttf$ sudo ln -s /usr/share/fonts/truetype/takao/Takao* ./

sudo nano /etc/matplotlibrc

同じようにやる。


▼おまけ:サンプルコード

# -*- coding:cp932 -*-

from pylab import *

x=arange(0,10,0.1)
y=sin(x)
plot(x,y,"-")
title(u"さいんかーぶだお  $x_0,x^2,\\lambda$")
show()

2011/01/09

六花亭本店

本州の人々の多くは、六花亭のケーキを口にすることはない。
そもそも、バターサンドくらいのイメージしかなくて、ケーキを売っていること自体知らない人も多い気がする。

ほぼ全品200円未満という、安くておいしいケーキに、無料コーヒー飲み放題という、この上ない幸せなお店です。

ケーキ置いてるのは、帯広と釧路と富良野くらいな気がします。
サクサクパイ目当てなら帯広、雰囲気重視なら富良野がオススメ。

六花亭のケーキを知らなかった皆様、ぜひ足を運んでみては。