Hatena::ブログ(Diary)

それ、Gentooだとどうなる? このページをアンテナに追加 RSSフィード

2012-01-22

App Inventorがオープンソースで公開されたのでGoogle App Engineにデプロイしてみた

プログラミングの知識がなくてもAndroidアプリを作ることが出来るApp Inventorがオープンソースで公開されたので早速試してみた。簡単に手順を紹介。

必要なもの

Google App Engineの設定。

Google App Engineでアプリケーションを新規作成。アプリケーションIDを控えておく。

http://code.google.com/intl/ja/appengine/downloads.html からJava 用 Google App Engine SDKをダウンロード、解凍。

http://appinventoredu.mit.edu/download-jar-files から最新のappinventor-serviceのzipファイルをダウンロード、解凍。

$ unzip appinventor-service-*.zip
$ cd appinventor-service-*/

解凍したら、まずappinventor-*.tgzを解凍。

$ tar zxf appinventor-*.tgz
$ cd appinventor-*/appinventor/

設定ファイルwar/WEB-INF/appengine-web.xmlを編集、ビルドサーバにするマシンを指定する。

    <property name="build.server.host" value="localhost:9990" />

このlocalhostを後ほど用意するビルドサーバのホスト名もしくはIPアドレスに置き換える。

App Inventorを特定のGoogleアカウントのみに制限する場合は、use.whitelistを有効に。同じwar/WEB-INF/appengine-web.xmlを編集。

    <property name="use.whitelist" value="false"/>

このfalseをtrueに。war/WEB-INF/whitelistに許可するGoogleアカウントを羅列。

GAEにデプロイ。

$ (GAE SDKのディレクトリ)/bin/appcfg.sh -A (アプリケーションID) update war

正しくデプロイできることを確認。

ビルドサーバの設定

先程ダウンロードしたappinventor-serviceのzipファイルに含まれているfor-BuildServer-*.tgzをビルドサーバで解凍。中に含まれるBuildServer.tarも解凍。

$ tar zxf for-BuildServer-*.tgz
$ cd for-BuildServer-*/
$ tar xf BuildServer.tar

ビルドサーバを起動。

$ ./launch-buildserver

試してみる

http://(アプリケーションID).appspot.com/ にアクセス。はいあとはお好きにどうぞ。

右上プルダウンのPackage for PhoneからDownload to this computerを選択、しばらく待ってapkがダウンロードされたらビルドサーバ含めて正しく動作しているんだと思います。

ビルドサーバとしてさくらのVPS512で試してみましたが、512MBのメモリではキツイです。

詳しい手順

上記手順はこちらの手順書の抄訳です。

Running App Inventor services with the MIT JAR files

2012-01-06

パスワードのハッシュに使うべきPBKDF2、Bcrypt、HMACの各言語実装一覧

いつも忘れるのでメモ。

元ネタ:Are you sure SHA-1+salt is enough for passwords?

日本語訳:「SHA-1+salt」はパスワードに十分だと思いますか?

こうしたスキームをいくつか選ぶことができる:

各選択肢はそれぞれの強みと弱みがあるが、これらは全てSHA1+saltのような汎用ハッシュのインプリメンテーションより、はるかに強力だ。

ということで、各言語での実装を調べてみた。実装が正しいかは調べてない。別実装もあるかもしれない。

言語PBKDF2BcryptHMAC
JavaBouncy Castle, PBKDF2.jarjBCryptBouncy Castle, サンプル実装
JavaScriptSJCL, crypt-js*1jsBCryptSJCL, crypt-js
PerlCrypt::PBKDF2Crypt::Eksblowfish::BcryptDigest::HMAC
PHPサンプル実装crypt($str, $hash)*2hash_hmac
Pythonpython-pbkdf2py-bcryptimport hmac
RubyOpenSSL::PKCS5, pbkdf2-rubybcrypt-ruby*3OpenSSL::HMAC, ruby-hmac

追記

おーマジっすか。知りませんでした。ということで差し替えました。

*1:SJCLの方が速いらしい

*2:CRYPT_BLOWFISHが1の場合

*3:メンテされてないため非推奨

2011-12-20

X環境のクリップボードやOS Xのペーストボードとtmuxのバッファを連携する方法

これはターミナルマルチプレクサAdvent Calendarの21日目です。20日目はid:tmatsuu最近のbyobuの動向についてでした。つまり連チャンです。

