i117 プログラミング演習ii i117 programming practice iishinoda-2011/07/05  · i117...

20
I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター Research Center for Advanced Computing Infrastructure (RCACI) 小原 泰弘 / Yasuhiro Ohara [email protected]

Upload: others

Post on 02-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター Research Center for Advanced Computing Infrastructure (RCACI)

小原 泰弘 / Yasuhiro Ohara

[email protected]

Page 2: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

スケジュール / 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

Page 3: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

課題(自由課題) / 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

Page 4: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

今日の目次 / TODAY'S INDEX

 ハッシュ / Hash  SCM (Source Code Management) system

Page 5: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

ハッシュ HASH

Page 6: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ 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

Page 7: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

HASH TABLE

hash function

ハッシュバケツ hash bucket

Page 8: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

ハッシュ関数 / HASH FUNCTION

  mod (余り) / modulo  素数で割る / devide by prime number

  衝突しにくい・均等に衝突する / become hard to collide, and collision will happen evenly

Page 9: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

ハッシュ HASH

 ハッシュが一番速い場合も多い。sometimes hash is the most appropriate (fast).

  tcsh's rehash  連想配列 / associative arrays

Page 10: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

ソースコードマネジメント(SCM)

Page 11: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

バージョン管理システム 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

Page 12: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

バージョン管理システム / 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

Page 13: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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

Page 14: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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

Page 15: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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等の統合開発環境で利用可能

Page 16: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

SUBVERSION

 CVSとよく似たCMS / similar to CVS   コマンドラインで使用する際の主要なコマンド名はCVSと一致するように作られているため、CVSからの移行が容易 / successor of CVS

 CVSの問題点を解決すべく開発された / developed to solve the CVS's problems

Page 17: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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

Page 18: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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がある

Page 19: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

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

Page 20: I117 プログラミング演習II I117 PROGRAMMING PRACTICE IIshinoda-2011/07/05  · I117 プログラミング演習II I117 PROGRAMMING PRACTICE II ハッシュ HASH 情報社会基盤研究センター

GIT

  git status   git log / git log –p   git diff   git diff origin master