気紛 - きまぐれ -

2010-03-05 このエントリーを含むブックマーク このエントリーのブックマークコメント

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

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

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

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


注意

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

トラックバック - http://d.hatena.ne.jp/faw/20100305

2010-01-08 Scala On Android

Scala On Android

21:42 |  Scala On Androidを含むブックマーク  Scala On Androidのブックマークコメント

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

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

環境はMac OS X 10.6です。

設定

21:42 |  設定を含むブックマーク  設定のブックマークコメント

Eclipseのダウンロード

からダウンロード

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

Android SDKのダウンロード

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

EclipseのScala pluginを設定

Help -> Software Updates ... -> Available Software -> Add Site..

から、

http://www.scala-lang.org/scala-eclipse-plugin

を入力してインストール

EclipseのAndroid 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。

プロジェクトの作成

21:42 |  プロジェクトの作成を含むブックマーク  プロジェクトの作成のブックマークコメント

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で実行。

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

注意

21:44 |  注意を含むブックマーク  注意のブックマークコメント

scalaのページに書いてあるような、builderの順番変更や、Scala-Android.jarの追加などは必要ない、のかな?

変更しなくてもビルドは通るんだけど、実行できないのはここらへんが問題なのかな。

pokarimpokarim 2010/01/11 23:01 詳しい状況はわからないけど、scalaというかJava自体、ビルドできてもclassファイルやjarファイルが無いと実行時にこけるってことはあるよー。scala and androidいいねー。おれもandroid買おうかなー。

fawfaw 2010/01/11 23:46 E/AndroidRuntime( 231): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.scalaonandroidtest}: java.lang.ClassNotFoundException: com.example.android.scalaonandroidtest in loader dalvik.system.PathClassLoader@43cf9138
なんて言われるのですよ。でも、なにが原因で見つからないのかが分からないのです…

pokarimpokarim 2010/01/12 11:32 初めに断っておくとJavaのことはほとんど忘れてるので何かおかしなこというかもしれん。ClassNotFoundExceptionと言っているのでcom.example.android.scalaonandroidtest、つまりscalaonandroidtest.classみたいなファイルが、$CLASSPATH上に見つからないからエラーになってるみたいに見えるね。package com.example.scalaonandroidtest;
のところは、com.example.android.scalaonandroidtestを探しにいっているので、
package com.android;
でよいのでは?
あとは、$CLASSPATHとビルド時に生成されるclassファイルのパスがあってないとか、もしかしたらscalaonandroidtestが小文字なので、ファイル名とか、
ソース中のクラス名とか全部小文字で統一した方がとりあえず問題が減るかも。。。

pokarimpokarim 2010/01/12 11:33 まちがった。
package com.android;じゃなくて
package com.example.android;
だった。

fawfaw 2010/01/12 11:51 Androidの開発って、build、install、実行までの一連の流れがスクリプトとして提供されてるのですよ。その中でCLASSPATHとかが設定されているはずで、だから間違いはないと思うんだ。

まあ、でも、packageの指定とか、帰ったら試してみるわー。さんきゅー。

pokarimpokarim 2010/01/12 13:01 packageの指定の可能性が高そうだね。
package com.example.scalaonandroidtest
class ScalaOnAndroidTest
だと、com.example.scalaonandroidtest.ScalaOnAndroidTest
になっちゃうから、やっぱ、
package com.example;
class scalaonandroidtest
でいけるんでね?

fawfaw 2010/01/12 23:39 やっぱりだめだわ。
package com.exampleにしても、
Caused by: java.lang.ClassNotFoundException: com.example.ScalaOnAndroidTest in loader dalvik.system.PathClassLoader@43d035f0
小文字にしても
Caused by: java.lang.ClassNotFoundException: com.example.scalaonandroidtest in loader dalvik.system.PathClassLoader@43d030b8

うーむ。

トラックバック - http://d.hatena.ne.jp/faw/20100108

2009-10-28

駅Locky

15:52 |  駅Lockyを含むブックマーク  駅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にしておくと便利だと思います。

トラックバック - http://d.hatena.ne.jp/faw/20091028

