Hatena::ブログ(Diary)

d.hatena.zeg.la このページをアンテナに追加 RSSフィード

2011-01-29 AndroidアプリをAndroidを使って作る このエントリーを含むブックマーク このエントリーのブックマークコメント

材料

Androidタブレットにconnectbotをインストール

ちなみに私は下記端末+

8インチタブレットキーボード付きケースで試しました

しかし、、、ctrlやtab,escが効かないので vim編集とかとてもしにくい状態

UbuntuCLI 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 Studio | 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

んー調べたら 下記をインストールしたらなおるみたい

64bit環境からかな

 $ 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/

Tabletでアクセスしてダウンロード,インストール

調査すると

  • ALT:57
  • F2:82
  • Tab:61
  • Ctrl,ESC,F1:0

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) 

コンパイル

その前に

ProGuard

から ダウンロードしてproguard.jar

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

Tabletでアクセスしてダウンロード,インストール.

なんとか 出来ました

 以上

2011-01-09

Android Bazaar and Conference 2011 Winter行ってきました

スマートフォンGREE (HTML5+JavaScript & Android)

会場の人たち
スマートフォンGREE(HTML5のすばらしさ)
要素技術
HTML Forms
  • フォーム機能拡張
    • placeholderのサポート
      • フォームに薄い表示ができる
<input placeholder='メールアドレス' />
      • Android1,6だと動作がおかしくなる
      • iOS4.0未満でtextareaには効かない
      • iOS3.1.3を使っている人が結構いるGREE
    • email
<input type=email />
<input type=number />
CSS3
困ったこと
Androidアプリ
写真アップロードの仕組み
  • class GreeAppJs <->WebView
iOSでもできる

まとめ

絵文字
Application cache
Web SQL Database

HTML5によるリッチクライアント開発手法についてあれこれ

Web開発/HTML5の基礎知識
Web開発/HTML5標準化団体
HTML5基礎知識
どこまでがHTML5?
HTML5が可能にするもの
サンプル
HTML5によるRIA開発
JSによるRIA開発困難
アプリケーションアーキテクチャ
つまり...
オフラインWebアプリ
どの技術をいつ用いるか
アーキテクチャはどうなる

Google Developers

Androidウェブアプリケーション連携

自己紹介
はてなAndroid 事例1:フォトライフ for Android
メモリ消費削減の手段
はてなAndroid 事例2:はてなログイン管理
はてなAndroid 事例3:はてなモノリス
adb shell am start -n com.example.foo/.Setting --ez debug true

を投げるとデバッグで任意

インテントが投げられる

  • 国際化

Locale.javaを実装

はてなAndroid 事例4:はてなココ
WebエンジニアからAndroid

Android2.3 (Geneerbread API)

