以前作ったサービスがほとんど動かなくなっているので、とあることの前準備として、動かすようにしてみましょう。
が、ソースのありかもわからないし、検索して見つけても、開き方もわからないという体たらく。
とりあえず、
http://d.hatena.ne.jp/abe00makoto/20100901/1283351887
を参考に開けました。
デバッグしようとすると、「Andoroidアプリケーション」しか出てこない。ホントは、デバッグ構成に「PyDev Google Run」があるべきと思われるが、ない。Eclipseをバージョンアップしたから、こういうのもアップしないといけないのか。では、PyDevも入れましょう。
はい、構成できるようになったので、こんな感じで。
そうすると、実行時にエラー。
‘import site’ failed; use -v for traceback
Traceback (most recent call last):
File “/Applications/eclipse/plugins/org.python.pydev.debug_2.5.0.2012040618/pysrc/pydevd.py”, line 2, in
from pydevd_constants import * #@UnusedWildImport
File “/Applications/eclipse/plugins/org.python.pydev.debug_2.5.0.2012040618/pysrc/pydevd_constants.py”, line 42, in
import threading
ImportError: Bad magic number in /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/threading.pyc
お手上げしたいが・・・
ターミナルで、python –version しても、Python 2.5.2 と返ってくる。なぜ、importでは2.3を見るのか?ん、確かに上の画像を見ると、2.3になっている。プロジェクトを選ぶと自動的に表示されたので、どこかに持ってるですね。ドキドキしながら、プロジェクト右クリック > PyDev > PyDev プロジェクト構成の除去 をやってみます。改めて、プロジェクト右クリック > PyDev > PyDev プロジェクトとして設定。また、2.3になっている。では、もっとドキドキしながら、pycファイル等の削除。・・・ダメ。心折れかけ。2.3はゴミ箱!
・・・2.6で動いてくれたみたい。が、
from google.appengine.ext import webapp
ImportError: No module named google.
久々にGAE
Androidアプリをネイティブで作るか、HTMLで作るか
連休今日で終わりですか・・・。休み足りぬ・・・
話は唐突に変わりまして、スマホ用のアプリを作る場合に、ネイティブアプリとして作るか、HTMLベースで作るか、という観点があります。
基本的には、画面動作が激しい場合はネイティブ、そうでなければHTMLでよいのでは、という感じのようです。
そうだとすると、業務アプリを作る場合は、HTMLでしょうね。
ネイティブで作るとしても、データを取得するためにはWebサービスは必要でしょう。であれば、サーバ側もクライアント側もこれまでのWeb開発技術の範囲内で済ませたいという要望はあると思われます。
しかも、クライアント部品も充実しているようです。例えば(というか代表と言って良いのでしょうか)、jQuery Mobile。
http://www.publickey1.jp/blog/11/jquery_mobile.html
十分すぎますね。
例えば、これまで.NETやってきた人が改めてJavaの勉強するよりは、ASP.NETでjQueryやる方が、早いでしょうね。というか、騙せますね。「Javaは経験ないかもしれないけど、ASP.NETプラスJavaScriptだから、ちょっと勉強すれば大丈夫でしょ?」
ということで、私も騙されてみたいと思います。と言いつつ、ASP.NETはどうしようかな・・・。
あと、ページという概念はちょっと変えないとダメでしょうね。
上のリンクのページでも、メインページとサブページのサンプルがありますが、一つのHTML内で両方書いてあるわけですよね。そのへんのセンスを身に付けておかないとダメかなと思います。(分かる人にしか分からない書き方・・・)
Powered by ScribeFire.
宮城に行ってました
突然ですが、宮城に行って来ました。
親の里帰り、法事、もろもろです。
南三陸町という名前は、津波の悲惨な状況で有名になってしまいましたが(本当は海産物の美味しいところで、そういう方面で有名になって欲しかった)、そこに住んでいた親戚もいるので、跡地を見に行きました。
事情により写真はないのですが、こちらのブログで紹介されているような状況です。
http://jikan-ryokou.blog.ocn.ne.jp/blog/2012/03/slc5816_f798.html
まさに瓦礫の山・・・
SLの後ろは、ただただ家の基礎だけが残っているような状態です。
たまに残っている塀があって、不思議なもんだと思ったりもしますが。
・・・ストリートビューで見られるんですね。こんな感じ。
志津川の町
こんな所に住んでいる親戚が生き残ったのは奇跡的ですが、今回聞いてきた話と同じような内容がこちらのブログに書かれています。
http://blog.livedoor.jp/kojiishikawa/archives/2011-05.html
すぐ近くにある家に取りに帰りたいものもあったそうですが、高野会館の職員さんは、入り口を塞いで絶対外に出させてくれなかったそうです。
唖然とするばかりですが、現地の人達は強いです。
市場は新しくできており、周りに建物も立ってきています。
以前お店があった場所には、他の場所でやっているという看板が立っていたり、その場所で仮設の店舗を作っていたり。
仮設住宅に住んでいる親戚も訪問しました。
作りがそっけないのは仕方ないですが小綺麗ではあります。一人で住むには十分ですが、家族3人とかだとつらそうです。買い物とか病院は便利なところだと言っていました。
別のおじさんは、地震で倒れたお寺の灯籠を直したり、ボランティアに来てくれた人たちの案内をしたり、大活躍だそうです。今日、四国のボランティアの方から、お世話になったお礼ということで、お寺にたけのこが届いてました。
とりあえず、書き連ねました。ひとつひとつ、しんみりと考えさせられることばかりです。
Powered by ScribeFire.
アルビレックス新潟のシンガポール進出
なかなか行けませんが、最近個人的には注目度大のシンガポール。
しかし、アルビレックスがシンガポールに進出しているというのは知りませんでした。
(アルビレックス新潟シンガポール で検索してみてください)
昨日のテレビ番組でやっていたのですが、印象に残ったのは、
・居住環境が充実(無料でプールも!)しており、日本人も住みやすい
・日本人にとって、世界に出ていくためのハブの役割
・優秀なシンガポール人選手をJリーグに呼ぶために育成
・過去の通貨危機の時に日本企業は一度去っていったことがある。
進出してきてもすぐに帰ってしまうのではないかと思われないような努力
などなど。
それどころか、シンガポールの次はバルセロナ進出で、すでに動き出している。
そもそも、Jリーグとしても後発でありながら、ファン拡大を一気に行った感がありますし、このスピード感は何でしょう。かなり尊敬してしまいます。
ただ、一点、Webサイトも、Twitter、Facebook等行なっていて、万全なんだろうと思ったのですが、リンクを貼る場合はメールくださいねとのこと。選手の肖像権等管理が必要なのはわかりますが、リンクだけだったら良いのではと思ってしまいます。わざわざメールしてお手を煩わせるのも何なのでリンクはしないでおきます。
あー、シンガポール行きたい。
Powered by ScribeFire.
試合終了
楽天、中国でのネットショッピングモール事業から撤退!
だそうです。
ちょっと前には
Yahoo!チャイナモールサービス終了のお知らせ
2年前にこれらが始まったときは、日本の2台巨頭が中国の2台巨頭と組んでしまったら、盤石の態勢になってしまってつまらない試合だなと思ったのですが。
http://konnokiyotaka.txt-nifty.com/pgblog/2010/04/post-14ef.html
まさか、こんな結末とは思いませんでした。
この分野だけではないです。百度もtaobaoも日本に出て来れない。YahooJapanも楽天も中国に出て行けない。なぜ?
Powered by ScribeFire.
続 Android開発を始めよう(7)
連載:世界を目指せ!Androidアプリ開発入門|gihyo.jp … 技術評論社
第9回から。
12回までなので完走はしようと思いますが、なんか微妙になってきています。
というのも、今回は、実際に作ってみようではなくて、作り方のサンプル提示だけになってしまったので。
さて、SQLiteで一瞬盛り上がりかけましたが、これはあくまでもクライアント側DBですから、実はそれほど使うかというと、それほどでもないかもしれません。
Webアプリとの対比で、それと同等のイメージで考えると、キャッシュやセッション情報に相当するものはアプリ内の変数に持てるでしょうから、Cookieに相当するものの永続化というのが使用目的になりそうです。
他方、スマートというくらいなんだから、Webアプリを超えてもよいのではと考えると、クラサバ時代にワークテーブルでやっていたこと、すなわち、処理完了前状態の保存とか、クライアント側処理のためのデータ保持とか、そんな感じかなと思います。
※なお、セキュリティの問題は注意しなくてはいけなくて、例えば前回書いたリンク先の情報の中の、
https://www.jpcert.or.jp/java-rules/sec04-j.html
のようなことは、十分に注意しなければいけません。
横道にそれました。確かにネットワークは遅いので、それをカバーするためのクライアントデータという考えもあるかもしれませんが、業務アプリを考えた場合は、その同期ということも考えなければならず、せいぜい使い勝手の良いキャッシュとして使うくらいかなと思ったりします。
要するに、より重要なのはサーバ情報の取得であり、今回のHTTPによる情報取得がより重要ですね、ということです。
ところが、上記のように、この回はサンプル提示だけで流されてる感じなので、とりあえず、後の楽しみにとっておきます。
第10回は、やや唐突に思えましたが、設定画面の作り方ということです。
けど、実は唐突ではなくて、設定画面で値を保持するプリファレンスは、データ永続化の一方法なんですよね。さらにローカルファイル保存とあわせて、クライアントデータの永続化方法は3方法あるということでよいでしょうか。
(参考)http://android.roof-balcony.com/shori/strage/sqlite/
こちらも流し気味なので、一旦保留します。
休み中の成果はここまでか・・・
Powered by ScribeFire.
続 Android開発を始めよう(6)
連載:世界を目指せ!Androidアプリ開発入門|gihyo.jp … 技術評論社
第8回から。
さあ、SQLiteだ、と思ったのですが、サンプルが提供されているので、ほとんど流すだけでした。
ただ、イマイチわかっていないのが、実行環境のリフレッシュ、と言ったら良いのかなんなのか。
起動するたびに、データが追加されて、こんな感じです。
けど、これも冷静に考えれば、これで良いんですね。DBに登録しているわけだから、逆に覚えてくれていないとおかしいわけですね。
さて、サンプルでは、DBOpenHelper というものが提供されていて、そこでDB_NAME = “Sample.db” が定義されているのと、テーブル作成、及び排他処理が行われています。
中間には、MainStore というクラスがあり、TBL_NAME = “Test”という定義がされており、add、update、loadAll 等のメソッドが定義されています。
この構成だとテーブルごとに中間クラスを作成するイメージなので、テーブル作成も中間テーブル側で良いのかな、みたいな感想はありますね。細かいところでは、SQLiteDatabaseのメソッド名は、insert、updateなんだから、わざわざupdateにしなくて良いのでは、とか。
既存のフレームワーク、あるいは開発規約を持っているところは、そのカスタマイズで対応するのでしょうか。
というわけで、ちょっと深堀り。
まずは
Code Style Guidelines for Contributors
コントリビュータのためのAndroidコードスタイルガイドライン 日本語訳
を見るべきでしょうか。まあ、純粋な記述面での規約ですね。
次に、こちらのような命名規約も必要ですね。
android 開発規約 – aksoft – livedoor Wiki(ウィキ)
これの前提で、階層分けの規約も必要でしょう。上では、中間クラスとぼかしましたが、どこのソースで画面コントロールを意識するのか、どこのソースでテーブル・カラムを意識するのか、という階層分けを行った上で、それぞれの命名になるわけです。
さらには、セキュリティ面での規約となると、このようなレベルの話が出てきます。
JPCERT/CC、Javaのセキュアコーディング規約集を公開 Androidアプリ …
初心者が読むのは難しいかもしれません。しかし、どこかのタイミングで気にしておく必要はあります。というか、Androidは初心者でも、Javaは初心者じゃないということがほとんどだとすると、最初に目を通すべきですかね。
で、今回考える契機となった、DB接続規約ですが、イメージしているのは
androidでSQLite周りでハマったことのメモ。-aBatisを使おうとしてみた
みたいな感じです。このへんの王道はあるのかと。これはしばらくウォッチしてみないと分からなそうです。
Powered by ScribeFire.
続 Android開発を始めよう(5)
連載:世界を目指せ!Androidアプリ開発入門|gihyo.jp … 技術評論社
第6回の続き。メニューの追加からです。
まずは、メニュー用の文字の追加から行います。
しかし、こうやっていちいち、リソースファイルを編集するというのは、本当はありえませんよね。英語版と日本語版でキー(Name)間違えたらどうするんだという。設計段階で洗い出せという話もわかりますけど、それでも追加が必要になった場合の手順はどうするかという話です。XML直接触るならまだコピペでも良いですけど、それが正しい方法なんでしょうか。
さて、メニューが表示されません。
ログを埋め込んでみると、そもそも、onCreateOptionsMenu が呼ばれていません。
※ちょっと寄り道ですが、最初に紹介されていたddmsという外部ツールを使わなくても、Eclipse内で、LogCatを使えばよさそうです。
と、悩んで先に進もうと思った瞬間、「あ、メニューだからメニューボタンを押した時に表示されるのね」、とふと気づく。無事表示されました。
気がつくと英語になっているな・・・ちゃんとリソースファイルが切り替わっていることの確認にはなりますが・・・。
更に問題で、ここから副画面に行くとエラーになってしまう。
これは、記事のコメントに助けられましたが、
if(getIntent().getExtras() !=null)
が必要でした。こういうところで、感覚を掴んでいく必要がありますね。
次回は、いよいよSQLiteだぁ!
Powered by ScribeFire.
続 Android開発を始めよう(4)
連載:世界を目指せ!Androidアプリ開発入門|gihyo.jp … 技術評論社
第6回から、続けます。
画面のタイトルを設定する際に、
getWindow().requestFeature(Window.FEATURE_LEFT_ICON);
setContentView(R.layout.skeleton_activity);
getWindow().setFeatureDrawableResource( Window.FEATURE_LEFT_ICON, R.drawable.icon );
という記述をするそうです。
なお、Window.FEATURE_LEFT_ICONは、android.view.Window.FEATURE_LEFT_ICONです。
ここも、importが必要です。
で、動きません。requestFeature でエラーになっていますが、例えば、
http://labs.techfirm.co.jp/android/haruka/259
でも、同様の記述がされており、このコードが悪いわけではないようです。まあ、ちょっと置いておきます。とりあえず、アイコンの設定と、タイトルの設定はできました。
Powered by ScribeFire.
続 Android開発を始めよう(3)
連載:世界を目指せ!Androidアプリ開発入門|gihyo.jp … 技術評論社
第5回から、続けます。
画面は、XMLで定義しますが、デザイナで作れるということです。妥当です。
記事とは若干画面設定項目が若干変わっています。最初に、ルート要素を選ぶことになっています。
Qualifiersの表現も若干違うのと、こうやって画面で提示できるのは、値を指定した後の状態なので、アイコン等で、どの項目を選んだらよいか判断しましょう。
EditTextの種類を選ぶことになっていたり、画面も若干違うようです。
ソースサンプルに書いていないところで、
<SkeletonActivity.java>
import android.os.Bundle;
<SkeltonSubActivity.java>
import android.content.Intent;
import android.widget.EditText;
が必要。(ちなみに、私は、SkeletonをSkeltonと間違えてしまいました。こういうのが意外と後を引くんですよね・・・)
記事へのコメントがなかなか厳しくて、このへんの不足等が批判されているのかもしれませんが、このくらいは自分で補完しなさいという話だと思いますけどね。
環境的には、ちょっと、というか結構遅い。だんだん遅くなるのか。最後の方は、エディタの自動補完待ちで10秒以上とか。
Powered by ScribeFire.