NOOK Color へ CyanogenMod 10 を入れる

基本的には,こいつに従って,作業するだけ → [GUIDE] Install CM7 or CM10 + Recovery to EMMC - ALL NOOK COLORS! (Updated:11/19/12) - xda-developers
元々,過去の記事 rooted NOOK Color に Google 日本語入力を入れたよ | hadacchi blog でパッチ当てをしているので,CWM は展開していない.
手順については自分で調べること.

手順

  • 1gb CWM 3.2.0.1 を SD カードに焼く.
  • CM10 の zip と,対応する gapps をその SD カードにコピー.
  • その SD カードを挿して NOOK を再起動.
  • CM10,gapps の順で zip を選択して適用.
  • 再起動.

使用感

  • 日本語フォントが中華じゃない
  • 検索バーが,ホームのアイコン配置スペースの外に置いてあり,アイコン配置の邪魔にならない
  • CM9 ではなかった画面上の通知領域が標準で On に戻っている
  • adb でアクセスできない(over NW も無理)
  • デバッグモードで PC から認識しない(不明なデバイスとしてすら表示されず,ドライバインストールもできない)
  • 初回起動時の Google アカウントの設定時に,落ちる(後で設定したら動いたので,原因は不明)
  • 設定画面が,シングルカラム
  • 4月21日版の CM 9 (Unofficial) よりも軽快に動く
  • Android 4.1 対応のブラウザで動く Flash player がない (追記:Adobe が Play Store での公開をやめちゃったのね)

Flash が問題で必要なサイトが一部見られないため,CM9 か CM7 に戻す予定.

追記:

  • Flash について
    Android 4.0 向けの Flash Player が動いたので,これで勝つる.
    Archived Flash Player versions
  • adb について
    ターミナルエミュレータで su すれば,とりあえず root でシェルは使えるので,これで動かすしかあるまい…
    bluetooth キーボードが欲しい…

    設定画面で,「開発者向けオプション」の「Rootアクセス」を「アプリとADB」にしたら,adb shell が通るようになった.
    更にデバッグモードでも,PC からデバイスとしても認識するようになった.

SD カード上に入れた gnupack で python numpy を使う

SD カード上の gnupack (gnupack_devel-10.00) で、python numpy を apt-cyg から入れても動かない。

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.6/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from lib import add_newdoc
  File "/usr/lib/python2.6/site-packages/numpy/lib/__init__.py", line 13, in <module>
    from polynomial import *
  File "/usr/lib/python2.6/site-packages/numpy/lib/polynomial.py", line 17, in <module>
    from numpy.linalg import eigvals, lstsq
  File "/usr/lib/python2.6/site-packages/numpy/linalg/__init__.py", line 48, in <module>
    from linalg import *
  File "/usr/lib/python2.6/site-packages/numpy/linalg/linalg.py", line 23, in <module>
    from numpy.linalg import lapack_lite
ImportError: No such file or directory
>>>

web を検索すると、こういう情報が出てくる。→
numpyでlapack_fileを読み込んでくれないとき – 放置演算子
このサイトで言っているのは、必要なライブラリにパスが通ってないということだが、このサイトの対応方法では新しいバージョンを上書きインストールした時に、使っているライブラリとズレが出て、将来にハマる可能性がありそう。
なので、リンクを張ることにするが、やっぱ怒られる。

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.6/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from lib import add_newdoc
  File "/usr/lib/python2.6/site-packages/numpy/lib/__init__.py", line 13, in <module>
    from polynomial import *
  File "/usr/lib/python2.6/site-packages/numpy/lib/polynomial.py", line 17, in <module>
    from numpy.linalg import eigvals, lstsq
  File "/usr/lib/python2.6/site-packages/numpy/linalg/__init__.py", line 48, in <module>
    from linalg import *
  File "/usr/lib/python2.6/site-packages/numpy/linalg/linalg.py", line 23, in <module>
    from numpy.linalg import lapack_lite
ImportError: Exec format error
>>>

しょうがないので、調べてみる。

# cygcheck.exe /lib/python2.6/site-packages/numpy/linalg/lapack_lite.dll
G:\gnupack_devel-10.00\app\cygwin\cygwin\lib\python2.6\site-packages\numpy\linalg\lapack_lite.dll
  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cygwin1.dll
    C:\WINDOWS\system32\KERNEL32.dll
      C:\WINDOWS\system32\ntdll.dll
  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cyglapack-0.dll  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\libpython2.6.dll
