25 Jan 2011
Posting ini adalah update dari posting tiga tahun yang lalu. Tidak banyak yang berubah dalam stack ini, yang bisa berarti dua hal: pilihan tiga tahun yang lalu sudah tepat atau malas belajar selama 3 tahun ini.
Mudah-mudahan alasannya yang pertama :D
Update : Gradle tidak jadi dipakai, karena kita tidak mau maintain 2 skillset. Maven 2 ternyata stabil dan bekerja sesuai harapan. Hudson terlibat kerusuhan dengan Oracle, akhirnya fork jadi Jenkins.
Presentation Layer
-
Spring MVC
-
SiteMesh
-
Dojo Toolkit
-
ExtJS
-
Spring Security
-
Jasper Report
-
Jackson
Business Layer
-
Spring Framework
-
Hibernate
Library lain yang sering digunakan
-
Logback
-
Joda Time
-
Velocity
-
JPos
Infrastruktur
-
Version Control : Git + Gitosis
-
Testing Tools : JUnit, DBUnit, JMeter, Sonar
-
Issue Tracker : Redmine
-
Build Tools : Gradle, Maven
-
Continuous Integration : Hudson Jenkins
-
OS Programmer : Ubuntu Desktop
-
OS Server : Ubuntu Server, Debian
Deployment Target
-
Database Server : MySQL, Oracle
-
Application Server : Tomcat, Glassfish
Praktis perubahan yang terjadi hanyalah dari Subversion ganti menjadi Git.
Nah, bagaimana menurut Anda? Pilihan tepat atau malas belajar?
11 Jan 2011
Skenario : selama ini kita coding di laptop sendiri saja. Kemudian ada kebutuhan untuk kolaborasi dengan orang lain melalui Git. Bagaimana caranya? Baiklah mari kita bahas di artikel ini.
Inisialisasi Repository Git
Pertama, kita inisialisasi dulu repository Git. Masuk ke dalam folder project dan ketikkan
Git akan membuat repository kosong di dalam folder project, ditandai dengan adanya folder baru bernama .git
Selanjutnya, kita akan memasukkan semua file dan folder project kita ke dalam repository. Yang harus dimasukkan adalah file source code, baik itu Java, HTML, XML, dan sebagainya. Yang tidak perlu dimasukkan adalah file hasil kompilasi atau hasil generate. Kita perlu mendaftarkan file yang tidak ingin disimpan dalam file konfigurasi yang bernama .gitignore
File ini harus kita buat sendiri menggunakan text editor. Berikut contoh isi filenya, bila kita coding menggunakan Eclipse atau Netbeans
[gist id=773975]
Setelah kita setting ignore file, berikutnya kita masukkan semua file dan folder ke dalam antrian.
Kemudian, simpan ke repository
git commit -m "commit pertama project XXX"
Project sudah tersimpan di repository Git di komputer lokal kita. Mari kita upload ke server, atau dikenal dengan istilah push.
Share Repository
Kita memerlukan server di mana kita memiliki ijin akses untuk melakukan push. Cara memperoleh ijin akses tidak dibahas pada artikel ini. Silahkan buat account di Github atau Gitorious. Bila ingin push ke repository perusahaan, minta informasinya pada admin Anda.
Setelah kita mendapatkan URL server yang bisa kita gunakan, daftarkan sebagai remote. Berikut perintahnya.
git remote add <namaremote> <URL>
Contohnya seperti ini
git remote add github git@github.com:endymuhardin/project-terbaru-saya.git
Pastikan remotenya sudah terdaftar dengan perintah berikut
Terakhir, mari kita push dengan perintah berikut
git push <namaremote> <namabranch>
Contohnya
Hore, project kita sudah naik ke server. Kita tinggal share URL tersebut ke rekan kerja kita.
09 Jan 2011
Gist adalah fitur yang disediakan oleh Github. Fungsi dasarnya mirip dengan pastebin, yaitu kita bisa paste text di sana, dan disharing dengan orang lain. Keunggulan Gist adalah dia sudah memiliki kemampuan version control dengan Git. Sehingga kita bisa fork, clone, modifikasi, dan push lagi ke repo utama dengan seluruh history tersimpan di sana.
Untuk bisa menggunakan Gist, kita harus memiliki account Github dulu. Setelah itu, kita bisa buat gist di sini.
Cara membuatnya tidak sulit. Cukup entri nama file, keterangan, dan isi text yang mau dishare.

Setelah itu, tekan Create Public Gist. Gist kita akan siap digunakan.

