Tracについて(http://trac.edgewall.org/より)
- TracはSubversionへのインターフェイスを提供する
- Wikiと統合されていて、簡易なレポート機能もある
- wiki markupを利用することができ、説明文やリンク、バグ間のリンク、タスク、ファイルの変更点を表現することができる
- timelineはプロジェクトで発生した全てのイベントを時系列に表示する
- roadmapは今後の工程、マイルストーンをリスト形式で表示する
- http://trac.edgewall.org/wiki/TracGuide
- User Guideに、クライアントユーザーの操作方法が掲載されている
- http://trac.edgewall.org/wiki/TracWiki
- Wikiの書式について、画面中央にリンクがある
- TracLinksは要チェック
- http://trac.edgewall.org/wiki/TracTimeline
- http://trac.edgewall.org/wiki/TracBrowser
- http://trac.edgewall.org/wiki/TracChangeset
- ChangeSetについて
- ChangeSetHeaderとDiffViewsの二つのパートがある
- ChangeSetHeaderには、変更点がファイル毎に表示される
- DiffViewsには、個々のファイルの変更点が表示される
- inline styleかside-by-side styleを選択する(Header部右側の「View differences(diffを見る)」で調節)
- 「Revision Log(リビジョンログ)」をクリックすると、そのファイルのどのリビジョンを比較するかの選択画面が表示される
- その他、諸々
- http://trac.edgewall.org/wiki/TracRevisionLog
- RevisionLogについて
- ChangeSetは、ファイルがコミットされる毎の差分情報
- それより大きな差分照会(一番最初のリビジョンと最新リビジョン)をやる場合は、こちらを使う
- RevisionLogEntryには、そのファイルの変更履歴がリスト化されている。
- 一列目はラジオボタンで、差分照会したい場合は、ここで任意のリビジョンを指定する
- 二列目は色による変更状態の表示、一つ前のリビジョンからどのようなタイプの変更がなされたか
- 三列目は、そのリビジョンがコミットされた日付
- 四列目は、リビジョン番号
- 五列目は、ChangeSet番号(TODO これがどういう規則で割り振られるか?)
- 六列目は、変更者
- 七列目は、コミットされた時のメッセージ
- 「View changes(変更箇所を見る)」ボタンを押すことで、一列目のコンボボックスで選択されたリビジョン間の差分を照会することができる
- RevisionLogについて
- http://trac.edgewall.org/wiki/TracTickets
- TicketSystemについて
- 案件やバグをシンプルかつ効果的にトラックするためのツール
- タスク、案件、バグ、保守・サポートなどの用途に使われる
- ユーザーができるだけ簡単に参加し、利用できるような仕組みを提供している
- それぞれのTicketは誰かに対してアサインすることができる(担当者を決められる)
- Ticketに用意されている様々なフィールドを利用することで、より効果的な管理が可能になる
- trac.iniで、コンボボックスの中身などを調節することができる
- Ticketの説明やコメントでは、TracLinksやWikiFormattingを使うことができるのは重要な特徴だ
- TracLinksを使って、他の案件やChangeSetsやファイルにリンクを張ることで、そのTicketの内容がより明確になり、容易に理解できるようになる
- http://trac.edgewall.org/wiki/TracReports
- あとで書く
Programming Methodology 25〜27
最後の三回分を視聴しました。データ構造の作り方から、並列処理の話、Javaの基本的な仕組みなどについて触れられ、最終回では、このクラスを終えた後に進むべき道についてアドバイスをしていました。
- Social Network
- profile/person
- name(unique ID)
- status
- image
- list of friends
- friendship
- reciptocal
- 互いのリストに互いの情報が入る
- 6次の隔たり(6-degrees separation)
- これらをどのように表現するか?
- profile/person
- Concurrency
- multiple things at the same time
- cycling through some things
- Thread
- Runnable Interfaceの実装
- shared data
- multiple things at the same time
- standard Java
- computer science
- computer science is not computer programming
- 次はCS106Bへ
- How do you implement a hashmap?
- recursion -> huge powerful concept
- またはCS103へ
- Discrete Math
- Computability
- CS107/CS108
- low-level programming
- Object-Oriented system/large apps
- その他、コンピュータサイエンスの様々な分野について紹介
- CS + business
- 起業するという道もあることを示唆
- Product Management/finance(computation problems)
- CS + Bio
- Bioinformatics
- Genomics
- Bio engineering
- CS + Law
- IP/copyright/digitalMedia
- CS (+ CS)
- programmer
- engineer management
- teaching
- programmingはこれらのことをやるための入口
Programming Methodology 22〜24
三回分の講義を視聴しました。断片的なメモしか残すことができませんでしたが、それをメモしておきます。
第二十二回目は、GUIの続きということで、コンテナというコンポーネントを使って、GUIの要素を再帰的に表現する方法について述べられていました。
- container/component(GUIの続き)
- コンテナの中にコンテナを入れられる
- コンテナもコンポーネントの一つ
- HashMap
- HashMap
inventory = new HashMap ; - inventory.put(album.getName, album);
- Album album = inventory.get("albumName");
- HashMap
第二十三回目は、助手の先生による探索やソートに関するお話でした。
- Searching
- Linear Search
- takes a lot of time
- Binary Search
- ソート済みの配列で使う
- Linear Search
- Sorting
- アルゴリズムによって効率が変わる
第二十四回目は、データ構造の作り方ということで、何をクラスやメソッドにするべきか、オブジェクト同士の関連をどのように扱うのかということに触れられていました。
- data structure
- principles
- nouns -> classes
- verbs -> methods
- unique identifier
- design
- collection of objects
- AlbumとSongの関連性
- Songが様々Albumが保持する可能性あり
- 一つのSongのオブジェクトは一つしか生成しない
- Albumオブジェクトがそれを参照する
- deepCopy/shallowCopy
- principles
Programming Methodology 19
今回はインターフェイスについて語っていました。Java5.0以降の言語仕様については、あまり詳しく把握していなかったので、今回の講義はいろいろと得るものがありました。
- Interface
- set of methods
- common functionality among set of classes
- is-aの場合の、extendsを使う
- Interfaceをimplementすると、そのinterfaceのmethodがあることを保障する
- Map(Interface)
- keyとvalueの組み合わせ
- dictionaryの役割(wordsとしてのkeyを渡すと、definitionsとしてのvalueが返ってくる)
- phone bookとしても捉えることができる
- このような属性を抽象化したのがInterface
- HashMap <- implement Map
- Collection Hierarchy/Map Hierarchy
- abstract concept
- Iterator
- Iteratorを使ったfor文(Java5.0以降)
- dict.keySet()のiteratorを使って、全要素を巡回する
- for (String word: dict.keySet()) { println(word); }
- keyとvalueの組み合わせ
Programming Methodology 16〜17
二回分の講義を視聴しました。この二回の講義を通じて、配列の扱い方について学びました。
- Arrayについて
- ordered
- 順番に並んでいる
- homogeneous
- 全てが同じタイプ
- ordered
- i++
- post increment
- int x = 5; int y = x++;
- xは6だが、yは5
- pre incrementをやる時は、++i
- Actual size/Effective size
- Actual size -> declaredされたサイズ
- Effective size -> really usingしているサイズ
- Arrayは参照型のクラス
- int[]をパラメータに渡せば、その参照が渡される
- 他のメソッド内である一つの値を変えたら、メソッドを抜け出してもそのまま
- int
- array of array
- matrix(2 dimention)
- 二次元以上の配列を定義することもできる
- ArrayListについて
Programming Methodology 18
今回は、実際にバグをつぶしていく過程を実演しながら、デバッグについて熱く語っていました。
- 配列の復習
- Debugging
- 役割
- Design -> Architect
- Coding -> Engineer
- Testing -> Vandal(プログラムを破壊しようと試みる)
- Debugging -> Detective(破壊された原因を捜査して修正する)
- Design -> Development -> Debugging -> Deployment
- 先の工程に行くほど、修正するのに10倍のコストがかかる
- Designの時点で見つけられるミスと比べると、Deploymentの時点で発見される問題は1000倍の負荷がかかってしまう
- Bugの種類
- bad values
- faulty logic
- unwarranted assumptions
- 回避するには
- simple
- systematic
- assumptions about problems
- critical(批判的にコードを読む)
- Don't panic!
- Debuggingの方法
- printlnを使う(メソッドや変数に対して)
- Unit Test
- EclipseでのDebuggingの実演
- BreakPointを指定する
- BreakPoint時点でのstackFrameが表示される
- 変数の中身が表示される
- 1step毎処理を進めてみる
- 役割