Genymotion for personal use(無料版)のメモ

Genymotion 2.3.1
VirtualBox 4.3.20

  • ファクトリーリセットしたいときとか、スナップショットの操作は VirtualBoxから直接やればいい。factory-backup っていうスナップショットが端末初期状態。Genymotion からだとファクトリーリセットは有料版の機能の様子。端末のコピー(たぶんスナップショット的な使い方を想定してるんだと思う)も有料版の機能。
  • 本当に頻繁にファクトリーリセットする場合は、端末をつくって一度も起動していない状態で、その端末の情報が保存されているディレクトリ(Windowsの場合 C:\Users\[ユーザ名]\AppData\Local\Genymobile\Genymotion\Genymobile\Genymotion\deployed\[端末名] がデフォルト)の直下にある Snapshots ディレクトリをコピーしておく。ファクトリーリセットをしたくなったら、コピーしておいたものを戻せばOK。スクリプト書いておいたりすると楽。
  • VirtualBox との同期がうまくいっていないのか(ちょっと起動に時間のかかる初回起動時に多い)、たまに起動しなかったりするけど(VirtualBox側ではずっと「起動中」のままで、「実行中」にならない)、Windows 自体を再起動すればなおる。とはいえ何度もファクトリーリセットするような使い方だとわりと頻繁に起こるので、Windows の再起動よりはタスクマネージャから「VBoxHeadless.exe」を殺したほうがはやい。

さくらVPSで(クライアント→VPN→外部のための)VPNトンネルつくったよ

ちょっと必要になったので。CentOS 6.4 x86_64です。

以下、ぜんぶrootで作業してるのでてきとうに

OpenVPNインストール
yum install lzo-devel
yum install openvpn
easy-rsaの使用

てきとうなディレクトリで

wget http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz #最新だとeasy-rsaがなさそうだったので
tar xvzf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
cp sample-config-files/server.conf /etc/openvpn/
cp -fr easy-rsa/2.0 /etc/openvpn/easy-rsa
鍵の作成・インストール。
cd /etc/openvpn/easy-rsa
cp openssl-1.0.0.cnf openssl.cnf # 0.9.6、0.9.8も用意されているので適切なバージョンのものを
./vars
./clean-all
./build-ca # 認証局を構築。パラメータはそれぞれ適切に
./build-key-server server # サーバ鍵を作成
./build-key client # クライアント用の鍵を作成
./build-key clientx # 必要な数分作成
./build-dh
cd keys
cp ca.crt dh1024.pem server.crt server.key ../..
サーバ設定
grep -E '^[a-z]' server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1" # クライアント側のデフォルトゲートウェイ変更指示
push "dhcp-option DNS x.x.x.x" # 必要な場合。x.x.x.xはてきせつな値を
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
起動してみる
openvpn /etc/openvpn/server.conf
^C

なんとなく動いてそうなのでIPv4のフォワードの設定と、iptablesの設定

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service openvpn start

サーバの設定終わり。クライアントではサーバで作成したCA証明書(ca.crt。共通)、クライアント証明書・鍵(client.crt、client.key。クライアントごとに別)をsftpとかでもってきて使えばいいです。Windowsだと、自動接続とかが必要ないならvpnux Connector Liteとかが楽なようすでした。

容量7.99EBのオンラインストレージBitcasa

先日(2013/8/28)Bitcasa というオンラインストレージが日本で正式にサービスを開始しました。サービス自体は日本からも使えてたようですが、Amazon E3のアジアパシフィック(東京)リージョンの契約(日本からのアクセスの場合格段にスピードが速くなった)、ローカライズなどを行い、正式にサービス開始という流れのようです。

対応OS

Windows、Mac OSLinuxiOSAndroidWebアプリMy Bitcasaが動くブラウザが使えるOS
追記: Linuxのネイティブクライアントはなくなってたみたいです。のでLinuxはWebアプリだけです

容量が無制限

容量は無料で10GB、月$10/年$99で無制限です。また、新規顧客紹介で1ヶ月容量無制限などのキャンペーンがあるようです。

外付けHDDと同じ感覚で運用できる

