BitNami: One-click-install Open Source Apps

24 04 2008

Hi all, lama ga ngeblog lagi. Sebenarnya uda ada banyak draft posting tapi ga sempet selesai2 juga. Stay tune guys.

Oke sedikit pertanyaan dari gw sebagai introduction,

  • Pernah merasa sulit untuk install open source apps seperti, trac, drupal, roller, liferay, redmine, tracks, alfresco, moodle?
  • Pernah merasa pusing ketika diminta install open source apps selain di windows?
  • Pernah merasa kesal ketika ingin install open source apps lalu butuh package ini itu?
  • Pernah mengalami proses instalasi diluar dari skenario instalasi manual yang diberikan oleh open source apps? kemudian googling, tanya forum, dan akhirnya bisa atau akhirnya menyerah?

Tenang, skrng ada solusi yang membantu teman2 semua, mari kita sambut … Bitnami. Read the rest of this entry »




Going to Enterprise with Java Training

10 03 2008

Hi all, bagi teman-teman yang tidak sempat mengikuti Training Java di liburan Imlek kemaren, kami membuka lagi training Java EE, kali ini bertempat di Jakarta selama liburan panjang di bulan Maret. Materi training sama dengan training sebelumnya dengan beberapa perbaikan tentunya. Bagi yang penasaran, silahkan lihat detail informasinya,

Pelaksanaan:
Waktu : Kamis - Minggu, 20 - 23 Maret 2008
Pukul : 9.00 - 16.00 WIB
Tempat : Jln. Gedung Hijau Raya SF 07 No. 74, Pondok Indah, Jakarta Selatan. Dekat Restaurant Obonk Steak

Materi Training:
1. Java Fundamental
2. JDBC dan DAO Pattern
3. Spring 2.5 JDBC
4. Java Server Faces 1.2
5. Richfaces Component
6. JasperReports
7. NetBeans 6.0