Gist yang sudah dibuat bisa dipasang di blog. Caranya, klik tombol embed.

Nanti akan muncul textfield berisi tag HTML untuk dipasang di blog, kira-kira seperti ini tagnya:
<script src="https://gist.github.com/770832.js?file=HelloWorld.java"></script>
Tag ini bisa langsung dipasang di blog kita. Hasilnya seperti di bawah ini.
Kelemahan cara ini adalah dia membutuhkan javascript, dan isi filenya tidak terindeks oleh spider. Untuk mengatasinya, kita gunakan plugin wordpress ini.
Setelah digunakan, kita cukup memasang tag khusus seperti dijelaskan di websitenya. Ini contoh hasilnya
[gist id=770832]
Sekilas tidak terlihat bedanya antara pakai plugin dan tidak. Tapi coba lihat source halaman ini, klik kanan kemudian View Source. Yang menggunakan plugin, source codenya benar-benar ada tulisannya. Sedangkan yang pakai tag script tidak ada source code hello worldnya.
Nah, kalau sudah pakai ini, tidak perlu bingung lagi mewarnai source code di blog. Kalau mau revisi, tinggal edit aja di Github, dan otomatis di blog langsung terupdate.
07 Jan 2011
Setelah kemarin kita bahas migrasi di sisi server, sekarang kita bahas instalasi di client. Kenapa yang dijelaskan hanya Windows, sedangkan Linux tidak? Well, ini karena di Linux instalasinya begitu mudah sehingga terlalu pendek kalau ingin dijadikan satu posting sendiri.
Gak percaya? Ini caranya install di Ubuntu. Buka command prompt, dan ketik
sudo apt-get install git-core git-svn git-gui gitk
Sedikit konfigurasi standar.
git config --global user.name "Endy Muhardin"
git config --global user.email "endy.muhardin@geemail.com"
git config --global color.ui "true"
Kemudian, bila kita belum punya public key, silahkan bikin seperti tutorial di sini.
Dan selesailah sudah. Seperti saya bilang sebelumnya, singkat dan sama sekali gak seru. Gak ada screenshotnya :D
Nah, mari kita bahas instalasi di Windows.
Pertama, unduh Git dari websitenya. Pastikan kita mengambil yang sesuai dengan arsitektur komputer kita (32 bit atau 64 bit).
Setelah diunduh, tentu kita jalankan. Berikut screenshot next-next seperti biasa.








Perhatikan, untuk langkah selanjutnya, kita perlu mengganti opsi default menjadi pilihan yang kedua.






Sampai di sini, instalasi Git sebetulnya sudah selesai. Tapi kita perlu membuat pasangan public dan private key supaya bisa mengakses Github, Bitbucket, atau provider lain melalui protokol SSH. Dengan menggunakan protokol SSH, kita tidak perlu mengetik username/password setiap melakukan sinkronisasi dengan remote repository.
Membuat Key Pair
Pertama, kita jalankan dulu Git Bash. Ini akan membuka command prompt khusus yang disediakan Git.

Selanjutnya, jalankan perintah ssh-keygen
. Kita akan ditanyai nama file yang akan dibuat. Ikuti saja defaultnya, yaitu id_rsa
untuk private key, dan id_rsa.pub
untuk public key.
Kita juga akan dimintai password untuk membuka private key. Tekan Enter
bila tidak mau pakai password.

Selanjutnya, kita akan menemui kedua file private dan public key di folder C:\Users\namauser\.ssh
seperti ini.

Kedua file bisa dibuka dengan text editor. Yang perlu kita buka hanyalah public key saja.

Isi public key ini nantinya akan kita pasang di Github
Clone dari Github
Untuk bisa clone dari github, pertama kali kita harus punya account Github. Silahkan daftar dulu.
Setelah punya account, login, dan kita akan melihat dashboard.

Klik account setting, dan masuk ke menu SSH Public Keys

Pastekan public key yang sudah kita generate pada langkah sebelumnya. Setelah diadd, public key kita akan terdaftar. Kita boleh pasang public key banyak-banyak, karena biasanya satu public key mencerminkan satu komputer. Bisa saja kita punya PC dan juga Laptop.

Setting Public Key di Bitbucket
Selain Github, provider lain yang juga populer adalah Bitbucket. Untuk mendaftarkan public key di Bitbucket, kita bisa akses menu di kanan atas, yang ada gambar avatar kita.

Pilih Bitbucket Settings, kita akan mendapatkan halaman Settings

