[Scala]Play frameworkでHello Worldちょい手前まで

Liftを使うかPlay frameworkを使うか、というところで、悩んでいるので

とりあえず、Play frameworkも試してみる。

Scalaをセットアップするのは、JDK入れて適当な場所にScalaを展開してパスを通すだけで良いので、これは省略する。

Play framework

本家(http://www.playframework.org/)

からダウンロードする。

Scalaを展開したディレクトリの隣あたりにPlay frameworkを展開。

Play frameworkへのパスを通す

コマンドラインで

と入力すると、play frameworkの実行メッセージが表示されれば正常に設置が完了している。

Play framework 2.0だと、ここまでやるだけで、なんかScalaモジュールが入るっぽいのですが

入っていない場合は

を実行する。

続いて、プロジェクトを作成する。

プロジェクトをおきたいディレクトリまで移動して

を実行。

と聞かれるので、そのままリターン

と聞かれるので、Scalaを使うので「1」を入力してリターン

以上で、プロジェクトの作成が完了。

Ruby on Railsっぽく、ここまま起動すると初期画面が出ると思うので、
とりあえずプロジェクトを実行してみる。

まずは、作成されたプロジェクトのディレクトリに移動。

続いて、実行

これで、localhostの9000番でプロジェクトが起動される。

続きはまた後ほど

[Ruby]Ubuntuにrvmを入れる

Ubuntuにrubyの環境をインストールするのに、
パッケージとかで入れると、どうも古いバージョンであったり
複数バージョンを入れて試したりしたい場合がある。

そんな時にはrvmを入れることで、Rubyの複数のバージョンを入れて切り替えたりすることが出来る。

ということで、まずはインストール

rvmの本家(http://beginrescueend.com/)から

インストール方法を確認

rvmのstableをダウンロード

rvm のパス情報を設定

以下は、アカウント内で有効にするための設定なので
.bash_profileに設定します。

これでrvmが使えるようになりました。

次に、rvmで管理できるRubyのバージョンを一覧表示してみます。

だいたいの場合は、CRubyと言われる物だと思うので

単純にバージョンだけ指定すればインストールできます。

今回は、1.9.3をインストールしてみます。

ここで

rvm requires autoreconf to install the selected ruby interpreter however autoreconf was not found in the PATH.

というエラーが出る場合、autoreconfが入っていないので

とやって、インストールします。

インストールが出来たので、今度は1.9.3を使うように設定してみます。

とコマンドを叩くと、入っていないか、現在入っているRubyのバージョンが表示されると思います。

切り替えて見ます。

再び

を叩くと

という結果が表示されます。

[Scala + Lift]HTMLのキャッシュ

Scala + Liftは、プロダクションモードで起動した場合には、htmlをキャッシュするみたいです。

自分自身は未確認ですが、確認方法は

GlassFishの場合

[設定] – [server-config] – [JVM 設定] – [JVM オプション]

の項目に
[text]-Drun.mode=production[/text]
を追加してGlassFishを再起動。

また、意図的にキャッシュを無効化するには

[scala]LiftRules.templateCache = Full(NoCache)[/scala]

と言う行をBoot.scalaに書く。

[Scala]LiftかPlayか

中身は全然濃いくないです。

単純に自分はどうしたらいいか、悩んでいることを書いてみるだけです。

Liftは、comet対応とかで、デフォルトだと接続がキープされたりするようだ。

少人数しかアクセスのないサイトで、リアルタイム更新を重視するのであれば

この方式で問題ないのだが、大人数接続で考えると、ちょっとややこしくなる。

接続をキープしない設定も出来るが。

また、ビューファーストなので、今までのRailsのやり方とはずいぶんと違う感じになる。

Railsからの移行を考えるのであれば、Play Frame workの方が相性が良いのかもしれない。

Play Frame workはまだ検証していないので分からないが、見た感じ使いやすそうな印象を受ける。

[MySQL]NULL の行を最後にしてソートする

ソート条件を付けない場合、以下のように出力されるテーブルでageがNULLのレコードは常に最下位にしてソートさせたい。
[text]+—-+———+——+
| id | name | age |
+—-+———+——+
| 1 | 名前1 | NULL |
| 2 | 名前2 | 20 |
| 3 | 名前3 | 30 |
| 4 | 名前4 | 18 |
| 5 | 名前5 | NULL |
| 6 | 名前6 | 60 |
+—-+———+——+[/text]
以下のようなSQLの場合、NULLの行が上に表示されてしまいます。
[sql]SELECT
*
FROM
users
ORDER BY
age ASC;[/sql]
[text]+—-+———+——+
| id | name | age |
+—-+———+——+
| 1 | 名前1 | NULL |
| 5 | 名前5 | NULL |
| 4 | 名前4 | 18 |
| 2 | 名前2 | 20 |
| 3 | 名前3 | 30 |
| 6 | 名前6 | 60 |
+—-+———+——+[/text]
このNULLの行を60歳のレコードの下に持って行くようなSQLは以下で実現できます。
[sql]SELECT
  *
FROM
  users
ORDER BY
  age IS NULL ASC, age ASC;[/sql]
age ASCをage DESCに変えても、問題なくNULLが最下位にソートされます。
[text]mysql> SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
+—-+———+——+
| id | name | age |
+—-+———+——+
| 4 | 名前4 | 18 |
| 2 | 名前2 | 20 |
| 3 | 名前3 | 30 |
| 6 | 名前6 | 60 |
| 1 | 名前1 | NULL |
| 5 | 名前5 | NULL |
+—-+———+——+

mysql> SELECT * FROM users ORDER BY age IS NULL ASC, age DESC;
+—-+———+——+
| id | name | age |
+—-+———+——+
| 6 | 名前6 | 60 |
| 3 | 名前3 | 30 |
| 2 | 名前2 | 20 |
| 4 | 名前4 | 18 |
| 1 | 名前1 | NULL |
| 5 | 名前5 | NULL |
+—-+———+——+[/text]

memcachedのコマンドラインでの操作

memcachedの中身を確認したい場合にコマンドラインで叩いて中身を参照するには

まず、memcachedにtelnetで接続する

[shell]telnet localhost 11211[/shell]

すると、

[text]Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.[/text]

とでて、接続が確立したします。

次に、memcachedに登録されているデータの一覧を取得…の前に

memcachedは、データをslabという領域に分けて保存しています。

なので、コマンド一発でキーバリューの一覧を取得することは出来ません。

なので、まずはこのslabの一覧を取得します。

[shell]$> stats items
STAT items:13:number 1
STAT items:13:age 23763
STAT items:13:evicted 0
STAT items:13:evicted_nonzero 0
STAT items:13:evicted_time 0
STAT items:13:outofmemory 0
STAT items:13:tailrepairs 0
STAT items:13:reclaimed 0
STAT items:14:number 2
STAT items:14:age 23742
STAT items:14:evicted 0
STAT items:14:evicted_nonzero 0
STAT items:14:evicted_time 0
STAT items:14:outofmemory 0
STAT items:14:tailrepairs 0
STAT items:14:reclaimed 0
END[/shell]

このitems:13:numberという行の13というのが、slab番号で、この番号を検索キーにして

memcachedに登録されているキーバリューを取得します。

なので、次にslabの13に登録されているキーの一覧を取得します。

[shell]$> stats cachedump 13 1000
ITEM key1 [1264 b; 1332315959 s]
ITEM key2 [1264 b; 1332315959 s]
END[/shell]

これで、やっとキーバリューのキーの一覧(slab13の中の)が取得できました。

続いて、key1に入ってるバリューを取得するには

[shell]$> get key1
value1
END[/shell]

とやります。

VMware Playerで、ゲストOS上のアプリのショートカットをホストOS上に作成する

VMwareで、ゲストOS上のアプリのショートカットをホストOSに作るという機能は

Mac OS X用のVMware fusionで最初に導入されたような気がしますが

それがVMware Playerで実装されていた。

やり方としては

ゲストOSを起動

ユニティモードにする

スタートボタン付近にマウスを持って行くと現れるメニューから該当のアプリケーションを見つけろ

そのアプリケーションのアイコンをディスクトップにドラッグ&ドロップ

以上

これで、ゲストOSを起動していない時でも、アイコンをダブルクリックすることで

ゲストOS上のアプリが起動します。(時間はかかりますが)

ARROWS X LTEのバッテリーを持たせるために、手っ取り早く出来ること

ARROWS X LTEを買って1ヶ月、やはり電池の持ちが気になるので

いらない物をウィジェットから外したりしてみる。

まずは、パーソナルエリア

ホーム画面のオプションから、パーソナルエリアを非表示に設定

ARROWS X LTEに関する記事を見ていると、Contents headlineというのがやばいらしいので

とりあえず、ウィジェットとして置いてないことを確認し(置いてあったら削除)
アプリケーション管理からContents Headlineを探しだしてデータクリア

ARROWS X LTEにはホームアプリが3つ入っている
普段は2つは起動していないが、なんとなく、そこに入っているウィジェットが悪さをしそうな気がするので
ホームアプリを順に起動していき、ウィジェットをすべて削除

歩数計は

健康のため、歩数を確認したいのでOFFにはしない。

縦横自動も、良く横表示にしたりするので、OFFにはしない。

あとは、先日、ホームアプリがバージョンアップしたらしく、それを入れたら

ホームのモッサリ感がなくなった。

横スライドもスッと行って直後にアイコンタップして反応するし

改善されてます。

あとは、バッテリー。。。

これも少しは改善されているんでしょうか、若干持ちが良くなった気がしますが、真相は分かりません。