screenやtmuxには、いわゆるクリックボードに相当するバッファという機能があります。通常はscreenやtmuxの中で完結する機能ですが、それぞれ読み込み/書き出しができるので、XのクリップボードやOS Xのペーストボードと連携することが可能です。

ここでは、各環境とtmuxを連携する方法を紹介します。

LinuxなどのX環境のクリップボードとtmuxを連携する方法

xclipコマンドを使うことで簡単に連携することができます。

bind-key C-c run "tmux save-buffer - | xcopy -i"
bind-key C-v run "xcopy -o | tmux load-buffer - && tmux paste-buffer"

これで、

  • tmuxでコピーモードを経由してtmuxのバッファにためる
  • Ctrl-b Ctrl-cを押してtmuxのバッファからクリップボードへコピーする
  • Ctrl-b Ctrl-vを押すと、クリップボードからtmuxのバッファにコピーしつつ貼りつける

が可能になります。最初の2つを1回の動作でできればよかったのですが、現在のtmuxでは難しいようです。

OS Xのペーストボードとtmuxを連携する方法

OS Xの環境ではペーストボードとの連携にpbcopy/pbpasteを使いますが、pbcopy/pbpasteが特殊な実装であるため、デフォルトのままではtmuxと連携ができません*1

tmuxに対してパッチを当てることも可能ですが、追従するのも大変なのでここではGithubで公開されているラッパー、tmux-MacOSX-pasteboardの利用をオススメします。

tmux-MacOSX-pasteboardの使い方

ソースはGithubから取得します。git cloneしてmakeします。makeするためにはXcodeが必要です。

makeの結果、reattach-to-user-namespaceというコマンドが生成されますのでこれを任意の場所に設置しましょう。ここでは~/bin/に設置しています。

$ git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
$ cd tmux-MacOSX-pasteboard
$ make
$ ls -l reattach-to-user-namespace
-rwxr-xr-x  1 matsuu  staff  34548 12 20 22:34 reattach-to-user-namespace
$ cp reattach-to-user-namespace ~/bin/
tmuxの設定

tmuxの起動時およびpbcopy/pbpaste実行時にreattach-to-user-namespaceをかませます。

set-option -g default-command "~/bin/reattach-to-user-namespace -l $SHELL"
bind-key C-c run "tmux save-buffer - | ~/bin/reattach-to-user-namespace pbcopy"
bind-key C-v run "~/bin/reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

これでLinuxの場合と同様に、

  • tmuxでコピーモードを経由してtmuxのバッファにためる
  • Ctrl-b Ctrl-cを押してtmuxのバッファからペーストボードへコピーする
  • Ctrl-b Ctrl-vを押すと、ペーストボードからtmuxのバッファにコピーしつつ貼りつける

が可能になります。

参考文献

今回の記事を書くにあたり、以下の情報を参考にさせていただきました。

2011-12-19

最近のbyobuの動向について

これはターミナルマルチプレクサAdvent Calendarの20日目です。19日目はid:masudaKさんのtmuxでウィンドウ移動(Like Vim Keybindings)でした。

tmux(screen-profiles)の始まり

https://launchpadlibrarian.net/39290721/byobu_64.png

さて、みなさんはbyobuというアプリケーションをご存知でしょうか。

byobuは当初screen-profilesという名で、GNU Screenを使いやすくするための設定集という位置づけでした。

詳しくはUbuntu Weekly Recipe 第72回 screen-profiles(”byobu”)を使うにて紹介されています。

byobuはscreenのフロントエンドに

開発は続き、byobuはGNU Screenの設定集から飛躍してbyobuコマンドによるフロントエンドとなりました。

byobuコマンド経由でGNU Screenを起動するとステータス表示などが標準装備されており、面倒な設定の手間をかけることなくある程度整った環境を手に入れることができました。

また、独自のメニュー機構を用意しており、.screenrcファイルを編集することなく設定のカスタマイズが容易になりました。

詳しくはscreenからbyobuへ移行しようとしてわかったことと、一旦保留した理由にて紹介されています。

そして何でもありの世界へ

さて、現在ですが、byobuはGNU Screenだけでなく、tmuxもサポートするようになりました。byobu-tmuxコマンドを実行することでbyobuがtmuxのラッパーとして動作するようになります。

これによって、screen/tmuxのどちらでもbyobuで統一された画面デザインや設定画面を手に入れることが出来るようになったわけです*1

スクリーンショット

f:id:tmatsuu:20111220012225p:image

