21 |
22 |
23 |

24 |
25 |
26 |
27 | Gitのような複雑なシステムは使い方が難しい。
28 | ある程度使い方を知っている場合でも、あまり一般的でない機能を使うのは難しい。
29 | たとえば以下のような場合はどういうコマンドを使えばいいだろうか?
30 |
31 |
32 |
33 | - ひとつ前のバージョンの
README.md
からの変更を見たい
34 | README.md
は3日前からどう変わった?
35 | package.json
にcoffee
という名前が入ったのはいつ?
36 | - ここ1週間ぐらい変更されてないファイルは?
37 | - 最近大量に修正したファイルはどれだっけ?
38 |
39 |
40 |
41 |
42 |
43 | 最初の例について考えてみる。
44 |
45 | Gitでは「HEAD^
」「HEAD^^
」のような表現で昔のコミットを参照できるので
46 |
47 |
48 | $ git diff HEAD^ README.md
49 |
50 |
51 | のようにすればひとつ前のコミットのREADME.md
との比較ができるが、
52 | 最近のコミットでREADME.md
を編集していなかった場合は
53 | このコマンドを起動しても何も出力されない。
54 |
55 |
56 | $ git log README.md
57 |
58 |
59 | とすればREDME.md
の編集履歴を調べられるので、
60 | ひとつ前のバージョンのコミットIDを使えば
61 |
62 |
63 | $ git diff (ひとつ前のバージョンのコミットID) README.md
64 |
65 |
66 | のようにして
67 | ひとつ前のバージョンのREADME.md
からの変更を見ることができる。
68 |
69 |
70 |
71 |
72 |
73 | しかしこれはなかなか面倒な話である。
74 |
75 | 手動でコミットIDを手打ちかコピペしなければならない
76 |
77 | し、当然ながら
78 |
79 | git log
やgit diff
といったコマンドの存在と動作を知っていなければならない。
80 |
81 | git log
やgit diff
はよく使うコマンドなので
82 | Gitユーザなら誰でも知っているだろうが、
83 | このような簡単な仕事でもコピペのような面倒な操作が必要なのは嫌である。
84 |
85 |
86 | 実はGitにはrev-list
というコマンドがあり、
87 | 編集があったコミットのIDをリストすることができる。
88 | これを利用すると、ひとつ前の編集のコミットIDは
89 |
90 |
91 | $ git rev-list HEAD -- README.md | head -2 | tail -1
92 |
93 |
94 | で取得できる。
95 | この結果を利用すると、
96 | 「ひとつ前のバージョンのREADME.md
からの変更を見たい」
97 | という要求は
98 |
99 |
100 | git diff $(git rev-list HEAD -- README.md | head -2 | tail -1) -- README.md
101 |
102 |
103 | のようなコマンドで実行できることになる。
104 | ($(...)
というのはbash
の記法で、コマンド実行結果を文字列として扱うものである。
105 | --
というのは、その後に続く文字列がオプションではなくてファイル名等だということを示すもの。)
106 |
107 |
108 | rev-list
の-n
オプションを利用すると
109 |
110 |
111 | git diff $(git rev-list -n 1 HEAD -- README.md)^ -- README.md
112 |
113 |
114 | のように書くこともできる。
115 |
116 |
117 |
118 |
119 |
120 | それにしても、このように
121 | 無駄知識が大量に必要
122 | だったり
123 | 単純な要求の実行が大変
124 | だったりするのは嫌すぎる。
125 |
126 | 上のような工夫によって、
127 | ひとつ前のバージョンのREADME.md
からの変更は調べられるようになったわけだが、
128 | こういった要求は無限にあるわけで、
129 | そのたびにいろんなGit機能を調べたり思い出したりしなければならないのだろうか。
130 |
131 | 「README.md
は最後にどこ変えたっけ?」
132 | のような自然な質問を簡単に
133 | Gitコマンドに翻訳する方法が欲しい。
134 |
135 |
136 | こういった要望に対して最近は人工知能的に解決しようとするアプローチが人気かもしれない。
137 | しかしそのためには高度な自然言語処理が必要で、
138 | ちょっと違った表現を許したり内容を変えたりすることは簡単ではない。
139 | 大阪弁で質問できる日が来るとは思えない。
140 |
141 | また、「longfilename
」のようなものを指定しようとして
142 | 「logfile
」のように間違って入力しても動くようにするには
143 | 単純な予測/補完/誤り修正機能などを使った方が良いだろう。
144 |
145 |
146 | 逆引き辞典などでは
147 | 「ひとつ前のバージョンのファイルとの違いを知る」
148 | のようなエントリはあるかもしれないが、
149 | それを調べた後で「README.md
」のような名前を指定してコマンドを起動する必要がある。
150 | こういった二度手間も減らしたいものである。
151 |
152 |
153 | Macのヘルプで「時間 セット」と入力しても時間をセットする方法は出てこないし、ヘルプを自分で追加することはできない。
154 |
155 |
156 |
157 | 時間をセットする方法がヘルプに書いてあったとしても、
158 | 時間を4時にセットするためには自分で「4時」という値を指定してから「時間のセット」機能を実行しなければならない。
159 |
160 |
161 |
162 | マニュアルやヘルプを書くのは面倒なものである。
163 | システムのドキュメントやマニュアルやヘルプシステムを独立に開発するのは
164 | 面倒すぎるし齟齬も起きやすいだろう。
165 | ユーザをサポートするシステムがひとつにまとまっていて、
166 | 誰でも情報を足したり修正したりできたら嬉しいだろう。
167 |
168 |
169 | GitHelpのアプローチ
170 |
171 |
172 | GitHelpは、以下のような方針で上のような課題をすべて解決しようというものである。
173 |
174 |
175 | - ユーザのあらゆる曖昧な表現にマッチするようにヘルプ文字列を正規表現で表現し、
176 | Gitコマンドに変換する
177 | - ExpandHelp(ソース /
178 | 論文)を利用
179 | - データをすべてクラウド上に置いて編集可能にすることにより、
180 | 誰でもデータを追加/修正できるようにする
181 | - Scrapboxを利用
182 | - ユーザが指定したパラメタはそのまま利用して実行に使う
183 | - ユーザが「4」「時間」などと指定すると「時刻を4時にセットする」のようなものを提案して実行可能にする
184 | - 多少の誤入力を許す
185 |
186 |
187 | この結果、やりたいことの一部を漠然と言えばすぐ実行できるようになるのが理想である。
188 |
189 |
190 | 利用例
191 |
192 | Gitに関連するタスクのキーワードやパラメタを指定して
193 | githelp
を起動すると
194 | 候補のリストが表示され、
195 | カーソルで選択すると実行される。
196 |
197 |
198 | $ githelp 2 README
のように引数を指定して起動すると以下のような候補リストが提示される
199 |
200 |
201 |
202 |
203 | - カーソルで選択してリターンを押すと実行される
204 |
205 |
206 |
207 |
208 | インストール
209 |
210 |
211 | % gem install githelp
212 |
213 |
214 | - 対話的処理のためにpecoが必要
215 |
216 | - Macだと
% brew install peco
でインストール可能
217 | - Linuxなどの場合こちらのファイルからインストール (yumなどでは入らない)
218 |
219 |
220 |
221 | 実装
222 |
223 |
224 | - re_expand
225 | という正規表現展開ライブラリを利用
226 | - Scrapboxにあらゆる情報を書いておく
227 |
228 |
229 | -
230 | 様々なタスクの説明と実際の操作を組にして記述しておき、
231 | ユーザが与えたキーワードやパラメタにマッチするものを
232 | リストして実行可能にする
233 | - 行頭に
$
がある行でタスクの説明を記述し、行頭に%
がある行で実行コマンドを示す
234 |
235 | - ファイル名にマッチする引数(e.g.
READM
)や
236 | 数字にマッチする引数(e.g. 2
)が指定されると
237 | $
の行に記述された#{filename}
や#{number}
に
238 | マッチする
239 | - マッチしたときは、マッチした文字列が
$1
などで参照/展開されてGitコマンド文字列になる
240 | - ワンライナーでは難しい場合は
exe
241 | の下にヘルパーコマンドを用意して利用する (e.g. githelp-changed
) )
242 |
243 |
244 |
245 | 考察
246 |
247 |
248 | - 生活の中ではこういった言い換えをいつも行なっているかもしれない。
249 | たとえば「部屋暗くして」と頼まれたら
250 | 部屋の入口にある電灯スイッチを操作するかもしれないが、
251 | この場合は頭の中で
252 | 「部屋を暗くする」⇒「電灯を消す」⇒「電灯のスイッチを切る」
253 | という翻訳が行なわれていることになる。
254 | こういうことは生活で非常に多いので
255 | 翻訳作業があまり気にならないものなのかもしれないが、
256 | そういう「翻訳」は少ない方が良いのは確かだろう。
257 |
258 | - そういえば先日「らくらくホン」画面に出てくる鬱陶しい「羊」を消す方法が全くわからなかったのだが、
259 | あれは「マチキャラ」と呼ばれるものなので
260 | 「マチキャラ」を消すという操作が必要だった。
261 | お前はMSのイルカか。
262 | 「羊 消す」とか「消す」とかで消せるべきだろう。
263 | githelpでは
$ githelp 削除
と入力すれば削除関連で何ができるのかわかるだろうし、
264 | (鬱陶しい|不快な)羊を(消す|殺す)
265 | のようなエントリをユーザが足すこともできるだろう。
266 |
267 |
268 | - というわけでGitは単なる適用例であり、広い範囲で使いたいと思っている。
269 |
270 |
271 | 注意
272 |
273 |
274 | githelp
コマンドはGitリポジトリのディレクトリで実行する必要がある
275 | - re_expandの実装が富豪的なので
276 | 大きなリポジトリだと不具合があるかも
277 | - データが全然足りない... 特にリモートリポジトリ関連のデータは皆無だが、
278 | ローカルだけでも充分複雑なのでとりあえずローカル処理の情報を充実させたい
279 | - 旧版はこちら
280 |
281 |
282 | 関連システム
283 |
284 |
285 | - AnyCode
286 |
287 | - 自然言語キーワードからJavaスニペットを検索する
288 | copy fileA fileB
みたいなキーワードから FileUtil.copyFile(new File(fileA), new File(fileB))
みたいなコード候補を生成する
289 |
290 |
291 | - 文芸的プログラミング
292 |
293 |
294 |
295 |
296 |
297 |
--------------------------------------------------------------------------------
/lib/githelp.rb:
--------------------------------------------------------------------------------
1 | # coding: utf-8
2 |
3 | require "githelp/version"
4 |
5 | module GitHelp
6 | end
7 |
8 |
--------------------------------------------------------------------------------
/lib/githelp/version.rb:
--------------------------------------------------------------------------------
1 | module GitHelp
2 | VERSION = "0.3.5"
3 | end
4 |
--------------------------------------------------------------------------------
/paper/Makefile:
--------------------------------------------------------------------------------
1 | all:
2 | platex paper
3 | bibtex paper
4 | platex paper
5 | platex paper
6 | dvipdfm paper
7 | # open paper.pdf
8 |
--------------------------------------------------------------------------------
/paper/acmcopyright.sty:
--------------------------------------------------------------------------------
1 | %%
2 | %% This is file `acmcopyright.sty',
3 | %% generated with the docstrip utility.
4 | %%
5 | %% The original source files were:
6 | %%
7 | %% acmcopyright.dtx (with options: `style')
8 | %%
9 | %% IMPORTANT NOTICE:
10 | %%
11 | %% For the copyright see the source file.
12 | %%
13 | %% Any modified versions of this file must be renamed
14 | %% with new filenames distinct from acmcopyright.sty.
15 | %%
16 | %% For distribution of the original source see the terms
17 | %% for copying and modification in the file acmcopyright.dtx.
18 | %%
19 | %% This generated file may be distributed as long as the
20 | %% original source files, as listed above, are part of the
21 | %% same distribution. (The sources need not necessarily be
22 | %% in the same archive or directory.)
23 | %% \CharacterTable
24 | %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
25 | %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
26 | %% Digits \0\1\2\3\4\5\6\7\8\9
27 | %% Exclamation \! Double quote \" Hash (number) \#
28 | %% Dollar \$ Percent \% Ampersand \&
29 | %% Acute accent \' Left paren \( Right paren \)
30 | %% Asterisk \* Plus \+ Comma \,
31 | %% Minus \- Point \. Solidus \/
32 | %% Colon \: Semicolon \; Less than \<
33 | %% Equals \= Greater than \> Question mark \?
34 | %% Commercial at \@ Left bracket \[ Backslash \\
35 | %% Right bracket \] Circumflex \^ Underscore \_
36 | %% Grave accent \` Left brace \{ Vertical bar \|
37 | %% Right brace \} Tilde \~}
38 | \NeedsTeXFormat{LaTeX2e}
39 | \ProvidesPackage{acmcopyright}
40 | [2014/06/29 v1.2 Copyright statemens for ACM classes]
41 | \newif\if@printcopyright
42 | \@printcopyrighttrue
43 | \newif\if@printpermission
44 | \@printpermissiontrue
45 | \newif\if@acmowned
46 | \@acmownedtrue
47 | \RequirePackage{xkeyval}
48 | \define@choicekey*{ACM@}{acmcopyrightmode}[%
49 | \acm@copyrightinput\acm@copyrightmode]{none,acmcopyright,acmlicensed,%
50 | rightsretained,usgov,usgovmixed,cagov,cagovmixed,%
51 | licensedusgovmixed,licensedcagovmixed,othergov,licensedothergov}{%
52 | \@printpermissiontrue
53 | \@printcopyrighttrue
54 | \@acmownedtrue
55 | \ifnum\acm@copyrightmode=0\relax % none
56 | \@printpermissionfalse
57 | \@printcopyrightfalse
58 | \@acmownedfalse
59 | \fi
60 | \ifnum\acm@copyrightmode=2\relax % acmlicensed
61 | \@acmownedfalse
62 | \fi
63 | \ifnum\acm@copyrightmode=3\relax % rightsretained
64 | \@acmownedfalse
65 | \fi
66 | \ifnum\acm@copyrightmode=4\relax % usgov
67 | \@printpermissiontrue
68 | \@printcopyrightfalse
69 | \@acmownedfalse
70 | \fi
71 | \ifnum\acm@copyrightmode=6\relax % cagov
72 | \@acmownedfalse
73 | \fi
74 | \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed
75 | \@acmownedfalse
76 | \fi
77 | \ifnum\acm@copyrightmode=9\relax % licensedcagovmixed
78 | \@acmownedfalse
79 | \fi
80 | \ifnum\acm@copyrightmode=10\relax % othergov
81 | \@acmownedtrue
82 | \fi
83 | \ifnum\acm@copyrightmode=11\relax % licensedothergov
84 | \@acmownedfalse
85 | \@printcopyrightfalse
86 | \fi}
87 | \def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}}
88 | \setcopyright{acmcopyright}
89 | \def\@copyrightowner{%
90 | \ifcase\acm@copyrightmode\relax % none
91 | \or % acmcopyright
92 | ACM.
93 | \or % acmlicensed
94 | Copyright held by the owner/author(s). Publication rights licensed to
95 | ACM.
96 | \or % rightsretained
97 | Copyright held by the owner/author(s).
98 | \or % usgov
99 | \or % usgovmixed
100 | ACM.
101 | \or % cagov
102 | Crown in Right of Canada.
103 | \or %cagovmixed
104 | ACM.
105 | \or %licensedusgovmixed
106 | Copyright held by the owner/author(s). Publication rights licensed to
107 | ACM.
108 | \or %licensedcagovmixed
109 | Copyright held by the owner/author(s). Publication rights licensed to
110 | ACM.
111 | \or % othergov
112 | ACM.
113 | \or % licensedothergov
114 | \fi}
115 | \def\@copyrightpermission{%
116 | \ifcase\acm@copyrightmode\relax % none
117 | \or % acmcopyright
118 | Permission to make digital or hard copies of all or part of this
119 | work for personal or classroom use is granted without fee provided
120 | that copies are not made or distributed for profit or commercial
121 | advantage and that copies bear this notice and the full citation on
122 | the first page. Copyrights for components of this work owned by
123 | others than ACM must be honored. Abstracting with credit is
124 | permitted. To copy otherwise, or republish, to post on servers or to
125 | redistribute to lists, requires prior specific permission
126 | and\hspace*{.5pt}/or a fee. Request permissions from
127 | permissions@acm.org.
128 | \or % acmlicensed
129 | Permission to make digital or hard copies of all or part of this
130 | work for personal or classroom use is granted without fee provided
131 | that copies are not made or distributed for profit or commercial
132 | advantage and that copies bear this notice and the full citation on
133 | the first page. Copyrights for components of this work owned by
134 | others than the author(s) must be honored. Abstracting with credit
135 | is permitted. To copy otherwise, or republish, to post on servers
136 | or to redistribute to lists, requires prior specific permission
137 | and\hspace*{.5pt}/or a fee. Request permissions from
138 | permissions@acm.org.
139 | \or % rightsretained
140 | Permission to make digital or hard copies of part or all of this work
141 | for personal or classroom use is granted without fee provided that
142 | copies are not made or distributed for profit or commercial advantage
143 | and that copies bear this notice and the full citation on the first
144 | page. Copyrights for third-party components of this work must be
145 | honored. For all other uses, contact the
146 | owner\hspace*{.5pt}/author(s).
147 | \or % usgov
148 | This paper is authored by an employee(s) of the United States
149 | Government and is in the public domain. Non-exclusive copying or
150 | redistribution is allowed, provided that the article citation is
151 | given and the authors and agency are clearly identified as its
152 | source.
153 | \or % usgovmixed
154 | ACM acknowledges that this contribution was authored or co-authored
155 | by an employee, or contractor of the national government. As such,
156 | the Government retains a nonexclusive, royalty-free right to
157 | publish or reproduce this article, or to allow others to do so, for
158 | Government purposes only. Permission to make digital or hard copies
159 | for personal or classroom use is granted. Copies must bear this
160 | notice and the full citation on the first page. Copyrights for
161 | components of this work owned by others than ACM must be
162 | honored. To copy otherwise, distribute, republish, or post,
163 | requires prior specific permission and\hspace*{.5pt}/or a
164 | fee. Request permissions from permissions@acm.org.
165 | \or % cagov
166 | This article was authored by employees of the Government of Canada.
167 | As such, the Canadian government retains all interest in the
168 | copyright to this work and grants to ACM a nonexclusive,
169 | royalty-free right to publish or reproduce this article, or to allow
170 | others to do so, provided that clear attribution is given both to
171 | the authors and the Canadian government agency employing them.
172 | Permission to make digital or hard copies for personal or classroom
173 | use is granted. Copies must bear this notice and the full citation
174 | on the first page. Copyrights for components of this work owned by
175 | others than the Canadain Government must be honored. To copy
176 | otherwise, distribute, republish, or post, requires prior specific
177 | permission and\hspace*{.5pt}/or a fee. Request permissions from
178 | permissions@acm.org.
179 | \or % cagovmixed
180 | ACM acknowledges that this contribution was co-authored by an
181 | affiliate of the national government of Canada. As such, the Crown
182 | in Right of Canada retains an equal interest in the copyright.
183 | Reprints must include clear attribution to ACM and the author's
184 | government agency affiliation. Permission to make digital or hard
185 | copies for personal or classroom use is granted. Copies must bear
186 | this notice and the full citation on the first page. Copyrights for
187 | components of this work owned by others than ACM must be honored.
188 | To copy otherwise, distribute, republish, or post, requires prior
189 | specific permission and\hspace*{.5pt}/or a fee. Request permissions
190 | from permissions@acm.org.
191 | \or % licensedusgovmixed
192 | Publication rights licensed to ACM. ACM acknowledges that this
193 | contribution was authored or co-authored by an employee, contractor
194 | or affiliate of the United States government. As such, the
195 | Government retains a nonexclusive, royalty-free right to publish or
196 | reproduce this article, or to allow others to do so, for Government
197 | purposes only.
198 | \or % licensedcagovmixed
199 | Publication rights licensed to ACM. ACM acknowledges that this
200 | contribution was authored or co-authored by an employee, contractor
201 | or affiliate of the national government of Canada. As such, the
202 | Government retains a nonexclusive, royalty-free right to publish or
203 | reproduce this article, or to allow others to do so, for Government
204 | purposes only.
205 | \or % othergov
206 | ACM acknowledges that this contribution was authored or co-authored
207 | by an employee, contractor or affiliate of a national government. As
208 | such, the Government retains a nonexclusive, royalty-free right to
209 | publish or reproduce this article, or to allow others to do so, for
210 | Government purposes only.
211 | \or % licensedothergov
212 | Publication rights licensed to ACM. ACM acknowledges that this
213 | contribution was authored or co-authored by an employee, contractor
214 | or affiliate of a national government. As such, the Government
215 | retains a nonexclusive, royalty-free right to publish or reproduce
216 | this article, or to allow others to do so, for Government purposes
217 | only.
218 | \fi}
219 | \endinput
220 | %%
221 | %% End of file `acmcopyright.sty'.
222 |
--------------------------------------------------------------------------------
/paper/figures/RE_2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/RE_2.pdf
--------------------------------------------------------------------------------
/paper/figures/example1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/example1.png
--------------------------------------------------------------------------------
/paper/figures/example2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/example2.png
--------------------------------------------------------------------------------
/paper/figures/example4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/example4.png
--------------------------------------------------------------------------------
/paper/figures/gentree1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/gentree1.pdf
--------------------------------------------------------------------------------
/paper/figures/gentree2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/gentree2.pdf
--------------------------------------------------------------------------------
/paper/figures/githelp1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/githelp1.png
--------------------------------------------------------------------------------
/paper/figures/githelp_e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/githelp_e.png
--------------------------------------------------------------------------------
/paper/figures/githelp_e2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/githelp_e2.png
--------------------------------------------------------------------------------
/paper/figures/info-xxl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/info-xxl.png
--------------------------------------------------------------------------------
/paper/figures/mac1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/mac1.png
--------------------------------------------------------------------------------
/paper/figures/mac2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/mac2.png
--------------------------------------------------------------------------------
/paper/figures/nyuuryoku-ime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/nyuuryoku-ime.png
--------------------------------------------------------------------------------
/paper/figures/readme-ambig.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masui/GitHelp/046b91353d1ff19a58d4c2f82d76cd31a6f12d2c/paper/figures/readme-ambig.pdf
--------------------------------------------------------------------------------
/paper/figures/readme-mismatch.graffle:
--------------------------------------------------------------------------------
1 |
2 |
3 |