2009-10-08 JavaScriptエンジンの違い このエントリーを含むブックマーク このエントリーのブックマークコメント

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

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

top というglobal変数は

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

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

従って、

var top="hoge";

console.log(top + "blah");

と書くと、

  • Safari: hoge:blah
  • Firefox: hoge:blah
  • Chrome: [object global]:blah

となる。

トラックバック - http://d.hatena.ne.jp/faw/20091008

2009-07-30

Jet Fighter

15:17 |  Jet Fighterを含むブックマーク  Jet Fighterのブックマークコメント

なんとなく手持ち無沙汰な時間があったので、Jet Fighterというiphone MMO ゲームを手に入れてみた。

で、これは名前だけは知っているiMobを作ったところが作っているゲームらしい。あとからiMobの画面を見てみたら色以外まったく同じだった…

3日ほどやってみたんだが、結局やらなくなった。というか、なにがおもしろいんだ?これ…

概要説明

  • 一定時間ごとに行動ポイントが増えていく
  • ミッションをこなして経験値とお金を稼ぐ
  • 稼いだお金で武器や防御兵器、戦闘機などを購入する
  • 同じ程度のレベルの人を攻撃できる
    • 攻撃に成功するとお金と経験値を奪える
  • 友人を勧誘できる
    • 9桁の数字のコードが割り当てられているのでそれを入力する
    • GPSを使い、地理的に近い場所にいる人を勧誘できる

えっと、これだけ。レベル15ぐらいまでやったんだけど、展開に変化はまったくなかった。上位の人を見ると装備が同じぐらいのものだったのでだいぶやった方だと思うんだけど。

ちなみに、パラメータとしては、attackとかdefenceの二つがあるんだけど、別の人を攻撃する際に必要な値は人数。おそらくそれだけ。

レベル15ぐらいになるとみんな100とか200とかの友人(squadと呼ばれる)がいる。一応レベルの10倍までの人数しかカウントされないというようになっているようだが、それでも150人。武器の数も重要にはなるようだけど、この人数が多ければ勝ち。少なければ負け、っぽい。

つまり友人の数だけが必要で、あとはほんとに単なる作業。そのくせ時間拘束が厳しい。一定時間毎にポイントが溜まる形式なので放置でいいんじゃね?とか思うんだが、あっという間に上限まで溜まるので、無駄にしないためにはちょこちょこアクセスしないといけない。まあ別に無駄になるのを無視すればいいんだけど。

で、これがほんとにおもしろいの?友人の数が少なくて勝ったことがないからなのかもしれないけど。

もうちょっと戦略を考えたりする余地があったほうがおもしろいと思うんだけどなぁ。

いいところ

ただ、おもしろいなぁと思うところはそれなりにあった。おもにUIだけど。

  • 徹底して文字を入力させないところ
    • ボタンだけでできるようになっている
    • iphoneでは入力画面が出てくるのが遅いからか
  • 常時statusが表示されているところ

しかし正直これなら普通のWebページをiphone用にカスタマイズしたものでできる気がする。

あと、

  • 人数が重要

なので、強制的に人数を増やすこと(ミッションに人数が必要)と、簡単に人数を増やせる方法が用意されているのがすごいことだと思う。

これがなぜ受けたのか?

おれにとってはできることが少ないし展開がまったく変わらないのでおもしろくないと感じるが、大多数の人にとってはこれぐらいで十分おもしろいのかもしれない。

友人の数が少ないだけで、ある程度以上増えるとおもしろくなるのかもしれない。特にリアル友人を引き込めればいいのかも。facebookでmob warsが流行ったのはリアル友人とつながっていたからかもしれず、最初からiphoneで参入しようとしてもだめなのかも。

いずれにせよ

こういう形式のゲームは細かな時間でできるからiphoneなどには合うだろう。位置情報とかSMSとかTwitterとかと絡めればさらにおもしろいと思う。で、iphoneアプリじゃなくてwebサービスとして展開すればiphone以外にもユーザが増えていいのかもね。

トラックバック - http://d.hatena.ne.jp/faw/20090730
Connection: close