MacでSamsung SSD 840 EVOのTRIM有効化

毎年年賀状の季節になるとWindowsを使う必要があり、Mac mini上のVMware Fusion上で作業していたのですが、OSがMavericsになってからどうにも遅く、耐えられずにSSDに換装してしまいました。

導入したSSDはSamsung SSD 840 Evoです。換装作業自体はすんなりいったのですが、移行アシスタントが正常に動作しないという事態が発生。そちらは諦めて新規インストールとコピーで済ませ、最後に様々なサイトにある通りTRIM機能を有効にしようとすると、Trim Enablerでは有効になりませんでした。

そこで下記のサイトを発見。

http://www.mactrast.com/2011/07/how-to-enable-trim-support-for-all-ssds-in-os-x-lion/

記事の中でCHAMELEON SSD OPTIMIZERを勧められており、こちらで実施したところうまくいきました。(実行には1分くらい掛かったので多少焦ったのですが)

ということで換装が終わり、スピードテストをしたところ、ATAドライバがついてこれないのかSSDのフルスペックの1/4くらいのスピードしか出ません。それでもHDDよりはReadで5倍、Writeで3倍のスピードではあるんですが…。なんだか残念な気持ちに。

デジタルでないゲームで遊ぶ

昨年まで私が携わっていた仕事で、かつて私自身もかなりの時間を費やしてプレイしたゲームを企画されていた大変著名な方とご一緒する機会があり、その方からお誘いを受けてデジタルでないゲームで遊ぶ会に参加しました。これが大変楽しかったので、記録の意味でもプレイしたゲームを2つほど紹介させていただきます。

Kingdom Builder

[amazonjs asin=”B006L6Z2QO” locale=”JP” title=”キングダムビルダー”]

ドミニオンの作者が作ったボードゲーム。ドミニオンよりもシンプル。
ボード上の土地に自分の領土を拡大し、最終的にはゲーム内ルールによる点数が一番高い人が勝ちとなります。
基本的な動作は、前の手番の最後に山札から1枚カードを引き、次のターンが来るまで思考を巡らせ、手番になったときにカードの示している地形に入植地コマを3つ置きます。但し、可能な限り既に置いてある自分の入植地コマに隣接しなければいけない、という点がポイントで、これにより戦略を組み立てたり他のプレーヤーの妨害ができたり、戦略的にゲームを進めることができます。

ルールは非常に簡単なのですが、ドイツ語版ということでカードだけでは十分にルールが把握できず、試行錯誤しながらプレイしました。

Shadows over Camelot – キャメロットを覆う影

[amazonjs asin=”0975277383″ locale=”JP” title=”キャメロットを覆う影”]

アーサー王と円卓の騎士をモチーフとしたボードゲーム。ルールがかなり複雑です。

複数のボードの上でめぐらされる複数のクエストをこなし、円卓に7本の白い剣を揃えれば勝ち、というルールですが、各クエストの勝利条件がかなりキツく、プレーヤーが共同して戦略を立てて効果的に達成していかないと厳しいです。しかもプレーヤーの中には一人だけ裏切り者がいる可能性があり、疑心暗鬼のままゲームが続くという心理戦の要素もあるゲームでした。

5人プレイで 2回やりましたが、2回とも裏切り者(それも同一人物)に滅ぼされるという憂き目に合いました。

 

その後、会社でもよくゲーム研究と称してやっているドミニオンをしてお開きとなったのですが、上記2つのゲームを通して昨今のカードバトルの深淵を覗くことが出来、大変参考になりました。

[amazonjs asin=”B001TK30R0″ locale=”JP” title=”ドミニオン 日本語版”]

Amazon EC2でMozc for Android(オープンソース版Google日本語入力)をコンパイルしてみる

IMEを作っている(そして放置している)ものとして、Google日本語入力が出た時点で「こっちでいいじゃん」的な気持ちになっていたのですが、とりあえずMozc for Android(オープンソース版Google日本語入力)でも弄ってみようと思ってはや1年近く。ようやく時間ができたので試してみました。それなりに悪戦苦闘しそうだと思ってはいたのですが、割とすんなりできたので手順を公開します。

