shunkuntype 1.0.9 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e0926887ee628f676ca3b86799825e8f25fa812
4
- data.tar.gz: d61865d46e0bbf15f462367c49ac1e0c75d521f7
3
+ metadata.gz: 9e7af596303748af6d09b2b31305df40c294e8c4
4
+ data.tar.gz: 166bb80dd5d6ef6380d1340240830d86cc2e3bef
5
5
  SHA512:
6
- metadata.gz: 41d317a69eaab59dbe65cea7ac7be93c2171cf123fc83a40fa700f8904215ed1067def60fd6bf92a91d329cd011ee6bdf6b53efcdf373f6e41f94d947af5ec9a
7
- data.tar.gz: 44179500690dbe5135bed684470879605709ab0947c24ffe568c4a9c898c2e9b8ee74d1c674be28d25620693bc59bf49b68d9ea8d71a662ef11e709e2c25ba01
6
+ metadata.gz: ea84d299692525ab128bdc3afee48fcba674b32c26d0b3c9436f01d4fb053a29d98c1a2807b281f9c68e7ba487f4e684ff97655dff604bb8a5f44f4cf5645bb4
7
+ data.tar.gz: 9f834718746fbd315a7e0a028f3d494fc76ceb7acc9c2fb87ff1cbff4d3652c6e07d62cd8edbd633065e6a06b48753ff1de633e7ebd5dcf0e1e85b47157a3b62
@@ -82,16 +82,16 @@ class MkPlots
82
82
  @opts = opts
83
83
  mk_mem_names()
84
84
  work_all()
85
- FileUtils.mv('res.png', './work.png')
85
+ # FileUtils.mv('res.png', './work.png')
86
86
  speed_all()
87
- FileUtils.mv('res.png', './speed.png')
87
+ # FileUtils.mv('res.png', './speed.png')
88
88
  end
89
89
 
90
90
  def work_all
91
91
  all_data= @mem_names.inject([]){|all,name| all << work_view(name) }
92
92
  text="Work minutes [min]"
93
93
  plot(all_data,text)
94
- plot(all_data,text,opts={:png=>true})
94
+ # plot(all_data,text,opts={:png=>true})
95
95
  end
96
96
 
97
97
  def speed_all
@@ -100,7 +100,7 @@ class MkPlots
100
100
  text="Typing speed [sec/20 words]"
101
101
 
102
102
  plot(all_data,text)
103
- plot(all_data,text,opts={:png=>true})
103
+ # plot(all_data,text,opts={:png=>true})
104
104
  end
105
105
 
106
106
  def speed_view(name)
@@ -142,6 +142,7 @@ class MkPlots
142
142
  plot.ylabel text0
143
143
  plot.xlabel "Elapsed time[days]"
144
144
  plot.xtics "0 7"
145
+ plot.xrange "[-49:1]"
145
146
  if true==opts.has_key?(:png) then
146
147
  plot.term "pngcairo enhanced size 480,360"
147
148
  plot.output "res.png"
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  require 'tmpdir'
3
3
 
4
4
  module Shunkuntype
5
- VERSION = "1.0.9"
5
+ VERSION = "1.0.10"
6
6
  data_dir = File.join(ENV['HOME'], '.shunkuntype')
7
7
  # SPEED_FILE="./shunkuntype_speed_data.txt"
8
8
  SPEED_FILE=File.join(data_dir,"speed_data.txt")
