test

// 円クラス
abstract class Shape{
    abstract void Display();
}

// 円クラス
class Circle extends Shape implements Area{
    int x;
    int y;
    int r;


    Circle(int x, int y, int r ){
        this.x = x;
        this.y = y;
        this.r = r;
    }

    void Display(){
        System.out.println("x=" + x + ", y=" + y + ", r=" + r);
    }


    // 面積を計算する
    public double getArea(){
        return r*r*Math.PI;    // Math.PI:円周率
    }
}

// 長方形クラス
class Rect extends Shape implements Area{
    int x1;
    int y1;
    int x2;
    int y2;


    Rect(int x1, int y1, int x2, int y2 ){
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }

    void Display(){
        System.out.println("x1=" + x1 + ", y1=" + y1 + ", x2=" + y2 + ", y2=" + y2);
    }


    // 面積を計算する
    public double getArea(){
        // Math.abs : 絶対値を求めるメソッド
        return Math.abs(x1-x2) * Math.abs(y1-y2);
    }
}

XOOMでBluetoothキーボード接続

前に買ったBTキーボードがころがってたのでXOOMとつなげてみました。

設定⇒無線とネットワーク⇒Bluetooth設定
でScanして、ぺリングしてやれば、あっさり繋がりました。

画像

こんな感じ
ノートPCに比べれば軽いので、勉強会の時のメモとかネット接続とか、これで良いかも
ただ、入力が英語配列になってしまうのが難点

画像

XOOMのデバイスドライバーインストール

XOOMをPCに接続してみましょう。

接続後にPCのウイザードに従って、AndroidSDK配下のフォルダ(android-sdk-windows\extras\google\usb_driver)を指定してもインストールできません。

XOOM用のデバイスドライバは以下のサイトからダウンロードしてインストールします。
http://www.motorola.com/Support/US-EN/Support-Homepage/Software_and_Drivers/USB-and-PC-Charging-Drivers

画像


現在のバージョンは4.9.0

インストーラを起動します。

画像

ライセンス

画像

インストール

画像

インストール完了

画像

PCから見えるようになります。
EclipseからもDDMSで中身が見えるようになります。

XOOMが我が家にやってきた

仕事帰りに秋葉原へ行ったら、まだやってましたね。
XOOM+Pocket Wifiのセット販売

画像

Data05は要らないですが、Pocket Wifiとのセットならお得(25,100円)でポイントが10%付くので良いかなと思って買っちゃいました(^^;)
最後までOptimasPadと迷ったんですが、OptimasPadはサイズ的に中途半端な感じです。
通信もデータ通信が出来てテザリング出来るのは魅力的なのですが、Wifiルータ代わりに持ち歩くのはちょっと...
USBがホストモードに対応していて、キーボードとか繋げて遊べるのでいいのですが、そこはBTで良いかなと
ということで、最終的にはXOOMにしました。
今までWifeルータ持ってなかった(NexusOneで代用)ので、Pocket Wifi単独で使えるのも良いですね。

REGZAタブレットも6月末に予定されていますが、ちょっとそこまで待てない、そこまで購買意欲が続かない。
一応まがりにもAndroid関連の仕事することになったので、1台くらい3.0の現物持っておきたいなと。

待てる方は、夏以降の国産品を待った方が良いでしょう。
NexusTabletが出るという噂もありますし。

開封の儀

外箱はこんな感じ

画像

ぱかっ

画像

アクセサリ

画像

サイズ比較
B5Vaioより少し小さめ

画像

第16回 V7から始めるUNIX講座 復習とまとめ(システムコール落穂拾い)

第16回 V7から始めるUNIX講座(システムコール落穂拾い)

今回で16回目になります、早いものです。
ずいぶん続きましたが、諸事情により、第16回でいったん区切りとさせて頂く事になりました。
私自身も非常に勉強になりました、まごろくさん及び聴いていただいた方々に感謝いたします。

●前回の補足

exit
339行目:FDは全てクローズ
UNIXでのポイント
ここで必ずクローズするので、exitするならFDをCloseする必要はありません。
342行目:inodeのリファレンスカウントをデクリメント。inodeのリファレンスカウントが1ならinodeを開放してパイプをアンロック
⇒ここもポイント。プロセス毎にカレントディレクトリを握っています。そのためここで参照を外しています。
348行目:acctでアカウンティングファイル?に書き込みをしている
⇒acct()が課金情報の書き込み。大昔のコンピュータは高価だったので、CPUの使用時間で従量制の料金を払ったそうなので、その元になる情報を書き込んでいます。

wait
waitはゾンビになったプロセスの後始末をします。
413行目:u_procp(アドレス)を指定してスリープします。
誰かがwakeupするまで、ずっとここで寝ています。

413 sleep((caddr_t)u.u_procp, PWAIT);

バックグラウンド”&” で起動したプロセスの終了はSIGCHILDのsignalが来るのでその時にwaitすることで、後処理をします。



システムコール番号の歴史」
@oracchaさんのまとめられた、システムコール番号の歴史を元に振り返ってみます。
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=%A5%B7%A5%B9%A5%C6%A5%E0%A5%B3%A1%BC%A5%EB%C8%D6%B9%E6%A4%CE%CE%F2%BB%CB