例えばWindowsの場合、Bitcasaをインストールすると「Bitcasa Infinite Drive」という容量7.99EBのリムーバブルHDDとして認識され、Dropboxのようにディレクトリをミラーリングするのではなく、外付けHDDにデータを保存するのと同じ感覚で使用することができます。
f:id:yuijima:20130902152113p:plain

さらに好きなディレクトリをミラーリングできる

Dropboxの場合は「Dropbox」というディレクトリだけをミラーリングするのですが、Bitcasaは好きなディレクトリに対してミラーリング指定を行うことができます。

ただ、Dropboxの場合はDropboxディレクトリに入れたものは別のPCでも勝手に同期されるのですが、Bitcasaにはそのような機能はありません。ミラーリング指定したディレクトリはBitcasaとのあいだでミラーリングされるのみで、別のPCのローカルディレクトリにも同期されるDropboxのような機能は今のところありません(別のPCからもBitcasaからアクセスはできます)。
f:id:yuijima:20130902163439p:plain
こんな感じ。

ファイルはクライアント側で暗号化されBitcasaに保存される

DropboxとかSugarSyncとかが具体的にどういう処理をしているのかは調べていませんし、もうアンインストールしてしまったのでよくわからないのですが、少なくともクライアント側では暗号化してる雰囲気はなかったと思います。サーバ上では暗号化されているのでしょうが(SugarSyncはAES-128とのこと)、キーになにを使ってるのかもよくわからないし、怖いので、正直どうでもいいデータしかおいたことがありませんでした。

Bitcasaの暗号化についてはCEOが

AES-256ハッシュ、SHA-256ハッシュ

http://jp.techcrunch.com/2011/09/19/20110918bitcasa-explains-encryption/