chgcheck: G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cyglapack-0.dll is a symlink instead of a DLL

シンボリックリンクはダメ、らしい。
じゃぁ、とハードリンクを張ろうとするが、Fat32 でフォーマットされている SD カード上ではハードリンクが張れない。
ということで、SD カードを NTFS でフォーマットし直す。→SDカードをNTFSフォーマットする
で、その SD カード上でハードリンクを張れば、ちゃんと動く。

# cd /usr/bin
# ln /usr/lib/lapack/cygblas-0.dll cygblas-0.dll
# ln /usr/lib/lapack/cyglapack-0.dll cyglapack-0.dll

kobo glo 買ったよ

蓋,開けたよ.
参考は,こちら.

で,外から telnet が通るようにしてみた.
参考はこちらだが,注意があるkoboが来た - kobo
このサイトでは kobo (多分,touch) が使われていて,kobo glo とは少し仕様が違う.
microSD はただ引っこ抜くだけだし,4GB だし,DD for Win からは認識しないし.
なので,Linux から mount していじること.

リンク先のコピーだけど,まぁやったこと.

  • Ubuntu on VBox から microSD をマウント.
    • VBox のインストールは省略.
    • デバイスから,USB デバイスのmicroSDを選択.
    • どうせ最初は dd で吸い出すだけなので,念のため umount しておく.
  • コピー
    # dd if=/dev/sdb of=backup

    デバイス名は df とかで確認すること.3つパーティションがあるけど,焦らない.

  • /rootfs/etc/init.d/rcS へ,ターミナルが使う pts デバイスをマウントさせる.
    hostname kobo
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    

    1行目の hostname がなかったら,どうなるかは調べてない.

  • /rootfs/etc/services でコメントアウトされているポートとサービスの対応を認識させる.
  • /rootfs/etc/inetd.conf で ftpd と telnetd のコマンドを書く.
    ftp stream tcp nowait root /bin/busybox ftpd -w -S  /
    telnet stream tcp nowait root /bin/busybox    telnetd -i

    busybox へのリンクを /rootfs/bin 辺りに作っておけばいいじゃないか,という気がせんでもないが...
    各オプションの意味は,-w: アップロード許可,-S: /var/log/ftpd へ出力,-i: inetd 経由で起動,らしい.

  • /rootfs/etc/inittab で inet の起動コマンドを記述.
    ::respawn:/usr/sbin/inetd -f /etc/inetd.conf
    参照先のコマンドには typo があるので注意.

追記:
結局,swap 領域を作りたくて,KoboFW2.2.1Patch を拾ってきて入れちゃった.

追記2:
4GB のオリジナルイメージを 32GB の SanDisk Ultra Speed に DD でつっこもうとしたら,1時間たっても終わらんとか,鬼過ぎるほど時間かかる.
メインストレージの差し替えを考えてる人,マジ注意だぜ.

Word Press の設定

導入時の注意点

インストールは解凍するだけなので簡単.
mysql を展開しておわりかと思いきや,落とし穴があった.

  • mod_php を使う場合,フォルダ配下のオーナーを www-data とかにしておく.
  • 真っ新な wordpress を入れることにする場合,テーマとかプラグインとかが入ってなくて動かないので,バックアップの DB をインポートする前にとりあえず新規インストールを完了させてしまって,テーマとプラグインは入れておく.
  • プラグインやテーマのインストール時に FTP 接続情報を求められる場合,define('FS_METHOD','direct');を wp-config.php に入れる.
    多分,現象から推測するに,サーバーにプラグインを pull しにいくよう動作を変更させるのだと思われる...多分...

DB 構成について

  • wp_users,wp_usermeta はユーザー情報.とりわけ wp_users にはパスなんかも hash をかけて保存されている.
  • wp_terms,wp_term_* は,タグとかカテゴリとかリンクグループなどの名前・slug・分類・記事との関係を保存したもの.
  • wp_options は,プラグインとかの設定を保存したもの.消したプラグインの設定も残っているので,ゴミが多い.新規に入れ直して綺麗にしたい時にはバックアップ不要.
  • wp_posts は記事,wp_postmeta は記事内からのメディアファイルの参照や更新ロックの情報など.
    更新ロックの情報は削除しても問題なさげ.詳しくは,[WordPress] postmetaテーブルの_edit_lastと_edit_lock | きほんのき
    要は,meta_key="_edit_lock" に格納される UNIX タイムスタンプと,meta_key="_edit_last" に格納される最終更新ユーザーのユーザー ID は消しても構わんということ.
  • wp_comments はレス,wp_commentmeta はコメント削除などの情報.
  • 他は,そのまんまなので省略.

