Arsip Kategori: Snippets

Cuman numpang posting source code. Know what, mata kuliah High Performance System menurut saya adalah salah satu mata kuliah yang unik. Tugasnya dari awal sampai akhir hanya melakukan perkalian matriks. Tapi yang menarik perkalian matriks ini dilakukan dalam berbagai cara dengan menggunakan fitur, pustaka, ataupun mesin berkinerja tinggi. Semua cara ini nantinya akan dibandingkan dengan cara perkalian matriks yang naif dan serial.
Berikut adalah kodenya
Baca Lebih Lanjut »

Di salah satu kuliah yakni High Performance System sering dibutuhkan fungsi untuk menghitung durasi waktu. Salah satu fungsi yang dapat dipakai adalah clock_gettime yang menyediakan ketelitian hingga nanosecond. Fungsi ini menggunakan struktur data yakni timespec yang juga didefinisikan di header time.h.
Baca Lebih Lanjut »

Masih melanjutkan tentang The Readers and Writers Problem. Java sudah menyediakan fitur Lock khusus untuk model permasalahan ini yakni ReadWriteLock yang disediakan oleh Concurrent APInya Java. Locking ini mempunyai 2 buah Lock yakni ReadLock yang dapat dimiliki beberapa Reader selama tidak ada Writer yang berjalan dan WriteLock yang ekslusif untuk sebuah Writer. Penggunaannya sangat mirip pada postingan sebelumnya. Kita perlu membuat sebuah instance dari ReadWriteLock tersebut. Karena ReadWriteLock hanya berupa Interface maka kita pakai Class yang sudah ada yakni ReentrantReadWriteLock (meski dengan mudahnya kita dapat membuat sebuah Class ReadWriteLock baru dengan menggunakan kode pada postingan sebelum ini)

    private static ReentrantReadWriteLock rwlock = new ReentrantReadWriteLock();
    private static Lock rlock = rwlock.readLock();
    private static Lock wlock = rwlock.writeLock();

Baca Lebih Lanjut »

Melanjutkan postingan sebelumnya tentang masalah The Readers and Writers Problem. Untuk memberikan hak ekslusif bagi Writers untuk menulis file maka diperlukan sebuah mekanisme locking. Mekanisme ini akan coba diimplementasikan pada sebuah class bernama Lock.

class Lock {

        public static int countRequestingWriter = 0;
        public static int countRunningWriter = 0;
        public static int countRunningReader = 0;

        public synchronized void lockRead() throws InterruptedException {
            while (countRunningWriter > 0 || countRequestingWriter > 0) {
                wait();
            }
            countRunningReader++;
        }

        public synchronized void unlockRead() {
            countRunningReader--;
            notifyAll();
        }

        public synchronized void lockWrite() throws InterruptedException {
            countRequestingWriter++;
            while (countRunningReader > 0 || countRunningWriter > 0) {
                wait();
            }
            countRequestingWriter--;
            countRunningWriter++;
        }

        public synchronized void unlockWrite() {
            countRunningWriter--;
            notifyAll();
        }
    }

Ketika lock akan dipakai oleh sebuah thread untuk melakukan write locking, maka lock akan memeriksa apakah sedang dilakukan reading atau writing. Jika ada maka lock akan menunggu. Ketika thread lain selesai melakukan tugasnya maka lock akan memberitahu thread yang menungu itu untuk memeriksa lagi. Jika berhasil maka thread akan menambahkan nilai variabel tersebut. Variabel ini bertugas sebagai semacam semaphore. Untuk menggunakan lock ini, method untuk write dan read harus dimodifikasi.

Baca Lebih Lanjut »

Setelah mengimplementasikan Multithread di postingan sebelumnya, jadi pengen iseng-iseng nyoba salah satu problem di IPC yakni Readers and Writers. Sebelumnya di kuliah High Performance System, pernah dikasih tugas yang menyangkut IPC problem juga yakni Producer dan Consumer, tapi pakai bahasa C dan pakai  POSIX thread. Sekarang ingin coba implementasi di Java.

