Karena untuk mengupdate aplikasi java web mulai menggunakan sistem patch yaitu dengan melakukan copy file class-class baru atau fix update tidak seperti sebelumnya yaitu selalu deploy ulang aplikasinya, mulai deh kerepotan menyiapkan file-file tersebut. Permasalahannya adalah struktur direktori aplikasi web java ditambah lagi dengan struktur package-nya java sendiri terlihat cukup ribet apalagi jika harus meng-copy satu persatu file-file yang mesti dipersiapkan buat di patch ke aplikasinya.
Mulai deh mempertimbangkan buat membuat script sederhana untuk menyiapkan file-file patch tersebut, dan saya memutuskan untuk membuatnya dengan newlisp. Ada beberapa alasan mengapa saya akhirnya memutuskan menggunakan newlisp, pertama newlisp merupakan lisp/scheme-like programming language, kedua newlisp surprisingly small ketika diinstall hanya membutuhkan kurang lebih 2Mb (coba bandingkan dengan perl, python atau ruby), ketiga fungsinya lumayan lengkap dan cukup buat membantu menyelesaikan task tersebut, keempat sudah bisa GUI programming dengan memanfaatkan runtime java JRE 1.5 keatas.
Sebenernya ingin juga menulis tentang lisp dan dialectnya termasuk scheme, tetapi mungkin dilain posting aja kali yah. Focus ke newlisp lagi, kalau melihat syntax lisp/scheme-like language sepertinya terlihat aneh dan bikin sakit kepala karena kebanyakan parenthesesnya, tapi kalau sudah sering mencoba akan mulai terbiasa. Newlisp tidak seperti common lisp dimana construct programnya lebih dekat dengan scheme dan lebih simple bahkan lebih simple dari scheme sekalipun. Seperti juga lisp dan scheme, newlisp juga memiliki interaktif shell atau biasa disebut dengan REPL (read, eval, print, loop).
Balik ke script yang ingin saya buat, idenya sederhana saja yaitu copy file-file yang sudah saya daftarkan pada sebuah file. Oke langkah pertama saya membutuhkan fungsi untuk copy file, di newlisp ada fungsi yang bisa digunakan untuk copy file, yaitu
(copy-file file-src file-dest)
fungsi tersebut bisa digunakan tetapi jika file-dest terdapat path direktori pada file tujuan maka fungsi tersebut tidak bisa menghandle-nya. Berarti saya membutuhkan fungsi untuk mengambil direktori kemudian membuat direktori tersebut
(parse "path/to/a/file.txt" "/") akan me-return list ("path" "to" "a" "file.txt")
sedangkan untuk membuat direktori dari list nama direktori tersebut
(dotimes (i (- (length list-dest) 1))
(if (directory? (list-dest i))
(change-dir (list-dest i))
(begin
(make-dir (list-dest i))
(change-dir (list-dest i)))))
nah berarti saya sudah bisa membuat sebuah fungsi untuk copy file dengan direktorinya
(define (my-copy-file src dest)
(begin
(set 'working-dir (real-path))
(set 'src-file (read-file src))
(set 'list-dest (parse dest "/"))
(dotimes (i (- (length list-dest) 1))
(if (directory? (list-dest i))
(change-dir (list-dest i))
(begin
(make-dir (list-dest i))
(change-dir (list-dest i)))))
(write-file (last list-dest) src-file)
(change-dir working-dir)))
dan saya dapat memanggilnya dengan
(my-copy-file "file.txt" "path/to/a/file.txt")
jika folder path/to/a/ belum ada maka akan di-create oleh fungsi tersebut.
to be continued…
If you liked my post, feel free to subscribe to my rss feeds
























BlogoSquare
6 Comments so far (Add 1 more)