プラグインとか

  • WPTouch は, ver 1.9.5 以降は投稿できないバグがあるので,1.9.42 以前とすること. (1.9.4.2 の間違いではない.各人で readme.txt を読むこと)

また追記します…

BIND9 で DNS サーバ

昔,自鯖のwebサーバ化 という記事でちらっと書いたが,改めて再インストールしたマシンに書こうとすると,書けなかったので,調べ直した.

named.conf

named.conf から include しているファイルの設定も含む.

記述箇所 項目 tips とか
options version named が返す version 情報を変更する場合に指定.教えたくない場合に書く.
version 情報を調べ方は,

# dig @localhost chaos txt version.bind

localhost のトコは,調べたいサーバー名.

allow-update DNS の更新の許可をするか否か. 拒否したい場合は,
``allow-update {none;};``
zone zone ファイルを指定.
順引きの場合

zone	"domain.com"	{
	type	master;
	file	"path";	// options に記述した directory からの相対
};

逆引きの場合

zone	"x.y.z.in-addr.arpa"	{ // リトルエンディアン的表記
	type	master;
	file	"path";
};

zone ファイル (順引き)

記述箇所 項目 tips とか
$ORIGIN 記述対象のドメイン.
以降に,全く同じゾーン名を書く場合,@ と記述を略すことができる.
また,ホスト名を記述する時に,host と記述した場合,host.$ORIGIN を意味する.
$ORIGIN の末尾には . (ピリオド) を忘れないこと.
$TTL キャッシュの有効期限.このサーバーを参照する他のサーバーが,有効期限として活用する.
DNS が死んでも,この時間くらいは保持してもらえるかも知れない. (後述の をより長く指定していた場合)
SOA レコード (概略) そのゾーンの記述のトップに書くレコード.
例はこんな感じ.

@ IN SOA     (
	
	
	
	
	
	)
このゾーンのプライマリー DNS サーバ.A レコードで記述されたものを書くこと.
責任者のメールアドレス.アドレスの @ は . (ピリオド) で記述すること.@ より前に . (ピリオド) を使っている場合,\ (バックスラッシュ) でエスケープすること.
ゾーン記述のバージョンを示す通番.yyyymmddnn (nn は 01 からの通番) で書くのが一般的.前回更新より小さい数字だと,ちゃんと記述が伝播しない.間違えてデカすぎる数字を指定した場合は桁溢れさせてリセットするらしいが,その時に調べることにする.
このサーバーを参照するサーバーが,この数値毎に更新確認に来る. が増えていたら,更新をかける.
前回更新が失敗した時に,リトライするまでの周期. の約数を指定するらしい.約数を指定しなかった場合,落ち続けた時にプロセスが増えるのだろうか?試すのに時間かかりまくるので試さないで,言いつけに従うことにする.
更新が失敗し続けた時に,キャッシュを破棄するまでの期間.$TTL との値が違う時,どちらが優先されるかは不明.
ネガティブキャッシュ (aaa.domain.com が定義されてなかった時,「aaa.domain.com は未定義」という情報のキャッシュ) を保持する期間.
その他のレコード (概略) 記述は,

host	IN <レコード種別>	definition

という感じ.
NS:そのドメインのネームサーバーを記述.必ずしも, で指定したサーバーを記述する必要はない.
A:host -> IP addr の記述をする.
CNAME:別名の指定.
MX とかその他:とりあえず使う予定がないので,略.

zone ファイル (逆引き)

順引きで,AレコードがPTRになったと思えばOK.

チェック

named.conf の記述のチェックは,# named-checkconf [PATH] で行なう.
zone ファイルの記述チェックは,# named-checkzone domain PATH で行なう.
逆引きの場合,domain には x.y.z.in-addr.arpa を指定する.

resolv.conf への反映

