Jumat, 04 Desember 2009

Apakah anda menggunakan Free Software?

Apakah anda sudah menggunakan Free Software dalam keseharian anda? Jika belum, perangkat lunak yang anda gunakan apakah perangkat lunak yang berlisensi ataukah perangkat lunak yang anda tidak memiliki lisensi dalam menggunakannya? Jika anda menggunakan perangkat lunak dimana anda tidak memiliki lisensi dalam menggunakannya, biasa disebut perangkat lunak bajakan, sudah saatnya anda mencoba menggunakan Free Software. Free Software yang saya maksud disini adalah perangkat lunak yang memberi anda kebebasan untuk menyalin, menggunakan, menyebarkan kembali salinan perangkat lunak tadi, melihat kode program dari perangkat lunak tadi. Namun yang lebih penting lagi adalah lisensi yang menyertai perangkat lunak tersebut. Apakah lisensinya membatasi anda dalam memodifikasi kode program dan menyebarkan hasil modifikasi anda ke publik? Jika jawabannya iya, maka perangkat lunak tersebut tidak termasuk dalam kategori Free Software. Mungkin perangkat lunak tersebut dilepas sebagai perangkat lunak Open Source. Jadi Freeware, shareware, trialware, spyware, atau apapun sebutannya, tidak termasuk dalam kategori Free Software. Karena perangkat lunak tersebut tidak memberikan kebebasan seperti yang dimaksudkan dalam Free Software.


Memangnya saya bisa bekerja menggunakan Free Software?


Tentu saja bisa. Sekarang Free Software sudah bisa dipakai untuk bekerja sehari-hari. Perangkat lunak perkantoran, multimedia, desain, pemrograman, sudah tersedia versi Free Software nya. Bahkan aplikasi permainan pun sudah banyak yang dibuat versi Free Software. Berikut ini adalah daftar perangkat lunak Free Software (sebagian aplikasi tersedia pula untuk platform Windows):


  • Aplikasi perkantoran: AbiWord, Gnumeric, OpenOffice.org, dll
  • Aplikasi multimedia: MPlayer, VLC, dll.
  • Aplikasi desain: GIMP, Scribus, Blender, InkScape, dll.
  • Editor: XEmacs, Emacs, Vim, dll.
  • IDE: Eclipse, NetBeans, dll.
  • Bahasa pemrograman: GCC, Python, Ruby, Perl, PHP, dll.
  • Dan masih banyak lagi aplikasi Free Software untuk bermacam-macam keperluan.

Bagaimana mendapatkan aplikasi Free Software?


Anda bisa mendownload dari internet, membeli di toko-toko penjualan CD perangkat lunak, dari bonus majalah IT, menyalin dari teman. Anda bisa mendapatkan Free Software dengan bermacam-macam cara. Mungkin anda harus mengeluarkan sedikit biaya untuk mendapatkannya.


Ada biaya? Katanya Free Software itu gratis.


Jika pengertian anda tentang Free Software = gratis, maka anda belum mengerti apa yang di maksud dengan Free Software sama sekali. Free Software lebih menekankan etika dan moral terhadap perangkat lunak dibandingkan dengan masalah biaya. 'Free' yang dimaksud disini adalah seperti kebebasan bicara (Free Speech) bukan seperti minuman gratis (Free Beer). Tentu saja ada biaya yang akan anda keluarkan untuk mendapatkan salinan perangkat lunak Free Software. Biaya akses internet atau biaya membeli CD adalah beberapa diantara biaya yang harus dikeluarkan. Namun jika anda mendapatkannya dengan menyalin dari teman, saudara, orang lain, maka bisa dikatakan anda hampir tidak mengeluarkan biaya apapun. Dan perangkat lunak Free Software itu dapat anda instal pada banyak komputer, dan hal ini adalah legal.


Ini berbeda dengan perangkat lunak proprietary, misal dari Microsoft. Lisensi yang dikeluarkan (EULA) sangat membatasi anda dalam menginstal perangkat lunak. Anda hanya di perbolehkan menginstal perangkat lunak untuk satu komputer/laptop. Anda hanya diperbolehkan membuat satu buah salinan perangkat lunak sebagai cadangan (backup) dari perangkat lunak tersebut. Jika anda telah menginstal perangkat lunak tersebut di satu komputer, maka anda tidak diperkenankan untuk menginstal perangkat lunak tersebut di komputer/laptop lain. Meskipun komputer/laptop itu milik anda sendiri, apalagi jika komputer/laptop milik orang lain.


Jika anda baca lisensi yang di keluarkan, maka anda akan melihat pembatasan yang di berikan oleh pembuat perangkat lunak. Seperti potongan End User License Agreement (EULA) di bawah ini.



* Installation and use.  You may install, use, access,
display and run one copy of the Product on a single
computer, such as a workstation, terminal or other device
("Workstation Computer").  The Product may not be used
by more than two (2) processors at  any one time on any
single Workstation Computer. You may permit a maximum
of ten (10) computers or other electronic devices (each
a "Device") to connect to the Workstation Computer to
utilize the services of the Product solely for File and
Print services, Internet Information Services, and remote
access (including connection sharing and telephony
services).  The ten connection maximum includes any
indirect connections made through "multiplexing" or other
software or hardware which pools or aggregates
connections.  Except as otherwise permitted by the
NetMeeting, Remote Assistance, and Remote Desktop
features described below, you may not use the Product
to permit any Device to use, access, display or run other
executable software residing on the Workstation Computer,
nor may you permit any Device to use, access, display,
or run the Product or Product's user interface, unless
the Device has a separate license for the Product.   

* Mandatory Activation. The license rights granted under this
EULA are limited to the first thirty (30) days after
you first install  the Product unless you supply
information required to activate your licensed copy in
the manner described during the setup sequence of the
Product.  You can activate the Product through the use
of the Internet or telephone; toll charges may apply. 
You may also need to reactivate the Product if you modify
your computer hardware or alter the Product.  There are
technological measures in this Product that are designed
to prevent unlicensed or illegal use of the Product.  
You agree that we may use those measures.

Mari kita bandingkan dengan lisensi yang banyak dipakai pada perangkat lunak Free Software. Berikut adalah potongan lisensi GPL (Gnu General Public License),



The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. 

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. 

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. 

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Tampak sekali perbedaan kedua lisensi diatas. Poin penting yang perlu di garis bawahi:


  • Pada EULA


    You may install, use, access, display and run one copy of the Product on a single computer, such as a workstation, terminal or other device ("Workstation Computer"). The Product may not be used by more than two (2) processors at any one time on any single Workstation Computer.
  • Pada GPL


    you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

Kalau begitu apa yang dimaksud software bajakan/ilegal?


Software bajakan/ilegal adalah perangkat lunak yang digunakan tidak sesuai dengan lisensi yang ditetapkan pembuat perangkat lunak.


Jadi Free Software bukan software bajakan/ilegal?


Jelas sekali bukan.

Jumat, 30 Oktober 2009

Belajar Grails (bagian ketiga)