本来の手順自体はこちらにあります。
https://code.google.com/p/mozc/wiki/AndroidBuildInstructions

まずはEC2でインスタンスを作ります。t1.microでは途中でCPUパワーが足りずにBuildが進まなくなるため、最初からm1.smallで設定したほうが良いでしょう。tokyoリージョンなのは趣味です。

スクリーンショット 2014-01-01 11.33.41

この時点でEBSを16GiBにしておく必要があります。これもデフォルトの8GiBではコンパイル中に容量が足りなくなるためです。
また、今のところUbuntuでないとコンパイルが保証されていないので、Ubuntu Server 12.04.3 LTS 64bitを選択してますが、後から32bitライブラリを足たりしているので、もしかしたら最初から32bitが良かったのかもしれません。

ログインしたらまず足りないものをインストール

% sudo apt-get install ant g++ make python subversion openjdk-6-jdk

Unzip / Subversion / make / gcc / pkg-config も入れておきます。

% sudo apt-get install unzip
% sudo apt-get install subversion
% sudo apt-get install make
% sudo apt-get install gcc
% sudo apt-get install pkg-config

32bitライブラリを入れておきます。

% sudo apt-get install ia32-libs

一度インストールしたら、

% sudo apt-get update

も実行してください。

AndroidSDKとAndroidNDKもダウンロードして展開。

% wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20131030.zip
% wget http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2
% unzip adt-bundle-linux-x86_64-20131030.zip
% tar jxfv android-ndk-r9c-linux-x86_64.tar.bz2

いよいよコードをダウンロード

% cd ~/
% svn co http://src.chromium.org/svn/trunk/tools/depot_tools
% export PATH=”$PATH”:`pwd`/depot_tools
% mkdir -p ~/src/mozc
% cd ~/src/mozc
% gclient config http://mozc.googlecode.com/svn/trunk/src
% gclient sync

周辺ライブラリzinnia(手書き文字認識エンジン)が足りないのでダウンロード・インストールしておく

% cd ~/
% wget http://downloads.sourceforge.net/project/zinnia/zinnia/0.06/zinnia-0.06.tar.gz
% tar zxvf zinnia-0.06.tar.gz
% cd zinnia-0.06/
% ./configure
% make
% sudo make install

再度 gclient syncから

% cd ~/src/mozc
% gclient sync

パスを通す

% export PATH=~/android-ndk-r9c:~/adt-bundle-linux-x86_64-20131030/sdk/tools:~/adt-bundle-linux-x86_64-20131030/sdk/platform-tools:”$PATH”
% which ndk-build android adb

さらにJava をインストールし、SDKをアップデートしておきます

% sudo add-apt-repository ppa:webupd8team/java
% sudo apt-get update
% sudo apt-get install oracle-java7-installer
% android update sdk -u -t platform,tool,platform-tool,extra-android-support

コンパイルを開始します

% cd ~/src/mozc/src
% python build_mozc.py gyp –target_platform=Android

(WPでは見えませんが、target_platform の前のハイフンは2つです)

% python build_mozc.py build_tools -c Release
% python build_mozc.py build android/android.gyp:android_manifest

local.propertiesを作成

% android update project -s -p android –target android-17

そしてBuildします

% python build_mozc.py build android/android.gyp:apk -c Debug_Android

これでDebugバージョンのapkが
/home/ubuntu/src/mozc/src/android/bin/MozcForAndroid-debug.apk
に出来ます。

 

以下補足です。

エラーが出る場合 1:

make: *** [out_android/Debug_Android/obj/gen/data_manager/oss/system.dictionary] Error 137
make: *** Waiting for unfinished jobs….

こんな感じのエラーはCPUパワーが足りてません。
t1.microではCPUパワーが足らないので、m1.small以上で起動しなおしましょう。

エラーが出る場合 2:

BUILD FAILED
/home/ubuntu/src/mozc/src/android/custom_rules.xml:42: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:601: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:653: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program “/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/build-tools/android-4.4/aapt” (in directory “/home/ubuntu/src/mozc/src/android/protobuf”): error=2, No such file or directory

これは32bitライブラリが足りていないときです。このコマンドからia32を導入してください。

