2014年6月18日水曜日

Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems (Week 3)

==== Lecture ====
Section 1 Module 3: Introduction to Android Concurrency Frameworks (2:19)
HaMeR framwork: handler, message, runnable,
=> lose connected, long duration, background, 結果をUIに伝える
AysncTask framework:
=> tightly connected, long duration, background, small
=> thread, handler, runnable, messageを目地的に使わないでUIを操作する。

Section 1 Module 3 Part 1: Overview of Android Concurrency Frameworks and Idioms (12:22)
Androidのconcurrent soft開発には制約がある
=> ANRを(Application Not Responding)を避ける必要がある。
=> Non-UI ThreadはUI toolkitに触れない。thread-safeでないから。
javaの仕組みだけでは十分ではない。Android frameworkも必要
HaMeRとAsync framework
Looper: Thread Specific Storage pattern => 1threadに1looperを保証。
POSAとGoFのpattern, idiom: Command processor, Active Object, HsHa, Factory method, Strategy
message queue: monitor object pattern = in queue and dequeue messages concurrently.
Messages: factory method pattern
Handlers: active object pattern, command processor pattern
=> sender and receiver threads to run concurrently
AsyncTask framework: Half-Sync, Half-Async pattern
=> decouple asynchronous and synchronous processing, simplify programming, enhance performance

Section 1 Module 3 Part 2: Android Looper (7:48)
template methodとthread specific storage patternを使う。

Section 1 Module 3 Part 3: Overview of Android Handlers (6:16)
command processor pattern と active object patternを使っている。
遅延実行のために自分から自分に送る場合もある。

Section 1 Module 3 Part 4: Posting and Processing Runnables with Android Handler (8:46)
command processor pattern
closure
runnableをcallbackする。送信側で処理の準備をする。

Section 1 Module 3 Part 5: Sending and Handling Messages with Android Handler (9:57)
active object pattern
countdown timer
受信側でmessageを処理する準備をする。

Framework Examples (Part 1) (14:00) [Optional Lecture]
Framework Examples (Part 2) (12:30) [Optional Lecture]

==== Quiz ====
今週は8問と少ない。内容も難しくは無さそう。
1回目で全問正解!

==== Assignment ====
[Week-3-Assignment-2]
Your work was submitted. Review your work to make sure everything looks OK.
のリンクから提出状況を確認できる。

try/finally, final, this, private, volatile, Lock, 初期化
FareとNon-Fare
constructorはlock不要。(W2-A1と同様)
volatileを使えばcacheの一貫性は保てる? => yes.
Uninterruptiblyでもtry/finallyするべき? => yes?
countのreturnでもlock必要? => yes.
ローカル変数も初期化すべき? finalをつけるべき? => yes.
thisはつけるべき? => 付けていない人の方が多い感じなのでつけないで命名規則で。
インスタンス変数にはmXxxxの名前にすべき? => yes.
importの話もW2-A1と同様。

Reentrant Lock, Conditional Object, Counting SemaphoreとWeek2のLectureの内容。
Week3のLectureの内容とは無関係でLectureとAssignmentsが合っていない。。。

https://class.coursera.org/posa-002/forum/thread?thread_id=1502#post-5328
lockInterruptibly()を使うべき。

https://class.coursera.org/posa-002/forum/thread?thread_id=1515#post-5329
mCountはlockしてもしなくても良い。

https://class.coursera.org/posa-002/forum/thread?thread_id=1103#comment-2326
signal()を使った方が良い。
signalAll()でも動作上問題ないが、すべてのthreadを起床しようとする分無駄がある。

[Evaluation]
S1-SimpleAtomicLong
W2A1のスケルトンを使っている。
ローカル変数を定義したり初期化しているのに使っていない。

S1-SimpleSemaphore
メンバ変数のlockをLockで宣言している。
lockInterruptibly()は未使用。
availablePermitsの取得をLock無しで行っている。

S2-SimpleAtomicLong
W2A1のスケルトンを使っている。
コンストラクタで不要なlockをしている。
ローカル変数は初期化はしていない。

S2-SimpleSemaphore
lockやnotEmptyをprivateで宣言していない。
lockInterruptibly()は未使用。
availablePermitsの取得をLock無しで行っている。

S3-SimpleAtomicLong
W2A1のスケルトンを使っている。
コンストラクタで不要なlockをしている。

S3-SimpleSemaphore
メンバ変数をfinal宣言していない所あり。
lockInterruptibly()を使用。
availablePermitsの取得をLock無しで行っている。

S4-SimpleAtomicLong
インデントが変更されてる。
コンストラクタで不要なlockをしている。
get&modifyでgetの部分で別途readLockを使っている。

S4-SimpleSemaphore
インデントが変更されてる。
availablePermitsをstaticにしている。volatileしていない!!
lockInterruptibly()は未使用。
acquire()でawait()した後signal()している!!
throws InterruptedExceptionが削除されている!!
availablePermitsの取得をLock無しで行っている。

S5-SimpleAtomicLong
readLock, writeLockをメンバ変数にしている。finalはしていない。
thisを使ってる。
ローカル変数を使っていない。

S5-SimpleSemaphore
メンバ変数を初期化してfinalしていない。
thisを使っている。
lockInterruptibly()は未使用。
signalAll()を使ってる。
availablePermitsの取得をLockありで行っている。

JUnitは全員OK!!

[Results]
14/14満点で終了!

==== Etc ====
今週はAndroidの話が中心。

optionalのlectureまで手が回らない。
無理に手を出すよりもmandatoryのLectureに時間を掛けた方が良いかもしれない。
=> Optional Lectureは後回しにして、先にAssignmentを行う。

Palantir: 指輪物語に出てくる水晶玉みたいなもの。
演習とは関係ないが遊び心があってGood!

Evaluationに時間が掛かり過ぎてバテてしまった。

[Eclipse]
gitの使い方を結構覚えた。これはこれで面白い。

==== log ====
2014/05/27 00:20 準備, Quiz
2014/05/29 00:45 Lecture
2014/06/01 00:10 Lecture
2014/06/02 00:40 Lecture
2014/06/02 00:20 Quiz
2014/06/04 03:30 Assignments
2014/06/04 01:15 Assignments
2014/06/11 01:00 Evaluation
2014/06/13 02:00 Evaluation

0 件のコメント:

コメントを投稿