2014年6月5日木曜日

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

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

==== Lecture ====
Section 0: Course Introduction
特にコメントなし。

Section 0 Part 1 - Overview of Mobile Cloud Computing with Android
The "Mobile Cloud Computing with Android" Specialization
この講義を含めて3つの連続した講義がSpecializationになっている。
その概要の説明。
motivations for concurrency, inherit and accidental complexities等のキーワードも出てきた。

Section 0 Part 2 - Course Structure and Topics
GoFのパターンも使う。
コースのHomeから必要な情報には辿れるようになっている。
inherit and accidental complexitiesの理解と対処方法の習得が重要。

Section 0 Part 3 - Course Prerequisites and Learning Strategies
受講生の前提とか、コースの活用の仕方など。

Section 0 Part 4 - Overview of Patterns and Frameworks
patternとframeworkの重要性について。Observer patternが例に出ていた。

Section 0 Part 5 - Overview of Patterns and Frameworks
POSAとGoFのpatternについて矢継ぎ早に説明があった。
今後のLectureで出てくるらしい。
Androidはopenなのでpatternの実例として勉強するのに向いている。
https://class.coursera.org/posa-002/wiki/Source_Code_By_Week
にコードへのポインタの記載がある。
https://github.com/android/からplatform_dalvikを指定してbranch/tagから目的のバージョンを取り出せる。

Section 1: Introduction to Android Concurrency
処理順序と共有資源の不整合を防ぐためにsynchronizationとschedulingが必要。
Javaに元々ある仕組みとAndroid frameworkにある仕組み両方を学ぶ。
AndroidのapplicationとframeworkでGoF,POSAのpatternがどの様に使われているか見る。
Androidの表面的な動作だけでなくて内部のmiddlewareについても学ぶ。
Androidのコードの説明が多いので、ダウンロードした方が良いかもしれない。

Section 1 Module 1: Introduction to Concurrency Motivations and Challenges
multi-core化などでConcurrencyを正しく作れる技術者への要求が高まっている。
ハードウエアの能力を十分に引き出すため。
Concurrent softwareの質はハードに追いついていない。

Section 1 Module 1 Part 1: Concurrency Motivations
multi-coreを有効活用するためにthreadを利用する。
threadを使えば性能を上げるだけではなく作りをシンプルに出来る。
single-coreであってもthreadによる疑似並列処理は性能、簡素化に役立つ。

Section 1 Module 1 Part 2: Concurrency Challenges
[accidental complexities]
通常使っているツールやテクニックが制限される事。
low levelの非標準apiの使用によるツールでのチェック力低下。
観測問題によるステップ実行によるデバッグ力の低下。
競合をツールで見つけるのは大変。
改善方法はリンクが示されているのみで説明はなかった。
[inherent complexities]
Concurrent softwareのドメイン固有問題。
synchronization, scheduling, deadlock
こちらも解決策はリンクを示すのみ。

Section 1 Module 2: Introduction to Java Concurrency Mechanisms
Javaのthreadのsynchronization, schedulingの機能を学ぶ。
GoFやPOSAのpatternでどの様に拡張されるかも見る。

Section 1 Module 2 Part 1: Overview of Java Threads 1
[Javaのthreadの作り方]
(1) threadをextendsしてrun()をoverrideしてstart()で起動する。
(2) runnableをimplementsしてrun()をoverrideしてrunnableをthreadに渡してstart()で起動する。
(3) runnableをthreadに渡す時にrun()をinner classで実装してstart()で起動する。
これがAndroidではcommon idiom
[threadのlifecycle]
start()でthread生成、run()が実施される。
run()がreturnするまで動き続けるが、実際はOSによってtime sharingされる。
run()がreturnするのを他のthreadからjoin()で待ち合わせ出来る。
join()を使わない場合は単に終了する。
sleep()と他のthreadからshutdown要求するinterrupt()も重要。
currentThead()で実行中のthread objectが取得出来る。

Section 1 Module 2 Part 2: Overview of Java Threads 2
theadの状態遷移マシン,new, runnable, running, blocked, timed waiting, waiting, terminated
startよりstopの方が難しい。
stop flagを使う方法もある。この場合はblock中はチェックできない。
interruptを使うとblockをbreakする事が出来る。UnixのE_INTRと似たような感じ。
blockしていない時は明示的にチェックすればinterruptが来ているかはわかる。
Dalvikと標準のJVMとは違いがある。

