2011-01-29 AndroidアプリをAndroidを使って作る

材料
Androidタブレットにconnectbotをインストール
ちなみに私は下記端末+
しかし、、、ctrlやtab,escが効かないので vimで編集とかとてもしにくい状態
UbuntuにCLI Android Development環境をつくる
sun-java6-binをインストール
$ sudo vi /etc/apt/sources.list #下記を追加 deb http://archive.canonical.com/ lucid partner $ sudo aptitude sun-java6-jdk ant apache vim git
android sdk linux x86をインストール
Android SDK | Android Developers
から android-sdk_r09-linux_x86.tgzをクリック
$ tar xvzf android-sdk_r09-linux_x86.tgz $ sudo mv android-sdk-linux_x86/ /usr/share/android-sdk/
android sdk セットアップ
$ export PATH=$PATH:/usr/share/android-sdk/tools/ $ android update sdk -u
Installed Google APIs by Google Inc., Android API 8, revision 2
Downloading GALAXY Tab by Samsung Electronics., Android API 8, revision 1
GALAXY Tab用のSDK?もダウンロードしてる..
プロジェクトを作成してみる
$ android create project -t 4 -p $PWD/KeyTest -k "la.zeg.android.keytest" -a KeyTest $ export PATH=$PATH:/usr/share/android-sdk/platform-tools/ $ cd KeyTest/ $ ant debug /usr/share/android-sdk/tools/ant/main_rules.xml:306: Execute failed: java.io.IOException: Cannot run program "/usr/share/android-sdk/platform-tools/aapt": java.io.IOException: error=2, No such file or directory
ん? No such file or directory
$ cd /usr/share/android-sdk/platform-tools $ ./aapt -bash: ./aapt: No such file or directory
んー調べたら 下記をインストールしたらなおるみたい
$ sudo aptitude install lib32z1-dev lib32stdc++6 $ ./aapt 動くようになった
キーコードを調査するためのでもアプリつくる
$ cd KeyTest $ vim $ vim src/la/zeg/android/keytest/KeyTest.java package la.zeg.android.keytest;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
public class KeyTest extends Activity implements KeyEvent.Callback
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
TextView t = (TextView)findViewById(R.id.textview);
t.setText(""+keyCode);
return super.onKeyDown(keyCode, event);
}
}
こんな感じのでもアプリをつくって
apkを公開
$ cp bin/KeyTest-debug.apk /var/www/
調査すると
Ctrl,ESC,F1が同じコードが割り当てられているようだ
そこで
- ALT->Ctrl
- F2->ESC
として Tabのキーコードを変えてconnectbotを使いやすくする
connectbotの改造
android is01+ConnectBotでCTRLとESCが入力出来るようになりました - mk18のプログラミング日記を参考にさせていただいて
改造
$ git clone https://github.com/kruton/connectbot.git
こんな感じに改造
$ diff -c connectbot/src/org/connectbot/service/TerminalKeyListener.java connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java
*** connectbot/src/org/connectbot/service/TerminalKeyListener.java 2011-01-29 23:10:06.000000000 +0900
--- connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java 2011-01-29 21:03:47.000000000 +0900
***************
*** 49,55 ****
public final static int META_SHIFT_ON = 0x10;
public final static int META_SHIFT_LOCK = 0x20;
public final static int META_SLASH = 0x40;! public final static int META_TAB = 0x80;
// The bit mask of momentary and lock states for each
public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
--- 49,57 ----
public final static int META_SHIFT_ON = 0x10;
public final static int META_SHIFT_LOCK = 0x20;
public final static int META_SLASH = 0x40;
! //public final static int META_TAB = 0x80;
! //zegenvs change TAB 128 -> 61
! public final static int META_TAB = 0x3D;
// The bit mask of momentary and lock states for each
public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
***************
*** 403,408 ****
--- 405,420 ----
bridge.redraw();
return true;
+ case 57: //ALT->CTL
+ metaPress(META_CTRL_ON);
+ bridge.redraw();
+ return true;
+
+ case 82: //F1->ESC
+ sendEscape();
+ bridge.redraw();
+ return true;
+
}
} catch (IOException e)
その前に
connectbot/tools/proguard.jar
に配置
android target を変えないとコンパイルできなかったので7に変更
$ android update project --target 7 --path $PWD $ ant proguard debug #またapacheで公開 $ cp bin/ConnectBot-debug.apk /var/www
なんとか 出来ました
以上
2011-01-09
■Android Bazaar and Conference 2011 Winter行ってきました
スマートフォン版GREE (HTML5+JavaScript & Android)
会場の人たち
スマートフォン版GREE(HTML5のすばらしさ)
要素技術
- PCと違ってIE対策がないのでかなり楽
- android,iOSともにwebkitベースのブラウザなので新技術を積極的に採用
- ajax
- 必要な部分だけ新しくする
- HTML5
- CSS3,animation,transform
- 変形機能
HTML Forms
<input placeholder='メールアドレス' />
<input type=email />
<input type=number />
CSS3
- レベル3セレクタ
- グラデーション
- アニメーション
- 変形
- device-pixel-ratio
- Selectors Level3
- last-child/:first-child
- :not(.loading)
- webkit-gradient
- webkit-transition1
- transform3d
困ったこと
- アニメーションGIF
- devicePixcelRatio
Androidアプリ版
写真アップロードの仕組み
- class GreeAppJs <->WebView
- WebView.addJavascriptInterfaceでJavaScriptとNative(Java)と通信可能 WebView -> Java
- WebView.loadUrl('javascript:setMoodImage(b64Img)') Java -> WebView
iOSでもできる
- webView:shouldStartLoadWithRequest:navigationType:
- stringByEvaluatingJavaScript
- 表示部分をHTMLでつくるどうしても必要なものをNativeでつくる!!すごい
- クライアントバイナリはそのままで表示だけ変更可能
まとめ
絵文字
- Issue 10059 - android - Browser does not render Unicode snowman character (U+2603) - Android - An Open Handset Alliance Project - Google Project Hosting
- Unicode Snowman for You
Application cache
Web SQL Database
- SQLite
- サーバから読みだしたデータをローカルに保存可能 <10M
- SQLでデータを読み出せるのでアプリケーションを機能的にリッチにできる
- jsでHTMLのレンダリングをないといけなくなるので工数的に断念
HTML5によるリッチクライアント開発手法についてあれこれ
Web開発/HTML5の基礎知識
Web開発/HTML5の標準化団体
- JavaScript(ECMAScript) ... ECMA
- HTTP/WebSocket/JSON/Atom ... IETF
- WebGL ... Khronos
- HTML5は、HTMLとDOMの最新アップデータ
HTML5基礎知識
- HTMLの最新場ジョン
- 2011/5/22に仕様が確定する予定
- IE9.0 60%, Firefox 88%, Safari:91% , Chrome 10.0 : 93% , Opera 11.1:75%
- 今年中にはかなり使える!!
どこまでがHTML5?
- HTML5 がすべて
- DOM,HTML文法,windowオブジェクト
- 一般的にはJavaScript APi
- Web Storage
- Web Sockets
- Web Workers
- IndexedDB
HTML5が可能にするもの
サンプル
HTML5によるRIA開発
JSによるRIA開発困難
アプリケーションアーキテクチャ
つまり...
オフラインWebアプリへ
- HTML5時代のキャッシュ技術
- アプリケーションキャッシュ
- ローカルストレージ
- Web Storage/Web SQL Database/Indexed DB という3つがある
- 動的なキャッシュに向いている
どの技術をいつ用いるか
アーキテクチャはどうなる
Architecture - Gears API - Google Code
Androidウェブアプリケーション連携術
自己紹介
- はてなのAppEngineer id:cho45さん
- Perl/JavaScriptをメインにほかいろいおr
- アプリケーションサーバコード
- UIコード
はてなのAndroid 事例1:フォトライフ for Android
- はてなフォトライフの写真を快適に閲覧
- 写真アップロード,自動アップロード
メモリ消費削減の手段
- Memory Analyzer(Eclipse Plugin)
- DDMSで得るスレッド一覧
- HttpClientがスレッドをつくるので一本化した(staticにした)
- traceview
- バグレポート送信機能
はてなのAndroid 事例2:はてなログイン管理
はてなのAndroid 事例3:はてなモノリス
adb shell am start -n com.example.foo/.Setting --ez debug true
を投げるとデバッグで任意
インテントが投げられる
- 国際化
Locale.javaを実装
はてなのAndroid 事例4:はてなココ
WebエンジニアからAndroid
- 基本はWeb
- Intentは高級になたハイパーリンク
- Activityはウェブページ
- Serverはワーカプロセス
- ja - Hatena Developer Center
Android2.3 (Geneerbread API)
NearFileldCommunication
if(NfcAdapter.ACTION_TAG_DISCOVERD.equals(action){...
}
- NDEF
- NdefMessage
DownloadManager
- SystemのService
DownloadMnager mDownloadMnaager = (DownloadManager) getSystemService(Content.DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://download/image.png");
DownloadMnager.Request ...
StrictMode
Y.A.M の 雑記帳: Android Android 2.3 - StrictMode -
- デバック用
- Application Not Responding
- main threadが5秒以上反応しない
- BroadcastRecieverが10秒以内で終わらない
- ANRの原因になりそうな処理を検出してくれる
UI Framework
- 黒基調になった
- OverScroll
Android NDK
Android NDK | Android Developers
android.os.strage
SIP-based VoIP
SipDemo - SIP Demo | Android Developers
SipManager#isApiSupported()
Mixable audio effects
Multiple Camera Support
getCameraInfo(int,CameraInfo) getNumberOfCameras()
PackageManager
- PackageItemInfo
Telephony
Graphics
AlermClock
- インテントを投げるだけで設定できる
以上 書ききれない部分もありましたが
とても勉強になりました.
個人的には 表示部分をHTMLでつくるどうしても必要なものをNativeでつくる
というのがとても印象に残りました。
2010-09-05
■kindle3がやっと到着しました
8/6に注文して本日無事に到着
| 場所 | 日付 | 現地時間 | |
| NARITA, JP | 2010/09/04 | 11:25 | ロケーションスキャン |
| 2010/09/04 | 11:24 | 仕向国センタースキャン | |
| 2010/09/04 | 10:53 | 空港上屋スキャン(輸入) | |
| 2010/09/04 | 8:34 | 積み替え完了スキャン | |
| 2010/09/04 | 8:28 | 空港到着時刻 | |
| 2010/09/04 | 8:28 | 空港到着時刻 | |
| ANCHORAGE, AK, US | 2010/09/03 | 8:36 | 空港出発時刻 |
| 2010/09/03 | 8:36 | 空港出発時刻 | |
| 2010/09/03 | 7:00 | 空港到着時刻 | |
| 2010/09/03 | 7:00 | 空港到着時刻 | |
| ONTARIO, CA, US | 2010/09/03 | 2:40 | 空港出発時刻 |
| ONTARIO, CA, US | 2010/09/02 | 23:04 | 空港到着時刻 |
| PHOENIX, AZ, US | 2010/09/02 | 22:00 | 空港出発時刻 |
大体3日で到着したので以外と早かった
確か到着予想は8日だったので3日も早くきたことになる
さて、箱を開けてすぐにブラウザを立ち上げて
いろんなサイトを見たが、
そこで SmartPhone用のページをいくつかブックマークしたので
- Google:http://www.google.co.jp/m
- Facebook:http://touch.facebook.com/
- はてなブックマーク:http://b.hatena.ne.jp/touch
- Twitter:http://mobile.twitter.com/
- Gmail:https://mail.google.com/mail/mu
- Google Reader:http://www.google.co.jp/reader/i
- Google ニュース:https://www.google.com/news/i
- Yahoo!ニュース:http://dailynews.yahoo.co.jp/iphone/
- Wikipedia:http://ja.m.wikipedia.org
- Google マップ:http://maps.google.co.jp/maps/m
- Google 乗り換え案内:http://maps.google.co.jp/maps/m?mode=transit
- Google翻訳:http://translate.google.co.jp/m/translate
2010-03-29
■第102回カーネル読書会に行ってきました
DTraceでできること
自己紹介
加藤久慶(楽天)さん
DTrace
DTrace on Linux (The Observation Deck)
参考
漢(オトコ)のコンピュータ道: D言語基礎文法最速マスター(DTraceのほう)
DTraceで見れるコンポーネント
DTraceの使いかた
観測点が見える
$ dtrace -l
provider一覧
$ dtrace -i | awk "{print $2}" | sort -u
$ dtrace -n 'systemcall:write:entry{@lexecname,pid]=count();}'
関連
CPU負荷
$ dtrace -n 'profile-997/arg1/{@[ufunc(arg1)}=count();}...'
DTraceによるMySQL解析ことはじめ
自己紹介
奥野幹也(Sun)さん
MySQL
- OpenSouceのRDBMS
- MySQL AB -> Sun -> Oracle
- 使いやすく、安定、高速
- Oracleに買収されても開発は大丈夫
- MySQLチームはほとんど残っている
- MySQL6.0は廃止
- 機能を詰め込み過ぎた
参考
MySQLの特徴
- モノシリックカーネル
- シングルプロセス、マルチスレッド
- 1セッション=1スレッド
- ストレージエンジンAPIによる仮想化
- プラグインAPI
- GNU BisonによるLexical Scanner
- ソースコードはC/C++(100万行)
DTrace
--------------------------------------
OS選択の新常識:カーネル挙動を追尾する「DTrace」の実力 (1/8) - ITmedia エンタープライズ
| プロバイダ | 提供される主な情報 |
| dtrace | DTraceの開始時や終了時、エラー発生時などにイベントが発生するプローブ。後述のDスクリプトでプログラムするときに、初期化処理や終了処理、エラー処理などを記述する時に用いる |
| lookstat | ロック状態が変化した時にイベント発生するプローブ |
| profile | 一定時間ごとにタイマイベントを発生するプローブ。定期的に値を集計したい時などに用いる |
| fbt | Function Boundary Tracing。カーネル内部の関数への突入/退出ごとにイベントを発生するプローブ |
| syscall | システムコールへの突入/退出ごとにイベント発生するプローブ |
| sbt | Statically Defined Tracing。アプリケーション定義のプローブ。アプリケーション開発者があらかじめsys/sdt.hにある関数群を呼び出し、DTraceのイベントを発生させるように構成する時、該当ルーチンを通過するとイベント発生する |
| sysinfo | カーネルのステータス情報(kstat -n sysで取得できる情報)を提供するプローブ |
| vminfo | カーネルの仮想メモリ情報(kstat -n vmで取得できる情報)を提供するプローブ |
| proc | プロセスの生成、終了、シグナル受信などが発生した時にイベント発生するプローブ |
| sched | CPUスケジューリングに関する情報を提供するプローブ |
| io | ディスク入出力情報に関するプローブ。iostatコマンドで取得できる情報を提供する |
| mib | Management Information Bases(MIB)情報を提供するプローブ。kstat -nやnetstatコマンドで取得できる情報を提供する |
| fpuinfo | SPARCプロセッサのFPUシミュレート機能状態を提供するプローブ |
| pid | 任意のプロセスIDをもつプロセス内の指定した位置の関数への突入/退出ごとにイベントを発生するプローブ |
| plockstat | プロセスのロック状態を知らせるプローブ |
| fasttrap | ユーザープロセスがDTraceを呼び出すときに、そのユーザープロセスに対してデータを流し込むためのハンドラ。現状では利用されない |
D言語
/述語/
{
アクション
}
mysqld内に設置可能なprobe
なぜかわからないエラーが出る場合にサーバ側でトレースできる!!
SQL文を抽出
pid$target::*mysql_pgrace*:entry
{
trace(copyinstr(arg1));
}
RandomQueryGenerator - MySQL Forge Wiki
MySQL5.4以降の、include/probes_mysql.d
これとか
./support-files/dtrace/query-filesort-time.d
./support-files/dtrace/query-execandqc.d
./support-files/dtrace/statement-time.d
./support-files/dtrace/query-rowops.d
./support-files/dtrace/query-parse-time.d
./support-files/dtrace/query-time.d
./support-files/dtrace/locktime.d
./support-files/dtrace/statement-type-aggregate.d
./support-files/dtrace/query-network-time.d
MySQL5.4で追加されたfastrrap クエリキャッシュのヒット率を算出
[ThinkIT] 第6回:query_cache_sizeの違いによるパフォーマンス比較 (1/3)
1000行以上ファイルソートしているクエリを探す
BEGIN
{
printf("Hit Ctrl+C to exit._n");
}
mysql$target::filesort-start
{
self->sortig = 1;
self->db= arg0 == 0 ? "NULL" : copyinstr(arg0);
self->table = cpoyinstr(arg1);
}
mysql$target::filesort-done
{
.
.
.
}
DTraceToolkit
Q&A
- fastrapをマクロで埋め込む場合の注意すべき点
- linux fastrapのような支援マクロはある?
- ない
- dtraceではなく(5.4以下)filesortしているものを抽出するには
- dtraceをして負荷が増してdownが嫌
漢(オトコ)のコンピュータ道: 第102回カーネル読書会 at 楽天のプレゼン資料公開しました。 #kernel100329
2010-03-16
■ no titleをFirefox3.6で使う
https://addons.mozilla.org/ja/firefox/downloads/file/50726/save_complete-1.0.1-fx.xpi
↓
save_complete-1.0.1-fx.xpi.zip
に名前変更
↓
zipを展開
↓
install.rdf
を編
<em:maxVersion>3.9</em:maxVersion>
↓
zip圧縮
↓
save_complete-1.0.1-fx.xpi
に名前変更
↓
Firefoxでsave_complete-1.0.1-fx.xpi
を開く
↓
↓
に行く
↓



