headermask image

header image

Simple Script dengan Newlisp (1)

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…

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Reddit
  • RSS
  • StumbleUpon
  • Technorati
  • Twitter

If you liked my post, feel free to subscribe to my rss feeds

6 Comments so far (Add 1 more)

  1. Yup harusnya batch script windows atau bash script linux cukup sih ^^ tp ntah mengapa mau pengen coba-coba aja sih =))

    1. Maulana on February 27th, 2009 at 11:29 am
  2. knapa nggak pake windows command line (kalo OS elo run di windows) atau bash script aja? khan nggak perlu install apa2 lagi =)

    tapi itu sesuai selera orang sih. kalo gue kepikirannya yang ada aja =D

    2. joolean on February 25th, 2009 at 1:16 am
  3. sebenernya ini script sederhana aja, ngga canggih sampe detect file yg berubah, kalo kontrol file yg berubah tetep dari svn plugin di netbeans.
    nah class-class yg berubah setelah di build gw daftarin di file text aja trus script ini meng-copy file-file tsb, nah setelah itu gw copy ke aplikasinya di glassfish.

    3. Maulana on February 24th, 2009 at 11:06 am
  4. Trus, bagaimana cara Java tahu kalo ada yang berubah? Apakah ini berpengaruh juga terhadap JAR?

    4. jpmrblood on February 23rd, 2009 at 11:54 pm
  5. sebenernya menurut gw lebih tepat newlisp = scheme yg praktis :p
    bicara soal scheme sudah coba drscheme dari plt, implementasi scheme yg cukup lengkap dan cocok buat belajar.

    kalo mau mempelajari common lisp ada cmucl, sbcl sama clisp yang open source atau versi yang komersil itu franz lisp, corman lisp sama lispworks :)

    5. Maulana on February 23rd, 2009 at 9:54 pm
  6. newlisp = common lisp yg praktis, ideal buat scripting
    sementara common lisp untuk riset computer science

    gak ada salahnya mempelajari 2 varian lisp ini, hehe…

    6. andre on February 23rd, 2009 at 8:33 pm

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*