Permasalahan Readers and Writers ini tidak jauh berbeda dengan Dining Philosopher, hanya saja di Readers and Writers ini terdapat beberapa Readers dan Writers. Kedua jenis ini memiliki perlakuan yang berbeda. Sebuah filefile boleh diakses beberapa Reader bersamaan, tetapi ketika Writer sedang menulis tidak ada yang boleh menulis file tersebut.

Masalah ini bisa dilihat setelah kita memodifikasi method untuk write dan read pada kode di postingan sebelumnya.
Baca Lebih Lanjut »

Cuman snippets aja, kadang-kadang suka lupa gimana cara pakai multithread di Java. ^_^

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Petra Barus
 */
public class ReadWrite1 implements Runnable {

    //
    public static int countwriter = 0;
    public static int countreader = 0;
    //
    public static final int READER = 0;
    public static final int WRITER = 1;
    //
    private int type;
    private int id;
    private String strid;

    public ReadWrite1(int type) {
        this.type = type;
        this.strid = (type == READER) ? ("Reader " + (this.id = ++countreader)) : ("Writer " + (this.id = ++countwriter));
    }

    public static void main(String[] argv) {
        (new Thread(new ReadWrite1(READER))).start();
        (new Thread(new ReadWrite1(READER))).start();
        (new Thread(new ReadWrite1(WRITER))).start();
    }

    public void run() {
        if (type == READER) {
            read();
        } else if (type == WRITER) {
            write();
        }
    }

    //*********************************************************
    // Reader
    //*********************************************************
    /**
     *
     */
    public void read() {
        System.out.println(strid + ": start!");
        while (true) {
            System.out.println(strid + ": reading!");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(ReadWrite1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    //*********************************************************
    //*********************************************************
    // Writer
    //*********************************************************

    public void write() {
        System.out.println(strid + ": start!");
        while (true) {
            System.out.println(strid + ": writing!");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(ReadWrite1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    //*********************************************************
}

Contoh keluarannya
Baca Lebih Lanjut »

Barusan ada anak-anak 2006 yang minta diajarin make JavaMail API. Padahal gw juga hampir gak pernah make. Setelah googling bentar akhirnya dapet juga contoh source codenya.

API ini digunakan untuk melakukan penanganan komunikasi email
Sebelumnya harus download dulu librarynya di sini.

Berikut source codenya.
Baca Lebih Lanjut »

Didedikasikan buat rekan-rekan IF ITB 2006.

Ada sedikit permintaaan dari beberapa junior supaya saya sedikit mengupas tentang aplikasi medis sederhana di Java EE. Aplikasi ini cuman aplikasi pengaturan dokter, pasien, dan pemeriksaan. Aplikasi ini akan dibangun dengan menggunakan basis data MySQL dan IDE Netbeans.classdiagram

Baca Lebih Lanjut »

Secara default, MySQL di XAMPP menyertakan fitur InnoDB meski tidak otomatis dijalankan. InnoDB adalah database engine yang memiliki banyak sekali kelebihan. Untuk dapat mengkonfigurasi InnoDB di XAMPP lakukan beberapa langkah berikut

  • Buka berkas my.cnf di folder xampp\mysql\bin
  • Cari kalimat “skip-innodb”
  • Beri tanda “#” didepan baris tersebut
  • Kemudian hapus tanda “#” di beberapa baris di bawah “# Uncomment the following if you are using InnoDB tables”

Setelah jarang ngoding tampilan aplikasi di Netbeans, gw tadi pagi kesulitan buat ngeset sebuah JFrame supaya bisa ditengah-tengah layar. Ternyata ada cara mudahnya

  1. Klik kanan pada JFrame yang bersangkutan
  2. Pilih “Properties
  3. Pilih “Code
  4. Set “Form Size Policy” ke “Generate Resize Code
  5. Check “Generate Center

Voila, kalau Framenya dirun, akan tampil di tengah layar.