Pada bagian sebelumnya kita sudah membuat sebuah aplikasi sederhana menggunakan Grails. Sekarang mari kita bahas perintah-perintah yang di pergunakan pada pembahasan sebelumnya.


  • grails create-app nama_aplikasi
    Perintah diatas akan membuat sebuah folder yang berisi folder/direktori dan file-file yang akan kita gunakan untuk membuat aplikasi. Folder/direktori yang di hasilkan juga mempunyai beberapa file konfigurasi untuk di gunakan dalam IDE NetBeans, terutama NetBeans versi 6.5 keatas yang sudah di tambah plugin Groovy.
  • grails run-app
    Perintah diatas di gunakan untuk menjalankan aplikasi yang telah kita buat dengan Grails. Grails menggunakan web server Jetty sebagai web server bawaan untuk mencoba aplikasi kita. Aplikasi yang kita buat menggunakan Grails dapat di deploy pada web server lainnya seperti Apache Tomcat, JBoss, dll.
  • grails create-domain-class namaDomain
    Perintah diatas di gunakan untuk membuat sebuah kelas domain (model) pada aplikasi kita. File yang di hasilkan adalah berupa sebuah template kosong yang harus kita kustomisasi lagi agar sesuai dengan aplikasi yang akan kita buat.
  • grails generate-all namaDomain
    Perintah diatas digunakan akan menghasilkan file-file controller dan view dari domain yang kita tentukan.

Kustomisasi Tampilan

Coba anda buka file index.gsp yang terdapat pada folder/direktori grails-app/views. Isinya kurang lebih seperti di bawah ini:


<html>
  <head>
    <title>Welcome to Grails</title>
    <meta name="layout" content="main" />
  </head>
  <body>
    <h1 style="margin-left:20px;">Welcome to Grails</h1>
    <p style="margin-left:20px;width:80%">Congratulations, you have successfully started your first Grails application! At the moment
this is the default page, feel free to modify it to either redirect to a controller or display whatever content you may choose. Below is a list of controllers that are currently deployed in this application, click on each to execute its default action:</p>
    <div class="dialog" style="margin-left:20px;width:60%;">
      <ul>
        <g:each var="c" in="${grailsApplication.controllerClasses}">
          <li class="controller"><g:link controller="${c.logicalPropertyName}">${c.fullName}</g:link></li>
        </g:each>
      </ul>
    </div>
  </body>
</html>

Kode diatas adalah kode untuk menampilkan halaman pertama aplikasi kita. Sedangkan untuk untuk layout yang akan dipakai oleh seluruh form pada aplikasi kita, coba anda buka file main.gsp pada folder/direktori grails-app/views/layout. Isi dari file tersebut kira-kira seperti di bawah ini:


<html>
  <head>
    <title><g:layoutTitle default="Grails" /></title>
    <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
    <link rel="shortcut icon" href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
    <g:layoutHead />
    <g:javascript library="application" />
  </head>
  <body>
    <div id="spinner" class="spinner" style="display:none;">
    <img src="${resource(dir:'images',file:'spinner.gif')}" alt="Spinner" />
    </div>
    <div class="logo"><img src="${resource(dir:'images',file:'grails_logo.jpg')}" alt="Grails"  /></div>
    <g:layoutBody />
  </body>
</html>

Mari kita bahas potongan kode diatas.


  • <g:layoutTitle default="Grails" />
    Tag ini digunakan untuk menampilkan judul pada jendela browser.
  • ${resource(dir:'css',file:'main.css')}
    Kode diatas akan menghasilkan teks '/nama_aplikasi/css/main.css' yang mengacu pada file main.css di folder/direktori web-app/css.
  • ${resource(dir:'images',file:'favicon.ico')}
    Kode diatas akan menghasilkan teks '/nama_aplikasi/images/favicon.ico' yang mengacu pada file favicon.ico di folder/direktori web-app/images.
  • <g:layoutHead />
    Tag ini digunakan untuk memastikan bahwa tag-tag yang kita letakkan diantara tag html '<head> ... </head>' pada setiap view yang dibuat akan dirender secara benar oleh Grails.
  • <g:javascript library="application" />
    Tag diatas akan menghasilkan teks '<script type="text/javascript" src="/nama_aplikasi/js/application.js"></script>' .
  • <g:layoutBody />
    Tag ini digunakan untuk menampilkan tag-tag dan kode-kode yang berada diantara tag html '<body> .. </body>' pada halaman view yang dibuat.

Cobalah anda utak-atik layout dari aplikasi yang anda buat. Lihat hasilnya. Jika anda sudah mahir, cobalah menambahkan css template ke dalam aplikasi anda.


Contoh mengubah layout menggunakan css template