% sudo apt-get install ia32-libs

エラーが出る場合 3:

INFO: Running: make -j2 MAKE_JOBS=2 BUILDTYPE=Debug_Android builddir_name=out_android apk
ACTION android_android_gyp_assets_touch_stat_data_target_assets_touch_stat_data android/dummy_touch_stat_data
make: *** [android/dummy_touch_stat_data] Error 1
Traceback (most recent call last):
File “build_mozc.py“, line 1437, in <module>
main()
File “build_mozc.py“, line 1425, in main
BuildMain(cmd_opts, cmd_args, original_directory_name)
File “build_mozc.py“, line 1038, in BuildMain
BuildOnLinux(options, targets, original_directory_name)
File “build_mozc.py“, line 992, in BuildOnLinux
RunOrDie([make_command] + build_args + target_names)
File “/home/ubuntu/src/mozc/src/build_tools/util.py”, line 97, in RunOrDie
‘==========’]))
build_tools.util.RunOrDieError:
==========
ERROR: make -j2 MAKE_JOBS=2 BUILDTYPE=Debug_Android builddir_name=out_android apk
==========

なんらかの理由でコンパイルが失敗しているので、一度cleanして実施すると上手くいく可能性があります。

% python build_mozc.py clean –target_platform=Android

エラーが出る場合 4:

/home/ubuntu/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: android/obj/local/armeabi/libclient.a: No space left on device

EBSボリュームが足りていません。EBSボリュームを拡張しましょう。詳しくは
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-expand-volume.html
でご確認ください。

さらに補足:
aaptのパスが通らなかった場合がありましたので、その場合は下記を投入してください。

% export PATH=/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/build-tools/android-4.4/:”$PATH”

 

ROIの高い本 -【書評】グロースハッカー

あけましておめでとうございます。
今年もよろしくお願いいたします。

昨年は例年に比べて本を読まない年でした。私の場合、「本を読む」という行為自体にある程度まとまった時間が必要になるので、仕事やTODOに追われると確保できる時間が細切れになってしまい、本を読んでも頭に入ってこないのです。ということで、ようやく正月休みになって積ん読を消化しているのですが、今年一発目はこれでした。

[amazonjs asin=”482224993X” locale=”JP” title=”グロースハッカー”]

この本、内容量は非常に少ないのですが、その割には獲得する知識は多かったように思います。多くのビジネス関連書籍が同じ事を手を変え品を変え分量を増やすのに対し、言いたいことだけサラっと書いてあるので、読んだ時間に対する投資利益率が高いものになっています。これがタイトルの「ROIの高い」の理由。内容も大きく踏み込んだものではありませんが、グロースハッカー自体の考え方を理解するのにはコンパクトで良書だと思います。

私自体、グロースハッカーの定義をすこし誤解していたので、正しく理解し直せたという点でも得るものはありました。

さて、この本ですが、グロースハッカーの本だけあっていろいろ取り組みをされています。まずはこちら。

[amazonjs asin=”B00HEYWCYC” locale=”JP” title=”グロースハッカー”]

こちら、更新されていなければ表紙の異なる「グロースハッカー」が表示されているかと思いますが、実は今販売しているものは表紙の4/5を占める帯がついています。デザインされたタイトルが小さかったので修正したのでしょうね。ここまで大胆な帯をつける本は知りません。帯が全てを覆わなかったのは裏表紙のバーコードを隠さない為「だけ」だと思いますので、その制約がなければ帯だけ表紙になっていたことでしょう。

また、この本はROIが高いと書きましたが、著書以外の解説などが1/4を占めます。こんな本も今まで見たことがないのですが、クックパッドやZaimについて解説されていてこの部分も面白いです。

この手のものこそ電子書籍の方が合うのではないかと思うのですが、そこは特典でフォローなんですかね。

【書評】アート・オブ・プロジェクトマネジメント

ソフトウェアの開発工程管理は80年代からの蓄積から洗練されており、アジャイル開発などの比較的新しい手法でも多くの成功例を見ることができるが、それでもソフトウェア開発プロジェクトが何事も無く予定通りに終わることは非常に稀である。