上側はscreenベースのbyobu(byobu-screen)、下側はtmuxベースのbyobu(byobu-tmux)です。どちらもデフォルトはCtrl-aがエスケープキーに設定されています。

f:id:tmatsuu:20111220012223p:image

byobu上でF9を押した際に表示されるメニューです。ヘルプやステータスバーの設定、エスケープキーの変更などが行えます。

f:id:tmatsuu:20111220012221p:image

ステータスバーの設定です。このようにチェックを入れるだけでステータスバーの表示項目を切り替えることができます。

もうbyobuを使えばいいんじゃね?

と言いたいところですが、そうとも限りません。

byobuはpython依存

まずbyobuはPythonで実装されているため、Python実行環境が必要です。まぁ最近はPythonがインストールされていない環境なんてほとんどないと思いますが。

既にscreen/tmuxをカスタマイズしているユーザには使いにくい

screenからbyobuへ移行しようとしてわかったことと、一旦保留した理由でも紹介されているとおり、既にscreenやtmuxでカリカリにチューニングしていた場合は逆にウザったく感じるかもしれません。

一応既存のscreenやtmuxの設定と共存できることになっていますが、ウィンドウの装飾などはbyobuの設定が優先されてしまいます。

パッケージが用意されているかな?

その他、各ディストリビューションでパッケージが用意されていないかもしれません。ちなみに、byobuはUbuntu発のプロジェクトですのでUbuntuにはパッケージが用意されています。

byobuを使うといいかもしれない人

ということで、byobuがオススメな人は次のような人だと思います。

  • screenやtmuxで最初何をしていいのかわからず挫折した
  • screenやtmuxの設定にさほど手を加えてない
  • screenやtmuxの設定カスタマイズは面倒だ
  • python依存に抵抗はない

screen/tmuxを試したことがない方はbyobuも試してみてはいかがでしょうか?ま、私は使いませんがね。

*1:ただし、screen/tmuxのどちらを採用するかでコマンド体系やウィンドウ制御などは異なります。

2011-12-10

Googleの2段階認証プロセスの確認コードをフィーチャーフォン(ガラケー)から振り出す方法

ようやくGoogleの2段階認証プロセスでバックアップ電話番号に日本の電話番号が使えるようになりました。日本解禁ですね。

で、通常はスマートフォンなどを使って確認コードを振り出すんですが、スマートフォンにGoogleのパスワードを覚え込ませてしまってる場合*1、スマートフォンを盗まれたらと思うと不安ですよね。

実はGoogleの2段階認証プロセスの確認コードはJava(J2ME)対応の携帯電話もしくはJava対応端末があればスマートフォンでなくても発行が可能です。

オープンソースで実装されているJ2MEアプリ、lwuitgauthj2meもしくはgauth2meがオススメです。lwuitgauthj2meは私のHONEY BEE BOXからは動作しなかったため、gauthj2meを用いた例を説明します。

gauthj2meをガラケーにインストールする

jarファイルとjadファイルが用意されているので、ガラケーから次のURLに直接アクセスすればokです。QRコードも貼りつけておきます。

http://gauthj2me.googlecode.com/svn/trunk/dist/gauth.jad

Content-Typeの問題で上記URLからダウンロードできない場合*2を想定して、同じファイルをこちらにも置きました。

http://matsuu.org/google-authenticator/gauth.jad

インストールが完了したらNew Secret Keyを入力します。

f:id:tmatsuu:20111210104132j:image

2段階認証プロセスの設定の画面で、Android/iPhone/Blackberryを選択すると、QRコードの読み取り画面になるかと思いますが、QRコードの読み取りはできないのでバーコードをスキャンできない場合をクリックし、シークレットコードを表示して、それをgauthj2meに入力します。すると30秒ごとにToken(確認コード)が表示されます。これをそのまま利用するこが可能です。

注意点

gauthj2meがインストールされたガラケーは正確な時刻を刻んでいることが必須条件になります。30秒ずれると表示された確認コードが使えなくなります。自動時刻同期に対応していないガラケーでは使用しないことをオススメします。

また、いつ使えなくなるかわからないので、実運用する場合は必ず印刷用バックアップコードを控えておくようにしましょう。

まとめ

今回使用したgauthj2meは、以前紹介したGoogle Authenticatorを使ってLinuxのログイン(PAM)で二段階認証でももちろん使用できます。

メールや電話の待受にしか使ってないあなたのガラケー、こんな活用もできますよ。是非お試しください。

*1:そんな人はいないと思いますが

*2:私の手元のHOENY BEE BOXはダメでした。