Scope Variabel

Masih dari pertanyaan di grup Facebook, berikut kode programnya (saya edit sedikit supaya sesuai)

Alternatif Pertama

1
2
3
4
5
6
7
8
9
10
11
public class CobaPertama (){
        String a;
        public void coba1(){
                a = "ari";
                System.out.println(a);
        }
        public void coba2(){
                a = "ira";
                System.out.println(a);
        }
}

Alternatif Kedua

1
2
3
4
5
6
7
8
9
10
public class CobaKedua (){
        public void coba1(){
                String a = "ari";
                System.out.println(a);
        }
        public void coba2(){
                String a = "ira";
                System.out.println(a);
        }
}

Pertanyaannya sebagai berikut

lebih cepatan mana y masta performance aplikasi yg entar kt buat

Mengapa Kita Membuat Class

Ada pertanyaan di grup Facebook yang cukup menarik untuk kita bahas di sini. Sample code yang ditanyakan saya modifikasi sedikit supaya lebih cocok.

Class Mahasiswa

1
2
3
4
5
6
7
8
9
10
11
public class Mahasiswa {
    private String nama;
    private Date tanggalLahir;
    private JenisKelamin jenisKelamin;

    // getter setter
}

public enum JenisKelamin{
    PRIA, WANITA
}

Class SimpanMahasiswaServlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SimpanMahasiswaServlet extends HttpServlet {

    private MahasiswaDao md = new MahasiswaDao();

    public void doPost(HttpServletRequest req, HttpServletResponse resp){
        Mahasiswa m = new Mahasiswa();

        m.setNama(req.getParameter("nama"));

        SimpleDateFormat formatTanggal = new SimpleDateFormat("yyyy-MM-dd");
        m.setTanggalLahir(formatTanggal.parse(req.getParameter("tanggal")));

        m.setJenisKelamin(JenisKelamin.valueOf(req.getParameter("jenis")));

        md.simpan(m);
    }

}

Class MahasiswaDao

1
2
3
4
5
6
7
8
9
10
public class MahasiswaDao {
    public void simpan(Mahasiswa m){
        String sql = "INSERT INTO mahasiswa values (?,?,?)";
        PreparedStatement ps = koneksi.prepareStatement(sql);
        ps.setString(1, m.getNama());
        ps.setDate(2, new java.sql.Date(m.getTanggalLahir().getTime()));
        ps.setString(3, m.getJenisKelamin().name());
        ps.executeUpdate();
    }
}

Pertanyaan : Lebih kenceng mana contoh kode di atas (menggunakan class Mahasiswa) dibandingkan langsung saja pakai Map/Array ?

Supaya lebih jelas, berikut contoh yang pakai array.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SimpanMahasiswaServlet extends HttpServlet {

    private MahasiswaDao md = new MahasiswaDao();

    public void doPost(HttpServletRequest req, HttpServletResponse resp){
        String[] m = new String[3];

        m[0] = req.getParameter("nama");
        m[1] = req.getParameter("tanggal");
        m[2] = req.getParameter("jenis");

        md.simpan(m);
    }

}

Class MahasiswaDao

1
2
3
4
5
6
7
8
9
10
11
12
public class MahasiswaDao {
    public void simpan(String[] m){
        String sql = "INSERT INTO mahasiswa values (?,?,?)";
        PreparedStatement ps = koneksi.prepareStatement(sql);

        for(int i=0; i<m.length; m++){
            ps.setString(i, m[i]);
        }

        ps.executeUpdate();
    }
}

Pembuatan class Mahasiswa di atas merupakan salah satu implementasi prinsip encapsulation dalam OOP. Class Mahasiswa disebut dengan istilah domain class, yaitu class yang dibuat untuk memodelkan kasus yang akan dibuat.

Pembagian Kerja Dalam Programming

Ada pertanyaan bagus di Forum Java Programmer Indonesia di Facebook

Bagaimana cara pembagian tugas kalau mengerjakan aplikasi dengan tim?

Berikut pendekatan yang biasa saya gunakan

Waterfall Is the Best

Di berbagai komunitas Agile, metodologi waterfall merupakan bulan-bulanan dan wajib untuk dibully. Jangankan bilang waterfall itu bagus, coba katakan Ada beberapa situasi di mana waterfall bisa dijalankan. Saya jamin 1000% Anda akan segera dibully seperti layaknya pendukung Justin Bieber hadir di konser Metallica.

Kalau ada satu hal penting yang saya dapatkan dari belasan tahun berkecimpung di dunia IT adalah ini