何故か。ソフトウェアという括り自体が非常に多岐にわたる産業にまたがっており、飛行機の管制管理とちょっと便利なAndroidアプリの開発では要求条件も手法も何もかもが異なるからである。同じようなソフトウェアでも日進月歩の技術を取り込んで改良を重ねるうちにそれは複雑性を増し、やがて全く違うものになるのに、作り方だけ変わらないわけにはいかない。

こうしてデスマーチが生まれるのだが、英会話のレッスンで先生に We call such a terrible project “death march”. と言ったらこれは海外では通じないらしい。では海外ではデスマーチは無いのかと言ったらそんなことはなかった。

[amazonjs asin=”4873112990″ locale=”JP” title=”アート・オブ・プロジェクトマネジメント ―マイクロソフトで培われた実践手法 (THEORY/IN/PRACTICE)”]

前のプロジェクトでプロジェクトマネージャーをするにあたり、知識を再構成しようと手にとった本だが、読み終わる前にプロジェクトが終わってしまった。その終焉は想像にお任せするが、少なくとも読んでいる間もこの本のお陰でプロジェクト運用の問題に対していくつかヒントを得ることが出来た良書である。ビジョン・スケジュールといったプロジェクトマネジメントでおなじみのものから、テストの観点、コーディングのパイプライン、レビューミーティングから果ては政治力についてまで、今後プロジェクトマネジメントに係る際に参考となる実用的な書籍である。副題にマイクロソフトとあるが、巨大プロジェクトのノウハウは、結局はマイクロマネジメントの集合とも考えられるので、プロジェクトの大きさにかかわらず応用することが可能である。プロジェクトに関与する全ての人におすすめ。

ArtIMEのセキュリティ状況について

ArtIMEはセキュアに利用することができます。以下ご確認ください。

・全ての入力情報をログに蓄積したり、サーバへ送信するなどは行っていません。
・学習した変換候補のみ、他のアプリから見えない形でローカルに保存されます。
・Social IMEをONにした場合のみ、変換候補を取得するため入力情報をSocial IMEに送信しています。これによるログ蓄積や収集は行っていません。
・Wikipedia検索及び辞書検索に切り替わっている場合は、簡易的な単語抽出を行ってWikipediaへ送信し、結果を表示します。これによるログ蓄積や収集は行っていません。

ご心配がある場合はご連絡戴ければ幸いです。

eVY1 Shield を試しました

このところ、訳あってArudinoを弄ってます。

そんな中、eVY1 Shieldを買ってみました。
組み込み版初音ミクが入っているArduinoシールドです。

(音が超小さいです。ボリュームに注意)

取り扱い説明書など一切無い男前な状態で届くので、正直初心者にはツライ。

ArduinoとShield側のリセットタイミングが異なるのか、普通に起動するだけだと歌ってくれません。「別のスケッチを書き込む→シールドをリセット→サンプルスケッチを書き込む」とすると、シールドのリセット後にArduino側からシリアル送信してくれるのか、歌ってくれるようになりました。

最高のUIが最高のUXとならない一例

iOS 7になってiPhoneで遊べなくなる赤ちゃん(動画)
http://www.gizmodo.jp/2013/07/ios_7iphone.html

まあ、単純にUIが変わって操作の仕方に混乱が生じた、ということですが、一度広まったUIを変更するということはこうのような小さなストレスを重ねる、ということになるのですから慎重に。

UIの基礎

どんなアプリもとりあえずこれは守ってほしい。

ユーザ
・ユーザは説明を読まない。可能な限り説明しないでも使える様にする。
・ユーザは慣れることは無い。小さなストレスは常に掛かり続ける。
・ユーザにできるだけ操作させない。メニューの階層を必要以上に深くしない。

配置
・同じ情報を扱うものはできるだけ近くに配置する。可能であれば同一化する。
ボタンを押すとボタン自身の表記が変わるなど。
・アフォーダンスを考慮する。
ボタンとして動作するものはボタンの形であることがユーザに取って重要。
・同一の動作をするものは別の場面でも同一の場所に配置する。
・違う動作をするパーツを他の場面で同一の箇所に配置しない。