Source Code Mesin Kata[sik mbulet, pokoke dadi]

Hasil Kompilasi dengan String :

saya    belajar       algoritma        dengan    bahasa    java

saya   belajar    java   dengan    siapa     “

adalah sebagai berikut

   saya    belajar       algoritma        dengan    bahasa    java 
saya   belajar    java   dengan    siapa      
Himpunan kata
-|saya             frek:0|-
-|belajar          frek:0|-
-|algoritma        frek:0|-
-|dengan           frek:0|-
-|bahasa           frek:0|-
-|java             frek:0|-
-|siapa            frek:0|-
saya
belajar
algoritma
dengan
bahasa
java
saya
belajar
java
dengan
siapa
Jumlah kata         :11
kata : saya         frek: 2
kata : belajar      frek: 2
kata : algoritma    frek: 1
kata : dengan       frek: 2
kata : bahasa       frek: 1
kata : java         frek: 2
kata : siapa        frek: 1

Continue reading “Source Code Mesin Kata[sik mbulet, pokoke dadi]”

BUDAYA MENULIS BANGSA KITA

Dalam kegiatan sehari-hari kita pasti sudah sering melakukan kegiatan menulis, namun pada bahasan ini yang dimaksud menulis adalah menulis ilmiah. Apabila sudah mengandung kata ilmiah maka sangat erat sekali dengan dunia pendidikan dan tentu saja hanya pendidikan di Indonesia yang saya bahas. Dari kata menulis sendiri sudah muncul banyak pertanyaan yang muncul di dalam benak saya, salah satunya yaitu “Apakah menulis di Indonesia merupakan suatu budaya nasional?”.

Continue reading “BUDAYA MENULIS BANGSA KITA”

Abstract Data Type

Abstract Data Type