Banyak jargon, metodologi, framework, library, teknologi datang dan pergi setiap saat. Untuk tiap pilihan yang kita buat, ada biaya yang menyertainya. Yaitu waktu dan tenaga yang kita investasikan untuk mempelajari dan mengadopsi pilihan tersebut. Kunci agar kita bisa memilih hal yang tepat sehingga imbal hasil pilihan kita lebih besar dari biayanya adalah, gunakan akal sehat dan jangan gampang terbuai jargon dan marketing gimmick.

Prinsip akal sehat tersebut telah menyelamatkan saya dari berbagai teknologi gagal di masa lalu seperti misalnya:

  • Struts 1
  • EJB 1 dan 2
  • XA Transaction
  • JMS
  • dan lain sebagainya

Teknologi gagal bukan artinya teknologi tersebut tidak inovatif atau kurang canggih. Tapi biaya implementasinya jauh melebihi benefit yang diperoleh darinya.

Nah, kali ini dimana orang-orang ‘agile’ sibuk membully Waterfall, saya punya pendapat yang berbeda.

Waterfall justru adalah cara paling alami untuk membuat software

Wah kok bisa begitu?

Tips Meletakkan File Konfigurasi Aplikasi

Dalam membuat aplikasi, biasanya ada nilai variabel yang ingin kita simpan di file konfigurasi, supaya pada saat isinya berubah tidak perlu melakukan kompilasi ulang. Misalnya konfigurasi koneksi database. Alamat database server, username, dan password biasanya sering berubah, tergantung tempat di mana aplikasi dideploy.

Ada beberapa hal yang biasanya menjadi pertanyaan, yaitu:

  1. Di mana sebaiknya kita menyimpan file tersebut?
  2. Bagaimana caranya supaya aplikasi kita portable? Portable artinya bisa dicopy paste ke berbagai komputer dengan lokasi folder berbeda-beda.
  3. Bagaimana cara membaca file konfigurasi tersebut?

Pertanyaan ini diajukan salah satu member di grup Netbeans Indonesia

Berikut screenshot kode program yang sudah dia buat

Tanya Judul Skripsi

Salah satu pertanyaan yang sering saya temui di berbagai forum pemrograman adalah

Saya mahasiswa jurusan Teknik Informatika semester akhir. Kira-kira judul skripsi yang bagus apa ya?

Berikut jawaban saya …

Belajar Project Management Dari Ubuntu

Hampir seluruh aktivitas yang saya lakukan dengan komputer (smartphone juga termasuk komputer) menggunakan aplikasi open source. Jaman sekarang, aplikasi open source sudah jauh mengungguli aplikasi closed source baik dalam hal fitur, user-friendliness, reliability, dan kecepatan development (bug fix, fitur baru, enhancement, dan sebagainya).

Selama ini kita hanya tahu pakai saja. Download, instal, pakai, happy. Kita juga hanya tahu bahwa open source = kode programnya bisa dilihat, dimodifikasi, dan dibagikan ke siapa saja. Sebenarnya ada aspek lain dari open source yang juga menarik, penting, dan banyak sekali manfaatnya buat para pembaca blog saya yang utamanya adalah programmer, software project manager, dan juga pengusaha di sektor IT. Aspek tersebut adalah software development process yang terjadi sehingga semua produk canggih ini bisa berada di tangan kita saat ini.

Kehandalan manajemen proyek open source bisa kita lihat bukti nyatanya di distro linux Ubuntu. Coba lihat beberapa fakta berikut:

  • Ubuntu rilis setiap enam bulan sekali, yaitu tiap bulan April dan Oktober.
  • Sejak rilis pertama, belum pernah terjadi keterlambatan rilis.
  • Kontributor Ubuntu (programmer, pembuat dokumentasi, desain tampilan, tukang burn CD, tukang update website, tukang upload iso, admin server, dsb) datang dari seluruh dunia. Bekerja 24 jam sehari 7 hari seminggu dengan timezone yang berbeda-beda. Jadi kalau kita masih kerja di ruangan yang sama, hanya dipisahkan cubicle saja, datang bareng, makan siang bareng, pulang bareng, sebaiknya jangan terlalu sering mengeluh di socmed ;p
  • Jumlah kontributornya ribuan orang. Bahasanya berbeda-beda. Lokasinya juga berbeda-beda.
  • Tulang punggung Ubuntu adalah kernel Linux dan desktop manager Gnome. Harus menunggu Gnome rilis dulu, baru Ubuntu bisa dikerjakan. Jangan sampai di tengah-tengah development Ubuntu, ada perubahan signifikan yang terjadi di Gnome sehingga Ubuntu harus rombak total.
  • Ubuntu basisnya adalah distro Debian varian unstable. Proses development harus memperhatikan agar jangan sampai menyimpang terlalu jauh dari Debian supaya tetap bisa sinkronisasi pada saat Debian naik versi.
  • Ubuntu digunakan orang dari seluruh dunia, sehingga harus bisa mendukung berbagai bahasa, format angka, format tanggal, dan berbagai variasi lainnya.
  • Kompatibilitas antar rilis harus terjaga, supaya orang bisa upgrade dengan mudah.

