From .csv file generate roll sheet and seat chart with Guile Scheme

Learning Guile Scheme is helping me to implement D.R.Y. for teachers. The script below opens .csv files (encoded in the troublesome SJIS or cp932 Japanese character set). For each .csv file the script saves three files: two html files and a scheme file. Printing the html files provides a seating chart to start the semester, and a roll sheet for use throughout the semester. The scheme file is provides a way to end the semester by printing a simple html page to show class dates and attendance. That second script still needs to be made presentable. But the starting script may be useful.

Developing the script let me discover compact expressions to open and write files. Longer expressions derived from Kent Dybvig's /The Scheme Programming Language: Fourth Edition/ worked. Shorter expressions from the Guile Manual helped. There must be a simpler way to print scheme definitions to a file but now I use and output string and juggle symbols and strings. It's awkward, but it works for now.

With simple html (generated by sxml->xml) and .css (view2.css file) the pages have a good “ink to data” ratio. I think the style is consistent with that found in Koreo Kinoshita's (木下是雄) books: “Writing Techniques for Science Majors” 理科系の作文技術 and “Putting Together Reports” レポートの組み立て方 .

Here is a collage of samples from the script's generated pages, and Kinoshita's book on reports.

Parts of the scripts are still awkward, but other parts gave me the “overwhelming sense of correctness that awaits the writer of Scheme procedures” as Daniel P. Friedman wrote in the introduction to The Schemer's Guide . It would be great if Free Software in general and Scheme in particular could remove “the drudgery and the blind rule-following” for school work. For teachers also, as for beginning computer science students, we should avoid “mindlessly solving lots of not-very-different, small, and uninteresting problems...”. We should avoid “being trained to be non-thinkers.”(Daniel P. Friedman in The Schemer's Guide.

With a few more hours devoted to this task, another script will be ready to take lists of dates, cls-dts and attendance numbers to output another minimalist page for bureaucracy. Maybe a page with a high ink-to-data ratio can be a refreshing influence...

Script

csv-files-to-scm-lists-and-rll-sheets.scm

#!/usr/local/bin/guile -s
!#

;; $ ./csv-files-to-scm-lists-and-rll-sheets.scm sjis-csv-dir/

(use-modules (ice-9 ftw)     ;; scandir
	     (srfi srfi-26)  ;; cut
	     (rnrs io ports) ;; open-file-input-port
             (ice-9 regex) ;; regex-subsitute/global
	     (sxml simple)  ;; sxml->xml
	     (srfi srfi-26) ;; cut
	     (srfi srfi-1) ;; iota with more than one argument
	     (ice-9 pretty-print))  ;; for saving definitions to file

(define cwd (getcwd)) ;; (define dir "./") works for gnu/Linux
(define ext ".csv")
;; for testing in Guile REPL comment out next line
;;  that use command-line and uncomment sjis-csv dir
;;  where test csv files are
(define dir (string-append cwd "/" (cadr (command-line))))
;; Testing with
;; (define dir (string-append cwd "/" "sjis-csv/"))
;; get files, avoiding special files that end like .csv~ 
;;  with regexp end-of-string/line notation "$"
(define files-csv (map (lambda (csvfile) (string-append dir csvfile))
			(scandir dir
			   (cut string-match
			     (string-append ext "$") <>))))

;; when batch processing .csv files default to 6 columns
(define seating-columns "6")
;; redefined below in let* clause of
;;  ;; csv-dta->scm-lst-and-rll-sht-and-seat-chrt
;; use a string in preparation for command-line argumnets
;;  in other scripts

;; add problem characters to this a-list with
;;  cln-csv-str and str-lsts below
;;    to fix SJIS csv strings
(define chr-rep-lst '(("\r" "") ;; line ending from \r\n to \n
		      ("\"" "")  ;; escape character problems
		      ("\u3000" " ") ;; Japanese big space
		      ("�K" "II") ;; SJIS CP932 problem in class name
		      ))  