Misalnya anda telah memiliki sebuah css template (buatan sendiri maupun buatan orang lain) dan anda ingin menggunakannya untuk aplikasi yang anda buat dengan Grails. Langkah-langkah yang harus di lakukan:


  • Salin file css ke folder/direktori web-app/css. Contoh isi file css seperti di bawah ini,
    body { 
    margin: 0; 
    padding : 0; 
    background: #ccc url(images/bg.jpg) center repeat; 
    color: #555; 
    } 
    /*WRAP*/ 
    #container { 
    width: 760px; 
    margin-left: auto; 
    margin-right: auto; 
    padding: 0; 
    font: 76% "Trebuchet MS","lucida sans", tahoma, sans-serif; 
    line-height: 1.8em; 
    background: transparent; 
    color: #666; 
    } 
    /*TOP BANNER*/ 
    #banner { 
    padding: 0; 
    margin-bottom: 0; 
    height: 150px; 
    border-bottom:3px solid #fff; 
    background: #82B64D url(images/wine.jpg); 
    color: #000; 
    } 
    /*TOP NAVIGATION*/ 
    #navbar ul { 
    float:left; 
    width:100%; 
    padding:0; 
    margin:0; 
    list-style-type:none; 
    font-size: 130%; 
    text-align: center; 
    border-bottom:3px solid #fff; 
    background: #868749; 
    color: #000; 
    } 
    #navbar a { 
    float:left; 
    width:6em; 
    height:30px; 
    text-decoration:none; 
    color:#fff; 
    background:#868749; 
    padding:0.5em 0.6em; 
    border-right:1px solid #fff; 
    } 
    #navbar a:hover { 
    background:#5b662d; 
    color: #fff; 
    } 
    #navbar li { 
    display:inline; 
    } 
    /*MAIN CONTENT*/ 
    #content { 
    padding: 1em; 
    margin-left: 200px; 
    } 
    /*SIDEBAR*/ 
    #sidebar { 
    float: left; 
    width: 160px; 
    margin: 0; 
    padding: 0 1em 0 1em; 
    } 
    /*SIDE MENU*/ 
    #sidebar ul { 
    list-style: none; 
    margin: 0 0 20px 0; 
    padding: 0; 
    } 
    #sidebar ul li { 
    display: inline; 
    padding: 0; 
    margin: 0; 
    } 
    #sidebar ul li a { 
    display: block; 
    color: #385900; 
    background: inherit; 
    text-decoration: none; 
    margin: 0; 
    padding: 5px 0 5px 0; 
    border-bottom: 1px solid #C0C0C0; 
    } 
    #sidebar ul li a:hover { 
    text-decoration: none; 
    background: #E6E7E9; 
    color: #DA7910; 
    } 
    /*FOOTER*/ 
    #footer { 
    clear: both; 
    width:750px; 
    padding: 5px; 
    margin: 0; 
    font-size: 0.8em; 
    border-top: 3px solid #fff; 
    border-bottom: 3px solid #fff; 
    background: #868749; 
    color: #fff; 
    text-align:center; 
    } 
    #footer a:link, #footer a:visited { 
    text-decoration : none; 
    background : inherit; 
    color : #000; 
    } 
    #footer a:hover { 
    text-decoration : underline; 
    background : inherit; 
    color :  #fff; 
    } 
    /*LINKS*/ 
    a:link, a:visited { 
    text-decoration : none; 
    background : inherit; 
    color : #868749; 
    } 
    a:hover { 
    text-decoration : underline; 
    background : inherit; 
    color :  #385900; 
    } 
    /*TYPOGRAPHY*/ 
    h1 { 
    margin: 0; 
    padding: 30px 0 0 20px; 
    font-size: 175%; 
    letter-spacing: 3px; 
    color:#FFFFFF; 
    } 
    h2 { 
    margin-top: 10px; 
    padding: 10px 0 10px 0; 
    font-size: 160%; 
    letter-spacing: 3px; 
    background : transparent; 
    color :   #385900; 
    } 
    h3 { 
    margin: 0; 
    padding: 10px 0 10px 0; 
    font-size: 160%; 
    letter-spacing: 3px; 
    background : inherit; 
    color :  #385900; 
    } 
    blockquote { 
    font-weight : bold; 
    font-style : italic; 
    color : #b29b35; 
    } 
    /*CLASS*/ 
    .clear { 
    clear: both; 
    overflow: hidden; 
    width: 0; 
    height: 0; 
    } 
    .slogan { 
    margin: 0 0 0 50px; 
    letter-spacing: 3px; 
    }
    .post{ 
    background: #E6E7E9; 
    padding: 3px; 
    margin: 20px 10px 10px 5px; 
    font-size: 80%; 
    } 
    .post .date { 
    background: url(images/clock.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px; 
    } 
    .post .comments { 
    background: url(images/comment.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px; 
    } 
    .post .readmore { 
    background: url(images/document.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px; 
    }
    

  • Jika template css anda menggunakan image, maka salin file-file image ke folder web-app/images.
  • Edit file css agar sesuai dengan struktur aplikasi yang kita buat.
    body { 
    margin: 0; 
    padding : 0; 
    background: #ccc url(../images/bg.jpg) center repeat; 
    color: #555; 
    } 
    /*WRAP*/ 
    #container { 
    width: 760px; 
    margin-left: auto; 
    margin-right: auto; 
    padding: 0; 
    font: 76% "Trebuchet MS","lucida sans", tahoma, sans-serif; 
    line-height: 1.8em; 
    background: transparent; 
    color: #666; 
    } 
    /*TOP BANNER*/ 
    #banner { 
    padding: 0; 
    margin-bottom: 0; 
    height: 150px; 
    border-bottom:3px solid #fff; 
    background: #82B64D url(../images/wine.jpg); 
    color: #000; 
    } 
    /*TOP NAVIGATION*/ 
    #navbar ul { 
    float:left; 
    width:100%; 
    padding:0; 
    margin:0; 
    list-style-type:none; 
    font-size: 130%; 
    text-align: center; 
    border-bottom:3px solid #fff; 
    background: #868749; 
    color: #000; 
    } 
    #navbar a { 
    float:left; 
    width:6em; 
    height:30px; 
    text-decoration:none; 
    color:#fff; 
    background:#868749; 
    padding:0.5em 0.6em; 
    border-right:1px solid #fff; 
    } 
    #navbar a:hover { 
    background:#5b662d; 
    color: #fff; 
    } 
    #navbar li { 
    display:inline; 
    } 
    /*MAIN CONTENT*/ 
    #content { 
    padding: 1em; 
    margin-left: 200px; 
    } 
    /*SIDEBAR*/ 
    #sidebar { 
    float: left; 
    width: 160px; 
    margin: 0; 
    padding: 0 1em 0 1em; 
    } 
    /*SIDE MENU*/ 
    #sidebar ul { 
    list-style: none; 
    margin: 0 0 20px 0; 
    padding: 0; 
    } 
    #sidebar ul li {  
    display: inline; 
    padding: 0; 
    margin: 0; 
    } 
    #sidebar ul li a { 
    display: block; 
    color: #385900; 
    background: inherit; 
    text-decoration: none; 
    margin: 0; 
    padding: 5px 0 5px 0; 
    border-bottom: 1px solid #C0C0C0; 
    } 
    #sidebar ul li a:hover { 
    text-decoration: none; 
    background: #E6E7E9; 
    color: #DA7910; 
    } 
    /*FOOTER*/ 
    #footer { 
    clear: both; 
    width:750px; 
    padding: 5px; 
    margin: 0; 
    font-size: 0.8em; 
    border-top: 3px solid #fff; 
    border-bottom: 3px solid #fff; 
    background: #868749; 
    color: #fff; 
    text-align:center; 
    } 
    #footer a:link, #footer a:visited { 
    text-decoration : none; 
    background : inherit; 
    color : #000;  
    } 
    #footer a:hover { 
    text-decoration : underline; 
    background : inherit; 
    color :  #fff; 
    } 
    /*LINKS*/ 
    a:link, a:visited { 
    text-decoration : none; 
    background : inherit; 
    color : #868749; 
    } 
    a:hover { 
    text-decoration : underline; 
    background : inherit; 
    color :  #385900;  
    } 
    /*TYPOGRAPHY*/ 
    h1 { 
    margin: 0; 
    padding: 30px 0 0 20px; 
    font-size: 175%; 
    letter-spacing: 3px; 
    color:#FFFFFF; 
    } 
    h2 { 
    margin-top: 10px; 
    padding: 10px 0 10px 0; 
    font-size: 160%; 
    letter-spacing: 3px; 
    background : transparent; 
    color :   #385900; 
    } 
    h3 { 
    margin: 0; 
    padding: 10px 0 10px 0; 
    font-size: 160%; 
    letter-spacing: 3px; 
    background : inherit; 
    color :  #385900; 
    } 
    blockquote { 
    font-weight : bold; 
    font-style : italic; 
    color : #b29b35; 
    } 
    /*CLASS*/ 
    .clear { 
    clear: both; 
    overflow: hidden; 
    width: 0; 
    height: 0; 
    } 
    .slogan { 
    margin: 0 0 0 50px; 
    letter-spacing: 3px; 
    }
    .post{ 
    background: #E6E7E9; 
    padding: 3px; 
    margin: 20px 10px 10px 5px; 
    font-size: 80%; 
    } 
    .post .date { 
    background: url(../images/clock.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px; 
    } 
    .post .comments { 
    background: url(../images/comment.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px; 
    } 
    .post .readmore { 
    background: url(../images/document.gif) no-repeat left center; 
    padding-left: 15px; 
    margin: 0 15px 0 5px;
    }
    

  • Buka file main.gsp di folder/direktori grails-app/views/layouts. Yang kodenya seperti di bawah ini,
    <html>
      <head>
        <title><g:layoutTitle default="Grails" /></title>
        <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
        <link rel="shortcut icon" href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
        <g:layoutHead />
        <g:javascript library="application" />
      </head>
      <body>
        <div id="spinner" class="spinner" style="display:none;">
        <img src="${resource(dir:'images',file:'spinner.gif')}" alt="Spinner" />
        </div>
        <div class="logo"><img src="${resource(dir:'images',file:'grails_logo.jpg')}" alt="Grails" ></div>
        <g:layoutBody />
      </body>
    </html>
    

  • Ubahlah sehingga menjadi seperti kode dibawah ini,
    <html>
      <head>
        <title><g:layoutTitle default="Grails" /></title>
        <link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" />
        <link rel="shortcut icon" href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
        <g:layoutHead />
        <g:javascript library="application" />
      </head>
      <body>
        <div id="container">
        <div id="banner">
          <h1>Your Site Name</h1>
        </div>
        <div id="navbar">
          <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">Templates</a></li>
            <li><a href="#">Product</a></li>
            <li><a href="#">About us</a></li>
            <li><a href="#">Contact</a></li>
          </ul>
        </div>
        <div class="clear">&nbsp;</div>
        <div id="sidebar">
          <h2>Menu</h2>
          <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">Products</a></li>
            <li><a href="#" class="selected">Portfolio</a></li>
            <li><a href="#">Templates</a></li>
            <li><a href="#">About us</a></li>
            <li><a href="#">Contact</a></li>
          </ul>
          <h2>Archives</h2>
          <ul>
            <li><a href="#">April 2007</a></li>
            <li><a href="#">March 2007</a></li>
            <li><a href="#">Feb 2007</a></li>
            <li><a href="#">Jan 2007</a></li>
            <li><a href="#">Dec 2006</a></li>
            <li><a href="#">Nov 2006</a></li>
          </ul>
          <h2>Partners</h2>
          <ul>
            <li><a href="#">Link 1</a></li>
            <li><a href="#">Link 2</a></li>
            <li><a href="#">Link 3</a></li>
            <li><a href="#">Link 4</a></li>
          </ul>
        </div>
        <div id="content">
          <g:layoutBody />
        </div>
        <div class="clear">&nbsp;</div>
        <div id="footer">Site designed by <a href="http://www.freecsstemplate.net">Free</a> Css Templates</a> <a
    href="http://validator.w3.org/check/referer" title="This page
    validates as XHTML 1.0 Transitional"><abbr title="eXtensible HyperText Markup
    Language">XHTML</abbr></a> | <a href="http://jigsaw.w3.org/css-validator/check/referer" title="This
    page validates as CSS"><abbr title="Cascading Style Sheets">CSS</abbr></a></div>
        </div>
      </body>
    </html>
    

  • Jalankan aplikasi anda. Jika tidak ada kesalahan maka halaman anda akan muncul seperti berikut,


Nah, sekarang anda sudah mulai mengerti bagaimana mengubah tampilan Grails bukan?


Ubahlah template css dan layout sesuai dengan keinginan anda. Selamat mencoba. Happy hacking!

Kamis, 29 Oktober 2009

Free Software?

Free Software?


Pengertian Free Software


Free Software, jika diterjemahkan secara bebas ke dalam bahasa Indonesia adalah perangkat lunak merdeka, adalah sebuah gerakan yang di pelopori oleh Richard M. Stallman dalam rangka memberikan kemerdekaan kepada para pengguna komputer di seluruh dunia untuk mendapatkan perangkat lunak yang berkualitas dengan lisensi yang lebih mengutamakan kemerdekaan kepada tiap pengguna perangkat lunak.


Latar Belakang


Pada awal perkembangan komputer, di kalangan akademisi berbagi kode sumber adalah sesuatu hal yang biasa dilakukan diantara para pembuat program. Kode sumber akan di pelajari, di perbaiki apabila ditemukan kesalahan (bug), dan ditingkatkan kinerjanya oleh pembuat program lainnya. Dengan adanya review yang dilakukan oleh banyak pihak, maka sebuah program akan semakin meningkat kualitasnya. Dan semakin banyak pihak yang melakukan review terhadap suatu program, maka kesalahan makin cepat ditemukan dan perbaikan atas program tersebut makin cepat di dapatkan. Beberapa hacker yang mengalami masa ini diantaranya: Richard M. Stallman (pendiri Free Software Foundation).


Namun dalam perkembangan berikutnya kebiasaan ini menjadi sesuatu yang terlarang, setelah perangkat lunak menjadi produk komersil. Perangkat lunak dianggap sebagai suatu produk industri yang harus di lindungi. Untuk mendapatkan suatu perangkat lunak, konsumen harus membeli pada pembuat perangkat lunak (software house) dan harus menyetujui suatu perjanjian dengan pembuat perangkat lunak.


Pada umumnya perjanjian tersebut membatasi pihak konsumen untuk memasang perangkat lunak tersebut pada sejumlah komputer yang dibatasi pada perjanjian, dan jumlah pengguna yang dibatasi. Pihak konsumen tidak dapat memasang perangkat lunak tersebut diluar yang diatur oleh perjanjian tersebut tanpa mendapat izin dari pembuat perangkat lunak. Pihak konsumen tidak diizinkan untuk memberikan salinan perangkat lunak tersebut kepada pihak lain.


Namun perjanjian tersebut membebaskan pihak pembuat perangkat lunak apabila terjadi kesalahan yang diakibatkan oleh perangkat lunak tersebut. Biasanya pihak pembuat perangkat lunak hanya memberikan dukungan teknis, namun tidak memberikan ganti rugi dalam bentuk apapun kepada pihak konsumen. Dan dari segi harga, perangkat lunak tersebut harganya tidak murah. Apabila pihak konsumen memberikan salinan perangkat lunak tersebut kepada pihak lain, maka pihak konsumen dapat diajukan ke pengadilan karena melanggar perjanjian. Hal ini disebut dengan pembajakan perangkat lunak.


Gerakan Free Software


Melihat hal tersebut, Richard M. Stallman (RMS) mempelopori sebuah gerakan yang bertujuan untuk membebaskan konsumen dari pembatasan-pembatasan yang terjadi pada perangkat lunak komersil dan memberikan solusi perangkat lunak dengan kualitas setara bahkan lebih tanpa pembatasan-pembatasan yang memberatkan konsumen. Gerakan ini dinamakan Free Software Movement dan mendirikan Free Software Foundation sebagai sebuah institusi yang akan memberikan bantuan, baik dalam bentuk bantuan hukum, dokumentasi, dan penyediaan perangkat lunak.


RMS aktif dalam mempromosikan gerakan Free Software ke berbagai pihak. Gerakan ini mendapatkan respon yang sangat positif dari para pengembang perangkat lunak dari seluruh dunia. Dan sebagai hasilnya konsumen mendapatkan perangkat lunak yang berkualitas tinggi dengan biaya yang sangat terjangkau.


Kutipan dari www.gnu.org:


Perangkat Lunak Bebas mengacu pada kebebasan para penggunanya untuk menjalankan, menggandakan, menyebarluaskan, mempelajari, mengubah dan meningkatkan kinerja perangkat lunak. Tepatnya, mengacu pada empat jenis kebebasan bagi para pengguna perangkat lunak:


  • Kebebasan untuk menjalankan programnya untuk tujuan apa saja (kebebasan 0).
  • Kebebasan untuk mempelajari bagaimana program itu bekerja serta dapat disesuaikan dengan kebutuhan anda (kebebasan 1). Akses pada kode program merupakan suatu prasyarat.
  • Kebebasan untuk menyebarluaskan kembali hasil salinan perangkat lunak tersebut sehingga dapat membantu sesama anda (kebebasan 2).
  • Kebebasan untuk meningkatkan kinerja program, dan dapat menyebarkannya ke khalayak umum sehingga semua menikmati keuntungannya (kebebasan 3). Akses pada kode program merupakan suatu prasyarat juga.

Suatu program merupakan perangkat lunak bebas, jika setiap pengguna memiliki semua dari kebebasan tersebut. Dengan demikian, anda seharusnya bebas untuk menyebarluaskan salinan program itu, dengan atau tanpa modifikasi (perubahan), secara gratis atau pun dengan memungut biaya penyebarluasan, kepada siapa pun dimana pun. Kebebasan untuk melakukan semua hal di atas berarti anda tidak harus meminta atau pun membayar untuk ijin tersebut.


Anda juga seharusnya memiliki kebebasan untuk memodifikasi (merubah), serta menggunakan untuk keperluan anda pribadi dalam pekerjaan anda, atau untuk main-main, tanpa perlu menyatakan kerberadaan program tersebut. Jika mengedarkan perubahan tersebut, anda seharusnya tidak perlu memberitahu siapa pun dengan cara apa pun.


Kebebasan untuk menggunakan sebuah program berarti kebebasan bagi siapa pun -- baik perorangan atau pun organisasi -- untuk menggunakan pada komputer jenis apa pun, untuk kegiatan apa pun, tanpa perlu memberitahu para pengembang atau pun pihak-pihak lainnya secara khusus.


Kebebasan untuk menyebarluaskan hasil penggandaan, harus termasuk bentuk biner (eksekusi), atau pun kode program, yang termodifikasi mau pun yang belum. Tidak apa-apa, jika tidak disertakan cara memproduksi bentuk biner tersebut, namun perlu ada kebebasan penyebarluasannnya, jika dikemudian hari ditemukan cara untuk memproduksinya.


Agar terdapat kebebasan melakukan perubahan -- serta mempublikasikan versi yang lebih baik -- memiliki arti, anda harus memiliki akses pada kode program tersebut. Jadi, memiliki akses tersebut merupakan syarat mutlak untuk perangkat lunak bebas.


Agar dapat menjadi nyata, kebebasan ini tidak boleh dibatalkan selama anda tidak melakukan suatu kesalahan. Jika pengembang perangkat lunak tersebut mempunyai hak untuk mencabut lisensi, tanpa anda melakukan apa-apa yang menyebabkan seperti itu, maka program tersebut tidak dapat disebut sebagai perangkat lunak bebas.


Walau pun demikian, aturan tertentu mengenai tata cara pendistribusian perangkat lunak bebas dapat diterima, selama tidak bertentangan dengan hakikat inti dari kebebasan itu sendiri. Umpamanya, "copyleft" (pada garis besarnya), tidak mengizinkan penambahan aturan pelarangan atau pembatasan hak orang lain yang tidak sesuai dengan hakikat inti dari kebebasan. Hal ini tidak bertentangan dengan hakikat inti dari kebebasan itu sendiri, justru aturan ini melindunginya.


Jadi, anda mungkin harus membayar untuk mendapatkan perangkat lunak GNU, atau mungkin juga anda mendapatkannya secara cuma-cuma. Terlepas dari cara mendapatkan perangkat lunak tersebut, anda akan selalu bebas untuk menyalin dan mengubah perangkat lunak tersebut, atau pun untuk menjualnya.</>


Perangkat lunak bebas bukan berarti ``tidak komersial''. Program bebas harus boleh digunakan untuk keperluan komersial. Pengembangan perangkat lunak bebas secara komersial pun tidak merupakan hal yang aneh; dan produknya ialah perangkat lunak bebas yang komersial.


Aturan perihal cara mengemas perangkat lunak bebas hasil modifikasi pun dapat diterima, jika tidak secara efektif menghalangi kebebasan anda untuk mempublikasikan ulang modifikasinya. Demikian pula aturan, ``Jika anda membuat program tersedia dalam cara tertentu, maka anda juga harus membuatnya tersedia dalam cara tertentu lainnya,'' juga dapat diterima dengan ketentuan yang sama (Perhatikan bahwa aturan tersebut masih memberikan anda pilihan untuk menentukan apakah program itu akan dipublikasikan atau tidak).


Kebebasan yang dimaksud di sini adalah seperti kebebasan berbicara, bukan seperti minuman gratis atau parkir gratis.


Manfaat Free Software bagi Masyarakat Indonesia


Banyak manfaat yang akan didapatkan dengan penggunaan Free Software bagi masyarakat Indonesia. Dengan menggunakan Free Software maka penggunaan perangkat lunak bajakan akan semakin berkurang dan jika didukung dengan semakin banyaknya sumber daya manusia yang menguasai dan menggunakan Free Software. Sehingga negara kita tidak lagi dikenal sebagai negara dengan tingkat pembajakan perangkat lunak yang cukup tinggi. Sebagai orang yang bergerak didunia IT, seharusnya kita merasa malu negara kita dikenal karena tingkat pembajakannya bukan karena hasil karyanya di bidang IT.


Dengan menggunakan Free Software kita dapat memberikan solusi tehnologi informasi yang handal dengan biaya yang minimal. biaya yang di maksud disini adalah biaya perawatan, biaya pembelian perangkat lunak, dan lain-lain. Selain itu, untuk mendapatkan dukungan tekhnis kita bisa mencari melalui internet. Karena moto dari Free Software adalah dari komunitas, untuk komunitas. Sehingga kita dapat dengan mudah mencari solusi atas Free Software yang kita gunakan melalui komunitas pengguna Free Software tersebut. Sehingga kita tidak perlu khawatir dukungan atas Free Software itu akan terputus akibat perusahaan pembuat perangkat lunak tutup seperti yang banyak terjadi pada perangkat lunak komersial/proprietary (contoh: WordStar).


Sebagai ilustrasi, untuk tehnologi yang sama/setara, solusi dari Free Software jauh lebih rendah spesifikasi perangkat keras yang dibutuhkan di bandingkan solusi serupa yang di tawarkan perangkat lunak komersial. Apalagi kalau sudah berbicara masalah harga/biaya yang harus di keluarkan untuk mendapatkan solusi tersebut. Mungkin yang menjadi kendala dari solusi Free Software adalah ketersediaan sumber daya manusia yang akan mengimplementasikan dan memelihara solusi dari Free Software tersebut. Namun hal ini bisa menjadi ladang pekerjaan bagi orang-orang atau perusahaan yang menyediakan jasa bagi solusi Free Software itu. Dan Free Software mendorong agar hal tersebut terlaksana. Untuk lebih jelasnya anda bisa lihat di sini.


Istilah-istilah yang berkaitan


  • Open Source
    Open Source adalah sebuah gerakan yang lebih menitikberatkan pada ketersediaan sebuah perangkat lunak bukan pada kebebasan bagi para pengguna. Untuk lebih jelas mengapa Open Source berbeda dari Free Software coba anda lihat di sini. Secara garis besar, perbedaan Open Source dan Free Software adalah pada filosofi yang di anut. Sebagai ilustrasi, perangkat lunak Open Source dapat di ambil oleh para pengguna baik dalam bentuk binary executable maupun kode sumber namun membatasi para pengguna untuk mengadakan perubahan terhadap perangkat lunak tersebut. Yang berhak mengadakan perubahan adalah sang pengembang perangkat lunak itu sendiri. Ini berbeda dengan Free Software.
  • Freeware
    Freeware adalah perangkat lunak yang disebarkan secara gratis namun tanpa kode sumber yang disertakan. Biasanya Freeware tersedia dalam bentuk binary executable dan dengan lisensi yang sangat dibatasi. Bisa dikatakan Freeware tidak sama dengan Free Software.

Rabu, 14 Oktober 2009

Belajar Grails (bagian kedua)

Pada bagian sebelumnya, kita telah selesai menginstalasi software yang di perlukan untuk menjalankan Grails. Pada bagian kedua ini, kita akan mulai belajar membuat aplikasi sederhana menggunakan Grails.

Misalnya kita akan membuat sebuah aplikasi untuk merekam daftar teman-teman kita. Dengan data-data yang akan di masukkan berupa nama, alamat, nomor telpon, nomor handphone, tanggal lahir. Struktur data yang akan di buat adalah sebagai berikut:

Daftar Teman
  1. nama: alphanumerik dengan panjang maksimal 40 karakter.
  2. alamat: alphanumerik dengan panjang maksimal 80 karakter.
  3. nomor telpon: numerik dengan panjang maksimal 20 karakter.
  4. nomor handphone: numerik dengan panjang maksimal 20 karakter.
  5. tanggal lahir: date.
Sekarang marilah kita mulai membuat aplikasi. Buka konsol (*nix) atau command prompt (Windows). Sebaiknya anda berada dalam sebuah folder/direktori yang di khususkan untuk pemrograman. Misalnya folder/direktori program. Kemudian ketikkan perintah berikut:
>grails create-app teman
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\source
Running script c:\grails\scripts\CreateApp_.groovy
Environment set to development
    [mkdir] Created dir: C:\source\teman\src
    [mkdir] Created dir: C:\source\teman\src\java
    [mkdir] Created dir: C:\source\teman\src\groovy
    [mkdir] Created dir: C:\source\teman\grails-app
    [mkdir] Created dir: C:\source\teman\grails-app\controllers
    [mkdir] Created dir: C:\source\teman\grails-app\services
    [mkdir] Created dir: C:\source\teman\grails-app\domain
    [mkdir] Created dir: C:\source\teman\grails-app\taglib
    [mkdir] Created dir: C:\source\teman\grails-app\utils
    [mkdir] Created dir: C:\source\teman\grails-app\views
    [mkdir] Created dir: C:\source\teman\grails-app\views\layouts
    [mkdir] Created dir: C:\source\teman\grails-app\i18n
    [mkdir] Created dir: C:\source\teman\grails-app\conf
    [mkdir] Created dir: C:\source\teman\test
    [mkdir] Created dir: C:\source\teman\test\unit
    [mkdir] Created dir: C:\source\teman\test\integration
    [mkdir] Created dir: C:\source\teman\scripts
    [mkdir] Created dir: C:\source\teman\web-app
    [mkdir] Created dir: C:\source\teman\web-app\js
    [mkdir] Created dir: C:\source\teman\web-app\css
    [mkdir] Created dir: C:\source\teman\web-app\images
    [mkdir] Created dir: C:\source\teman\web-app\META-INF
    [mkdir] Created dir: C:\source\teman\lib
    [mkdir] Created dir: C:\source\teman\grails-app\conf\spring
    [mkdir] Created dir: C:\source\teman\grails-app\conf\hibernate
[propertyfile] Creating new property file: C:\source\teman\application.properties
     [copy] Copying 1 resource to C:\source\teman
    [unjar] Expanding: C:\source\teman\grails-shared-files.jar into C:\source\teman
   [delete] Deleting: C:\source\teman\grails-shared-files.jar
     [copy] Copying 1 resource to C:\source\teman
    [unjar] Expanding: C:\source\teman\grails-app-files.jar into C:\source\teman

   [delete] Deleting: C:\source\teman\grails-app-files.jar
     [move] Moving 1 file to C:\source\teman
     [move] Moving 1 file to C:\source\teman
     [move] Moving 1 file to C:\source\teman
Installing plug-in hibernate-1.1.1
    [mkdir] Created dir: C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\plugins\hibernate-1.1.1
    [unzip] Expanding: C:\Documents and Settings\Oz\.grails\1.1.1\plugins\grails-hibernate-1.1.1.zip into C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\plugins\hibernate-1.1.1
Executing hibernate-1.1.1 plugin post-install script ...
Plugin hibernate-1.1.1 installed
Created Grails Application at C:\source/teman
Perintah di atas akan membuat sebuah folder/direktori baru di mana kita akan bekerja didalamnya. Struktur folder/direktori yang di hasilkan seperti berikut:
├───.settings
├───grails-app
│   ├───conf
│   │   ├───hibernate
│   │   └───spring
│   ├───controllers
│   ├───domain
│   ├───i18n
│   ├───services
│   ├───taglib
│   ├───utils
│   └───views
│       └───layouts
├───lib
├───scripts
├───src
│   ├───groovy
│   └───java
├───test
│   ├───integration
│   └───unit
└───web-app
    ├───css
    ├───images
    │   └───skin
    ├───js
    │   └───prototype
    ├───META-INF
    └───WEB-INF
        └───tld
Sekarang kita bahas secara singkat struktur folder/direktori di atas.
  • grails-app: folder/direktori adalah tempat kode program (Groovy) yang merupakan inti dari aplikasi yang kita buat.
    • conf: disini file-file konfigurasi aplikasi kita di letakkan.
    • controllers: di sini kita letakkan file-file yang berkaitan dengan proses bisnis aplikasi kita.
    • domain: file-file yang berkaitan dengan definisi tabel-tabel di database ada disini.
    • i18n: untuk internasionalisasi aplikasi kita.
    • services: jika aplikasi yang dibuat membutuhkan web service, disinilah tempatnya.
    • views: disini file-file yang digunakan menampilkan data-data dan hasil dari proses bisnis.
  • lib: jika anda ingin menambahkan pustaka lain, maka letakkan di sini.
  • src: di dalam folder/direktori ini anda bisa menambahkan file-file Java atau Groovy yang diperlukan oleh aplikasi anda.
  • web-app: disini tempat file-file html, javascript, css dan gambar untuk aplikasi anda.
    • css: folder/tempat file css anda.
    • images: folder/direktori tempat file gambar anda.
    • js: folder/direkrori tempat file JavaScript anda.
Masuk ke dalam folder/direktori teman. Kemudian ketik perintah berikut:
teman>grails run-app
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\source\teman
Running script c:\grails\scripts\RunApp.groovy
Environment set to development
    [mkdir] Created dir: C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\classes
  [groovyc] Compiling 6 source files to C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\classes
    [mkdir] Created dir: C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\resources\grails-app\i18n
[native2ascii] Converting 11 files from C:\source\teman\grails-app\i18n to C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\resources\grails-app\i18n
     [copy] Copying 1 file to C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\classes
     [copy] Copied 2 empty directories to 2 empty directories under C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\resources
Running Grails application..
Server running. Browse to http://localhost:8080/teman
Buka browser favorit anda dan masukkan alamat [http://localhost:8080/teman]. Jika tidak ada kesalahan, maka akan tampil seperti berikut:
grails02-01
Mungkin diantara anda ada yang bertanya, 'aplikasi belum dibuat kok sudah bisa di jalankan?'. Ya, itulah salah satu kelebihan Grails di bandingkan framework MVC lainnya. ;-)

Nah, sekarang mari kita mulai melengkapi aplikasi kita dengan membuat sebuah kelas domain (atau model dalam definisi MVC). Kelas domain yang akan kita buat adalah 'Daftar Teman' sesuai dengan rancangan yang telah kita buat di atas. Tetap di folder/direktori teman, ketikkan perintah berikut:

teman>grails create-domain-class daftarTeman
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\source\teman
Running script c:\grails\scripts\CreateDomainClass.groovy
Environment set to development
Created DomainClass for DaftarTeman
Created Tests for DaftarTeman

Perintah diatas akan menghasilkan sebuah file DaftarTeman.groovy di folder/direktori grails-app/domain. Yang isinya seperti berikut:

class DaftarTeman {

    static constraints = {
    }
}
Ubahlah file DaftarTeman.groovy diatas sehingga menjadi seperti:

class DaftarTeman {
    String nama
    String alamat
    String nomorHP
    String nomorTelpon
    Date tanggalLahir

    static constraints = {
        nama(size:0..40, nullable: false)
        alamat(size:0..80, nullable: true)
        nomorHP(size:0..20, nullable: true)
        nomorTelpon(size:0..20, nullable: true)
        tanggalLahir()
    }
    
    String toString() {
        "$nama"
    }
}

Setelah perubahan atas file DaftarTeman.groovy selesai dan telah di simpan, kita kembali ke folder/direktori teman. Kemudian ketik perintah berikut:
teman>grails generate-all daftarTeman
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\source\teman
Running script c:\grails\scripts\GenerateAll.groovy
Environment set to development
  [groovyc] Compiling 2 source files to C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\classes
  [groovyc] Compiling 1 source file to C:\Documents and Settings\Oz\.grails\1.1.1\projects\teman\classes
Generating views for domain class DaftarTeman ...
Generating controller for domain class DaftarTeman ...
Finished generation for domain class DaftarTeman

Perintah diatas men-generate file-file untuk views dan controller berdasarkan domain DaftarTeman.groovy. Jika anda buka file-file tersebut, isinya kurang lebih seperti berikut:
DaftarTemanController.groovy
class DaftarTemanController {
    
    def index = { redirect(action:list,params:params) }

    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        [ daftarTemanInstanceList: DaftarTeman.list( params ), daftarTemanInstanceTotal: DaftarTeman.count() ]
    }

    def show = {
        def daftarTemanInstance = DaftarTeman.get( params.id )

        if(!daftarTemanInstance) {
            flash.message = "DaftarTeman not found with id ${params.id}"
            redirect(action:list)
        }
        else { return [ daftarTemanInstance : daftarTemanInstance ] }
    }

    def delete = {
        def daftarTemanInstance = DaftarTeman.get( params.id )
        if(daftarTemanInstance) {
            try {
                daftarTemanInstance.delete(flush:true)
                flash.message = "DaftarTeman ${params.id} deleted"
                redirect(action:list)
            }
            catch(org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "DaftarTeman ${params.id} could not be deleted"
                redirect(action:show,id:params.id)
            }
        }
        else {
            flash.message = "DaftarTeman not found with id ${params.id}"
            redirect(action:list)
        }
    }

    def edit = {
        def daftarTemanInstance = DaftarTeman.get( params.id )

        if(!daftarTemanInstance) {
            flash.message = "DaftarTeman not found with id ${params.id}"
            redirect(action:list)
        }
        else {
            return [ daftarTemanInstance : daftarTemanInstance ]
        }
    }

    def update = {
        def daftarTemanInstance = DaftarTeman.get( params.id )
        if(daftarTemanInstance) {
            if(params.version) {
                def version = params.version.toLong()
                if(daftarTemanInstance.version > version) {
                    
                    daftarTemanInstance.errors.rejectValue("version", "daftarTeman.optimistic.locking.failure", "Another user has updated this DaftarTeman while you were editing.")
                    render(view:'edit',model:[daftarTemanInstance:daftarTemanInstance])
                    return
                }
            }
            daftarTemanInstance.properties = params
            if(!daftarTemanInstance.hasErrors() && daftarTemanInstance.save()) {
                flash.message = "DaftarTeman ${params.id} updated"
                redirect(action:show,id:daftarTemanInstance.id)
            }
            else {
                render(view:'edit',model:[daftarTemanInstance:daftarTemanInstance])
            }
        }
        else {
            flash.message = "DaftarTeman not found with id ${params.id}"
            redirect(action:list)
        }
    }

    def create = {
        def daftarTemanInstance = new DaftarTeman()
        daftarTemanInstance.properties = params
        return ['daftarTemanInstance':daftarTemanInstance]
    }

    def save = {
        def daftarTemanInstance = new DaftarTeman(params)
        if(!daftarTemanInstance.hasErrors() && daftarTemanInstance.save()) {
            flash.message = "DaftarTeman ${daftarTemanInstance.id} created"
            redirect(action:show,id:daftarTemanInstance.id)
        }
        else {
            render(view:'create',model:[daftarTemanInstance:daftarTemanInstance])
        }
    }
}
Dan, pada folder/direktori grails-app/views/daftarTeman akan terdapat beberapa file seperti tampak pada struktur folder/direktori di bawah ini.
|   error.gsp
|   index.gsp
|
+---daftarTeman
|       create.gsp
|       edit.gsp
|       list.gsp
|       show.gsp
|
\---layouts
        main.gsp

Nah, sekarang kita coba jalankan kembali aplikasi kita. Ketik perintah berikut,
teman>grails run-app
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\source\teman
Running script c:\grails\scripts\RunApp.groovy
Environment set to development
  [groovyc] Compiling 1 source file to C:\Documents and Settings\Oz\.grails\1.1.
1\projects\teman\classes
Running Grails application..
Server running. Browse to http://localhost:8080/teman
Jika anda buka browser dan memasukkan alamat [http://localhost:8080/teman]maka akan tampak tampilan seperti di bawah ini.

grails02-02

Dan seperti yang anda lihat, ada tambahan baru pada halaman yang kita buka. Jika kita klik [DaftarTemanController] maka akan tampil halaman seperti berikut,

grails02-03

Karena aplikasi kita baru saja di buat maka tidak ada data yang di tampilkan. Sekarang coba kita isi data, klik [New DaftarTeman] maka akan muncul form isian seperti di bawah ini,

grails02-04

Setelah data diisi,

grails02-04a

Dan kita klik [create] maka akan muncul halaman seperti ini,

grails02-04b

Dan jika kita klik [DaftarTeman List] maka akan muncul halaman berikut,

grails02-04c

Nah, sampai di sini dulu tutorial Grails bagian kedua. Pada bagian berikutnya akan kita bahas lebih rinci langkah-langkah di atas. Happy hacking!

Kamis, 08 Oktober 2009

Belajar Grails (bagian pertama)

Belajar Grails


Apakah Grails itu?


Grails adalah sebuah framework web yang di buat menggunakan bahasa pemrograman Groovy diatas platform Java . Grails di buat sebagai framework produktifitas tinggi dengan mengikuti paradigma "coding by convention", di mana developer bisa lebih fokus pada pembuatan aplikasi dan tidak di repotkan dengan bermacam-macam konfigurasi yang biasa di temui pada framework lainnya.

Grails di desain untuk mudah di pelajari, mudah mengembangkan aplikasi dan mudah di rawat. Grails mencoba menawarkan keseimbangan antara konsistensi dan fitur-fitur yang powerful. Penjelasan lainnya dapat anda lihat di wikipedia.

Grails adalah salah satu dari sekian banyak framework MVC ( model-view-controller ) yang di buat pada platform Java. Karena di bangun pada platform Java, maka Grails dapat memanfaatkan pustaka-pustaka Java yang telah ada sebelumnya. Dan dalam membuat Grails, pihak pengembang memanfaatkan Hibernate dan Springs sebagai fondasi dasarnya namun dengan antarmuka yang lebih sederhana dan konsisten.

Grails di buat untuk mempermudah pengembang dalam pembuatan sebuah sistem yang cepat. Cepat di sini maksudnya adalah klien dapat cepat melihat seperti apa sistem yang akan di buat nantinya. Setelah desain data telah di definisikan, pengembang dapat membuat prototip dari sistem yang akan di kembangkan lebih lanjut dan klien dapat segera melihat hasilnya dalam waktu singkat.

Groovy?


Groovy adalah sebuah bahasa pemrograman dinamis yang dibuat dengan bahasa pemrograman Java. Groovy di desain dengan mengambil fitur-fitur terbaik yang terdapat dalam bahasa pemrograman dinamis lainnya seperti Python, Ruby, dan Smalltalk.

Instalasi Groovy.


Karena Grails menggunakan Groovy, maka anda harus menginstalasi Groovy terlebih dahulu untuk menjalankan Grails. Di bawah akan di jelaskan secara singkat langkah-langkah instalasi Groovy.
  • Download versi terakhir Groovy dari situs http://groovy.codehaus.org/Download .
  • Mekarkan groovy-binary-x.x.x.zip ke folder yang anda inginkan.
  • Tambahkan variabel lingkungan (environment variable) GROOVY_HOME dengan menunjuk ke folder di mana anda memekarkan file .zip tadi.
  • Tambahkan %GROOVY_HOME%\bin (di OS Windows) atau $GROOVY_HOME/bin (di OS berbasis *nix) ke path sistem anda.
  • Buka konsol (Command prompt di Windows), ketikkan perintah berikut:
>groovy -version
  • Jika anda melakukan instalasi dengan benar, maka akan muncul tulisan seperti berikut ini.
Groovy Version: 1.6-beta-1 JVM: 1.6.0_11
  • Dan anda telah sukses memasang Groovy di komputer anda.

Sekilas membuat program dengan Groovy.


Berikut adalah beberapa contoh pendek program Groovy.
def vars = "World"
print "Hello $vars"
program diatas dapat di tulis juga seperti berikut,
def vars = "World"; print "Hello $vars"
atau bergaya OOP seperti ini,
class Sapa {
  def nama
  Sapa(siapa) {
      nama = siapa[0].toUppercase() + siapa[1..-1]
  }
  def salam() {
     println "Hello $nama!"
  }
}
titip = new Sapa("world")
titip.salam
Dapat di lihat sekilas, bahwa syntax dari Groovy sangat dekat dengan syntax Java. Dan ada sedikit pengaruh bahasa lainnya seperti PHP, Perl, atau Ruby di sana. Program yang di buat dengan Java dapat langsung di jalankan oleh Groovy dengan hanya mengganti ekstensi dari .java ke .groovy (dengan sedikit modifikasi di sana-sini).

Instalasi Grails.


Setelah Groovy berhasil di instalasi, langkah selanjutnya adalah instalasi paket Grails. Berikut adalah langkah-langkahnya.
  • download grails versi terakhir di situs Grails
  • mekarkan file yang telah anda download ke folder yang anda inginkan.
  • Tambahkan variabel lingkungan (environment variable) GRAILS_HOME dengan menunjuk ke folder di mana anda memekarkan file .zip tadi.
  • Tambahkan %GRAILS_HOME%\bin (di OS Windows) atau $GRAILS_HOME/bin (di OS berbasis *nix) ke path sistem anda.
  • Buka konsol (Command prompt di Windows), ketikkan perintah berikut:
>grails help
  • Jika anda melakukan instalasi dengan benar, maka akan muncul tulisan seperti berikut ini.
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails

Base Directory: C:\
Running script c:\grails\scripts\Help_.groovy
Environment set to development
Warning, target causing name overwriting of name default

Usage (optionals marked with *):
grails [environment]* [target] [arguments]*

Examples:
grails dev run-app
grails create-app books

Available Targets (type grails help 'target-name' for more info):
grails bootstrap
grails bug-report
grails clean
grails compile
grails console
grails create-app
grails create-controller
grails create-domain-class
grails create-filters
grails create-integration-test
grails create-plugin
grails create-script
grails create-service
grails create-tag-lib
grails create-unit-test
grails doc
grails generate-all
grails generate-controller
grails generate-views
grails help
grails init
grails install-plugin
grails install-templates
grails list-plugins
grails package
grails package-plugin
grails plugin-info
grails release-plugin
grails run-app
grails run-war
grails schema-export
grails set-proxy
grails set-version
grails shell
grails stats
grails test-app
grails uninstall-plugin
grails upgrade
grails war

Nah, kita telah berkenalan dengan Grails. Untuk saat ini sekian dulu saya sajikan. Dalam tulisan berikutnya, akan di bahas bagaimana membuat aplikasi dengan Grails, membahas secara ringkas Groovy, dst.