Nah, apa rahasianya supaya bisa seperti itu?

Capacity Planning

Ada pertanyaan bagus di milis IT Project Management, sebagai berikut

Mohon di-share caranya menentukan spesifikasi minimal hardware yang dibutuhkan sebuah sistem. contoh http://en.wikipedia.org/wiki/System_requirements Kriteria apa saja yang digunakan dalam memilih hardware? Terutama menentukan jumlah RAM dan Speed Processor nya. Apakah cukup dari jumlah concurrent user? Atau menggunakan metode trial-and-error. Kalaupun trial-and-error, tentunya ada standar yang digunakan sebagai benchmark awal ya kan? Bagaimana standar awal tersebut?

Mari kita bahas

Memahami Authentication

Menjelang penghujung bulan Ramadhan, ada yang bertanya di milis JUG. Alhamdulillah, ada kesempatan bersedekah di detik-detik terakhir bulan puasa ;) Karena pertanyaannya membutuhkan jawaban yang cukup panjang, baiklah kita jawab di blog saja.

Berikut pertanyaannya.

Saya pernah menggunakan Spring Security Framework. Tapi kalau cuma pakai, tanpa ngerti konsep dasar dan cara kerjanya dasarnya sakit kepala juga akhirnya kalau semua terjadi secara automagically.

Jadi kalau murni tanpa menggunakan Framework apapun :

  • Bagaimana membuat proses loginnya? dari beberapa artikel yang saya baca (saya baru tahu) katanya login username dan passwordnya dimasukan kedalam HTTP Header.

Contohnya :

Authorization:Basic c2VzdWF0dUB5YWhvby5jb206YmlzbWlsbGFo

dimana c2VzdWF0dUB5YWhvby5jb206YmlzbWlsbGFo adalah Base64 encoding dari sesuatu@yahoo.com:bismillah (username:password)

benarkah begitu?

  • Bagaimana server mengenali client jika kita menggunakan method GET? (ini pertanyaan konsep sangat mendasar sekali). Mungkin jawabannya ya dengan token.

  • Tapi ditaruh dimana? apakah dengan saya tempelkan saja di URL? misal

GET /thewebapp/category/324?token=abcde1234

atau saya masukkan dalam HTTP header? tapi dengan header apa?

Dan berikut jawaban saya

Desain Skema Database

Pada artikel sebelumnya, kita telah belajar bagaimana memulai membuat aplikasi, yaitu dengan cara:

  • membuat daftar fitur
  • membuat UI Mockup

Kedua langkah di atas membantu kita untuk memvisualisasikan apa yang ada di imajinasi kita menjadi bentuk yang bisa dilihat oleh banyak orang. Ada beberapa keuntungan dari proses visualisasi ini, yaitu:

  • mengurangi kepusingan, karena apa yang sebelumnya cuma dibayangkan, sekarang terlihat bentuknya
  • menunjukkan kekurangan dalam imajinasi kita. Seringkali saya mendapati ada informasi yang kurang sehingga harus ditanyakan lagi ke user. Kali lain, saya mendapati ternyata perpindahan antar screen tidak sistematis sehingga membingungkan user. Atau saya terlalu kompleks mendesain tampilan yang seharusnya bisa lebih sederhana.
  • menjadi bahan diskusi dengan user, menghindarkan kita dari membuat sesuatu yang tidak dibutuhkan user.
  • sebagai pedoman kita untuk merancang skema database

Poin terakhir tersebut akan menjadi bahasan kita pada artikel kali ini.

Saya tidak akan membahas tentang teori normal form. Seharusnya para mahasiswa informatika sudah mempelajarinya di mata kuliah Basis Data yang biasanya diberikan di semester 3. Silahkan ambil lagi mata kuliah tersebut di tahun/semester depan kalau ternyata Anda ketiduran waktu dosennya menerangkan. Sedangkan pembaca yang tidak kuliah di informatika (seperti saya), bisa baca-baca referensi dari Wikipedia atau tutorial di sini.

Artikel ini ditulis dengan asumsi pembaca sudah paham apa itu normal form. Silahkan belajar dulu kalau belum paham, baru kembali lagi ke sini.