という発言をしています(元を聞いてないので断言できないですが、AES-256ハッシュって誤訳ではないでしょうか)。
また、こちら(Internet WATCH)こちらのかたの記事、公式ドキュメントも参考にすると

  • 暗号化にはConvergent Encryptionという方式を採用している(LifeStuffが同様の方式を採用している様子。LifeStuffはストレージ先がP2P
  • 暗号化するファイルのハッシュ値を生成(Bitcasaの場合おそらくSHA-256ハッシュ)
  • 生成されたハッシュ値をキーにしてファイルを暗号化(AES-256)
  • 暗号化後のファイルを分割
  • 分割したものをアップロード

という流れのようです。ファイルを分割しているのは冗長除去(重複除去/deduplication)の効率をよくするため(ファイルの途中までしか送信されなかった場合も、分割ブロックをサーバに残しておけばその後冗長除去に使用できる、小さいサイズにすることで表現範囲が狭くなるため別のファイルのブロックが一致することも期待できる)なんだと思います。

CEOの

サーバー側では見ることができない

http://jp.techcrunch.com/2011/09/19/20110918bitcasa-explains-encryption/

という言葉を信じるかとうかは微妙なところです(Bitcasaはファイルの暗号化キーもユーザの認証情報ももっているので)が、暗号化キーはアカウントにひもづけられ、ID/パスワードあたりで適切に暗号化されてサーバに保存されている、くらいには信じていいと思います。

We then encrypt your file system using the user key generated when you signed up for your Bitcasa account.

https://support.bitcasa.com/entries/24634447

ちょっとこれだけだと想像するしかないですけど、秘密鍵つくってそのパスフレーズにユーザ入力文字を使用してるってことですかね。

クライアントで暗号化するぶん、CPUにはけっこう負荷がかかるので、そこまで気にしないのならばBitcasaはやめといたほうがいいかもしれません。しょぼいCPUだとこんな感じになります。
f:id:yuijima:20130902160518p:plain

速度が出る

DropboxAmazon S3のUSリージョンにデータが保存されます。また、利用者も多く速度が遅くなりがちで、ファイルのミラーリングには時間がかかり大きなファイルのやりとり(別PCとの同期など)は正直キツいものがあったのですが、Bitcasaは日本からのアクセスならたいていの場合Amazon S3のTokyoリージョンにつながるので、そこそこスピードが出ます。環境によるでしょうが、上り下りともに20~40Mb/sくらいです。

共有が怖い

13/9/9追記: 先日のWebアプリのバージョンアップで自分が行った共有リンクの一覧を表示することができるようになりました。My Bitcasaにログイン後、右上のログインID→アカウント&設定→Send Links で一覧がでます。
f:id:yuijima:20130909010225p:plain

Bitcasa上に保存したファイルを他人に送りたい場合、ファイルへのリンクを作成することができるのですが、これの使い勝手がいまいちです。簡単にファイルへのリンクを作成することができるのはいいものの、そのリンクを削除する方法はリンクURLにアクセスした先にしか存在しません。
f:id:yuijima:20130902161925p:plain
(「このリンクを削除」というボタンはリンクを生成したアカウントでログインしていないと表示されません)

ですので、生成したリンクを紛失してしまうと今のところ削除する方法は存在しないのではないかと思います。先述したように共有リンクの一覧を出すことができるようになりました

ところでこの画面に出る「Bitcasaドライブに追加する」っていう機能はよさそうですね。大きなファイルを共有しても、これができればすぐにリンクを削除することができますし。(Bitcasaとしてはファイルを複製する必要はないので負担は小さいのでしょう)

その他

例えばBitcasaのドライブにファイルのコピーを行った際、コピーが完了すればサーバへのアップロードが終わってるのかというとそういうわけではなくて、一度キャッシュに保存されバックグラウンドで暗号化を行ったあとアップロードされる、アップロード前に暗号化後のチャンクのハッシュ値をサーバに問い合わせ、同じものが存在する場合はアップロードされない、といった細かい仕組みはあるんですが、めんどくさいので終わります。

最後に

というわけでBitcasa使うしわりと宣伝した感じなので永久容量無制限権ほしいです。

フォームバリデータ jQuery Ketchup Plugin の使い方

ドキュメントがわりとわかりやすいです。

jQuery Ketchup Plugin 0.3.2 http://demos.usejquery.com/ketchup-plugin/index.html

簡単な使い方

基本的には jquery.ketchup.cssjquery.ketchup.all.min.js 読み込んで

$('#form_id').ketchup();

して

<input type="text" data-validate="validate(required)" />

みたいな感じでバリデーションしたいフォーム要素に data-validate 属性書けばいいだけだったので楽です。
このままだと英語でエラーメッセージ出てちょっとあれだし、ついてくる実装済みのバリデータだけだとちょっと物足りない感じなので

メッセージの変更

デフォルトだともともと用意されているバリデータのメッセージは英語です。メッセージを日本語に変更するには

$.ketchup.messages({
  required : 'この項目は必須です'
});
$('#form_id').ketchup();
バリデータの追加

ドキュメントや jquery.ketchup.validations.js を見て適切なバリデータがない場合は追加することができます。

$.ketchup.validation('hankaku', '半角英数字のみを入力してください', function(form, el, value) {
  return /^[a-zA-Z0-9]+$/.test(value);
});
$('#form_id').ketchup();

こんな感じです。

デフォルトはこんな感じ

f:id:yuijima:20130902151023p:plain
見た目とかはCSSで変更することができます。

終わり

jQueryプラグインとかそうでないのとか、Javascriptのバリデータいくつかさわりましたけど、他のプラグインと衝突しまくる国産のやつとか、みんなあれで使えてるんでしょうかね。

jQuery Ketchup Pluginのjquery.ketchup.validations.jsのバグ

なおした。

jQuery Ketchup Plugin には実装済のバリデータがついてくるんですが (jquery.ketchup.validations.js) 、わりとよく使う感じの required にバグがあったのでなおしました。2年放置みたいなのでPull Requestしてませんが、とりあえずメモ。

https://github.com/mustardamus/ketchup-plugin/blob/master/jquery.ketchup.validations.js#L4

var type = el.attr('type').toLowerCase();

このコード、required の1行目にいきなりでてくるんですが、ここの el に入ってる要素って input なのか textbox なのか select なのかわからないです。textbox とか select だった場合って(一般的には)type 属性もってないので、toLowerCase しちゃいけません。なので、

var type;
if(typeof(el.attr('type')) !== 'undefined') {
  type = el.attr('type').toLowerCase();
}

しときました。(textbox で required できなかったのでちょっと困った)