表の見方、
UNIX v7、MINIX 1.0、Linux 2.4.18、FreeBSD 4.5の1から100番まで
空欄はUNIX v7と同じという意味です。
番号が若いものは昔からあるシステムコール

ざっとですので、説明が抜けているところもありますが、ご容赦下さい。

exit 第15回プロセスの停止でやりました。
fork 第1回でやりました。
read ファイルシステムの辺りで軽くやりました。★
write ファイルシステムの辺りで軽くやりました。★
open ファイルシステムの辺りで軽くやりました。★
close ファイルシステムの辺りで軽くやりました。★
wait 第15回プロセスの停止でやりました。
creat ファイルシステムの辺りで軽くやりました。★
link ファイルシステムの辺りで軽くやりました。★
unlink ファイルの削除
exec 第2回でやりました。
chdir カレントディレクトリの変更
time プロセスの実行時間
mknod 特殊ファイルや通常のファイルを作成する
chmod パーミッションの変更
chown オーナーの変更
break BSSの下の端を下げます。メモリの使用領域の境界を下げる(だけ。)その当時malloc 自分で作るモノだったようです。
stat スーパーブロックの情報です(du, dfはボリューム全体の情報を示す)
seek File構造体のoffsetの値を変更する
getpid プロセスIDの取得
mount ファイルシステムでやりました。
umount ファイルシステムのアンマウント
setuid プロセス生成時にファイルの所有者(通常はroot)の権限を得られる
getuid ユーザIDを取得
stime
ptrace デバッガで使います
alarm
fstat 現在オープンしているファイルの情報を表示します
pause
utime
stty sttyシステムコールの実体、機能の多くはioctlに吸収されました。
gtty
access
nice プロセスの優先度の重み付けに使います。
ftime
sync ダーティなキャッシュをディスクに書き出します。sync;sync;syncで電源ブチが正式な作法(^^;)
kill 第13回シグナルでやりました
switch
tell
dup 第14回パイプでやりました
pipe 第14回パイプでやりました
times
prof
setgid
getgid
sig 第13回シグナルでやりました
acct アカウント
phys ?
lock ファイルロック
ioctl
mxpchan
exece
umask デフォルトでのファイル作成時のパーミッションを指定
chroot 特定のディレクトリをROOTと見なす

ファイルシステムは排他が細かくて読むのが大変

補足
V7にはmkdirがありません、mknodとlinkを組み合わせていたが問題がありました。
mknod とlinkの間でシステムがダウンあるいはCtrl+Cするとでは不整合が起き得るので後にアトミックなmkdir が用意されました。

UNIX以前(ジュラ紀)はファイルひとつ作るのも大変でした。UNIXはファイル名ひとつでファイルを生成できます。
ジュラ紀ファイルシステムはバイトストリームではありませんでした。
⇒ISAMファイルに近い(構造を持つ)形式だったようです。

ファイルシステムの違い
UNIX以前のファイルは構造を持つのが普通。UNIXは構造を待たないバイトストリーム。」

この「構造を持つ必要のあるファイル」はデータベースに進化しました。

すでに絶版の名著、「UNIXシステムコールプログラミング」と「UNIXプログラミング環境」などを写経するのが、昔ながらの学習方法のようです。

主要な内容はV7で学ぶUNIX講座で取り上げており、これを元に細かく見たりあるいはLinuxの実装を確認したりするには十分な内容だった(システムを俯瞰するという意味で)と思います。

ACTION_BOOT_COMPLETEDによるアプリケーションの自動起動

この前、中文の記事を翻訳しました。
http://xiangcai.at.webry.info/201104/article_4.html

Androidの起動の手順に関してです。
以下の記述がありました。

ブート後に自動起動されるアプリケーション
ActivityManagerService内でアクティビティのアイドルが決定したとき、ActivityManagerServiceは最初にACTION_BOOT_COMPLETEDインテントをブロードキャストします。

なので、これでブート後にアプリケーション(Androidアプリ)を自動的に起動できるんだろうなと思っていたら、今日TL上で話題に上がっていたのでメモしておきます。

BroadCastReceiverでACTION_BOOT_COMPLETEDインテントを受けとれば良いようです。
ただし、onReceiveの実行には時間制限があるので、ここで処理はせずに目的の処理を起動するようにした方が良いようです。
http://developer.android.com/guide/practices/design/responsiveness.html

@itogさんのブログに詳細が書いてあります。
http://d.hatena.ne.jp/itog/20100611/1276218418

amコマンドを使ったIntentの投げ方も参考になります。
http://d.hatena.ne.jp/itog/20100622/1277174913

[翻訳] Androidの起動工程

twitterでAndroidの起動に関する文章が紹介されていました。
http://www.huomo.cn/developer/article-b95a.html(中文)

なかなか良い資料だったのでざっくり翻訳してみました。
中文と途中から英文でしたが、何とか大意は取れました。
↓以下は中国語で火魔网の記事を翻訳しましたという説明(念のため)