Abstract Data Type (ADT) adalah kumpulan dari elemen-elemen data yang disajikan
dengan satu set operasi yang digambarkan pada elemen-elemen data tersebut.(JENI)
Apa itu struktur data?
  1. Cara menyimpan data didalam komputer sehingga dapat digunakan secara efisien.(Wikipedia)
  2. Merupakan organisasi informasi, biasanya di memory, untuk efisiensi algoritma yang lebih baik. (http://www.nist.gov/dads)
  3. Representasi data yang diberikan dan operasi yang diperbolehkan pada data untuk mendapatkan efisiensi.(Weiss)
    Dari 3 definisi diatas setidaknya kita sudah mempunyai gambaran tentang struktur data, ga tau gambarnya kayak apa??
    Daripada saya ikut binun mikirin gambarnya struktur data, kita cari tau aja mengapa koq kita membutuhkannya/mempelajarinya. Tepi sebelum lanjut ada jawaban dari beberapa mahasiswa yang sedang mengampu mata kuliah ini. Sebut saja bunga, fulan, dan mawar.Mereka berkata.
    Bunga: “terpaksa mas“,
    Fulan : „dah kadung ngambil mata kuliahnya..“
    Mawar: “karena dosennya Pak ***** mas…”

    Karena jawaban mereka kurang meyakinkan, jadi saya ambil dari buku aja alasanya, yaitu sebagai berikut:
    • Untuk efisiensi.
    • Membantu dalam mendapatkan komponen yang bisa digunakan berkali-kali.
    • Dalam paradigma object-oriented digunakan untuk mendukung enkapsulasi, penyembunyian informasi(information-hiding) dan abstraksi.
    • Terdapat banyak tipe dari struktur data diantaranya : list, stack, queue, dll. Masing-masing memiliki performa yang berbeda pada situasi tertentu. Programmer yang baik tau kapan harus menggunakan struktur data tersebut pada situasi yang tepat.
    Hubungan Algoritma dan Struktur Data
    Program adalah kumpulan instruksi komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ini ditulis dengan menggunakan bahasa pemrograman. Jadi bisa kita sebut bahwa program adalah suatu implementasi bahasa pemrograman. Beberapa pakar memberi formula bahwa:
    program = struktur data + algoritma
    Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, demikian juga sebaliknya.




    Struktur data sebagai wadah
    Kan tadi masih binun tentang struktur data ya?? Karena saya ini ga pinter pemrograman seperti anda-anda jadi saya pake ilustrasi aja. Anggap aja sekumpulan satu atau lebih data adalah kue/biskuit dan struktur data adalah toples/tempat kue.
    Topleskue

    Jadi Struktur data bisa dikatakan sebagai wadah (container) dari sekumpulan data. Kalo memakai analogi diatas, dalam toples tersebut kita bisa melakukan beberapa perlakuan sebagai berikut.

    • Menambahkan kue kedalam toples. (add)
    • Mengeluarkan kue dari dalam toples. (remove)
    • Mencari kue yang spesifik dalam toples. (find)
    • Mengosongkan toples dan mengecek apakah toples kosong.
      Nah tinggal mengganti kata kue dengan data dan toples dengan struktur data kan sama aja perlakuannya.
      Jika dalam bahasa jawa ngoko maka bisa ditulis seperti ini, Thing merupakan tipe data yang digunakan.
      type interface

      Biar kita lebih mengenal jenis-jenis struktur data ayo tak ajak kenalan ma mereka, mereka baik-baik kok. Pertama-tama kita kenalan sama yang namanya LIST.
      LIST
      list-ball

      List adalah koleksi item yang pada setiap item memiliki posisi.
      Kita bisa mengakses semua item dari list dari indeksnya, sebagai contoh yang paling sering kita gunakan yaitu arrayUntuk operasi yang bisa digunakan pada list yaitu sebagai berikut:
      list-interface

      STACK
      stack

      Stack → struktur data tumpukan. julukannya adalah LIFO(Last In First Out).
      Dalam stack operasi yang umum digunakan yaitu pop, push, dan top.
      Pop merupakan pengambilan pengambilan item yang terakhir dimasukkan kedalam stack atau item paling atas (top).
      Push merupakan penambahan item diatas item yang teratas atau setelah yang terakhir masuk.
      Contohnya ya tumpukan koran, majalah, dan lain-lain. Operasi stackmemerlukan waktu yang konstan sehingga cepat operasinya.
      Berikut adalah antarmuka stack dalam bahasa jawa.
      stack interface

      QUEUE
      antrian ball

      Queue/antrian pada prinsipnya sama seperti antrian yang ada didunia yang saya tinggali tapi bukan di negara saya, jadi yang pertama ngantri ya dia yang keluar dari antrian dulu. Dan meskipun yang antri berjuta-juta atau bermilyar data, anda ga perlu khawatir data anda akan mati karena terinjak-injak atau pingsan karena antrian dalam pemrograman ga seperti yang ada di negara kita ni.
      Berbeda dengan stack, pada stack item yang paling terakhir masuk adalah yang kluar dulu, tapi pada antrian item yang ada di depan (paling duluan masuk antrian) adalah yang paling kluar dulu.
      Pada antrian juga memerlukan waktu yang konstan sehingga pemrosesannya cepat.
      Berikut adalah antarmuka queue dalam pendekatan bahasa jawa.
      interface-antrian

      Nah, tiga aja dulu yang q kenalin, ntar yang laennya bisa kenalan sendiri. Kan 3 tipe struktur data diatas yang bakal sering ditemui, makanya biar ga sungkan lagi kalo ketemu.
      Sekian dulu, smoga bermanfaat.
      Referensi :
      Manurung, Ruli . Diktat Kuliah Algoritma dan Struktur Data, Fasilkom UI. 2007
      Siswantoro, Hari. Diktat Kuliah Algoritma dan Struktur Data. Jurusan Teknik Elektro UJS. 2006

      “Dialog-dialog ga penting yang ada dalam tulisan ini hanyalah fiktif belaka, hanya sebagai selingan. Jika ada kesamaan nama tokoh, peristiwa atau kejadian itu hanyalah kebetulan.”

      Waspadalah…waspadalah…Ingat kepandaian itu bisa diraih tidak hanya karena ada niat pelakunya, tetapi juga karena ada kesempatan untuk belajar.

      Mesin Kata

      “Atas permintaan seseorang yang tidak bisa tolak permintaannya maka muncullah tulisan yang sederhana ini. Semoga bermanfaat.”

      Pendahuluan

      Mesin kata, apakah gerangan itu? Sebenarnya hanya program untuk mengenali kata pada suatu karakter dan mencatat frekuensi  kemunculannya. Namun apakah sesederhana itu? Tentu saja tidak karena perlu analisa yang cukup lama bagi seseorang yang jarang ngoding. Kadang-kadang meskipun kita tahu bagaimana alur logika program yang akan dibuat kita masih sering dibuat bingung pada saat implementasi pada program. Pada kesempatan kali ini saya menggunakan java sebagai contoh.

      Continue reading “Mesin Kata”

      Java Tutorial: Deklarasi dan akses kontrol – Part 3

      Konstruktor
      Konstruktor dijalankan pada saat objek dari suatu kelas dibuat.  Nama konstruktor harus sama dengan nama kelas dan tidak mempunyai return value. Konstruktor dapat dioverloading(terdapat dua konstruktor atau lebih dengan parameter input yang berbeda). Konstruktor hanya bisa dipanggil oleh konstruktor lain. Untuk memanggil konstruktor pada kelas yang sama, digunakan fungsi this() dengan argumen/parameter input yang sesuai. Sedangkan untuk memanggil konstruktor pada superclass maka digunakan fungsi super() tentunya dengan argumen yang bersesuaian. Ketika objek pada subclass terbentuk, semua konstruktor pada superclass dipanggil dengan urutan atas dalam suatu hirarki.

      Continue reading “Java Tutorial: Deklarasi dan akses kontrol – Part 3”

      Java Tutorial: Deklarasi dan akses kontrol – Part 2

      PENDEKLARASIAN KELAS, VARIABEL, DAN METHOD

      Modifier digunakan untuk menentukan hubungan suatu unsur kelas dengan unsur kelas lainnya. Didalam pemrograman JAVA terdapat dua macam modifiersaccess modifiers dan non-access modifier. Dengan menggunakan akses modifier kita bisa untuk menolak akses atau memberi akses yang lebih pada kode kita.

      Class modifier

      Akses modifier yang tersedia adalah public, private, dan protected. Dengan demikian top-level class(kelas utama dalam suatu kode) hanya boleh public dan default akses level. Jika tidak ada akses modifier yang ditentukan maka kelas akan diset menjadi akses default. Hanya kelas yang didalam package(direpresntasikan dalam sebuah folder, jadi dalam package yang sama adalah sama dengan berada didalam folder yang sama) yang sama yang dapat menggunakan kelas lain dengan akses default. Jika semua kelas dideklarasikan sebagai public maka semua kelas dari package yang berbeda dapat mengaksesnya.

      Continue reading “Java Tutorial: Deklarasi dan akses kontrol – Part 2”

      Java Tutorial: Deklarasi dan akses kontrol – Part 1

      ARRAY

      Array adalah objek yang dapat dibuat secara dinamis. Array dapat menyimpan beberapa variabel dengan tipe data yang sama. Variabel dapat berupa tipe data primitif atau berupa objek/kelas lainnya; array bisa  berisi array lainnya. Deklarasi variabel Array Ketika mendeklarasikan variabel array, kode membuat variabel yang dapat memegang referensi kepada objek array, bukan membuat objek array atau mengalokasikan ruang untuk elemen array. Dan perlu diingat, “HARAM” hukumnya mendefinisikan ukuran array pada saat array itu di deklarasikan(misal int a[10]; ). Untuk mendeklarasikan array hampir sama dengan mendeklarasikan tipe data biasa hanya saja ditambahan kurung siku/bracket. Contoh pendeklarasian array:

      int[] i;		//array of int
      byte b[];	        //array of byte
      Object[] o,	        //array of Object
      short s[][];	        //array of arrays of short

      Continue reading “Java Tutorial: Deklarasi dan akses kontrol – Part 1”

      Prak01 – Tipe Data Array

      Hasil running program pada Praktikum 1 yang saya buat kira-kira seperti ini tampilannya, tapi anda tidak perlu “ngeplek” atau sama dengan ini,

      CREATE YOUR OWN CODE:

      --------------------------------------------
       No |  Nama/Game   | 1 | 2 | 3 | 4 | 5 | 6 |
      --------------------------------------------
       1  |  Agus        | A | C | E | D | B | F |
       2  |  Budi        | D | D | F | C | D | B |
       3  |  Elok        | C | E | A | B | F | A |
       4  |  Fajar       | D | F | B | A | A | D |
       5  |  Gaguk       | E | F | F | A | C | C |
       6  |  Haryono     | C | E | E | B | E | E |
       7  |  Joko        | A | C | E | D | B | F |
       8  |  Kadir       | D | B | C | C | C | C |
       9  |  Naryo       | E | B | D | E | B | B |
       10 |  Puji        | B | A | B | F | A | D |
      --------------------------------------------
      Nama orang yang satu kelompok dalam semua permainan.
      Nama            : Agus(output)
      Nama            : Joko(output)
      Kelompok        : ACEDBF(output)
      
      Banyaknya kelompok dalam suatu permainan
      Input Permainan: 3(input)
      Jumlah Kelompok: 6(output)
      
      Daftar siswa yang berada dalam satu kelompok tepat n kali dengan X
      Nama Siswa        : Budi(input)
      Frekuensi bersama : 2(input)
      Daftar Siswa      : Kadir (output)
      
      Daftar siswa-siswa yang tak pernah berada dalam satu kelompok dengan
      peserta tertentu
      Nama Siswa        : Budi(input)
      Daftar siswa tak pernah 1 kelompok  : Agus Elok Haryono Joko Puji(output)
      
      

      Continue reading “Prak01 – Tipe Data Array”

      Abstract Data Type

      Abstract Data Type

      Abstract Data Type (ADT) adalah kumpulan dari elemen-elemen data yang disajikan

      dengan satu set operasi yang digambarkan pada elemen-elemen data tersebut.(JENI)

      Apa itu struktur data?

      1. Cara menyimpan data didalam komputer sehingga dapat digunakan secara efisien.(Wikipedia)

      2. Merupakan organisasi informasi, biasanya di memory, untuk efisiensi algoritma yang lebih baik. (http://www.nist.gov/dads)

      3. Representasi data yang diberikan dan operasi yang diperbolehkan pada data untuk mendapatkan efisiensi.(Weiss)

      Dari 3 definisi diatas setidaknya kita sudah mempunyai gambaran tentang struktur data, ga tau gambarnya kayak apa??

      Daripada saya ikut bingung mikirin gambarnya struktur data, kita cari tau aja mengapa koq kita membutuhkannya/mempelajarinya. Tapi sebelum lanjut ada jawaban dari beberapa mahasiswa yang sedang mengampu mata kuliah ini. Sebut saja bunga, fulan, dan mawar.Mereka berkata.

      Bunga: “terpaksa mas“,

      Fulan : „dah kadung ngambil mata kuliahnya..“

      Mawar: “karena dosennya Pak Marji mas…”

      Continue reading “Abstract Data Type”

      Algoritma dan Pemrograman

      Definisi Algoritma

      Algoritma adalah logika, metode dan tahapan (urutan) sistematis yang digunakan untukmemecahkan suatu permasalahan.

      Kamus besar bahasa Indonesia (Balai Pustaka 1988) secara formal mendefinisikan

      algoritma sebagai:

      Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah.

      Dari pengertian diatas sudah jelas bahwa algoritma tidak hanya identik dengan ilmu komputer atau teknik informatika, bahkan resep makanan merupakan suatu algoritma juga karena merupakan urutan sitematis untuk memecahkan masalah(membuat makanan)[MUN00]. Dan perlu diingat bahwa algoritma tidak terikat dengan bahasa pemrograman apapun, jadi dengan algoritma kita bisa menggunakan semua bahasa pemrograman yang kita mau. Yang terpenting algoritma harus dinyatakan langkah (dalam bentuk) yang dapat dimengerti oleh programmer lain . Jadi terserah kita mau bikin algoritmanya sebagai cerita atau gambar yang jelas orang lain bisa mengerti maksudnya. Dan sebagai programmer juga harus memiliki keahlian membaca algoritma. Sebagai analogi, Seorang pianis tidak dapat memainkan musik bila ia tidak mengerti not balok. Sama halnya dengan programmer, menurut [GOL88] seharusnya programmer mengerti setiap langkah dalam suatu algoritma, dan mengerjakan operasi yang bersesuaian dengan langkah tersebut.

      Continue reading “Algoritma dan Pemrograman”

      Algoritma Kompresi Shannon

      Dalam proses penyimpanan data biasanya diperlukan optimasi besarnya file yang akan disimpan, mengingat kebanyakan user tidak selalu mempunyai ruang hardisk yang begitu besar. Kalaupun memiliki media penyimpanan yang cukup besar pastilah akan dioptimalkan penggunaannya. Salah satu caranya yaitu menggunakan kompresi data untuk menghemat ruang penyimpanan.

      Untuk proses kompresi dewasa ini(zip, rar,tar.gz) menggunakan gabungan beberapa algoritma kompresi dasar seperti LZW, SHANNON-FANO, HUFFMAN, gunzip, dan lain-lain. Pada coretan blog ini saya akan sedikit memaparkan tentang ALGORITMA SHANNON. Pada prinsipnya algoritma ini menggunakan pendekatan top down dalam penyusunan binary tree.  Metode ini sangat efisien untuk mengompresi file text yang berukuran besar.

      Untuk langkah-langkahnya sebagai berikut :

      1. Mengurutkan karakter berdasarkan probabilitasnya yang terbesar.
      2. Membagi menjadi 2 berdasarkan selisih paling sedikit dari nilai dua kelompok karakter yang terurut tadi.
      3. Secara rekursif dibagi menjadi 2 bagian, setiap bagian memiliki nilai yang sama atau dengan selisih paling sedikit.
      4. Mengasign nilai 1 kekanan dan 0 ke kiri pada pohon biner.

      Contoh :

      Source = {A, B, C, D, E }

      Peluang={0.35, 0.17, 0.17, 0.16, 0.15

      Membagi menjadi 2 kelompok besar:

      • kelompok 1 = A  dengan total peluang 0.35kelompok 2 = B, C, D, E dengan total peluang 0.65selisih kel 1 dan 2 = 0.30
      • kelompok 1 = A, B  dengan total peluang 0.52kelompok 2 = C, D, E dengan total peluang 0.48selisih kel 1 dan 2 = 0.04 –> paling sedikit
      • kelompok 1 = A , B, C dengan total peluang 0.69kelompok 2 = D, E dengan total peluang 0.31selisih kel 1 dan 2 = 0.38

      Jadi yang digunakan AB dan CDE.
      maka tree awalnya yaitu :

      shstep1

      Kemudian dari 2 leaf yang terbentuk dilakukan proses pembagian lagi seperti diatas sampai tidak bisa dibagi lagi. Sehingga menghasilkan tree yang lengkap seperti berikut :

      shstepcmplte

      Setelah Tree lengkap telah terbentuk maka dilakukan pembacaan dari root sampai ke karakter pada leaf.
      Dari pembacaan dihasilkan codeword sebagai berikut :

      • A = 00 –> 2 bit
      • B = 01
      • C = 10
      • D = 110 –>3bit
      • E = 111

      Dari code word diatas diperoleh panjang rata-ratanya :

      Lavg = 0.35*2 + 0.17*2 + 0.17*2 + 0.16*3 + 0.15 * 3 = 2,31 bit/char

      Nilai entropinya yaitu

      H( S ) = H( P1,P2,P3,P4,P5)

      =-P1 log P1 -P2 log P2 – P3 log P3 – P4 log P4 – P5 log P5     –> log basis 2

      = 2,23 bit/char

      Jadi Efisiensinya = H(s)/Lavg = 2,232/2,31=96,67%

      Jadi dengan metode ini akan terasa sangat efektif jika banyak terjadi perulangan karakter pada text. Dah capek ngetik nih….semoga bermanfaat…

      References :

      http://www.cs.cf.ac.uk/Dave/Multimedia/node209.html#SECTION04242000000000000000

      Catatan kuliah q…

      Instalasi Java OpenGL di Linux


      JOGL merupakan paket Java yang menyediakan penggabungan library untuk OpenGL Java Virtual Machine. Hal itu mengijinkan programmer komputer grafik untuk menggunakan object-oriented tools pada Java dengan hardware akselerasi grafik 2D dan 3D.
      Pertama-tama yang harus anda perhatikan yaitu pastikan anda sudah menginstal Java Development Kit pada sistem anda.

      Langkah instalasi JOGL di Linux (instalation for dummy) :

      1. Download JOGL versi terbaru di jogl.dev.net atau versi jogl yang saya gunakan  jogl-1.1.1-linux-i586.zip. Saya asumsikan anda menyimpan file tersebut di home direktori.
      2. Selanjutnya anda harus menjadi superuser atau dengan cara :
        $su atau $sudo su
        Sekarang anda harus membuat direktori di /usr/lib/jogl.
      3. Nah untuk melakukannya ketik
        linux-eqjw:~ # mkdir /usr/lib/jogl
        Pindahkan file zip tersebut kedalam direktori atau folder yang baru dibuat:
        linux-eqjw:~ #mv ~/jogl-.zip /usr/lib/jogl/
      4. Ekstrak file tersebut :
        linux-eqjw:~ #cd /usr/lib/jogl
        linux-eqjw:~ #unzip jogl-

      Nah sekarang saatnya konfigurasi sistem agar saat pemanggilan perintah javac bisa mengenali library yang disediakan jogl. Untuk melakukannya anda tinggal menambahkan perintah berikut di .bashrc atau .bash_profile(di openSUSE) di home direktori anda(untuk bisa mengakses file ini anda harus menjadi root).
      LD_LIBARY_PATH=/usr/local/pgsql/lib:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib
      CLASSPATH=.:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib/gluegen-rt.jar:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib/jogl.jar
      export LD_LIBRARY_PATH
      export CLASSPATH
      Jika LD_LIBARY_PATH dan CLASSPATH tinggal menambahkan dengan pemisah ‘:’ seperti diatas.
      Untuk mengedit nilai di .bashrc atau .bash_profile anda bisa menggunakan perintah vi .bash_profile
      Untuk mencoba apakah bisa berfungsi konfigurasi yang telah anda lakukan, berikut adalah contoh program yang saya ambil dari java.sun.com

      //JOGLRotatingCube.java
       import net.java.games.jogl.GLCanvas;
      import net.java.games.jogl.GLCapabilities;
      import net.java.games.jogl.GLDrawableFactory;
      import net.java.games.jogl.Animator;
      import net.java.games.jogl.GL;
      import net.java.games.jogl.GLEventListener;
      import net.java.games.jogl.GLDrawable;

      import java.awt.Frame;
      import java.awt.event.WindowAdapter;
      import java.awt.event.WindowEvent;

      public class JOGLRotatingCube {

      private static final int SIZE = 160;

      private static float angle = 0;

      JOGLRotatingCube() {
      GLCanvas canvas = getGLCanvas();
      canvas.addGLEventListener(new RotatingCubeListener());
      Animator anim = new Animator(canvas);
      addCanvasToFrame(canvas, anim);
      anim.start();
      }

      private void addCanvasToFrame(
      GLCanvas canvas, final Animator anim) {
      Frame f = new Frame("JOGL Rotating Half - Cube");
      f.setSize(600, 400);
      f.add(canvas);
      f.setVisible(true);
      f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      anim.stop();
      System.exit(0);
      }
      });
      }

      private GLCanvas getGLCanvas() {
      GLCapabilities capabilities = new GLCapabilities();
      return GLDrawableFactory.getFactory().
      createGLCanvas(capabilities);
      }

      public static void main(String[] args) {
      new JOGLRotatingCube();
      }

      private void drawCenteredCube(GL gl) {
      gl.glColor4f(1, 0, 0, 0);
      drawSquareFace(gl);
      gl.glColor4f(1, 1, 0, 0);
      gl.glRotatef(90, 1, 0, 0);
      drawSquareFace(gl);
      gl.glColor4f(0, 0, 1, 0);
      gl.glRotatef(90, 0, 1, 0);
      drawSquareFace(gl);
      gl.glColor3f(0.0f, 0.0f, 0.0f);
      }

      private void drawSquareFace(GL gl) {
      gl.glBegin(GL.GL_QUADS);
      gl.glTexCoord2f(0, 0);
      gl.glVertex3f(-SIZE / 2, -SIZE / 2, SIZE / 2);
      gl.glTexCoord2f(0, 1);
      gl.glVertex3f(-SIZE / 2, SIZE / 2, SIZE / 2);
      gl.glTexCoord2f(1, 1);
      gl.glVertex3f(SIZE / 2, SIZE / 2, SIZE / 2);
      gl.glTexCoord2f(1, 0);
      gl.glVertex3f(SIZE / 2, -SIZE / 2, SIZE / 2);
      gl.glEnd();
      }

      class RotatingCubeListener implements GLEventListener {

      public void init(GLDrawable drawable) {
      GL gl = drawable.getGL();
      gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //erasing color
      gl.glColor3f(0.0f, 0.0f, 0.0f); // drawing color
      }

      public void display(GLDrawable drawable) {
      GL gl = drawable.getGL();
      gl.glClear(GL.GL_COLOR_BUFFER_BIT);

      angle++;
      gl.glMatrixMode(GL.GL_MODELVIEW);
      gl.glLoadIdentity();
      gl.glRotatef(-80, 1, 1, 0);
      gl.glRotatef(angle /16, 1, -1, 1);
      drawCenteredCube(gl);
      }

      public void reshape(GLDrawable drawable,
      int x,
      int y,
      int width,
      int height) {
      GL gl = drawable.getGL();
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL.GL_PROJECTION);
      gl.glLoadIdentity();
      gl.glOrtho(-width, width, -height, height, -SIZE, SIZE);
      }

      public void displayChanged(GLDrawable drawable,
      boolean modeChanged,
      boolean deviceChanged) {
      }
      }
      }

      Kompile dan jalankan JOGLRotatingCube, maka jika berhasil anda akan melihat kubus yang berotasi seperti gambar berikut.

      Nah, sekian dulu semoga bermanfaat.