I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05 · I117...
Transcript of I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05 · I117...
I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター Research Center for Advanced Computing Infrastructure (RCACI)
小原 泰弘 / Yasuhiro Ohara
スケジュール / SCHEDULE
1. 2011/06/07(Tue): プログラミングの基礎 / Basic of Programming
2. 2011/06/09(Thu): 基本データ構造 / Fundamental data structures
3. 2011/06/14(Tue): メモリ管理1 / Memory Management 1
4. 2011/06/16(Thu): メモリ管理2 / Memory Management 2
5. 2011/06/21(Tue): デバッグ / Debugging
6. 2011/06/23(Thu): ソフトウェア開発環境1 / Software Development Env. 1
7. 2011/06/28(Tue): ソフトウェア開発環境2 / Software Development Env. 2
8. 2011/06/30(Thu): 木 / Data Structure : Tree
9. 2011/07/05(Tue): ハッシュ / Data Structure: Hash
10. 2011/07/07(Thu): プログラム理解1 / Understanding Programs 1
11. 2011/07/12(Tue): プログラム理解2 / Understanding Programs 2
12. 2011/07/14(Thu): スクリプト言語1 / Script Language 1
13. 2011/07/19(Tue): スクリプト言語2 / Script Language 2
14. 2011/07/21(Thu): その他の言語 / Other Languages
15. 2011/07/26(Tue): 試験 / Examination
課題(自由課題) / FINAL REPORT
自由課題 free topic
テーマ提出: decide topic by 7/5(Tue) report us of the topic by e-mail: [email protected] by 23:59
例) サウンドファイルの変換プログラム / Sound file converter ウェブクローラー / web crawler カレンダープログラム(CalDAVコマンド群) calendar program 新しいシェル・エディタ・ウィンドウマネージャー new shell, editor, window
manager 圧縮解凍・暗号化アルゴリズム、rsyncの実装 encrypt/decrypt, rsync 形態素解析を利用した人工無能プログラム markov-chain program
良いテーマ・悪いテーマがある choose good theme 教員やTAが相談に乗ります。ask TA and me
レポートには高度な考察・議論を。The final report must have deep consideration
今日の目次 / TODAY'S INDEX
ハッシュ / Hash SCM (Source Code Management) system
ハッシュ HASH
HASH
切り刻む、ごちゃまぜ(にする)、順番を変える / the meaning of "hash"
aaaaaaa
bbbbbbb
ccccccccc
ddddddd
eeeeeeee
fffffffffff
ggggggg
hhhhhhh
key hash function hash value
vvvvvvv
wwwww
xxxxxxx
yyyyyyy
zzzzzzzz
hash table 衝突 / Collision
HASH TABLE
hash function
ハッシュバケツ hash bucket
ハッシュ関数 / HASH FUNCTION
mod (余り) / modulo 素数で割る / devide by prime number
衝突しにくい・均等に衝突する / become hard to collide, and collision will happen evenly
ハッシュ HASH
ハッシュが一番速い場合も多い。sometimes hash is the most appropriate (fast).
tcsh's rehash 連想配列 / associative arrays
ソースコードマネジメント(SCM)
バージョン管理システム VERSION MANAGEMENT SYSTEM
ファイル変更の履歴を管理するためのシステム / the system to manage the file modification history ソフトウェア開発においてソースコードの管理に利用される / used
for management of source code in software development. 「いつ?」「誰が?」「何を変更?」等を記録 / When, who, what is
modified, are recorded. 必要に応じて古いソースコードを取出すことが可能 / you can
extract the old version of the file. 代表的なソフトウェア / typical ones
RCS CVS Subversion GIT
IMPORT
CHECKOUT
MODIFIED
CHECKIN
バージョン管理システム / VERSION MANAGEMENT SYSTEM (CONT)
バージョン管理番号 / version identification リビジョン番号 / revision number タグ/ブランチ / tag/branch ハッシュ値 / hash values
リポジトリ / repository ファイルの各バージョンを保持しているデータベース / the
database that holds each versions of the files. チェックイン/コミット checkin / commit
リポジトリへのファイル書込み / to write to the repository
チェックアウト checkout リポジトリからのデータの取り出し
/ extract from the repository
tag1 tag2 tag3
tagA tagB branch merge
RCS (REVISION CONTROL SYSTEM) The source distribution is intended primarily for UNIX systems.
初期のバージョン管理システム SCM of first era. 頻繁に改版されるテキストの管理に利用される used for
management of texts. バイナリファイルのバージョンも管理可能 / binary files are
okay バージョンの記録に はdiffユーティリ ティを利用している / diff
utility is used to store versions. ci
チェックインツール : $ci hoge → hoge,v ができる
co チェックアウトトール : $co hoge,v → hoge が編集可能
rlog バージョンチェックツール : $rlog hoge,v
DIFF
2ファイル間の差分出力するコマンド / produces the differences of 2 files. a : 追加(added) d : 削除(deleted) c : 変更(changed) N{a,d,c}M :
N : 元ファイルでの行番号 #lines of source file M : 変更後ファイルでの行番号 #lines of modified file
ソースコードのパッチ生成にも利用される / patching of a source code.
foo
12345 67890
bar
67890
result
1d0 < 12345
CVS (CONCURRENTVERSIONSSYSTEM)
CVS is a version control system, an important component of Source Configuration Management (SCM).
ネットワークでの使用が考慮された最初のソースコード管理システム CVSサーバを用意してリポジトリはサーバに置く チェックアウトは各ユーザのローカルディスクに行い、その変更点をリポジトリへコミット
内部でrcs, diff が利用されている
同一のファイルを複数人で利用することが考慮されている / designed for development of the same file by multiple people. RCS はファイルをロックする事で同時編集を禁止する。 CVS では、RCSのようなロックメカニズムはもたず、同時編集を許可する代りにコンフリクトが生じた場合、コミット時にマージ操作を行うか要求される。
プログラムのソースコード配布等にも利用されている
Eclipce等の統合開発環境で利用可能
SUBVERSION
CVSとよく似たCMS / similar to CVS コマンドラインで使用する際の主要なコマンド名はCVSと一致するように作られているため、CVSからの移行が容易 / successor of CVS
CVSの問題点を解決すべく開発された / developed to solve the CVS's problems
SOURCE CODE TAG SYSTEM
ソースコードを読むための補助ツール a supplementary tool to read source codes. ソース及びヘッダ内にあるシンボルのタグファイルを生成 /
read C symbols and create tag files 各ファイル間のタグの相互参照が可能 / refer tags in each
files テキストエディッタで高速かつ容易にタグが参照可能 can
refer tags in the text editor.
代表的なソフトウェア typical ones ctags gnu global doxygen
CTAGS (EXPLANATION OF)
エディタでソースファイル中のシンボルを 簡単に検索するためのタグを生成のツール editor
emacs,vi(clones),emEditor,サクラエディタ等で利用可能
tag プログラミング言語で定義されるもののうちインデックスとして取得可能なオブジェクトのシンボルエントリ
利用可能言語 アセンブラ, AWKスクリプト, ASP, BETA, シェルスクリプト, C, C+
+, COBOL, Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, Python, REXX, Ruby, S-Lang, Scheme, Tcl, Vimスクリプト, YACC等
vimにはExuberant Ctags と呼ばれる専用ctagsがある
GIT
developed for Linux kernel development use hashes instead of revision numbers handles local repository and remote repository create ssh public key: ssh-keygen –t dsa send ~/.ssh/id_dsa.pub by e-mail create directory of a source code. push to ssh://[email protected]/user/<username>/xxx git clone <ssh://[email protected]/...> 1. git pull 2. <edit> 3. git add <filename> 4. git commit 5. git push
GIT
git status git log / git log –p git diff git diff origin master