Section 1 Module 2 Part 3: Motivating Java Synchronization & Scheduling Mechanisms
producer-consumerとping-pongの同期をとっていない場合の例。
これを見て同期バージョンをAssignmentで作ると言うこと?
シーケンス図とコード断片が出ていたのでスライドは参考になりそう。
accidental complexitiesによりツール見つけるのも、debugするのも大変。
解決方法は次週なのに、今週のAssignmentで先に解決策の演習をしてしまう?

==== Quiz ====
Quizはhard deadline 6/7のみで普通のdeadlineはなさそう。
100回まで?再提出出来そう。

Quizの順序はLectureの順とあっていて、行ったり来たりが必要なかった。
Quizとほぼ同じ問題がLecture内のQuizでも出てきた。
何時もこの形式なら楽なのだが。

自動採点は提出後すぐに行われた。
一回目の提出で満点!
どのLectureの問題かの解説もあった。

==== Assignment ====
[全般]
Assignmentは期限までは何回?(100回?)でも再提出可能。
このコースの課題はpeer assessmentが必要。progfunより大変そう。
提出期限後にノルマ分(5人)の他の人の評価をすると自分の評価が出来る。
Assignmentはgithubからダウンロードする。eclipseのplug-inを使う.

TODOのコメントは消さない。追加のみを行う。

SynchronizerQueue.javaをcouseraのwebサイトにuploadする。

JRE1.6の環境でテストする必要がある。評価もその環境で行う必要がある。
JRE1.6はセキュリティの問題で公開が終わっているが、JRE1.7でも良いのか?
下記からJRE1.6をダウンロードしてインストール、JRE1.7にupdateするとJRE1.6が消えるとあるが?
http://sourceforge.jp/projects/sfnet_javaautoupgrade/downloads/jre-6u25-windows-i586-s/jre-6u25-windows-i586-s.exe/
preference -> java -> compiler を 1.6にする必要あり。
preference -> java -> Installed JREs も1.6にした方が無難かもしれない。
1.7のままでも動いたが。。。

どうも課題に不備が有った様で提出済の課題を修正するかの議論があった。
結論は不備部分のテストを削除して提出済のもをそのまま使う。
提出期限が5/27で評価期限が6/3

"Virtual Office Hours"でAssignmentの問題と答えにつてい議論する。

staticクラス: classの内部クラスでstatic methodと同じようにクラスに付随する。

indentは基本スペースだが、所々にtabが混じっている。注意必要。
formatterをjava conventionalにして、formatコマンドは使わない様にする。

[Week-1-Assignment-0]
BlockingQueueはjavaの標準のインターフェース, offer()とpoll()を使う。
実装する部分が殆どなかったので思ったより簡単だった。
環境設定の方が大変。

==== Evaluation ====
Virtual Office Hoursで説明あると言っていたけど、大した説明はなかった。
Forumを見ると結構勘違いして提出してしまっている人もいるらしい。

私の担当分は5人とも全部OKだった。
空白や空行や処理の順番が多少違うだけで問題ない。

JUnitもすべてOK。
Self Evaluationも満点で完了!
Peer Evaluationも満点で完了!

==== Etc ====
subtitleの出来はprogfunよりposaの方が上。表示タイミングもgood!
と、最初は思ったけどLectureによってバラつきがある。間違いが多いものもある。

[Eclipse]
Quick Accessにgitと入れてgit cloneで持ってこれた。
Compare withでgitのリポジトリとのdiffが取れる。
Package exploreでファイルを二つ選んでCompare with -> Each Otherでもdiffが取れる。
Eclipseのdiffは賢くない?? 直ぐに全体差分ありなってしまった。
?? 何か改善策はないか?
emacsのediffであれば正しく見える。

==== log ====
2014/05/11 Section 0.0 00:10
2014/05/15 Survey 00:20
2014/05/16 Section 0.1,0.2 00:30
2014/05/17 Assignment準備 00:30
2014/05/17 Quiz & Lecture 0.3-1.3(完) 04:00
2014/05/18 Assignment submit 02:00
2014/05/28 Evaluation 03:40
2014/06/05 Results 00:10

0 件のコメント:

コメントを投稿