Klik SSH Keys di kiri bawah. Kita akan mendapati halaman untuk menambah SSH Keys.

Klik Add Key untuk menambah public key SSH. Selanjutnya, copy dan paste isi public key kita ke kotak yang disediakan.

Klik Save, dan public key kita sudah terdaftar

Kita juga akan mendapatkan notifikasi lewat email bahwa ada SSH key baru yang didaftarkan

Mengunduh Isi Repository
Setelah public key didaftarkan, selanjutnya kita lihat repository yang kita punya.

Kalau belum punya repository, Anda bisa fork repository belajarGit punya saya, sehingga nanti Anda punya repo belajarGit sendiri.
Perintahnya adalah sebagai berikut (jalankan dari command line)
git clone git@github.com:endymuhardin/belajarGit.git
Sekarang repository sudah ada di local, dan siap digunakan. Bagaimana cara menggunakannya, stay tuned. Akan dibahas di posting berikutnya.
03 Jan 2011
Di tahun yang baru ini, kami di ArtiVisi juga beralih menggunakan version control baru, yaitu Git.
Menggantikan Subversion yang sudah kita gunakan sejak 2008.
Ada banyak keunggulan Git dibandingkan Subversion, diantaranya:
-
offline operation. Git adalah distributed/decentralized version control system (DVCS), artinya tidak membutuhkan server terpusat untuk bisa bekerja. Keunggulan ini berakibat pada keunggulan berikutnya, yaitu:
-
commit sesuai task, bukan sesuai koneksi internet. Dulu, karena koneksi internet terbatas, programmer commit hanya pada saat ada internet. Akibatnya satu commit berisi perubahan untuk banyak task, tercampur aduk tidak jelas peruntukannya. DVCS memungkinkan programmer untuk commit walaupun tidak ada koneksi internet, dan melakukan sinkronisasi pada saat offline.
-
fitur staging area di Git, memungkinkan kita untuk mengatur isi commit secara detail.
-
fitur rebase untuk mengatur commit. Commit yang teratur akan memudahkan review.
-
branch dan merge yang lebih baik daripada subversion. Karena branch dan merge mudah, maka kita bisa menerapkan berbagai teknik workflow dalam mengelola development.
-
website social coding. Github dan Gitorious merupakan Facebook-nya para programmer. Untuk bisa terlibat di dalamnya, terlebih dulu kita harus bisa Git.
Selain Git, ada juga DVCS lain seperti Mercurial (hg), Bazaar (bzr), dsb. Git dipilih karena :
-
popularitas. Semakin populer, tutorial dan aplikasi pendukung semakin banyak, sehingga semakin nyaman digunakan. Saat ini yang paling populer cuma dua, yaitu git dan hg.
-
local/named branch. Ini fitur penting, tapi entah kenapa tidak ada di core hg. Sepertinya ada di extension, tapi yang jelas merupakan workaround dan bukan didesain sejak awal. Tanpa named branch, pilihan workflow menjadi terbatas.
-
Social coding Git (Github dan Gitorious) jauh lebih superior daripada Mercurial (Bitbucket)
Beberapa faktor di atas adalah alasan kenapa Git yang dipilih.
Baiklah, sekarang saatnya migrasi. Kita akan mengkonversi repository Subversion menjadi repository Git.
Berikut langkah-langkah yang akan kita lakukan:
-
Dump repository Subversion
-
Restore lagi di laptop supaya cepat
-
Buat authorsfile
-
Buat ignore file
-
Clone tanpa metadata
-
Konversi branch
-
Konversi tags
-
Clone hasil konversi menjadi bare repository
Dump repository Subversion
Seperti biasa, sebelum melakukan apapun, lakukan backup dulu. Just in case.
Perintahnya gampang.
svnadmin dump /path/ke/repository | bzip2 -c9 > dump-repository-yyyyMMdd.dmp.bz2
Restore lagi di laptop/PC supaya cepat
Langkah ini optional, kalau kita ingin melakukannya di komputer kita sendiri, bukan di server.
Tapi sebaiknya dilakukan, karena nanti kita akan checkout beberapa kali yang pasti membutuhkan waktu lama jika dilakukan ke server.
Perintah restore gampang.
bzcat dump-repository-yyyyMMdd.dmp.bz2 | svnadmin load /path/ke/repo/svn/di/lokal
Buat authorsfile
Setelah kita memiliki repository Subversion, kita perlu mengambil daftar nama orang-orang yang pernah commit. Ini akan kita butuhkan pada waktu konversi. Nama committer ini diambil dari hasil checkout Subversion. Jadi mari kita checkout dulu.
svn checkout file:///path/ke/repo/svn/di/lokal checkout-project-svn
Karena lokal, harusnya hanya membutuhkan beberapa menit saja.
Setelah dilakukan checkout, kita membutuhkan script untuk mengambil nama committer. Berikut isi scriptnya, simpan saja dengan nama extract-svn-authors.sh
#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
echo "${author} = NAME <USER@DOMAIN>";
done
Jalankan script tersebut di dalam folder hasil checkout.
cd checkout-project-svn
sh /path/ke/script/extract-svn-authors.sh > nama-committers.txt
Ini akan menghasilkan file nama-committers.txt yang berisi nama committer seperti ini :
endy = NAME <USER@DOMAIN>
Editlah file ini supaya mencerminkan nama dan email yang benar, seperti ini :
endy = Endy Muhardin <endy.muhardin@geemail.com>
Buat ignore file
Dalam mengerjakan project, ada file-file yang ada di folder kerja, tapi tidak kita masukkan ke repository. Misalnya file hasil kompilasi, setting IDE, dan sebagainya. File dan folder hasil generate ini biasanya kita daftarkan di ignore list, supaya tidak ikut dicommit ke repository. Kita perlu mengkonversi format ignore di Subversion (svn property ignore) menjadi format ignore versi Git (yaitu file .gitignore).
Untuk membuatnya, kita clone dulu repository Subversion menjadi repository Git. Ini dilakukan di folder yang berbeda dengan hasil checkout Subversion di langkah sebelumnya.
cd ..
git svn clone --stdlayout -A nama-committers.txt file:///path/ke/repo git-svn-migrasi-project-dengan-metadata
Setelah diclone, konversi ignore list nya.
cd git-svn-migrasi-project-dengan-metadata
git svn show-ignore > .gitignore
Selanjutnya, kita lakukan clone lagi. Kali ini tanpa menyertakan metadata, sehingga hasilnya bersih. Metadata ini digunakan bila kita ingin tetap commit ke repository Subversion, tapi ingin menggunakan Git sebagai frontend.
Perintahnya mirip seperti sebelumnya, kali ini kita tambahkan opsi tanpa metadata.
cd ..
git svn clone --no-metadata --stdlayout -A nama-committers.txt file:///path/ke/repo git-svn-migrasi-project-tanpa-metadata
Ini akan menghasilkan folder git-svn-migrasi-project-tanpa-metadata berisi repository Subversion yang sudah dikonversi menjadi repository Git. Semua langkah selanjutnya akan dilakukan di dalam folder ini.
Setelah selesai, kita masukkan file .gitignore ke repo Git yang baru ini.
cd git-svn-migrasi-project-tanpa-metadata
cp ../git-svn-migrasi-project-dengan-metadata/.gitignore ./
git add .
git commit -m "add ignore list"
Konversi branch
Branch yang ada di Subversion harus kita konversi menjadi branch di Git.
Berikut perintahnya.
git branch -r | grep -v tags | sed -rne 's, *([^@]+)$,\1,p' | while read branch; do echo "git branch $branch $branch"; done | sh
Verifikasi hasilnya dengan perintah ini.
Seharusnya semua branch yang ada di repository Subversion akan terlihat di dalam repository Git ini.
Lakukan perintah berikut untuk mengkonversi tag Subversion menjadi tag Git.
git branch -r | sed -rne 's, *tags/([^@]+)$,\1,p' | while read tag; do echo "git tag $tag 'tags/${tag}^'; git branch -r -d tags/$tag"; done | sh
Verifikasi dengan perintah ini
Pastikan semua tag yang tadinya ada di repository Subversion sudah terdaftar di repository Git.
Clone hasil konversi menjadi bare repository
Setelah nama committer, ignore list, branch, dan tags berhasil kita pindahkan, inilah langkah terakhir. Kita clone sekali lagi menjadi repository bare supaya bisa dishare dengan orang lain. Biasanya repository bare ini kita publish dengan Gitosis, gitweb, atau aplikasi server lainnya.
Perintah ini dilakukan di luar repository Git yang kita gunakan pada langkah sebelumnya.
cd ..
git clone --bare git-svn-migrasi-project-tanpa-metadata nama-project.git
Ini akan menghasilkan satu folder dengan nama nama-project.git berisi repository Git yang siap dishare.
Demikian posting tahun baru. Semoga kita semua lebih sukses di tahun 2011 ini.