resolv.conf の修正を忘れないこと.
ubuntu を新しいものにしたら,dhclient.conf の domain-name-servers とかをコメントアウトしても書き換えされてしまうようになった.
なので,/sbin/dhclient-script を書き換えることにした.
基本的には,resolv で出てくる行をコメントアウトするか,make_resolv_conf() を役立たずにすれば OK.
if 文の中に resolv の行しかないトコをコメントアウトする場合は,if 文ごとコメントアウトすること.
resolv.conf を普通のファイルにしたら,networking の restart でエラーを吐くようになったので,/etc/resolvconf/resolv.conf へのシンボリックリンクにした.元が何だったかは分からんが,まぁいいだろう.

E-ink式電子ブックリーダー

職場のN谷先輩のsony readerを見ていて欲しくなったので調べてみた.
以前から評判の高かった nook simple touch with glowlight と,それと比較されている他社リーダーを調べてみた.

Cybook Odyssey
【山口真弘の電子書籍タッチアンドトライ】国内未発売の「最新型」電子ペーパー端末3製品を試す で紹介されている.
動画の起動画面が出る.
驚いたけど,本を読むのには不要な気がする.
nook simple touch with glowlight
kobo glo
kindle paperwhite
上記と同じく,【山口真弘の電子書籍タッチアンドトライ】国内未発売の「最新型」電子ペーパー端末3製品を試す にて紹介されているほか,kobo glo,kindle paperwhite との比較動画もある.

画面の上にライトがあるのは,見辛いかも.
それに,ちょっと暗い.
こうして見ると,kindle paperwhite が良さげだなぁ.

ブラウザMC☆あくしずの施設設置コストの考察誤りについて

最近,ブラウザゲーにハマっている.
やっているのは,ブラウザ MC☆あくしず -鋼鉄の戦姫- というやつ.
ブラウザ三国志(略してブラ三)の移植ゲーの一つである.

目的は,戦争して世界征服するとかそいういう感じで,戦力をいかに効率良く整えるかが重要である.
戦力を整えるには,2つの手段がある.1つは街に施設を作って,兵隊を生産する方法である.
もう1つは,100枚を上限(無課金の場合)に集められるキャラクタを育成する方法である.
キャラの入手方法はカードダスと同じ要領で,運とリアルマネーのつぎ込み方によって,性能の高いキャラを入手できるか否かが決まる(トレードは省略).
強いキャラがいた方が有利だが,最終局面での強さは,施設設置効率やキャラの強さによって得られた生産性を生かし,整えた兵隊の数とランクに左右されることが多い.

んで,興味を持った人は記事右に表示されるバナーから登録してチュートリアルを一通りクリアしてもらいたい.
私はワールド5にいるけど,途中参戦はちょっと厳しいかも.

前置きはこのくらいとして…
本記事では,ブラウザMC☆あくしずの資源施設の効率について考察してみたい.
多くの記事では,設置済の施設のレベルアップに必要な材料の総量と,その効果を比較していることが多い.
(例:
日々是精進@ブラウザ三国志 拠点の育て方 生産施設の最適Lvは?
資源回収までの日数 研究/考察 ブラウザ三国志攻略データwiki
資源施設について|ブラウザ三国志プレイ日記
などなど…枚挙に暇がない)
※ブラ三とあくしずは,生産コストと生産量が同じなので,ブラ三のデータでも気にしないこと

資源施設に限って言えば,
私は,lv x の施設建設に必要な lv 1 からの累積コストを,lv x の生産量で回収するトータルコストの回収モデルが妥当だと思うのだが,なぜ多くの記事では lv x-1 から lv x へレベルを上げる時の コスト差分vs生産量差分 に着目するのか不思議でならない.
誤った結果を示すからである.

例えば lv 1 の生産施設は 10秒 で建設が完了し,lv 2 の生産施設は 30秒 で建設が完了する.
lv 1 の生産施設の材料分の生産を lv 1 の生産施設が上げるまでの時間は 16.67hour である.
さてここで,lv 2 の建設コストを lv 1 から lv 2 への生産量の増分で回収する場合 31.38h 必要であるが,16.67h 経過時点で lv 1 の生産コストの回収は終えているのだから,残りの時間は lv 2 の総生産量で回収できる時間を算定すべきである.
例えば,lv 1 の建設後,1時間してから lv2 を建設した場合,トータルコストの回収は 25h 経過後である.

施設建設後,すぐに次の施設建設にとりかかることにする場合,lv15 までの建設総コストの回収は 1106h = 46.1day で回収できる.

