สร้างตัวอักษรแบบสุ่มสำหรับฝึกพิมพ์ดีด

ช่วงนี้กำลังฝึก keyboard layout ใหม่ชื่อ programmer Dvorak (มีให้เลือกทันทีใน Ubuntu 12.04) เนื่องจากหาที่ฝึกพิมพ์ไม่ได้เลย คงเป็นเพราะคนไม่รู้จักเลยไม่มีใครทำไว้ เลยใช้ klavaro แล้วเลือก Dvorak แบบธรรมดาไปก่อน ก็จะมีให้ฝึกพิมพ์เป็นบทเรียนๆไป บทหนึ่งจะมีตัวอักษรในแถวเดียวกัน (บนแป้นพิมพ์) ออกมาแบบสุ่มๆให้ฝึกพิมพ์ ปัญหาเกิดตอนหลังๆตอนฝึกถึงจุดที่ต่างจาก Dvorak เพราะตัวอักษรที่สุ่มออกมามันไม่อยู่แถวเดียวกันเนื่องจากคนละ layout เลยเขียนโปรแกรมด้วย Python แบบง่ายๆเพื่อสุ่มตัวอักษรเอามาหัดพิมพ์ ต่อไปนี้เป็น code

# Permute a list of characters to generate 
# a practice lesson in the format of klavaro.

import sys
import random

def permChars(chars):
	I = range(len(chars))
	random.shuffle(I)
	chars = ''.join([chars[i] for i in I])
	return chars

def randChars(chars, select):
	s = ''.join([permChars(chars) for i in range(select)])
	return permChars(s[:select])

def main():
	if len(sys.argv) != 2:
		print "USAGE: %s char_set" % sys.argv[0]
		sys.exit(1)

	charset = sys.argv[1]
	select = 5
	wrap = 9
	lines = 10
	nset = wrap*lines

	# permute
	for i in xrange(nset):
		subchars = randChars(charset, select)
		sys.stdout.write(''.join(subchars))

		if (i+1)%wrap==0:
			print ''
		else:
			sys.stdout.write(' ')

if __name__ == '__main__':
	main()

วิธีใช้ก็ตัวอย่างเช่น อยากหัดพิมพ์ 4 ตัวอักษรนี้ ;,.p ซึ่งใช้มือซ้ายอยู่แถวที่ 2 จากบน ก็ใช้แบบนี้

python gensequence.py  \;,.p

แล้วจะได้ประมาณนี้

;;.p, ..,;p ,;.p. .;,pp ;.;p, ;,,p. ;;p,. p.,p; ,;.p;
,.p;p p;.p, .p,;p ;,.p, ;.,p. p;,.p .;p,; ,pp.; ,.;p;
;.,p, p,;.; ,;.p, p;.,; ,,.;p ;p,., p.p;, .,p,; ;..p,
,;pp. ,,;p. .p;,; ,.p,; p.p,; ;;.p, ;,,p. ;,p,. .,;p.
.;p,. ;,.p. p,.;p ;,.,p .,;.p ;.p,, .,,p; .p;,p p,.;;
p,p;. ,.;;p p;.,, ;,.p. ;p.,, ;,p,. ,.p;, .;p,; p.;,,
,;,.p ,.;p, ;.,,p pp,.; .p;,, ,;,.p ;p,.. p,;,. p.;,.
p;.,. ,.;p. ,;p.; p,;,. ;.,.p .pp,; .;,p, .p.,; pp;,.
.,p;p .;,,p pp,.; .,.p; .pp,; .,;p, p;.., p;.,. .,pp;
;,.;p ;p.,p .,;.p p,;;. ;;,p. pp,.; p.;,. ;p,.. .,;,p

ก็ให้ copy ไปใส่ใน klavaro โดยเลือกโหมด Fluidity ตอนเริ่มโปรแกรม แล้วก็พิมพ์ไป