(define get-csv-str
  (lambda (fname)
    (string-trim-both
     (get-string-all
      (open-input-file fname #:encoding "SJIS")))))

(define strin-chara-repla ;; character replace
  (lambda (strin chara repla)
    "Replace the first argument's character(string or regular expression) with the second's. Intended to help clean up strings gleaned from SJIS encoded csv data files."
    (regexp-substitute/global #f chara strin 'pre repla 'post)))

;; chr-rep-lst Characters to Replace List to clean the csv strings
(define cln-csv-str
  (lambda (cs-str chr-lst)
    (let ((n-s cs-str))
    (for-each (lambda (pair)
		(set! n-s (regexp-substitute/global #f (car pair) n-s 'pre (cadr pair) 'post)))
	      chr-lst)
    n-s)))

;; transpose lists 
(define (rows-to-cols lols) ;; list of lists
  (define (rows-to-cols-aux lols keep)
    (cond ((null? (car lols)) (reverse keep))
	   (#t (rows-to-cols-aux
		(map cdr lols) (cons (map car lols) keep)))))
  (rows-to-cols-aux lols '()))

;; use csv data to create a-list and name generated files
(define mke-fle-nme
  (lambda (als end)
    (let ((cwd (getcwd)) ;; repetition of (getcwd) ok?
	  (year (car (assoc-ref als "年度")))
	  (seme (car (assoc-ref als "学期")))
	  (time (car (assoc-ref als "開講曜日")))
	  (clss (car (assoc-ref als "科目名"))))
      (string-append cwd "/" year seme time clss end))))

;; used to get csv derived data into scheme files
(define defn-smbl-to-strg
  (lambda (defn-smbl obj)
    (let ((prpr ""))
      (define-values (os gs)(open-string-output-port))
      ;; get into output string, os,
      ;;  the definition name, defn-name and its list
      (pretty-print (append
		     (cons 'define (list defn-smbl))
		     (list obj)) os)
    ;; from os, get string, (gs) into prty-prnt
      (set! prpr (gs))
      ;; quote the list for definition name
      (set! prpr (regexp-substitute/global #f "  \\(\\(\"" prpr 'pre "  '((\"" 'post))
      prpr)))

;; get scheme file started, with a new file or
;; by overwriting an existing file with template info,
;; the keys, headers, and examples in roll-data-template.scm
(define start-scheme-data-file
  (lambda (class-alist fname)
    "Insert starting template for roll data entry in a file named from class a-list data and the argument `end', such as `-rll-dta.scm'"
    (let ((ofp (open-file fname "w" #:encoding "UTF8"))
	  ;; open file to take template and then class and student data
	  (tplt-file "roll-data-template.scm")) ;; headers, keys, and notes
      (let ((tplt-port (open-file tplt-file "r" #:encoding "UTF8")))
	;; read in template to get roll data entry file started
	(display (get-string-all tplt-port) ofp)
	(close-port tplt-port))
      (close-port ofp))))

;; after preparing the rll-dta file get ready
;;  to print scheme definitions 
(define add-to-scheme-data-file
  (lambda (smbl obje fname) ;; 'cls-als 'rll-dta symbols
    (let ((afp (open-file fname "a" #:encoding "UTF8")))
      (display (defn-smbl-to-strg smbl obje)
	       afp)
      (close-port afp))))

;; get ready to write html page for roll sheet
;;  html header part
(define sxml-header
  (lambda (title)
    `(head (title ,title)
	   (meta (@ (http-equiv "Content-Type")
		    (content "text/html;charset=utf-8")))
	   (link (@ (rel "stylesheet")
		    (type "text/css")
		    (href "view2.css"))))))

;; html class info table part
(define cls-als-to-sxm-tbl
  (lambda (als kys)
    `(table (@ (class "classinfo"))
      (tr
       ,@(map (lambda (ky)
		`(th ,(car (assoc ky als))))
	      kys))
      (tr
       ,@(map (lambda (ky)
		`(td ,(cadr (assoc ky als))))
		kys)))))

;; roll table part, fillers for table cells to write in attendance
(define ulns '("_"  "_"  "_" "_" "_" "_" "_" "_" "_" "_" "_" "_" "_" "_" "_" "___" "___"))
;; (map (lambda (n) "_") (iota 15 1)) ;; 15 classes

;; (define stu-kys '("学籍番号" "学生氏名"))
;;  ;; moved into roll-data-template, derived from rll-hdrs
(define rll-to-sxm-tbl-with-uln-blnks
  (lambda (rll kys blnks)
    `(table (@ (class "roll"))
      (tr
       ,@(map (lambda (ky)
		`(th (@ (class "key")) ,ky))
	      kys)
       ,@(map (lambda (n)
		`(th (@ (class "hdr")) ,n))
	      (append (iota 15 1) (list "tst" "grd"))))
       ,@(map (lambda (ls)
		`(tr
		  (td (@ (class "num")) ,(car ls))
		  (td (@ (class "stu")) ,(cadr ls))
		  ,@(map (lambda (s) `(td (@ (class "blank")) ,s)) blnks)))
		rll))))

(define write-sxml->html
  (lambda (fname sxml)
    (let ((op (open-file fname "w" #:encoding "UTF8")))
      (sxml->xml
       `(html
	 ,(sxml-header fname)
	 (body
	  ,sxml))
       op)
      (close-port op))))

;; end   of roll sheet html page generation
;; start of seating chart html page generation
;; defaults to 6 for batch processing
;;  another script will vary the number of seating-columns
	
(define fll-rll-num-nam-row
  (lambda (lst num)
    (cond
     ((= 0 num) (reverse lst))
     (#t (fll-rll-num-nam-row (cons '("_" "_") lst) (1- num))))))

(define list-splt
  (lambda (list limit)
    (let ((lim (string->number limit)))
      (define helper
	(lambda (lst now prt prts)
	  (cond
	   ((null? lst) (reverse (cons (fll-rll-num-nam-row prt (- lim now))
				       prts)))
	   ((= lim now) (helper lst  0 '() (cons (reverse prt) prts)))
	   (#t (helper (cdr lst) (1+ now) (cons (car lst) prt) prts)))))
      (helper list 0 '() '()))))

(define lng-nme->lst-nme
  (lambda (name)
    (if (> 10 (string-length name))
	   name
	   (last (string-split name #\space)))))

(define stud-cell
  (lambda (pair)
    `(td ,(lng-nme->lst-nme (cadr pair)) (br) ,(car pair))))

(define make-seat-table-sxml
  (lambda (roll-data limit) ;; rll-dta from .scm data file
    `(table (@ (class "seating chart"))
      ,(map (lambda (splt-row)
	      `(tr
		,(map (lambda (pair) (stud-cell pair))
		      splt-row)))
	    (list-splt roll-data limit)))))


;; (fbase (mke-fle-nme cls-als ""))
;; data-fname :: for use with html page maker
;; write out scheme definitions
        
(define csv-dta->scm-lst-and-rll-sht-and-seat-chrt
  (lambda (fname)
    ;; get csv data into associative lists
    (let* ((csv-str (get-csv-str fname))
	   (str-lsts (string-split
		  (cln-csv-str csv-str chr-rep-lst)
		  #\newline )) ;; lines to lists
	   (lsts (map (lambda (s) (string-split s #\,))
		      str-lsts)) ;; comma separated values into lists
	   (cls-lsts (list (car lsts) ;; class data lists
			   (cadr lsts)))
	   (cls-als (rows-to-cols cls-lsts)) ;; class a-list
	   (stu-lsts (cdddr lsts)) ;; student data lists
	   (rll-dta (map (lambda (pair)
			     (list (car pair) (cadr pair)))
			   stu-lsts))
	   (data-scm-fname (mke-fle-nme cls-als "-rll-dta.scm"))
	   (roll-sht-fname (mke-fle-nme cls-als "-rll-sht.html"))
	   (seating-columns "6")
	   (seat-chrt-fname
	    (mke-fle-nme cls-als ;; add seat table dimensions to fname
			 (string-append "-seat-chrt" "-"
					seating-columns "x"
					(number->string (ceiling
							 (/
							  (length rll-dta)
							  (string->number
							   seating-columns))))
					".html"))))
      ;; rll-hdr, stu-kys, and cls-kys definition
      (load "roll-data-template.scm")
      ;; the template is the same file used by start-scheme-data-file
      (start-scheme-data-file cls-als data-scm-fname)
      (add-to-scheme-data-file 'cls-als cls-als data-scm-fname)
      (add-to-scheme-data-file 'rll-dta rll-dta data-scm-fname)
      
      (write-sxml->html roll-sht-fname
			(list
			 (cls-als-to-sxm-tbl cls-als cls-kys)
			 (rll-to-sxm-tbl-with-uln-blnks rll-dta stu-kys ulns)))

      (write-sxml->html seat-chrt-fname
			(list
			 (cls-als-to-sxm-tbl cls-als cls-kys)
			 (make-seat-table-sxml rll-dta seating-columns)))
      )))

(for-each csv-dta->scm-lst-and-rll-sht-and-seat-chrt files-csv)

;; split up sample data files for sharing on WriteFreely
;; load  -rll-dta.csm




Scheme Class Data Template

roll-data-template.scm

;; data for use with scm-rll-dta-to-bry-pge.scm
;; Scheme roll data to bureaucracy page
;;  get cls-als: class associative list from orginal .csv data
;;  Enter data below in list:: cls-dts: class dates;
;; ;; and associative list:: rll-dta: roll data;
(define rll-hdr
  '("学籍番号" "学生氏名"   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 tst grd))
(define stu-kys (list (car rll-hdr)(cadr rll-hdr)))
;; (cons "学籍番号" (cons "学生氏名" (iota 15 1))) 
(define cls-kys '("年度" "学期" "科目名" "開講曜日" "開講教室" "教員氏名"))
;; later use only necessary als dta below from kys above
;; cls-als: associative list data; cls-kys: class keys

;; cls-als comes from school .csv file
;; rll-dta numbers and names also from .csv file
;; ;; (define rll-dta
;; ;;   '(("1531116007" "石牟礼 道子"     1 0 1 1 1 0 1 1 0 1 1 0 1 1 1)
;; cls-dts need to be entered during/after the semester
;; (define cls-dts
;;  '((10 01)(10 15)(10 22)(10 29)(11 5)(11 12)(11 19)(11 26)(12 3)(12 10)(12 17)(1 7)(1 21)(1 28)(2 4)))

View2 css

view2.css

table.classinfo { margin: 2em 0 3em 0; } 
table.classinfo td, th { padding-right: 1em; text-align: left; }

table.roll th { font-weight: 50; font-size: 9pt; }
table.roll td {padding-right: .5em; text-align: left; }

table.rollsymbols td.date {font-size: 9pt; text-align: right; }
td.num { font-size: 8pt; }
td.stu { font-size: 10pt; width: 6em; }
td.blank { padding: 10px 0px 2px 0px;  text-align: center; }

table.seating td {padding: 4px 6px 6px 6px;
		  font-size: 11pt; }

Sample Data

Sample.csv It is a pain to work with SJIS (CP932) encoding. If I can learn to work with git it will be easier to share the conditions under which the scripts have been grown to work.

"年度","学期","授業コード","科目コード","科目名","科目名_英語","教員氏名","教員氏名_カナ","教員氏名_英語","開講区分","開講曜日","開講教室"
"2018","前期","31242","142000","英会話","English Conversation","ブライアン・スモール","ブライアン・スモール","Small Brian","週間授業","火4","1409(小講義)"
"学籍番号","学生氏名"
"151116070","相沢 佳子","アイザワ ヨシコ","AIZAWA YOSHIKO","4","南九大 環境園芸学部 環境園芸学科 園芸学分野","南九大 環境園芸学部 環境園芸学科 園芸学分野"
"151117035","青木 幸雄","アオキ ユキオ","AOKI YUKIO","3","南九大 環境園芸学部 環境園芸学科 造園学分野","南九大 環境園芸学部 環境園芸学科 造園学分野"
"151118001","芥川 仁","アクタガワ ジン","AKUTAGAWA JIN","2","南九大 環境園芸学部 環境園芸学科 園芸学分野","南九大 環境園芸学部 環境園芸学科 園芸学分野"
"151118002","雨宮 処凛","アマミヤ カリン","AMAMIYA KARIN","2","南九大 環境園芸学部 環境園芸学科 造園学分野","南九大 環境園芸学部 環境園芸学科 造園学分野"
"151118003","新井 貴之","アライ タカユキ","ARAI TAKAYUKI","2","南九大 環境園芸学部 環境園芸学科 造園学分野","南九大 環境園芸学部 環境園芸学科 造園学分野"
"151118004","荒畑 寒村","アラハタ サンソン","ARAHATA SANSON","2","南九大 環境園芸学部 環境園芸学科 園芸学分野","南九大 環境園芸学部 環境園芸学科 園芸学分野"
"151118005","粟飯原 文子","アリハラシ フミコ","ARIHARASHI FUMIKO","2","南九大 環境園芸学部 環境園芸学科 園芸学分野","南九大 環境園芸学部 環境園芸学科 園芸学分野"
"151118006","安藤 昌益","アンドウ ショウエキ","ANDOU SHOUEKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118007","石牟礼 道子","イシムレ ミチコ","ISHIMURE MICHIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118008","井上 ひさし","イノウエ ヒサシ","INOUE HISASHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118009","宇井 純","ウイ ジュン","UI JUN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118010","上野 登","ウエノ ノボル","UENO NOBORU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118011","上野 英信","ウエノ ヒデノブ","UENO HIDENOBU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118012","宇都宮 健児","ウトミヤ ケンジ","UTOMIYA KENJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118013","江口 幹","エグチ カン","EGUCHI KAN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118014","枝廣 淳子","エダヒロ ジュンコ","EDAHIRO JUNKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118015","大江 健三郎","オオエ ケンザブロウ"," OOE KENZABURO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118016","大木 敦雄","オオキ アツオ","OOKI ATSUO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118018","大杉 栄","オオスギ サカエ","OOSUGI SAKAE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118019","大竹 智也","オオタケ テツヤ","OOTAKE TETSUYA","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118020","大橋 真也","オオハシ シンヤ","OOHASHI SHINYA","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118021","緒方 正人","オガタ マサト","OGATA MASATO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118022","落合 恵子","オチアイ ケイコ","OCHIAI KEIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118023","片桐 ユズル","カタギリ ユズル","KATAGIRI YUZURU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118024","金子 みすず","カネコ ミスズ","KANEKO MISUZU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118025","金子 祐介","カネコ ユウスケ","KANEKO YUUSUKE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118026","川合 史朗","カワアイ シロウ","KAWAAI SHIROU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118027","川原 一之","カワハラ カズユキ","KAWAHARA KAZUYUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118028","川本 輝夫","カワモト テルオ","KAWAMOTO TERUO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118029","管 謨業","カン ボウギョウ","KANN BOUGYOU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118030","李 京海","キキョカイ","KI KYOKAI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118031","北沢 洋子","キタザワ ヨウコ","KITAZAWA YOUKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118032","木下 是雄","キノシタ テルオ","KINOSHITA TERUO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118033","霧野 クミ","キリノ クミ","KIRINO KUMI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118034","金 明哲","キン ミョンチョル","KIN MYONCHORU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118035","工藤 惺文","クドウ セイフミ","KUDOU SEIFUMI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118036","園城 雅之","クニナり マサユキ","KUNINARI MASAYUKI	","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118037","久野 収","クノ オサム","KUNO OSAMU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118038","黒川 利明","クロカワ トシアキ","KUROKAWA TOSHIAKI	","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118039","桑原 史成","クワバラ シセイ","KAWAHARA SHISEI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118040","幸徳 秋水","コウトクシュッスイ","KOUTOKU SHUSSUI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118041","齋藤 正健","サイトウ マサタケ","SAITOU MASATAKE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118042","斎藤 美奈子","サイトウ ミナコ","SAITOU MINAKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118043","酒井 皇治","サカイ コウジ","SAKAI YUUJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118044","佐久間 智子","サクマトモコ","SAKUMA TOMOKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118045","佐高 信","サダカ マコト","SADAKA MAKOTO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118046","佐藤 鶴江","サトウ ツルエ","SATOU TSURUE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118047","佐野 匡俊","サノマサトシ","SANO MASATOSHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118048","椎名 誠","シイナマコト","SHIINA MAKOTO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118049","白石 嘉治","シライシ ヨシハル","SHIRAISHI YOSHIHARU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118050","辛 淑玉","シン スゴ","SHIN SUGO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118051","杉本 栄子","スギモト エイコ","SUGIMOTO EIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118052","鈴木 和也","スズキ カズヤ","SUZUKI KAZUYA","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118053","鈴木 裕子","スズキ ユウコ","SUZUKI YUUKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"151118054","DUONG DINH KHUE","ズオン ジン クエ" ,"DUONG DINH KHUE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117001","清 少納言","セイ ショウナゴン","SEI SHOUNAGON","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117002","高橋 康介","タカハシ コウスケ","TAKAHASHI KOUSUKE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117012","竹内 郁雄","タケウチ イクオ","TAKEUCHI IKUKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117014","田中 正造","タナカ ショウゾウ","TANAKA SHOUZOU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117005","田中 優","タナカ ユウ","TANAKA YUU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117006","田中 優子","タナカ ユウコ","TANAKA YUUKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117007","谷川 雁","タニガワ ガン","TANIGAWA GAN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117008","谷崎 純一郎","タニザキ ジュンイチロウ","TANIZAKI JUNICHIRO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117009","筑紫 哲也","チクシ テツヤ","CHIKUSHI TETSUYA","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117010","辻 信一","ツジ シンイチ","TSUJI SHINICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117011","富高 コユキ","トミタカ コユキ","TOMITAKA KOYUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117012","豊田 栄子","トヨタ エイコ","TOYOTA EIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117013","中江 兆民","ナカエ チョウミン","SAKAE CHOUMIN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117014","中川 修治","ナカガワ シュウジ","NAKAGAWA SHUUJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117015","中島 みゆき","ナカジマ ミユキ","NAKAJIMA MIYUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117016","中村 隆市","ナカムラ リュウジ","NAKAMURA RYUUJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117017","新納 浩幸","ニイロ ヒロユキ","NIIRO HIROYUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117018","NGUYEN HONG LY","ニュエン ホン リ","NGUYEN HONG LY","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117019","野田 開","ノダ ヒラキ","NODA HIRAKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117020","野間 宏","ノマ ヒロシ","NOMA HIROSHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117021","畑 晴子","ハタ ハルコ","HATA HARUKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117022","蜂屋 邦夫","ハチヤ クニオ","HACHIYA KUNIO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117023","原田 正純","ハラダ マサズミ","HARADA MASAZUMI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117024","半田 剣一","ハンダ ケンイチ","HANNDA KENICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117025","莫言","バク ゲン","MO YAN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117026","日吉 フミコ","ヒヨシ フミコ","HIYOSHI FUMIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117027","広瀬 雄二","ヒロセ ユウジ","HIROSE YUUJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117028","藤原 誠","フジワラ マコト","FUJIWARA MAKOTO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117029","堀田 宣之","ホッタ ノブユキ","HOTTA NOBUYUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117030","本多 勝一","ホンダ カツイチ","HONDA KATSUICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117031","松下 竜一","マツシタ リュウイチ","MATUSHITA RYUUICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117032","水丸 淳","ミズマル ジュン","MIZUMARU JUN","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117033","宮沢 賢治","ミヤザワ ケンジ","MIYAZAWA KENJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117034","宮下 尚","ミヤシタ ナオ","MIYASHITA NAO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117035","宮本 成美","ミヤモト ナルミ","MIYAMOTO NARUMI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117036","村上 春樹","ムラカミ ハルキ","MURAKAMI HARUKI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117037","本橋 成一","モトハシ セイイチ","MOTOHASHI SEIICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117038","本橋 哲也","モトハシ テツヤ","MOTAHASHI TETSUYA","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117039","元吉 文男","モトヨシ フミオ","MOTOYOSHI FUMIO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117040","森 鴎外","モリ オウガイ","MORI OUGAI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117041","森崎 和江","モリサキ カズエ","MORISAKI KAZUE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117042","山本 和彦","ヤマモト カズヒコ","YAMAMOTO KAZUHIKO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117043","山本 太郎","ヤマモト タロウ","YAMAMOTO TAROU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117044","山森 徹","ヤマモリ トオル","YAMAMORI TOORU","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117045","湯浅 誠","ユアサ マコト","YUASA MAKOTO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117046","横山 晶一","ヨコヤマ ショウイチ","YOKOYAMA SHOUICHI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117047","吉澤 美穂","ヨシザワ ミホ","YOSHIZAWA MIHO","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117048","るびきち","ルビキチ","RUBY KITCH","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117049","若松 英介","ワカマツ エイスケ","WAKAMATSU EISUKE","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117050","渡部 京二","ワタベ キョウジ","WATABE KYOUJI","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"
"133117051","和田 英一","ワダ エイイチ","Wada Eiichi","1","南九大 環境園芸学部 環境園芸学科 環境園芸","南九大 環境園芸学部 環境園芸学科 環境園芸"

;; D.R.Y. Guile Free Teachers ;; Dry Guy'll free teachers

#Guile #Scheme #FS2FT #FS4FT #FreeSoftwareToFreeTeachers #FreeSoftwareForFreeTeachers