あくしず 資源施設 建設シミュレーション(lv15)
そのシミュレーションは,右図の通りである.
ここで,縦軸=資源総量,横軸=経過時間(h)である.
例えば,継ぎ目なく建設を続けた場合の,建設開始から 10日後 の収支は,横軸のラベルが 240 の時の縦軸の値で, -541,947 である.

さて,ここまで真面目に考察すれば当然のことであるが,よく言われている

レベル15になると、例えゲームが開始した瞬間に即完了でレベル15を建てたとして(無理ですが)
ぎりぎり回収が可能、という計算になってしまいますね。

日々是精進@ブラウザ三国志 拠点の育て方 生産施設の最適Lvは?

なんてことはあり得ない.
だいたい,lv 1 の建設コストを,lv 1 の施設の低い生産効率で回収する必要など全くないのだから,差分分析は机上の空論である.

とはいえ,これでは lv 14 と比較して lv 15 が効率的か否かを検証できていない.
そこで,lv 8~15 の各レベルまで建設した後の収支を算定してみる.

あくしず 資源施設 建設シミュレーション 比較(lv8-15)
その結果が右図である.
こうして比較すると,収支は黒字になるものの lv 14 の収支を lv 15 では 120day = 2880h では逆転できないことが分かる.
ブラウザMC☆あくしず の 1ゲーム は4ヶ月であるので,建設材料さえ確保できれば,lv14が最も収支が良いことが分かる.

勿論,これは建設に十分な資源がある前提であるので,ゲーム序盤では建設間隔がもっと開く.
例えば,lv 14 の建設に必要な材料の調達に,37日以上かかる場合は,lv 14 と lv 13 の資源施設と収支逆転ラインの 83day が残っていないことから,途中レベルの建設がいつ時点で可能か計算した上で,収支算定の修正が必要である.
また,十分回収可能な期間を経過後に lv x → lv x+1 へレベルアップした時のコスト効率は,差分コストの分析でも正しい.

--- 以下,付録 ---

さて,今回の考察では,なぜこんな差分が生まれたのか.
あくしず 資源施設 建設コスト(累積,差分)
それは,右図を見れば明らかである.
ここで,縦軸=コスト/生産量,横軸=施設レベルである.
累積コスト1のグラフ(マゼンタ)は,そのレベルの施設を建設するまでに lv 1 の建設から必要な累積のコストを,最終生産量で除算したものを施設レベル毎にプロットしたもので,
差分コスト1のグラフ(ネイビー)は,そのレベルの施設を建設するために必要な,最後の建設のコスト(差分のコスト)を,そのレベルアップで増加する生産量(差分の生産量)で除算したものを施設レベル毎にプロットしたものである.
1の収入に対する累積コストは,施設のレベルアップに対して一次関数的に増加するのに対して,
1の差分収入に対する差分コストは,施設のレベルアップに対して二次関数的に増加する.
この差分が,考察の違いとなって表われている.

なお,これら算定には Microsoft Excel を用いており,そのシートを置いておくので,詳しく知りたい人は参照されたい.
あくしず 資源施設シミュレーションファイル

--- 以下,付録2 ---

別の観点で,建設が生産に結びつかない兵舎と駐屯地について,収容兵数辺りのコストを総コストの観点と差分分析の観点から比較すると面白いことが分かる.
あくしず 兵舎vs駐屯地 総コストの観点から
あくしず 兵舎vs駐屯地 差分分析の観点から
ここで,縦軸は先の考察と同様に,
総コストの側は 各レベルの施設の建設に必要な lv 1 の建設からの総コストを,収容兵数で除算したものであり,
差分分析の側は 各レベルの施設の建設で最終建設に必要なコストを,最終建設で増員される兵数で除算したものである.
横軸は,施設レベルである.
注意すべきは,建設が生産に結びつかないことから,この施設については差分分析が可能であり,lv 15 の施設建設における差分分析の結果が逆転していることが,
総コストの観点から見た収容効率の差が縮まることと合致している.
前の算定と同様に,算定ファイルを置いておく.
あくしず 兵舎vs駐屯地 シミュレーションファイル

--- 注意 ---

実際のゲームでは,パネルを1つ使うコストが大きく,施設単体のコスト対効果が劣っていても,パネル消費が少なく総収容数や総生産量が大きい施設を建設するなどの判断が必要である.