NearFileldCommunication
if(NfcAdapter.ACTION_TAG_DISCOVERD.equals(action){...
}
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 -

UI Framework
Android NDK

Android NDK | Android Developers

android.os.strage
SIP-based VoIP

Samples | 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に注文して本日無事に到着

f:id:zegenvs:20100905152006j:image

場所日付現地時間
NARITA, JP2010/09/0411:25ロケーションスキャン
2010/09/0411:24仕向国センタースキャン
2010/09/0410:53空港上屋スキャン(輸入)
2010/09/048:34積み替え完了スキャン
2010/09/048:28空港到着時刻
2010/09/048:28空港到着時刻
ANCHORAGE, AK, US2010/09/038:36空港出発時刻
2010/09/038:36空港出発時刻
2010/09/037:00空港到着時刻
2010/09/037:00空港到着時刻
ONTARIO, CA, US2010/09/032:40空港出発時刻
ONTARIO, CA, US2010/09/0223:04空港到着時刻
PHOENIX, AZ, US2010/09/0222:00空港出発時刻

大体3日で到着したので以外と早かった

確か到着予想は8日だったので3日も早くきたことになる

さて、箱を開けてすぐにブラウザを立ち上げて

いろんなサイトを見たが、

やっぱり PCサイトを見るにはちょっと辛い

そこで SmartPhone用のページをいくつかブックマークしたので

メモ

2010-03-29

第102回カーネル読書会に行ってきました

自分メモ

DTraceでできること

自己紹介

加藤久慶(楽天)さん

Blogger

DTrace

404 Not Found

参考

漢(オトコ)のコンピュータ道: D言語基礎文法最速マスター(DTraceのほう)

DTraceで見れるコンポーネント
DTraceの使いかた

観測点が見える

$ dtrace -l

provider一覧

$ dtrace -i | awk "{print $2}" | sort -u

システムコールプロバイダを見る

$ dtrace -n 'systemcall:write:entry{@lexecname,pid]=count();}'

関連

trasコマンド

CPU負荷
$ dtrace -n 'profile-997/arg1/{@[ufunc(arg1)}=count();}...'

DTraceによるMySQL解析ことはじめ

自己紹介

奥野幹也(Sun)さん

MySQL
  • OpenSouceのRDBMS
  • MySQL AB -> Sun -> Oracle
  • 使いやすく、安定、高速
  • Oracleに買収されても開発は大丈夫
    • MySQLチームはほとんど残っている
  • MySQL6.0は廃止
    • 機能を詰め込み過ぎた

MySQLエキスパートトラブルシューティングガイド

参考

MySQL :: Page Not Found

MySQL :: MySQL Community Downloads

MySQLの特徴
DTrace

[ユーザ空間] ユーザプロセス dtrace

--------------------------------------

[カーネル空間] プロバイダ プローブ

OS選択の新常識:カーネル挙動を追尾する「DTrace」の実力 (1/8) - ITmedia エンタープライズ

プロバイダ提供される主な情報
dtraceDTraceの開始時や終了時、エラー発生時などにイベントが発生するプローブ。後述のDスクリプトプログラムするときに、初期化処理や終了処理、エラー処理などを記述する時に用いる
lookstatロック状態が変化した時にイベント発生するプローブ
profile一定時間ごとにタイマイベントを発生するプローブ。定期的に値を集計したい時などに用いる
fbtFunction Boundary Tracing。カーネル内部の関数への突入/退出ごとにイベントを発生するプローブ
syscallシステムコールへの突入/退出ごとにイベント発生するプローブ
sbtStatically Defined Tracing。アプリケーション定義プローブ。アプリケーション開発者があらかじめsys/sdt.hにある関数群を呼び出し、DTraceのイベントを発生させるように構成する時、該当ルーチンを通過するとイベント発生する
sysinfoカーネルステータス情報(kstat -n sysで取得できる情報)を提供するプローブ
vminfoカーネル仮想メモリ情報(kstat -n vmで取得できる情報)を提供するプローブ
procプロセスの生成、終了、シグナル受信などが発生した時にイベント発生するプローブ
schedCPUスケジューリングに関する情報を提供するプローブ
ioディスク入出力情報に関するプローブ。iostatコマンドで取得できる情報を提供する
mibManagement Information Bases(MIB情報を提供するプローブ。kstat -nやnetstatコマンドで取得できる情報を提供する
fpuinfoSPARCプロセッサFPUシミュレート機能状態を提供するプローブ
pid任意のプロセスIDをもつプロセス内の指定した位置の関数への突入/退出ごとにイベントを発生するプローブ
plockstatプロセスロック状態を知らせるプローブ
fasttrapユーザープロセスがDTraceを呼び出すときに、そのユーザープロセスに対してデータを流し込むためのハンドラ。現状では利用されない

DTrace Tools

D言語
/述語/
{
  アクション
}
mysqld内に設置可能なprobe

なぜかわからないエラーが出る場合サーバ側でトレースできる!!

  • pid
  • fasttrap
    • MySQL5.4で追加された
    • 書式)mysql123

SQL文を抽出

pid$target::*mysql_pgrace*:entry
{
  trace(copyinstr(arg1));
}

MySQL :: Page Not Found

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をマクロで埋め込む場合の注意すべき点
    • MySQLで使われているテクニック
      • Linuxはdtraceがない
      • preprocessで#define文でなにも埋め込まれない
  • linux fastrapのような支援マクロはある?
    • ない
  • dtraceではなく(5.4以下)filesortしているものを抽出するには
  • dtraceをして負荷が増してdownが嫌
    • そういうこともある
    • 関数の境界を*で引っかけると負荷がかかる
    • 対象をしぼってtraceすることが重要
    • まずはOSのstatでどこがネックになっているか調べる

プレゼンソースが公開されているみたいです

漢(オトコ)のコンピュータ道: 第102回カーネル読書会 at 楽天のプレゼン資料公開しました。 #kernel100329

2010-03-16

Save Complete :: Add-ons for FirefoxをFirefox3.6で使う

IEや他のブラウザ

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

を開く

Add-onインストール再起動

http://example.com/page.html

に行く

ファイル->Save Complete Page As..