@mk_gaia_bot が最近次々と興味深い言葉をつぶやいている。

Pythonを完全に身につけるにはやはりハードルが高いみたいです。

King of Lockとは、かなり効率が悪くなりそうなLockですね。

Mad Lockって、Dead Lockに近い状態でしょうか。魅せられた、ということは、排他制御のややこしさを完全に理解できる高レベルな技術者なんでしょうね。

注意

mk_gaia_botとは、メンズナックルに掲載されたキャッチコピーをpostするBOTです。メンズナックルについては、wikipediaを参照ください。

プロジェクトの作成

Android プロジェクトの作成

File -> New -> Other -> Android Projectで作成

名前はここでは ScalaOnAndroidTest とする。

  • Project Name -> ScalaOnAndroidTest
  • Build Target -> ADVと同じ物を (今回は2.0.1)
  • Application Name -> ScalaOnAndroidTest
  • Package -> com.example.scalaonandroidtest
  • Activity -> ScalaOnAndroidTest

テスト

この時点で、Run as Android Applicationをクリック。

ちゃんと動いていればエミュレータが立ち上がるはず。

それで、
Hello World, ScalaOnAndroidTest!
などと表示されていればOK。

Scala Natureの追加

Projectを右クリック、 Scala -> Add Scala Nature

scalaのコードを書く。

最初に生成された、ScalaOnAndroidTest.javaを削除。

ScalaのClassを追加する。この時、Class名は、Activityと同じでなければならない。

classの内容はとりあえずこんな感じで。

package com.example.scalaonandroidtest

import _root_.android.app.Activity
import _root_.android.os.Bundle

class ScalaOnAndroidTest extends Activity {
  override def onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
  }
}

実行

Run As Android Applicationで実行。

…しかし、動かないなぁ。はてさて。ビルドは出来ているんだけど。

設定

Eclipseのダウンロード

からダウンロード

展開して、Applicationsに放り込む。

Android SDKのダウンロード

からダウンロードと展開。

EclipseScala pluginを設定

Help -> Software Updates ... -> Available Software -> Add Site..
から、
http://www.scala-lang.org/scala-eclipse-plugin
を入力してインストール

EclipseAndroid Pluginを設定

同様に、Help -> Software Updates ... -> Available Software -> Add Site..
から、
http://dl-ssl.google.com/android/eclipse/
を入力してインストール。

Androidの環境設定

環境設定からAndroidを選ぶと、Googleに使用状況を送るか、と聞かれるので嫌な場合はチェックを外すこと。

ちなみにこの時ウィンドウが複数出てるのに気がつかないで、クリックできねー!とかならないように。

Android SDKの場所の設定

SDK Locationで、先ほど展開したAndroid SDKの場所を設定する。

/Users/hogehoge/Works/android-sdk-mac_86

などとする。

Androidエミュレータの設定

Window -> Android SDK and ADB Manager を選択

Installed Packages

updateを押して、最新のパッケージを入手する。Fetch Allでいいだろう。ダウンロードには結構時間がかかるので注意。最後にADBの再起動が入ります。

(これは結局Android SDKをもう一度ダウンロードすることになってるのかな)

AVD(Android Virtual Device)の作成

Virtual DevicesをNewして、新しいAVDを作成する。適当な名前をつけて、TargetとしてVersionとSD Cardの容量を設定し、Create AVD。

Scala On Android

Androidの開発をScalaでやってみよう。その最初のまとめ。ちなみにScalaは使ったことがありません…。Androidの開発を通じてScalaを勉強してみようというわけです。

結論からいうとちゃんと動いていないですが、誰かのなにかの参考になるかと思い、書いてみます。

環境はMac OS X 10.6です。

駅Locky

駅Locky (http://eki.locky.jp/) というアプリがAppStoreに登場しました。

いろいろな評価が出ていますが、みなさま単なる時刻表アプリと思っているようなふしがあります。
これはLockyの仕組み、つまり、WiFiを使って位置情報を取得する、ということが一番の特徴なのです。

カウントダウン画面で WiFi ボタンを押して、WiFi情報を登録してください。(もちろんWiFiはOnにしておいてください)

改札口やホームで登録するのもいいですが、そこまでいくと普通に時刻表が駅にあるのであまり有意義ではないかもしれません。なので、駅の周辺、例えばいつもの通勤・通学路の途中で登録しておくと便利です。

WiFI情報を登録しておけば、その場所についたらすぐにその駅のカウント画面が開けます。
また、「自宅」も登録できるので、

  自宅でチェック -> 駅に近づいたらチェック -> 乗り換えでチェック

が一瞬でできます。

登録したWiFiデータは、アップロードすることで他の人が使うことができます。これでますます便利になるわけです。
なお、自宅として登録されたWiFi情報はサーバに送られません。

単に位置情報を使うだけならば他にもありますが、この駅LockyはWiFi情報を使うため、地下鉄でも効果を発揮します。

みなさま、時刻表を登録するだけでなく、WiFi情報の登録をしていただけるとますます便利になると思います。

WiFi

WiFiをOnにしておくと電池がぁ、という意見もありますが、セカイカメラWiFiをつけておくと精度がぐっと上昇することもありますし、常にWiFiをOnにしておくと便利だと思います。

JavaScriptエンジンの違い

Safari/Firefox/ChromeJavascript Engineが違うこともあり、やっぱり微妙に挙動が違う。

今日ハマったのはこれ。 top。

top というglobal変数は

  • Safariは普通にユーザ定義変数として使える
  • Firefoxではwindowに関するObjectとして使われている。が上書きが可能。
  • Chromeでは空の Object として使われている

Chromeではユーザが自分で var top として定義しても上書きはされず、空のObjectとして常に扱われる。

従って、

var top="hoge";
console.log(top + "blah");

と書くと、

となる。