Trainer :
Endy Muhardin (http://endy.artivisi.com)
Ifnu Bima (http://nagasakti.or.id/roller/ifnu)
Hadikusuma Wahab (http://dhiku.wordpress.com)

Fasilitas:
1. Makan siang serta snack
2. Modul & CD Training
3. Sertifikat
4. Satu buah Pin Artivisi
5. Infocus
6. Fasilitas penginapan untuk tiga malam (tempat terbatas) Read the rest of this entry »




Training Java EE di Liburan Imlek

31 01 2008

Hi all,

Liburan imlek nanti tanggal 7, 8, 9, 10 Februari akan diadakan training Java EE.

Berikut detail trainingnya.

Trainer :
Ifnu Bima (http://nagasakti.or.id/roller/ifnu)
Endy Muhardin (http://endy.artivisi.com)
Hadikusuma Wahab (http://dhiku.wordpress.com)

Waktu dan tempat:
Tanggal : 7 - 10 Februari 2008
Jam : 9.00 - 16.00
Tempat : Jl. Palupuh 3 dalam no 2, Bantar Jati Bogor.

Materi Training:
1. Java Fundamental
2. JDBC dan Dao Pattern
3. Spring 2.5 JDBC
4. Java Server Faces
5. Richfaces Component
6. JasperReports
7. NetBeans 6.0

Informasi lebih lanjut dapat dilihat disini

Karena gw ngasi materi JSF dan Jasperreport, sedikit bocoran untuk silabusnya, Read the rest of this entry »




Software Development Stack

24 01 2008

Based on discussion in JUG Indonesia mailing list, there are currently two persons have shared their favorite development stack,

Now its my turn to share my favorite stack,

Presentation
Mojarra 1.2 with RichFaces + Tomahawk component

Templating
Facelets (really good with JSF)

Reporting Tools
JasperReport and iReport for visual designer

Business and Integration Layer
Spring Framework

Data Access
Hibernate, please note without JPA :P

Security
Spring Security, yeah it can secure your app based on URL, method, object, also EVERY component in JSF :) sluuurp

Testing
Unit testing with JUnit 4 + EasyMock
Integration testing with DBUnit
Coverage testing with Cobertura
Planning to implement JSFUnit for presentation testing

Build system
Apache Ant

Continuous integration server
Hudson

App Server
Tomcat for development, Glassfish for production

Database
MySQL for development, PostgreSQL for production

Project Management Tools
Redmine (task and bug tracking and wiki)

IDE
Eclipse is okay, but Netbeans rocks :))

Done! Your turn please :)




Drupal Deployment dan Backup dengan Capistrano

19 01 2008

Setelah bermain2 dengan drupal untuk project web collaboration, gw selalu melakukan kegiatan yang sifatnya administratif dan berulang2. Parahnya lagi ini ga bisa gw lakukan lewat administrator interface. Beberapa hal tsb misalnya,

  • Karena project disimpan di subversion maka untuk memulai project, gw dan anggota tim harus,
    • Checkout project dari repository
    • Memindahkan hasil checkout ke direktori /var/www/
    • Setelah kerjaan selesai, tinggal commit hasilnya
  • Deployment ke server
    • SSH ke server
    • Export project (last stable) dari repository
    • Backup project sebelumnya dengan me-rename namanya menjadi project-backup. Misalnya dari /var/www/project ke /var/www/project-backup
    • Memindahkan hasil export project ke direktori /var/www
  • Backup data
    • SSH ke server
    • Copy project ke direktori backup. Misalnya, copy dari direktori /var/www/project ke /backup/project-[tanggal_hari_ini]
    • Dump database dan simpan di dalam direktori backup (/backup/project-[tanggal_hari_ini])

Kegiatan tsb kalo dilakukan terus menerus akan sangat membosankan. Nah maka itu gw pgn semua proses di atas bisa diotomasi. Maka gw ketemu sama yang namanya Capistrano, tools yang dibuat di atas ruby dan bertugas untuk melakukan otomasi kegiatan2 yang sifatnya repetitif seperti, instalasi, deployment, mengatur konfigurasi2, backup, dsb. Karena dibuat dengan ruby maka capistrano ini mudah di-extend dengan menambah ruby module. Capistrano ini bisa melakukan otomasi project yang dibangun selain ruby (walaupun awalnya ditujukan khusus ruby).

Maka dari itu gw mau share script capistrano untuk melakukan deployment dan backup pada projek drupal. Dengan asumsi OS yang digunakan adalah Ubuntu. Read the rest of this entry »




Menggunakan DataSource dengan JasperReport

7 01 2008

Akhir2 ini di milis netbeans-indonesia, sering yang bertanya tentang reporting dengan menggunakan jasperreport. Oleh karena itu gw mau sedikit sharing tentang reporting tools ini. Okay, sebelumnya sharing ini gw asumsikan pembaca sudah pernah menggunakan atau setidaknya pernah mencoba untuk menampilkan report dengan data yang berasal dari database.

Ada banyak cara untuk menampilkan report, yang pertama adalah dengan memasukkan seluruh SQL ke dalam JRXML, namun pendekatan ini menurut gw kurang fleksibel. Kenapa? karena setiap ada perubahan pada tabel database kita harus mengubah kode tsb di JRXML, compile ulang menjadi jasper file, dan memastikan query ditampilkan dengan sempurna. Selain itu manipulasi dan kalkulasi terhadap row-pun sulit dilakukan, dan juga bagaimana kalo pake ORM seperti hibernate? apa mau kembali nulis SQL lagi setelah terbiasa dengan HQL? Thanks but no thanks :D

JasperReport sudah memfasilitasi hal ini dengan menggunakan konsep DataSource. Intinya adalah proses pengambilan data dipindahkan ke kode Java, dimasukkan ke dalam DataSource, dan DataSource ini tinggal diumpan ke Jasper file (hasil compile JRXML) untuk diisi(fill) dan selanjutnya diexport dalam bentuk report yang diinginkan. Jadi tidak perlu compile2 ulang JRXML lagi jika ada perubahan SQL.

Ada banyak jenis DataSource yang disediakan oleh JasperReport, namun yang paling sering gw gunakan adalah JRBeanCollectionDataSource. Dari namanya pasti bisa ditebak bahwa DataSource ini untuk menyimpan Collection of Object. Selain itu ada juga,

  • JRMapArrayDataSource untuk datasource dari array of map
  • JRMapCollectionDataSource untuk datasource dari collection of map
  • JRBeanArrayDataSource untuk datasource dari array of bean
  • JRTableModelDataSource untuk datasource dari tablemodel di swing
  • JRXmlDataSource untuk datasource dari xml

Oke langsung saja ke contoh,

Objectivenya adalah menampilkan report seluruh user yang terdaftar (yang ada dalam database). Read the rest of this entry »




Whatever You Think, Think The Opposite

5 01 2008

Whatever You Think

Buku ini sebenarnya sudah terbit sejak Maret 2006 dan pas jalan2 ke gramedia tiba2 adek gw nunjukkin buku ini, sekilas terlihat menarik, gw baca sekilas dan gw ga sabar untuk ngebacanya. Dan setelah itu? gw simpulkan buku ini worth it untuk dibaca, sangat inspiratif, disampaikan dengan berani, ilustrasi2 yang kreatif dan contoh2 yang paradoks.

Whatever You Think, Think The Opposite, diawali dengan contoh2 cara berpikir terbalik, misalnya bagaimana atlet yang merubah cara melompat dalam lompat tinggi yang sebelumnya menyajarkan badan dengan palang rintangan (sebelum 196 8) dengan membalikkan badannya sehingga membelakangi palang rintangan. Hasilnya? Rekor pecah. Sebelumnya hanya 5 feet 8 inchi menjadi 7 feet 4 1/4 inchi. Atlet tsb adalah Dick Fosbury, dan teknik ini akhirnya disebut Fosbury Flop. Read the rest of this entry »




10 Langkah membuat Generic DAO dengan Spring 2.5 + Hibernate

17 12 2007

Setiap mengerjakan aplikasi dengan Java EE, gw selalu terbiasa menerapkan layer untuk

  • Model atau domain sistem seperti, User, Group, Departement, dsb tergantung ruang lingkup aplikasi
  • Data Access Object atau biasa disingkat DAO, untuk menenkapsulasi akses database terhadap domain sistem misalnya UserDao untuk operasi getAllUser(), findUserById(), saveUser(), deleteUser() dsb
  • Service layer untuk mengenkapsulasi berbagai macam Dao ke dalam satu service agar mudah digunakan dari sisi client (bagian lain dari aplikasi yang mengakses kode kita), misalnya UI atau antar muka
  • UI layer untuk logika2, validasi, dan flow yang bersifat interaksi dengan user

Concern gw adalah semakin banyak atau kompleks model atau domain sistem, biasanya Dao pun akan semakin banyak dan gw cenderung melakukan hal yang sama untuk hal2 kecil dan remeh, contohnya method untuk save user dan find user (menggunakan HibernateDaoSupport dari Spring),


public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {

	public void save(User user){
		getHibernateTemplate().saveOrUpdate(user);
		getHibernateTemplate().flush();
	} 

	public User findUser(Integer id){
		final User user = (User) getHibernateTemplate().load(User.class, id);
		getHibernateTemplate().initialize(user);
		return user;
	} 

}

Kalo gw mau buat Dao untuk Group ya gw lakukan hal yang sama dengan mengubah User menjadi Group dan seterusnya. Ini jelas tidak mengikuti prinsipnya pragmatic programmer DRY (Dont Repeat Yourself), solusinya adalah dengan menggunakan konsep Generic dari Java 5, yang perlu gw lakukan cuma declare class GenericDao dan setiap Dao akan extends kelas ini. Kode diatas akan menjadi,


public class UserDaoHibernate extends GenericDaoHibernate<User, ID extends Serializable> implements UserDao {
}

oh mau buat dao untuk group? gampang!


public class GroupDaoHibernate extends GenericDaoHibernate<Group, ID extends Serializable> implements GroupDao {
}

Konsep GenericDao ini sebenarnya sudah cukup lama dipulikasikan, namun karena sekarang lagi booming Spring 2.5, gw akan coba sharing GenericDao dengan Spring 2.5 + Hibernate dan meminimalisir jumlah konfigurasi yang ada di xml untuk dipindahkan ke source code. Gw ga bilang konfigurasi di xml itu jelek, tapi menurut gw ga semuanya harus ada di xml dan berikut ada post yang menarik mengenai konfigurasi dengan XML vs annotation. Anyway post ttg spring 2.5 juga dibahas oleh Endy Muhardin untuk akses ke DB dengan JDBC dan akses web.Langsung saja kita bahas ttg GenericDao dengan Spring 2.5 dan Hibernate,
Read the rest of this entry »




Unit Test: Mock Objek dengan EasyMock

11 12 2007

Unit test menurut gw adalah hal yang wajib dilakukan oleh para developer modern, karena memang tidak ada alasan untuk tidak melakukan itu. Kenapa harus melakukan unit testing?

Unit test meningkatkan kualitas kode, semakin banyak kode seharusnya bug semakin sedikit. Pada fase bug fixing misalnya, prinsip “mati satu tumbuh seribu” ini hal yg lumrah jika tidak menggunakan unit test. Kualitas kode ini dapat kita peroleh karena dengan unit test akan mudah melakukan refactoring dan penambahan fitur, kenapa? karena developer bisa confident bahwa perubahan atau penambahan fitur yang dilakukan tidak berdampak terhadap modul lain. Dengan prinsip Test Driven Development, yaitu menulis test dulu baru membuat implementasi kode, membuat setiap unit terkecil (method) dari kode akan mempunyai unit test. Sehingga ketika kode sudah banyak -unit testnya juga banyak- dan pada saat developer melakukan perubahan di satu tempat, dia akan yakin apakah test2 yang sebelumnya sukses atau gagal. Dan kalopun gagal, bugnya lgsng ketahuan -tidak pada saat testing atau UAT :P- . Hal ini tentu berdampak pada cepatnya development cycle. Walopun saya setuju pada saat awal2 akan terasa lambat kodingnya tapi ini investasi yang besar seiring bertambahnya kode aplikasi.

Menurut, andrew hunt pengarang pragmatic unit testing untuk membuat unit test yang baik harus memenuhi prinsip2 utama (A-TRIP):

  • Automatic, testing harus otomatis, setiap kali perubahan developer lgsng tahu apakah kode perubahan tsb error atau impact ke modul lain.
  • Through, testing harus mencakup seluruh kode aplikasi.
  • Repeatable, diulang berapa kali pun hasilnya tetap sama
  • Independent, tidak bergantung ke objek atau modul lain
  • Professional, menulis test harus sama bagusnya dengan menulis kode.

Pada kali ini gw akan bahas syarat yang ke empat yaitu Independent. lalu bagaimana menghilangkan dependensi terhadap objek2 lain dengan mock object. Sebenarnya ada hal2 lain kenapa harus me-mock (memalsukan) objek dalam unit test. Read the rest of this entry »




Sumber Belajar di Internet

26 11 2007