@@ -0,0 +1 @@
1
+ .hikirc
@@ -0,0 +1,252 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'systemu'
3
+ require 'tempfile'
4
+ # -*- coding: utf-8 -*-
5
+ begin
6
+ target_dir = File.readlines('./.hikirc')[0].chomp
7
+ rescue => e
8
+ puts e
9
+ exit
10
+ end
11
+ dirnames=Dir.pwd.split('/')
12
+ basename = (dirnames[-1]=='hikis')? dirnames[-2] : dirnames[-1]
13
+ $latex_dir= 'latex_dir'
14
+
15
+ task :default do
16
+ system 'rake -T'
17
+ end
18
+
19
+ desc "latex conversion FILE1"
20
+ task :latex => [:latex_base] do
21
+ exit
22
+ end
23
+
24
+ desc "latex conversion FILE1 with wrap format"
25
+ task :latex_wrap => [:latex_base, :change_wrap] do
26
+ exit
27
+ end
28
+
29
+ desc "latex conversion whole hiki files in the current dir."
30
+ task :latex_all do
31
+ p entries=Dir.entries('.')
32
+ main_file=""
33
+ entries.each{|file|
34
+ next unless file.include?('.hiki')
35
+ next if file.include?('.hikirc')
36
+ f_name =File.basename(file,'.hiki')
37
+ if f_name==basename
38
+ option="--listings -p "
39
+ main_file=f_name
40
+ else
41
+ option="-l 2 --listings -b "
42
+ end
43
+ convert_to_latex(file, option)
44
+ }
45
+ system "open latex_dir/#{main_file}.tex"
46
+ exit
47
+ end
48
+
49
+ desc "change latex figures to wrap format"
50
+ task :change_wrap do
51
+ lines = File.readlines($save_name)
52
+
53
+ cont = ""
54
+ lines.each{|line|
55
+ if line.include?('\begin{figure}[htbp]\begin{center}')
56
+ p line
57
+ cont << '\begin{wrapfigure}{r}{8cm}'+"\n"
58
+ cont << '\vspace{-2\baselineskip}'+"\n"
59
+ cont << '\begin{center}'+"\n"
60
+ elsif line.include?('\label{default}\end{center}\end{figure}')
61
+ p line
62
+ cont << '\end{center}'+"\n"
63
+ cont << '\vspace{2\baselineskip}'+"\n"
64
+ cont << '\end{wrapfigure}'+"\n"
65
+ else
66
+ cont << line
67
+ end
68
+ }
69
+ File.open($save_name,'w'){|file| file.print cont }
70
+
71
+ system("open #{$save_name}")
72
+ exit
73
+ end
74
+
75
+
76
+ desc "latex conversion FILE1(hiki) to FILE2(latex)"
77
+ task :latex_base do
78
+ Dir.mkdir($latex_dir) unless Dir.exist?($latex_dir)
79
+ convert_to_latex(ARGV[1])
80
+ system("open #{$save_name}")
81
+ end
82
+
83
+ def convert_to_latex(file_name, option=nil)
84
+ p file_name = file_name.include?('.hiki')? file_name : file_name+'.hiki'
85
+ p tex_name = File.basename(file_name,'.hiki')+'.tex'
86
+ p $save_name = ARGV[2] || File.join($latex_dir,tex_name)
87
+ pre_name = File.join($latex_dir,'pre.tex')
88
+ p pre_command = File.exist?(pre_name) ? '--pre '+pre_name : nil
89
+ lines = File.readlines(file_name)
90
+ cont = ""
91
+ lines.each{|line|
92
+ if m=line.match(/\{\{attach_view\((.*),(.*)\)\}\}/)
93
+ p line="\{\{attach_view\(#{m[1]}\)\}\}\n"
94
+ end
95
+ cont << line
96
+ }
97
+ tf1,tf2='tmp1.txt','tmp2.txt'
98
+ File.open(tf1,'w'){|file| file.print cont}
99
+ system "hiki2latex #{pre_command} #{option} #{tf1} > #{tf2}"
100
+ lines = File.readlines(tf2)
101
+ system "rm #{tf1} #{tf2}"
102
+
103
+ cont = ""
104
+ lines.each{|line|
105
+ if m=line.match(/\\includegraphics\[width=6cm\]\{(.+)\}/)
106
+ p line="\\includegraphics\[width=6cm,bb=0 0 442 500\]\{#{m[1]}\}\n"
107
+ cont << line
108
+ else
109
+ cont << line
110
+ end
111
+ }
112
+ File.open($save_name,'w'){|file| file.print cont }
113
+ end
114
+
115
+ desc "increment fig NUBERS in FILE"
116
+ task :increment do
117
+ number=ARGV[1]
118
+ file = ARGV[2]
119
+ dir = ARGV[3] || nil
120
+ lines = File.readlines(file)
121
+ cont = ""
122
+ lines.each{|line|
123
+ if m=line.match(/\{\{attach_view\((\w+|_).(\d+).jpeg\)\}\}/)
124
+ new_num=sprintf("%03d",m[2].to_i+number.to_i)
125
+ line="\{\{attach_view\(#{m[1]}.#{new_num}.jpeg,#{dir}\)\}\}\n"
126
+ cont << line
127
+ else
128
+ cont << line
129
+ end
130
+ }
131
+ print cont
132
+ exit
133
+ end
134
+
135
+ desc "numbering figs from the NUBER in FILE"
136
+ task :number do
137
+ number=ARGV[1].to_i
138
+ file = ARGV[2]
139
+ dir = ARGV[3] || nil
140
+ lines = File.readlines(file)
141
+ cont = ""
142
+ lines.each{|line|
143
+ if m=line.match(/\{\{attach_view\((\w+|_).(\d+).jpeg,(\w+)\)\}\}/)
144
+ new_num=sprintf("%03d",number)
145
+ line="\{\{attach_view\(#{m[1]}.#{new_num}.jpeg,#{m[3]}\)\}\}\n"
146
+ cont << line
147
+ number += 1
148
+ else
149
+ cont << line
150
+ end
151
+ }
152
+ print cont
153
+ exit
154
+ end
155
+
156
+ desc "convert fig size SCALE TARGET_DIR"
157
+ task :convert do
158
+ scale = ARGV[1]
159
+ target_dir=ARGV[2]
160
+ Dir.entries(target_dir)[2..-1].each{|file|
161
+ p file
162
+ source = File.join(target_dir,file)
163
+ target = File.join('figs',file)
164
+ p command = "convert #{source} -resize #{scale}\% #{target}"
165
+ system command
166
+ }
167
+ exit
168
+ end
169
+
170
+ desc "normal sync hikis and figs to hiki directory"
171
+ task :sync => [:check_previous,:sync0]
172
+
173
+
174
+ desc "force_sync hikis and figs to hiki directory"
175
+ task :force_sync => [:sync0]
176
+
177
+ desc "sync0 hikis and figs to hiki directory"
178
+ task :sync0 do
179
+ entries=Dir.entries('.')
180
+ entries[2..-1].each{|source| #cp *.hiki
181
+ next unless source.include?('.hiki')
182
+ next if source.include?('.hikirc')
183
+ p base = source.split('.')[0]
184
+ name = (base==basename)? base : basename+'_'+base
185
+ p target = File.join(target_dir,'text',name)
186
+ FileUtils.cp(source,target,:verbose=>true)
187
+ }
188
+ p entries=Dir.entries('./figs') #cp files in figs
189
+ p target = File.join(target_dir,'cache','attach',basename)
190
+ FileUtils.mkdir(target,:verbose=>true) unless File.exists?(target)
191
+ entries[2..-1].each{|file|
192
+ p source = File.join('./figs',file)
193
+ FileUtils.cp(source,target,:verbose=>true)
194
+ }
195
+
196
+ File.open('./.hikirc','w'){|file|
197
+ status, stdout, stderr =systemu "hiki -l #{basename}*"
198
+ file.print(target_dir+"\n")
199
+ stdout.split("\n")[3..-1].each{|line|
200
+ file.print line+"\n"
201
+ }
202
+ }
203
+ exit
204
+ end
205
+
206
+ desc "For hiki Errno::ENOENT, Errno::EACCES"
207
+ task :chenv do
208
+ p user = ENV['USER']
209
+ system("sudo chmod -R a+w #{target_dir}")
210
+ # system("sudo chown -R #{user} #{target_dir}")
211
+ end
212
+
213
+ desc "self copy to hikiutils template directory"
214
+ task :self_copy do
215
+ p cp_files=[[File.join(Dir.pwd,'Rakefile'),'Rakefile_hiki_sync'],
216
+ [File.join(ENV['HOME'],'.my_help','hiki_help.yml'),'hiki_help.yml']]
217
+ cp_files.each{|files|
218
+ p source = files[0]
219
+ p target = File.join('/Users/bob/Github/hikiutils/lib/templates/',files[1])
220
+ FileUtils.cp(source,target,:verbose=>true)
221
+ }
222
+ end
223
+
224
+ desc "check previou and current sync"
225
+ task :check_previous do
226
+ current={}
227
+ print "current hiki dir\n"
228
+ status, stdout, stderr = systemu("hiki -l #{basename}*")
229
+ stdout.split("\n")[3..-1].each{|line|
230
+ p line
231
+ file= line.split(/\s+/)[-1]
232
+ current[file]=line
233
+ }
234
+ previous={}
235
+ print "previous sync\n"
236
+ File.readlines('.hikirc')[1..-1].each{|line|
237
+ p line.chomp
238
+ file= line.split(/\s+/)[-1]
239
+ previous[file]=line.chomp
240
+ }
241
+ changed = []
242
+ current.each_pair{|key,val|
243
+ if !previous.include?(key) or previous[key]!=val
244
+ changed << val+"\n"
245
+ end
246
+ }
247
+ if changed.size != 0
248
+ print("hiki dirで変更が発生しています.\n")
249
+ changed.each{|line| print line+"\n"}
250
+ exit
251
+ end
252
+ end
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*-
2
+ ---
3
+ :head:
4
+ - hikiutil関連のヘルプ
5
+ :initialize:
6
+ :opts:
7
+ :short: "-i"
8
+ :long: "--initialize"
9
+ :desc: hikiで卒論を書くときの初期化と掟
10
+ :title: hikiで卒論を書くときの初期化と掟
11
+ :cont:
12
+ - 開発メモ:figs,dataも作成
13
+ - 目的:西谷が後で迷わないように決まったファイル構造を堅持すべし
14
+ - 文書:hikiで書く.のちには,latexに変換するプログラムを提供します
15
+ - 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
16
+ - データ:dataディレクトリにまとめる.ファイル名をkeynoteの対応する図表中に記す
17
+ - hiki --initializeで初期ファイル(Rakefile, ./.hikirc, hiki_help.yml)がcopyされる
18
+ - hiki_help.ymlを適宜~/.my_helpにcopyしてhiki_helpとして利用,(my_help参照)
19
+ - Errno::EACCESやpermission errorがでたときはrake chenvを試してみる(報告して)
20
+ - rake syncによってhikiディレクトリーと同期が取られる
21
+ - hiki -u TARGETによってブラウザー表示される
22
+ - テキストの拡張子は'.hiki'
23
+ - hikiでのurlはテキスト前とディレクトリーから自動生成される
24
+ - 例えば,hiki2latex_saki/introduciton.hikiとするとhiki2latex_saki_introducitonと変換される
25
+ :error:
26
+ :opts:
27
+ :short: "-e"
28
+ :long: "--error"
29
+ :desc: error対応
30
+ :title: error対応
31
+ :cont:
32
+ - Permission denied - ./data/text/boundary_narita (Errno::EACCES)->テキストにhikiが書き込めない,chmod
33
+ a+w FILE
34
+ :figs:
35
+ :opts:
36
+ :short: "-f"
37
+ :long: "--figs"
38
+ :desc: 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
39
+ :title: 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
40
+ :cont:
41
+ - keynoteに書いたスライドはイメージに書き出して,rake convert 80 TARGET_DIRでfigsに変換
42
+ - rake syncでfigsにあるfilesはhiki/target_dirにcpされる
43
+ - 'convert #{source} -resize 20% #{target}によって,target=figs/TAERGET.pngに20%に縮小して保存される'
44
+ - convert -density 300 view.svg view.pngで300dpiで変換
45
+ - |
46
+ attach_anchorでは
47
+ '{{attach_anchor(test.png, hiki2latex_saki)}}'
48
+ と,directory指定しなければならない.
49
+ - keynoteであとで図を挿入して番号が変わった時の原稿の一括変換
50
+ - rake increment 2 boundary_bob.hiki boundary_bob > tmp.hiki
51
+ - rake convert 60 boundary_bob
52
+ - rake sync
53
+ - hiki -u boundary_bob_tmp
@@ -0,0 +1,173 @@
1
+ {{toc}}
2
+ !Title:touch typing習得環境shunkuntype
3
+ !author:西谷滋人
4
+ !date:\today
5
+ !【概要】
6
+ Touch typingはprogrammerに必須のスキルである.裏をかえせば,プログラミングが苦手な学生ほど,このスキルが身についていないことが多い.より気にすべきは,ペアプログラミングにおいて熟練者がついた場合,運指がおかしい初心者の手の動きを不快と感じること.あらゆる作業において型が崩れていると親方が叱咤するのに通じる.所作の基本は,成功体験の集大成なのだから.touch typingは正にプログラマの「箸の上げ下ろし」なんだな.
7
+
8
+ さらに,運指がスムーズになると単語の綴りを指が覚えるようになるが,これはもう少し先の話.
9
+
10
+ さて,Touch typingの習得には,ピアノやギターの運指練習とおなじで単純な繰り返しが必要である.したがって飽きやすい.どのようにこの「単純な繰り返し練習」を「おもしろくするか」の一つの提案として,習得管理ツールを開発する.キーは「データの公開」である.
11
+
12
+ !【序論】
13
+ !!touch typingのコツ
14
+ touch typingの習得においてはスピードよりも運指が重要である.すなわち,スピードはそれほど速くなくても,運指を常に意識しておなじ指でおなじキーを押す癖をつけることが,初心者には必要である.これが後々のスピードアップにつながるだけでなく,
15
+ * タイプの正確性
16
+ * 視点固定による,疲労度の抑制
17
+ につながる.
18
+
19
+ !! 非陳述記憶の性質
20
+ 長期記憶には大きく分けて陳述記憶(declarative memory)と非陳述記憶(non declarative memory) がある.タイピングは自転車の乗り方と同じ,非陳述記憶の中の手続き記憶に分類され,同じ経験を反復することで形成される.いちど形成されると自動的に機能し,長期間保たれるという特徴がある[1].したがって,タッチタイピングの習得には繰り返し練習が有効である.
21
+
22
+ !! 繰り返しの工夫,個人の資質から仲間力へ
23
+ しかし,繰り返し練習は単調であるためにどうしても継続が難しい.その単調さを克服するためには,個人の資質として,賢明な学習者やマインドセットなどが要望される.しかし,そこから鍛えていたのでは.相当な時間がかかってしまう.より即効性のある手法として,継続を促すために少数のグループによる「あおり」を助長する工夫を,開発したshunkuntypeでは,取り入れている.
24
+
25
+ !!e-Learningからactive learningへ
26
+ このような単純な知識の習得に対して,e-Learningがいくつも開発されている.ところが,単にe-Learningシステムをやらせるだけでは,学習が継続しないという結果がでている.そこで,e-Learningの個別進捗に管理者がコメントをつけることによって,学習を継続させる方策が練られている.しかし,これによってもあまりいい結果は出ない.
27
+
28
+ これに対して,今回構築するシステムでは,参加者どうしがお互いの学習履歴,成果を閲覧することを可能にしている.これによりお互いの刺激となるように工夫している.すなわち,管理者による監視ではなく,参加者による「あおり」を学習継続の動機にすることを意図している.
29
+
30
+ これがactive learningの基本となる.
31
+
32
+ !【方法:使用システムの概要】
33
+ shunkuntypeは拡張子によって振る舞いを制御している.
34
+ !!個別練習操作
35
+ ユーザがtouch typingの練習を行う環境を提供する.
36
+ <<<tcsh
37
+ bob% shunkuntype
38
+ Shunkuntype says 'Hello world'.
39
+ Usage: shunkuntype [options]
40
+ -v, --version show program Version.
41
+ -c, --check Check speed
42
+ -d, --drill [VAL] one minute Drill [VAL]
43
+ -h, --history view training History
44
+ -p, --plot Plot personal data
45
+ -s, --submit Submit data to dmz0
46
+ --review [TAG] Review training, TAGs=html or hike
47
+ >>>
48
+ 詳しい操作法,振る舞いの様子は [[ユーザーズマニュアル|Shunkuntype_manual]]にある.
49
+
50
+ !!あおり操作(--review)
51
+ あおりのために用意された環境が--reviewである.ユーザがsubmitしたデータを集めて,進捗状況の表,およびグラフを作成し,表示する.--reviewの引数としてhtmlあるいはhikiを指定し,'tmp.html’あるいは'tmp.hiki'を作成.
52
+ !!!reviewの出力例
53
+ 以下は,hikiでの出力tmp.hikiを貼り付けた状態.work.png,speed.pngが自動生成されるが,添付ファイルとしてuploadしておく必要がある.
54
+ *Shunkun typer 2016-01-28 08:45:24 +0900
55
+ || ||>speed[sec]||>training
56
+ ||||init||current||total time[min]||step
57
+ ||bob||37.68||40.39||57.00||45.00
58
+ ||donkey||92.40||39.30||153.00||14.00
59
+ ||fujimoto||90.63||39.81||118.00||22.00
60
+ ||iwasa||61.01||56.36||360.00||20.00
61
+ ||kiyohara||45.79||44.52||23.00|| 5.00
62
+ ||sakaki||32.83||32.72|| 8.00|| 7.00
63
+ ||sumita||127.51||48.94||152.00||15.00
64
+ ||tomoyafujioka||101.12||43.66||456.00||34.00
65
+ ||yoshiokatatsuro||79.59||52.36||526.00||24.00
66
+
67
+ ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
68
+ ||練習時間(work.png)||speed結果(speed.png)
69
+ グラフの詳しい解説は次節で行う.
70
+
71
+ !【結果:試行結果】
72
+ !!継続性
73
+ 図はそれぞれの被験者の練習の様子をグラフで示している.
74
+ !!!caption:練習時間の継続状況を示すグラフ.
75
+ {{attach_view(work.png)}}
76
+ *横軸に経過時間を日単位で,縦軸に練習時間を分単位でとっている.
77
+ *経過時間は現在を0点にして,左方向にマイナスでとっている
78
+ *それぞれの被験者の総練習量はそれぞれのグラフの最高位置で示される.
79
+ *被験者の立ち上がりがそれぞれ違うのは,実験に参加した時期が違うからである.
80
+ *16日経過時にもっとも進んでいるのは,fujiokaで,その次にdonkeyが続いている.
81
+ *それ以外の被験者の練習量は総じて低い.
82
+ 被験者の練習量の推移はそれぞれの被験者の取り組みに対する特徴を示している.すなわち
83
+ * 毎日5分程度を継続しておこなう
84
+ * 気がついたときにちょこちょこと継続する
85
+ * まとめてやるがあまり継続しない.
86
+ などである.
87
+
88
+ !!スピード改善
89
+ 図はそれぞれの被験者のタイプspeedの様子をグラフで示している.
90
+ !!!caption:タイプスピードの変化を示すグラフ.
91
+ {{attach_view(speed.png)}}
92
+ * 横軸のスケールは同じ.
93
+ * 縦軸には20wordsを打つのに要する時間がプロットされている.
94
+ * speedにはtrainingで記録されているデータから計算したデータも含まれている.
95
+ * 途中でspeedが300秒などまで極端に落ちた理由は,後述のハンカチ試験を導入したため.
96
+ * よりミクロに個人の成績を見れば,speedが徐々に上がっていることが読み取れる.
97
+ ** 例えば,fujiokaの-70-- -49days, sumitaの-63-- -21, iwasaの-35 -- -21
98
+
99
+ !!ハンカチテスト
100
+ 運指がうまくいっているかを自覚する方法としてハンカチテストが有効である.これは,手の甲の上にハンカチを置いて,手元のキーを見ずに打ち込んでいく方法である.これによって,
101
+ * キーを覚えているか
102
+ * ホームポジションへ帰っているか
103
+ * それぞれ決まった指でキーを押さえているか
104
+ のチェックができる.特に単なるspeed計測では50秒程度まで短縮している被験者も,ハンカチテストでは300秒もかかっている場合があった.
105
+
106
+ ただし,初心者はまったくkey配置を記憶できていないため,key配置表を用意しておく必要がある.これはそのようにspeedプログラムを改修した(2015/12/02).
107
+
108
+ !【考察:参加者の意識調査】
109
+ 参加者に対してグループヒアリングを行った[2].出てきた意見は次の通りである.
110
+ !!スキルの定着度合い
111
+ touch typingのスキルの定着について聞いたところ,
112
+ *ホームポジションに戻す癖がついた
113
+ *運指がバラバラであったのが,5本指で打つようになった.
114
+ *手元を見ていた
115
+ *普段の生活での打ち方が変わった
116
+ *画面と本を見るだけで打てるようになった
117
+ *パソコンでしゃべるときが速くなった
118
+ *フリップ入力よりは圧倒的に速い
119
+ **フリップの速さは予測が効いているのかも
120
+ *日本語は打てていたが,英語はダメだったのが改善した
121
+ * カッコとかの位置も覚えた
122
+ * 左手一本で全領域を打っていたのが全部の指で打てるようになった.
123
+ * 変な癖がなくなった.
124
+ !!「あおり」は効いたか?
125
+ speedの成績や練習時間を共有する「あおり」の効果について質問した.
126
+ * YはSに負けたくないのでがんばった.
127
+ * みんなのspeedをみて,いままで普通と思っていた入力速度に焦りが出た.自覚した.
128
+ * Dは練習をやり始めたらずっとやるので,F1もやらなと思った.
129
+ * 淡々としたんが好きで,おもしろい.レベル上げに通じる.
130
+ * 図で出るとちょっと意識する
131
+ * F2は煽る側で優越感を感じて...
132
+ !!習慣になったか?
133
+ 練習が習慣として定着したかと問うてみた.
134
+ * つかなんだ
135
+ * クリアしたら練習しない
136
+ * time計測の結果を見てあせった
137
+ * パソコン開いたらまずやるという習慣がついた
138
+ !!不足している機能
139
+ 不足している機能や,不満な点を指摘してもらった.
140
+ * ハンカチはよくない.余分な感覚があるから.
141
+ ** 黒塗りのキーボードカバーはいいかも
142
+ *speedに普通の単語をもっと増やす
143
+ ** 普通の単語はworkとかtableは変数によく使われるのでいいかも.
144
+ *日本語入力の練習もできるように.
145
+ ** 将来プログラマーになるとは限らないので,練習の動機があがる.
146
+ *speedの単語には,”[.{}()[]=_"なども入れるべき
147
+ *ノルマを課すようにしては.
148
+ ** 図に理想線とか,目標線とか,ガイドラインをいれては?
149
+ * speedをタイムアップ方式にしてもいいかも.1分試験
150
+ * レース完走方式にしてもいいかも.
151
+ * レベル上げ.装備をつけるなんかも...
152
+ !【結論】
153
+ * 時間はかかったが参加者全員が20 words/45secsをクリアした.
154
+ ** ただし,「クリアできなんだら卒研指導しない」というムチが働いた可能性は大きい.
155
+ * shunkuntypeはその後gemによるcommand line interfaceアプリケーションとして完成.
156
+ * web化が必要かもしれない.
157
+ その場合には,
158
+ * processingによるGUI
159
+ * 登録グループによる競争の実現
160
+ ** 内部の煽りだけでなく,仮想敵を作って「くまさんチーム対うさぎさんチーム」で練習をあおる.
161
+ * dbへのdata移行
162
+ ** sshより安全なデータ収集
163
+ ** 平文テキスト修正によるチートをなくす
164
+ などを考慮して,Railsを用いるのかsinatoraなどでベタで作るのかの検討が必要.
165
+
166
+ !【付録】
167
+ :A:[[マニュアル|Shunkuntype_manual]]
168
+ :B:[[gem化メモ|Shunkuntype_gemizing]]
169
+ :C:[[初期版のコード解説|TouchTyping_Coding]]
170
+
171
+ !【参考資料】
172
+ # 「陳述記憶・非陳述記憶」, 鈴木 麻希, 藤井 俊勝, 脳科学辞典,https://bsd.neuroinf.jp/wiki/陳述記憶・非陳述記憶 (2016/1/28アクセス).
173
+ # グループヒアリングメモ{{attach_anchor(Shunkuntype_GroupHearing_20160128.pdf)}}
@@ -0,0 +1,36 @@
1
+ !TouchTypingに関連するサイト
2
+ 2015年度にshunkuntypeというtouch type習得ソフトを開発.
3
+ !!!使用法
4
+ *[[マニュアル|Shunkuntype_manual]]
5
+ *[[TouchTypingのコツ|http://www.plato-web.com/software/km06/lesson.html]]
6
+ !!!学習者向け報告書
7
+ *[[レポート|Shunkuntype_report]]
8
+ *{{attach_anchor_string(shunkuntype報告書pdf版,shunkun_report.pdf)}}
9
+ *[[ReportWriting_EagleEyeCheck]]
10
+ !!!開発メモ
11
+ *[[gem化メモ|Shunkuntype_gemizing]]
12
+ *[[yard文書|http://nishitani0.kwansei.ac.jp/~bob/nishitani0/rdocs/shunkuntype/]]
13
+ *関連情報
14
+ **[[2015秋のコード解説|TouchTyping_Coding]]
15
+ **[[Shunkuntype_Coding_PlotData]]
16
+ **[[Shunkuntype_Coding_gnuplot]]
17
+ *開発_通信(2016-02-18 08:10:56 +0900 by Bob)
18
+ **sshでuser@host_uri設定をinitで
19
+ **hikiに自動的に煽り場をつくるplugin
20
+
21
+ !trainingの状況
22
+ !!2016s
23
+ !!Shunkun typer 2016-09-22 10:20:12 +0900
24
+ || ||>speed[sec]||>training
25
+ ||||init||current||total time[min]||step
26
+ ||bob||38.98||63.73|| 1.00|| 1.00
27
+ ||eri||59.43||92.51||51.00||38.00
28
+ ||koki||97.51||48.13|| 1.00|| 1.00
29
+ ||murakami||37.59||61.29|| 3.00|| 1.00
30
+ ||nari||77.68||60.69|| 6.00|| 8.00
31
+ ||nasubi||80.96||41.21|| 2.00|| 1.00
32
+ ||saki||134.56||47.12||72.00||24.00
33
+ ||yamane||85.66||37.64||97.00||25.00
34
+ ||yasuki||78.34||63.05||10.00|| 7.00
35
+
36
+ ||{{attach_view(work_2016s.png)}}||{{attach_view(speed_2016s.png)}}
data/speed.png CHANGED
Binary file
data/tmp.hiki CHANGED
@@ -10,3 +10,67 @@
10
10
  ||tsuji||49.52||111.03||10.00|| 2.00
11
11
 
12
12
  ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
13
+ !!Shunkun typer 2017-06-08 17:33:01 +0900
14
+ || ||>speed[sec]||>training
15
+ ||||init||current||total time[min]||step
16
+ ||||39.12||38.54|| 0.00|| 0.00
17
+ ||bob||39.75||34.17||18.00|| 1.00
18
+ ||eagle||69.64||51.65||53.00||15.00
19
+ ||naoki||103.29||103.29|| 1.00|| 1.00
20
+ ||oyagi||77.03||49.62|| 0.00|| 0.00
21
+ ||souki||39.12||34.13|| 1.00||47.00
22
+ ||tatsuya||54.35||41.52|| 4.00||47.00
23
+ ||tochigi||115.71||57.51||12.00|| 2.00
24
+ ||tomoko||95.58||71.76||191.00||19.00
25
+ ||tsuji||49.52||40.16||12.00||47.00
26
+ ||yuri|| 0.00|| 0.00|| 0.00|| 0.00
27
+
28
+ ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
29
+ !!Shunkun typer 2017-06-08 17:43:05 +0900
30
+ || ||>speed[sec]||>training
31
+ ||||init||current||total time[min]||step
32
+ ||||39.12||38.54|| 0.00|| 0.00
33
+ ||bob||39.75||34.17||18.00|| 1.00
34
+ ||eagle||69.64||51.65||53.00||15.00
35
+ ||naoki||103.29||103.29|| 1.00|| 1.00
36
+ ||oyagi||77.03||49.62|| 0.00|| 0.00
37
+ ||souki||39.12||34.13|| 1.00||47.00
38
+ ||tatsuya||54.35||41.52|| 4.00||47.00
39
+ ||tochigi||115.71||57.51||12.00|| 2.00
40
+ ||tomoko||95.58||71.76||191.00||19.00
41
+ ||tsuji||49.52||40.16||12.00||47.00
42
+ ||yuri|| 0.00|| 0.00|| 0.00|| 0.00
43
+
44
+ ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
45
+ !!Shunkun typer 2017-06-08 17:45:58 +0900
46
+ || ||>speed[sec]||>training
47
+ ||||init||current||total time[min]||step
48
+ ||||39.12||38.54|| 0.00|| 0.00
49
+ ||bob||39.75||34.17||18.00|| 1.00
50
+ ||eagle||69.64||51.65||53.00||15.00
51
+ ||naoki||103.29||103.29|| 1.00|| 1.00
52
+ ||oyagi||77.03||49.62|| 0.00|| 0.00
53
+ ||souki||39.12||34.13|| 1.00||47.00
54
+ ||tatsuya||54.35||41.52|| 4.00||47.00
55
+ ||tochigi||115.71||57.51||12.00|| 2.00
56
+ ||tomoko||95.58||71.76||191.00||19.00
57
+ ||tsuji||49.52||40.16||12.00||47.00
58
+ ||yuri|| 0.00|| 0.00|| 0.00|| 0.00
59
+
60
+ ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
61
+ !!Shunkun typer 2017-06-08 17:47:17 +0900
62
+ || ||>speed[sec]||>training
63
+ ||||init||current||total time[min]||step
64
+ ||||39.12||38.54|| 0.00|| 0.00
65
+ ||bob||39.75||34.17||18.00|| 1.00
66
+ ||eagle||69.64||51.65||53.00||15.00
67
+ ||naoki||103.29||103.29|| 1.00|| 1.00
68
+ ||oyagi||77.03||49.62|| 0.00|| 0.00
69
+ ||souki||39.12||34.13|| 1.00||47.00
70
+ ||tatsuya||54.35||41.52|| 4.00||47.00
71
+ ||tochigi||115.71||57.51||12.00|| 2.00
72
+ ||tomoko||95.58||71.76||191.00||19.00
73
+ ||tsuji||49.52||40.16||12.00||47.00
74
+ ||yuri|| 0.00|| 0.00|| 0.00|| 0.00
75
+
76
+ ||{{attach_view(work.png)}}||{{attach_view(speed.png)}}
data/tmp.html CHANGED
@@ -12,3 +12,75 @@
12
12
  <tr><th>tsuji</th><td>49.52</td><td>111.03</td><td>10.00</td><td> 2.00</td></tr>
13
13
  </table>
14
14
  <p><img src="./work.png" /></p><p><img src="./speed.png" /></p></html>
15
+ <html>
16
+ <table border="1">
17
+ <caption>Shunkun typer<caption>
18
+ <tr><th></th><th colspan=2>speed[sec]</th><th colspan=2>training</th></tr>
19
+ <tr><th></th><th>init</th><th>current</th><th>total time[min]</th><th>step</th></tr>
20
+ <tr><th></th><td>39.12</td><td>38.54</td><td> 0.00</td><td> 0.00</td></tr>
21
+ <tr><th>bob</th><td>39.75</td><td>34.17</td><td>18.00</td><td> 1.00</td></tr>
22
+ <tr><th>eagle</th><td>69.64</td><td>51.65</td><td>53.00</td><td>15.00</td></tr>
23
+ <tr><th>naoki</th><td>103.29</td><td>103.29</td><td> 1.00</td><td> 1.00</td></tr>
24
+ <tr><th>oyagi</th><td>77.03</td><td>49.62</td><td> 0.00</td><td> 0.00</td></tr>
25
+ <tr><th>souki</th><td>39.12</td><td>34.13</td><td> 1.00</td><td>47.00</td></tr>
26
+ <tr><th>tatsuya</th><td>54.35</td><td>41.52</td><td> 4.00</td><td>47.00</td></tr>
27
+ <tr><th>tochigi</th><td>115.71</td><td>57.51</td><td>12.00</td><td> 2.00</td></tr>
28
+ <tr><th>tomoko</th><td>95.58</td><td>71.76</td><td>191.00</td><td>19.00</td></tr>
29
+ <tr><th>tsuji</th><td>49.52</td><td>40.16</td><td>12.00</td><td>47.00</td></tr>
30
+ <tr><th>yuri</th><td> 0.00</td><td> 0.00</td><td> 0.00</td><td> 0.00</td></tr>
31
+ </table>
32
+ <p><img src="./work.png" /></p><p><img src="./speed.png" /></p></html>
33
+ <html>
34
+ <table border="1">
35
+ <caption>Shunkun typer<caption>
36
+ <tr><th></th><th colspan=2>speed[sec]</th><th colspan=2>training</th></tr>
37
+ <tr><th></th><th>init</th><th>current</th><th>total time[min]</th><th>step</th></tr>
38
+ <tr><th></th><td>39.12</td><td>38.54</td><td> 0.00</td><td> 0.00</td></tr>
39
+ <tr><th>bob</th><td>39.75</td><td>34.17</td><td>18.00</td><td> 1.00</td></tr>
40
+ <tr><th>eagle</th><td>69.64</td><td>51.65</td><td>53.00</td><td>15.00</td></tr>
41
+ <tr><th>naoki</th><td>103.29</td><td>103.29</td><td> 1.00</td><td> 1.00</td></tr>
42
+ <tr><th>oyagi</th><td>77.03</td><td>49.62</td><td> 0.00</td><td> 0.00</td></tr>
43
+ <tr><th>souki</th><td>39.12</td><td>34.13</td><td> 1.00</td><td>47.00</td></tr>
44
+ <tr><th>tatsuya</th><td>54.35</td><td>41.52</td><td> 4.00</td><td>47.00</td></tr>
45
+ <tr><th>tochigi</th><td>115.71</td><td>57.51</td><td>12.00</td><td> 2.00</td></tr>
46
+ <tr><th>tomoko</th><td>95.58</td><td>71.76</td><td>191.00</td><td>19.00</td></tr>
47
+ <tr><th>tsuji</th><td>49.52</td><td>40.16</td><td>12.00</td><td>47.00</td></tr>
48
+ <tr><th>yuri</th><td> 0.00</td><td> 0.00</td><td> 0.00</td><td> 0.00</td></tr>
49
+ </table>
50
+ <p><img src="./work.png" /></p><p><img src="./speed.png" /></p></html>
51
+ <html>
52
+ <table border="1">
53
+ <caption>Shunkun typer<caption>
54
+ <tr><th></th><th colspan=2>speed[sec]</th><th colspan=2>training</th></tr>
55
+ <tr><th></th><th>init</th><th>current</th><th>total time[min]</th><th>step</th></tr>
56
+ <tr><th></th><td>39.12</td><td>38.54</td><td> 0.00</td><td> 0.00</td></tr>
57
+ <tr><th>bob</th><td>39.75</td><td>34.17</td><td>18.00</td><td> 1.00</td></tr>
58
+ <tr><th>eagle</th><td>69.64</td><td>51.65</td><td>53.00</td><td>15.00</td></tr>
59
+ <tr><th>naoki</th><td>103.29</td><td>103.29</td><td> 1.00</td><td> 1.00</td></tr>
60
+ <tr><th>oyagi</th><td>77.03</td><td>49.62</td><td> 0.00</td><td> 0.00</td></tr>
61
+ <tr><th>souki</th><td>39.12</td><td>34.13</td><td> 1.00</td><td>47.00</td></tr>
62
+ <tr><th>tatsuya</th><td>54.35</td><td>41.52</td><td> 4.00</td><td>47.00</td></tr>
63
+ <tr><th>tochigi</th><td>115.71</td><td>57.51</td><td>12.00</td><td> 2.00</td></tr>
64
+ <tr><th>tomoko</th><td>95.58</td><td>71.76</td><td>191.00</td><td>19.00</td></tr>
65
+ <tr><th>tsuji</th><td>49.52</td><td>40.16</td><td>12.00</td><td>47.00</td></tr>
66
+ <tr><th>yuri</th><td> 0.00</td><td> 0.00</td><td> 0.00</td><td> 0.00</td></tr>
67
+ </table>
68
+ <p><img src="./work.png" /></p><p><img src="./speed.png" /></p></html>
69
+ <html>
70
+ <table border="1">
71
+ <caption>Shunkun typer<caption>
72
+ <tr><th></th><th colspan=2>speed[sec]</th><th colspan=2>training</th></tr>
73
+ <tr><th></th><th>init</th><th>current</th><th>total time[min]</th><th>step</th></tr>
74
+ <tr><th></th><td>39.12</td><td>38.54</td><td> 0.00</td><td> 0.00</td></tr>
75
+ <tr><th>bob</th><td>39.75</td><td>34.17</td><td>18.00</td><td> 1.00</td></tr>
76
+ <tr><th>eagle</th><td>69.64</td><td>51.65</td><td>53.00</td><td>15.00</td></tr>
77
+ <tr><th>naoki</th><td>103.29</td><td>103.29</td><td> 1.00</td><td> 1.00</td></tr>
78
+ <tr><th>oyagi</th><td>77.03</td><td>49.62</td><td> 0.00</td><td> 0.00</td></tr>
79
+ <tr><th>souki</th><td>39.12</td><td>34.13</td><td> 1.00</td><td>47.00</td></tr>
80
+ <tr><th>tatsuya</th><td>54.35</td><td>41.52</td><td> 4.00</td><td>47.00</td></tr>
81
+ <tr><th>tochigi</th><td>115.71</td><td>57.51</td><td>12.00</td><td> 2.00</td></tr>
82
+ <tr><th>tomoko</th><td>95.58</td><td>71.76</td><td>191.00</td><td>19.00</td></tr>
83
+ <tr><th>tsuji</th><td>49.52</td><td>40.16</td><td>12.00</td><td>47.00</td></tr>
84
+ <tr><th>yuri</th><td> 0.00</td><td> 0.00</td><td> 0.00</td><td> 0.00</td></tr>
85
+ </table>
86
+ <p><img src="./work.png" /></p><p><img src="./speed.png" /></p></html>
data/work.png CHANGED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shunkuntype
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeto R. Nishitani
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-15 00:00:00.000000000 Z
11
+ date: 2017-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu
@@ -201,6 +201,11 @@ files:
201
201
  - lib/shunkuntype/training.rb
202
202
  - lib/shunkuntype/version.rb
203
203
  - shunkuntype.gemspec
204
+ - shunkuntype_bob/.gitignore
205
+ - shunkuntype_bob/Rakefile
206
+ - shunkuntype_bob/hiki_help.yml
207
+ - shunkuntype_bob/report.hiki
208
+ - shunkuntype_bob/shunkuntype_bob.hiki
204
209
  - speed.png
205
210
  - tmp.hiki
206
211
  - tmp.html