Tag Archives

14 Articles
Konfigurasi CAS 5.1.2
Arsitektur SSO dasar.

Konfigurasi CAS 5.1.2

Apereo CAS (sebelumnya Jasig CAS) banyak dipakai untuk SSO. Cara pemasangannya agak ribet dan sulit. Kebetulan, versi CAS 5.1.2 sekarang sudah menggunakan Spring Boot sebagai dasarnya.

Keuntungan penggunaan Spring Boot adalah Jasig CAS menggunakan banyak keunggulan framework Spring. Misalnya, teknologi Spring Cloud untuk teknologi devops, Spring Web Flow untuk arsitektur layanan mikro (micro service), service discovery, dan konfigurasi melalui YAML. Sehingga, kita bisa memasang infrastruktur SSO melalui CAS tanpa harus mengoding seperti dahulu. Atau, kita bisa mengembangkan layanan yang terpisah dari SSO ala layanan mikro.

Sebelum infrastruktur bertambah rumit, saya ingin memberikan jembatan keledai. Sebab, saya pikir SSO ini agak sulit pada awalnya kalau tidak tahu caranya. Saya harap ketika selesai membaca artikel ini, pembaca ada gambaran bagaimana SSO bisa dikembangkan.

Arsitektur yang dipilih

Arsitektur SSO

Arsitektur SSO dasar.

Ada banyak pilihan, tetapi saya memilih kapabilitas komponen yang bisa diskalakan secara horizontal dan modern. Misalnya, ada banyak pilihan untuk ruang penyimpan tiket (Ticket Storage), tetapi saya memilih Redis karena dia implementasi modern yang banyak dipakai untuk teknologi dewasa ini.

Setiap komponen yang saya pilih ini dapat dikluster. Saya memilih untuk mengembangkan satu layanan per mesin. Nanti kalau sudah mengerti teknologi perawanan, [uhuk colek Utian Ayuba] Anda bisa mengubah setiap ini menjadi konfigurasi devops macam Ansible, Puppet, Chef, Vagrant,  atau apa pun agama Anda.

CAS IdP

CAS IdP adalah mesin utama yang menyediakan profil, otentikasi, dan otorisasi. Semua klien terhubung ke sana.

Cara buat:

CAS IdP Server

CAS Ticket Storage

Secara baku CAS IdP menyimpan tiket sesi pada memori. Namun, untuk arsitektur kluster dan skalabilitas, lebih baik menggunakan Redis. Mengapa Redis? Karena Redis utamanya menggunakan memori.

Untuk peladen Redis tidak perlu dikluster. Lebih baik satu instans Redis yang memakan memori 24 GB dari pada membuat kluster.

Cara buat:

Redis Ticket Storage

CAS Service Storage

Satu situs/sistem/aplikasi yang menggunakan CAS untuk SSO disebut satu layanan (service). Setiap layanan dapat didefinisikan logo, URL, ACL pengguna, dan sebagainya secara granular. Itu semua secara baku disimpan oleh CAS IdP di berkas JSON.

Untuk pengelolaan yang lebih baik, saya memilih PostgreSQL sebagai ruang penyimpan. Pengalaman saya membandingkan PostgreSQL dengan MySQL mengatakan bahwa PostgreSQL rajanya basisdata untuk basisdata perangkat lunak bebas terbuka. Waktu itu saya membandingkan layanan Roundcube Webmail dengan MySQL dan PostgreSQL. Anda sebagai pengguna Webmail UI pasti merasakan bagaimana Webmail UI itu seperti mengakses sistem HTML statik.

Saya, sih, tidak apa kalau ada yang mau menggunakan MongoDB atau yang lainnya. Tetapi saya memilih karena daftar layanan ini tidak perlu kecepatan khusus. Selain itu, daftar layanan butuh untuk tahan banting, saya lebih memilih PostgreSQL. Tentu saja, saya takkan memilih Redis.

Cara buat:

CAS Service Registry

CAS Authentication Provider

Normalnya CAS menggunakan Spring Security dengan login casuser dan sandi Mellon. Tentunya, ini buat yang main-main. Untuk yang lebih serius, gunakan LDAP, basis data, atau bahkan layanan REST.

Penyedia otentikasi CAS dapat lebih dari satu (komposit). Tetapi, untuk kali ini, gunakan saja LDAP.

Cara buat:

CAS Auth LDAP

CAS Service Management Webapp

Aduh, lupa menulis dokumentasi. Silakan simpan URL ini, nanti saya coba tulis. Untuk sementara, langsung saja buat di basisdata. He… he… he….

Studi Kasus: WordPress

Penasaran dengan hasilnya? Langsung saja, buat aplikasi WordPress. Mengapa WordPress? Karena gampang memasangnya. Tinggal pakai plugin WP Cassify, daftarkan URL WP sebagai satu layanan, dan beres!

Cara buat:

WordPress Cassify

TODO:

  • Personalisasi halaman login.
  • Membuat CAS IdP terkluster (lebih dari satu instans)
  • Entahlah….
Dao Modularitas: Contoh Kasus Penggunaan Modul Untuk Decoupling Dengan Gradle

Dao Modularitas: Contoh Kasus Penggunaan Modul Untuk Decoupling Dengan Gradle

Mari gunakan hasil karya terdahulu yang sudah modular.

Saat ini saya akan menggunakan metode decoupling berdasarkan tujuan (goal-based) versi yang telah disederhanakan. Tentu tidak akan serumit reverse engineering pada tulisan saya. Tulisan (Yu et al., 2005, 363--372) yang saya bahas itu rasanya terlalu rumit untuk dikembangkan di tulisan ini. Oke, sejujurnya saya juga sedang malas menggambar diagram.

Saya mengambil teknik Extract Method dari (Martin Fowler, 1999, 89--91) yang digunakan di awal metodologi itu. Agar sederhana, saya modifikasi metodologi agar menerjemahkan menjadi cerita (user story), bukan notasi ilmiah.

Contoh Metodologi Reverse Engineering Goal Based of JP, Abridge Version

Mari lihat kembali kelas yang telah dibuat sebelumnya.

Apa yang dilakukan? Mari kita ceritakan dalam kalimat cerita:

Program ini mencetak ke terminal tulisan “Hello, world!”.

Dari cerita ini, ternyata ada dua tujuan yang terlihat jelas:

  1. Mencetak ke terminal.
  2. Tulisan “Hello, world!”.

Mencetak ke terminal (1) adalah sebuah tujuan yang bisa dibuat umum. Ada banyak hal yang bisa dilakukan dengan fungsi (1) ini. Fungsi ini bisa diekstraksi dan dijadikan sebuah fungsi terpisah agar bisa dimanfaatkan yang lainnya. Maka direkomendasikan agar (1) dijadikan fungsi terpisah.

Tulisan “Hello, world!” (2) adalah sebuah tujuan yang spesifik. Dia tidak bisa dipakai untuk yang lain. Maka, direkomendasikan untuk tetap untuk di sana.

Wow, Kisanak mungkin berpikir. Gampang juga, yah. Ternyata hanya begitu saja!

Kisanak salah! Ilmu ini masih versi disederhanakan (abridge version). Mari saya bukakan sedikit tentang tujuan tersirat (soft goal). Pada metodologi Reverse Engineering Goal Based of JP, salah satu yang diperhitungkan adalah tujuan tersirat (soft goal)!

Ada banyak tujuan tersirat yang kalau pada bahasa SDLC disebut sebagai non-functional requirement. Seandainya proyek ini ditentukan tujuannya (bahasa lainnya: Scrum Goal, non-functional requirement pada Waterfall, dan lain sebagainya tergantung paguyuban tempat Kisanak berguru). Pada iterasi selanjutnya, (2) dapat dikembangkan lebih lanjut, misalnya dengan menambahkan tujuan tersirat:

  1. Ingin menyapa bukan hanya dunia. Nama yang hendak disapa dapat diperoleh melalui STDIN (nama kerennya terminal). Rekomendasi: dibuatkan sebuah variabel dengan nilai baku “Hello, %s!”. Lalu, tangkap nama melalui STDIN. Masukkan nama ke senarai yang telah dibuat itu. Terakhir, cetak.
  2. Ingin agar ini dapat dimengerti hampir semua orang. Rekomendasi: dibuatkan variabel berisi “Hello” yang dianotasi dengan i18n. Gunakan framework lokalisasi.

Jangan lupa, bahwa bahkan pengumpulan kebutuhan dapat diiterasikan agar lebih jelas. Contohnya untuk tujuan tersirat (1). Diiterasikan kembali bahwa keamanan merupakan fitur utama. Tujuan tersirat (1), ditambahkan fungsi pengecekan Regex sebagai validasi sebelum memroses (1.1). Agar menarik, maka dibuatkan pemformat yang dapat menghasilkan keluaran yang cantik ke terminal (1.2).

Kisanak tentu bertanya, bagaimana cara menentukan tujuan tersirat ini? Sampai sedalam mana iterasi ini? Bisa jadi aplikasi menjadi besar dan bahkan untuk fungsi sederhana menjadi sulit. Itu sebabnya, biasanya tujuan tersirat biasanya dibuat di awal proyek dan berlaku global atau setidaknya dalam sebuah cakupan submodul. Beberapa perguruan silat membuat itu menjadi standar baku. Inilah yang dimaksud dengan Design Pattern bukan hanya berbicara kode, tetapi standar baku di sebuah perusahaan.

Astaga, sampai mana saya tadi?

Oh, iya, intinya, sudah saya jelaskan bahwa fungsi menulis ke terminal bisa diekstraksi ke fungsi lainnya. Karena dia bisa dipakai untuk yang lain, maka dia bisa dijadikan sebuah modul tersendiri. Pada proses penentuan modul, Kisanak dapat bisa mengenali apakah fungsi cetak ke terminal ini dijadikan proyek tersendiri sehingga bisa dimanfaatkan oleh proyek-proyek yang lainnya. Apalagi, dia tidak sesuai dengan tujuan proyek ini, membuat aplikasi percuma/sia-sia. Dia sudah sangat berguna sehingga tidak masuk lagi hitungan. Ha… ha… ha….

Mari Implementasikan ke Gradle

Setelah makanan bagi jiwa, sekarang saatnya ke Gradle. Pada direktori dasar proyek, mari buat submodul:

Seperti biasa, masukkan percuma-libs ke proyek utama.

Kalau benar, maka akan muncul sebagai submodul proyek percuma.

Buat konfigurasi untuk mengompilasi percuma-libs.

Sekarang, mari buat sebuah kelas Java.

Setelah membuat submodul ini, mari tambahkan submodul percuma-libs sebagai salah satu pustaka yang dibutuhkan oleh percuma-apps.

Mari ubah kelas TestMain untuk menggunakan pustaka yang sudah kita masukkan. Ubah baris:

menjadi:

Atau kalau dari terminal:

Selesai sudah.

Judul Cuma untuk Pembatas Saja dan Saya Bingung Apa Namanya Karena Artikel Ini Bukan Artikel Terakhir Karena Entah Mengapa Kalau Saya Beri Nama Penutup Artikel Selanjutnya Tidak Pernah Jadi

Sampai sini, Kisanak bisa langsung menjalankan “./gradlew run” seperti biasa. Seharusnya, sih, keluarannya sama.

Sampai sini saya juga berpikir, apakah saya perlu mengubah gaya menulis saya? Saya biasanya menggunakan frasa, “silakan gunakan penyunting kesukaan Anda.” Kali ini saya paksakan semua kita menggunakan penyunting saya, terminal GNU/Linux.

Semuanya bisa langsung dicobakan di terminal pada sistem operasi GNU/Linux. Mohon beritahu saya kalau ada yang tidak jalan.

Selanjutnya

Kisanak berpikir setelah menguasai modularitas dengan Gradle dan metodologi cetek Reverse Engineering of JP, Abridge Version, Kisanak merasa sudah elit?

Sayang sekali, Kisanak. Kalau Kisanak sadar, cara penamaan paket saya kacau! Mana benar itu penulisan “aja.jp.percuma”? Seharusnya “edu.ui.jp.percuma” sesuai dengan organisasi yang jam kerjanya saya ambil untuk menulis ini atau “jp.percuma” karena “aja” bukanlah top level domain yang lazim. Pokoknya, konvensi penamaan ini penting.

Ah, Pak JP, apakah ada yang perlu saya pelajari? Mohon ajari, bila berkenan.

Saya suka sikap Kisanak! Nama paket akan sangat berpengaruh terhadap Artifak. Artifak adalah obyek-obyek hasil kultivasi yang banyak dipakai orang. Misalnya, menggunakan Maven dalam POM yang ada di JCenter atau Maven Repository.

Tergantung mood saya, saya akan membahas cara membuat peladen artifak lokal (bonus kalau saya lagi mood) dan  membuat artifak dengan Gradle dan mengimpor artifak dengan Gradle. Atau, mungkin hanya di sekitar artifak saja. Entahlah…. Film apa yang bagus untuk mood saya, ya?

Daftar Pustaka

Martin Fowler (1999). Refactoring: Improving the Design of Existing Code. Boston: Addison-Wesley Professional. doi: 0201485672 9780201485677. Retrieved from Addison-Wesley Professional: www.worldcat.org/isbn/0201485672.^
Yu, Yijun and Wang, Yiqiao and Mylopoulos, J. and Liaskos, S. and Lapouchnian, A. and Leite (2005, August). Reverse engineering goal models from legacy code 13th IEEE International Conference on Requirements Engineering (RE'05), [NO VOLUME]([NO ISSUE]), 363--372. doi: 10.1109/RE.2005.61.^
Cara Membuat Proyek Gradle secara Manual yang Sebenarnya Bisa Dengan Mudah Dilakukan dengan “New Project” pada IntelliJ atau Eclipse

Cara Membuat Proyek Gradle secara Manual yang Sebenarnya Bisa Dengan Mudah Dilakukan dengan “New Project” pada IntelliJ atau Eclipse

Seperti judul blog ini, yang saya tuliskan ini adalah sesuatu yang sia-sia. Anda bisa langsung menggunakan aplikasi seperti IntelliJ atau Eclipse. Dengan penyunting itu, Anda tinggal membuat “New Project” dan semuanya sudah terkonfigurasi.

Tapi, mungkin Anda salah satu elitis yang lebih suka menggunakan terminal. Atau, Anda ingin tahu cara kerja Gradle sehingga Anda dapat setidaknya sedikit paham kalau ada masalah. Kalau saya, saya hanya sedang iseng sebelum menunggu waktunya tiba untuk menonton Warcraft di bioskop.

Proyek hanya Sejauh Direktori Kosong

Mari buat proyek baru. Caranya, buat direktori kosong dan dua buah berkas Gradle: build.gradle dan settings.gradle.

Mari namakan proyek kita ini “proyekPercuma”.

Secara umum, ini sudah siap. Tapi tunggu dulu, Kisanak! Kisanak tidak akan pernah lengkap ilmu bila tanpa jurus Monyet Membungkus Pisang!

Proyek hanya Sejauh Pembungkus

Java adalah sebuah pustaka yang sering kali berdiri sendiri. Hal ini karena sering kali distribusi menggunakan versi yang lawas. Bayangkan, Kisanak! Ini sudah 2016, namun Kubuntu Xenial (16.04) yang saya pakai masih menggunakan Gradle versi 2.10.

Hasilnya:

Astaga! Padahal, versi terbaru sudah ada lama sebelum Xenial. Belum lagi, beberapa pustaka terbaru memanfaatkan Gradle versi terbaru.

Supaya kita menggunakan Gradle terbaru, mari buat skrip pembungkus Gradle. Saat penulisan Gradle terbaru versi 2.13.

Anda bisa lakukan ini untuk memperbaharui Gradle pada proyek yang lama ke versi yang terbaru. Sekarang lihat versinya:

Selesai, deh.

Tunggu Dulu, Kisanak!

Mari buat sebuah proyek Java sederhana.

Lalu buat struktur direktori Java (kode sumber dan sumber daya):

Sebagai pemrogram Java yang baik, seharusnya kita menaruh berkas Java pada paket-paket. Mari buat direktori paket Java.

Buat sebuah kelas sederhana.

Tambahkan berkas Java ini sebagai kelas utama dalam proyek percuma.

Sekarang tinggal dicoba jalankan:

Saya sengaja tambahkan “-q” agar keluaran dari Gradle tidak keluar. Sehingga, hasilnya langsung keluaran dari aplikasi, yakni:

Kalau tanpa “-q” dia akan berisik seperti ini:

Bersih-bersih

Kadang kalau proyek sudah besar dan kompleks, kita perlu membersihkan hasil kompilasi secara manual:

Mau buat distribusi supaya keren?

Sehingga, kita jalankan dengan:

Ada .bat juga di situ untuk menjalankan di sistem terlarang.

Mau publikasikan hasil pekerjaan?

Berkasnya ada di ./build/distributions/percuma.zip

Mau tahu perintah Gradle yang lain?

Selebihnya terserah Anda. Gampang, ‘kan?

Bacaan Lebih Lanjut

Membuat Entitas CRUH pada Spring JPA

Membuat Entitas CRUH pada Spring JPA

Operasi basis data biasa mengenal akronim CRUD yang berarti Create (Buat), Read (Baca), Update (Modifikasi), dan Delete (Hapus). Operasi-operasi ini lazim diterapkan pada bisnis sehari-hari. Namun, pada beberapa data kritikal, operasi hapus tidak boleh benar-benar dilakukan. Yang dilakukan hanya mengubah agar data tersebut tidak terlihat/aktif di aplikasi, namun secara fisik masih ada di basisdata.

JPA Pada Umumnya

Sebagai contoh, misalkan ada kelas entitas akun yang biasa dibuat oleh orang.

Pada kelas Account.java seperti biasa kita membuat kolom-kolom biasa. Lalu, misalkan dengan Spring Boot JPA, dibuatkan sebuah kelas Repository yang akan digunakan untuk melakukan operasi-operasi CRUD:

Saya akan menunjukkan selanjutnya bagaimana mengubah pola CRUD menjadi CRUH (Hide). Operasi CRUH hanya istilah saya saja yang artinya hanya menyembunyikan, bukan menghapus data (hapus-sembunyi).

CRUH dengan JPA

Salah satu solusi untuk operasi hapus-sembunyi adalah dengan menggunakan penanda. Kolom penanda ini digunakan untuk menyatakan data tersebut sudah terhapus. Sehingga, klien/aplikasi hanya akan mendapatkan data yang tidak ditandai. Solusi ini dapat dicapai dengan minimal melalui Spring JPA.

Pada JPA, yang diubah cukup hanya kelas entitas saja. Hal-hal yang diperlu dilakukan:

  • Ubah operasi hapus dengan menandai kolum penanda. Misalnya pada baris 4 operasi SQL hapus dimodifikasi dengan mengubah nilai deleted menjadi ‘1’.
  • Ubah operasi baca dengan mengambil data yang kolom penandanya belum diset. Misalnya pada baris 5, dicari deleted tidak sama dengan ‘1’.
  • Buat sebuah kolom penanda. Misalnya pada baris 13, ditambahkan kolom deleted. 
  • Pada baris 12 dibuatkan sebuah anotasi @JsonIgnore agar kolom ini tidak muncul pada akses data melalui Repository. Jadi, kolom ini benar-benar transparan.
  • Jangan lupa diinisialisasi data deleted pada konstruktor.

Semoga bermanfaat.

Mengubah Format PEM (Apache/NGINX) ke Keystore JAVA

Mengubah Format PEM (Apache/NGINX) ke Keystore JAVA

Untuk organisasi/individu yang memegang domain dengan banyak sub-domain, biasanya dibeli sertifikat wildcard. Dengan sertifikat wilcard, tak perlu membeli sertifikat per sub-domain. Hanya saja, biasanya format yang diberikan adalah PEM untuk peladen HTTP semacam Apache2 atau NGINX.

Bagaimana dengan peladen berbasis Web macam Tomcat?

Saya asumsikan sudah ada tiga berkas ini:

server.key
Kunci privat peladen.
server.crt
Sertifikat peladen yang sudah ditandatangani oleh CA.
ca.cert
Sertifikat CA yang menandatangani sertifikat peladen.

Selanjutnya, ubah bentuk X.509 ke format PKCS12 dengan OpenSSL:

Anda akan ditanyakan sandi baru. Jangan lewati karena proses berikutnya butuh sandi tersebut! Isi sandi dengan sandi yang aman.

Selanjutnya, impor kunci PKCS12 tersebut ke sebuah keystore Java:

Saya menggunakan PWGen untuk membuat sandi acak. Mohon ganti ahs8kahLuvu3nahb dengan sandi yang Anda telah masukkan sebelumnya pada proses openssl.

Selesai. Anda kini sudah memiliki keystore.jks yang siap dipakai oleh aplikasi Java untuk membuat koneksi SSL/TLS.

Selamat mencoba.

Netbeans Error: “Class not found: javac1.8”

Netbeans Error: “Class not found: javac1.8”

Netbeans can’t compile because of “Class not found: javac1.8”! This is because I’m using JDK8 and the Ant in Netbeans 7.3 and below using Ant version below 1.9.0. The workaround; goto:  ("Bug 213403 - Java sources cannot be compiled using Ant when running IDE on JDK 8 ", 2012)

Tools > Options > Java > Ant > Properties; then set:

This will set Ant to tell the JDK to compile with JAVA7 compatibility.

Netbeans BUILD Options

Daftar Pustaka

Bug 213403 - Java sources cannot be compiled using Ant when running IDE on JDK 8 (2012, 06 01). Retrieved 06 02, 2014 from Netbeans Bugzilla: https://netbeans.org/bugzilla/show_bug.cgi?id=213403.^
Memasang NewGenLib, Sebuah ILS Lainnya
NewGenLib

Memasang NewGenLib, Sebuah ILS Lainnya

NewGenLib banyak juga disebutkan dalam referensi mencari sistem perpustakaan terintegrasi (ILS). ILS ini sepertinya dibuat untuk berjalan pada sistem operasi Windows. Hal ini membuat NextGenLib tidak begitu memperhatikan keamanan.

Banyak kode yang ditulis langsung (hardcoded) sehingga menyebabkan kustomisasi agak sulit. Berkas instalasi memasang ke banyak direktori di /usr. Sejujurnya, saya tidak ingin Anda membaca panduan instalasi perangkat ini di mana pun. Dari semua yang saya temui, tidak ada satu pun yang cukup aman.

Lalu mengapa saya tetap menulis ini? Karena ILS ini sangat menarik. Setelah mencobanya, saya melihat fitur-fitur yang baik. Selain itu, pemasangan cukup mudah dibandingkan ILS yang lain. Itu sebabnya, saya akan mencoba memasang NewGenLib seaman mungkin.

Kali ini saya menggunakan BlankOn Suroboyo.

Pasang Berkas-berkas yang Dibutuhkan

NextGenLib hanya membutuh Java dan PostgreSQL. Tomcat, SOLr, dan lainnya sudah terbundel.

Saya juga memasang unzip untuk mengekstraksi berkas pasangan. (Opsional)

Buat Basisdata

Buat pengguna.

Masukkan sandi Anda. Lalu, selanjutnya buat basisdata.

Silakan Anda ganti ngl dan ngldb dengan penamaan yang sesuai selera.

Unduh Berkas Pemasangan

Unduh NewGenLib, ekstraksi, dan masuk ke direktori.

Selanjutnya saya akan membahas kustomisasi pemasangan.

Kustomisasi Berkas Konfigurasi Pemasangan

Ada dua yang saya hendak ubah:

  • apache-ant-1.8.1/bin/config.ini
  • Berkas-berkas yang berisi direktori data

Kedua berkas ini akan dibahas lebih lanjut.

Berkas config.ini

Berkas config.ini merupakan konfigurasi utama, berikut saya tulis seluruh isi berkas tersebut. Anda bisa gunakan penyunting favorit Anda, saya menggunakan cat saja.

Saya akan menaruh instalasi NextGenLib di /opt/ngl agar sesuai dengan FHS. Ganti lokasi kode sumber di tempat di mana Anda mengekstrasi kode sumber. Misalnya, /tmp/InstallNGL3.0. Yang lainnya berhubung dengan basisdata, pengguna basisdata, dan sandinya.

Sekali lagi, hanya untuk tutorial ini saja saya tulis sandinya passwd123. Anda harus menggunakan sandi yang aman untuk instalasi Anda! Jangan ikut menggunakan sandi yang aneh.

Berkas-berkas Pemasangan Direktori Data

Saya hendak mengganti pemasangan data NextGenLib dari /usr ke /srv/ngl agar lebih rapi. Untuk itu, saya perlu mengubah skrip Installation.xml agar sesuai dengan itu.

Demikian.

Menjalankan Pemasangan

Saatnya menjalankan pemasangan.

Membetulkan Perizinan

Buat pengguna yang akan menjalankan NextGenLib.

Ya, saya memang kurang kreatif dalam memberi nama. Selanjutnya ubah letak direktori data:

Satu konfigurasi lagi:

Ubah perizinan:

Selanjutnya coba jalankan NextGenLib.

Menjalankan NextGenLib

Saya kebetulan menjalankan NextGenLib pada VirtualBox. Hal ini menyebabkan saya harus membuat port lain selain 8080. Kebetulan port tersebut digunakan oleh aplikasi lain. NextGenLib membaca port yang ada di klien sehingga port di sistem harus sama dengan port yang diteruskan.

Untuk itu, saya lakukan langkah opsional ini.

Perintah tersebut mengganti seluruh port yang ada dari 8080 menjadi 18080.

Saya tidak berhasil menemukan konfigurasi yang membuat /usr/NextGenFiles sebagai pusat konfigurasi. Sepertinya dia menulis langsung di aplikasi langsung (hardcoded). Terpaksa sebagai jalan tengah dibuatkan tautan ke direktori tersebut.

Untuk mengubah itu, perlu melakukan kompilasi. Ini menambah kompleksitas dan membuat NextGenLib tidak begitu seksi lagi. Apalagi ini untuk orang awam.

Untuk menguji apakah ini sudah jalan, silakan jalankan secara manual.

Kalau sudah bisa, silakan pergi ke peramban dan akses http://127.0.0.1:18080/newgenlibctxt/ untuk melihat OPAC.

NextGenLib OPAC

NextGenLib OPAC

Saya senang dengan fitur NextGenLib. Dia dapat menjalankan aplikasi klien dengan menggunakan Java. Karena pemasangannya tidak terlalu rumit seperti yang sudah-sudah, saya akan memberikan bonus: Dasbor.

Dasbor Klien

Untuk dapat mengakses dasbor klien, Anda dapat mengarahkan peramban Anda ke http://localhost:18080/newgenlibctxt/LaunchApplication untuk mendapatkan aplikasi  klien berbasis Java.

Awalnya Anda akan ditanyakan alamat peladen.

Java Client asking to select the host.

Java Client asking to select the host.

Saya memasukkan localhost karena memang berjalan di VirtualBox. Anda bisa masukkan alamat FQDN peladen Anda bila Anda memasang di sebuah mesin terdedikasi.

Ketika berhasil terhubung, aplikasi akan menanyakan pengguna dan sandi masuknya.

Java Client asking for login

Java Client asking for login

NewGenLib secara baku memulai dengan pengguna “1” dan bersandikan “abc“. Bilamana aplikasi tidak bisa masuk, kemungkinan ada perubahan data saat pemasangan. Saya juga awalnya tidak bisa masuk. Saya akali dengan mengganti sandi pengguna “1” dengan “test“. Caranya:

Ini SQL mengubah sandi semua pengguna di basisdata. Untungnya, baru ada satu pengguna di basisdata.

Kalau sudah bisa masuk, maka akan dibawa ke dasbor.

Java client dashboard

Java client dashboard

Saya akui, dasbor NewGenLib sangat baik dan cukup mudah untuk dilihat. Yang pasti, dengan bermodalkan pemrograman berbasis Java, kita dapat mengubah tampilan menjadi lebih baik.

Omong-omong, administrasi pun dapat diakses dari laman situs. Namun, klien Java menyediakan halaman yang lebih intuitif menurut sekilas pemandangan saya.

Yak, kira-kira begitulah.

Huruf yang Keren
Blankon dan JDK8.

Huruf yang Keren

Netbeans, tambahkan di netbeans.conf:

Untuk Gentoo yang menggunakan IcedTea 1.7, bisa membuat sebuah alamat:

Tambahkan saja di .bashrc biar tidak perlu diulang-ulang. Dengan demikian, penggambaran huruf akan disamakan dengan sistem.

 

Java 8 Early Access Pada BlankOn 8
Blankon dan JDK8.

Java 8 Early Access Pada BlankOn 8

Blankon dan JDK8.

Beberapa alasan yang saya pikirkan untuk mencoba Java8:

  • Tulisan Milisdad yang memasang JDK8 pada Linux Mint.
  • Project Jigsaw akhirnya diterapkan! Proyek ini adalah sebuah usaha untuk memodularisasi Java sehingga JVM hanya menjalankan modul-modul yang diperlukan.
  • Operasi Lambda diterapkan. (Functional programming, anyone?)
  • Saya bosan karena ternyata Raspberry butuh monitor HDMI. Padahal, saya sudah berhasrat untuk begadang.

Yah, sebenarnya karena saya bosan. 🙂

Langsung Saja!

Ternyata caranya ada di sini pada bagian Debian. Yaaaa…. ternyata segampang itu. sedih

Instalasi Oracle (SUN) Java dan Netbeans pada Ubuntu

Instalasi Oracle (SUN) Java dan Netbeans pada Ubuntu

Ubuntu menyediakan Oracle (SUN) Java pada repository Canonical Partner. Beruntung KAMBING.ui.ac.id sudah membuat cerminnya. Anda tinggal aktifkan reponya dengan membuat berkas baru /etc/apt/sources.list.d/canonical-partner.list yang berisi:

Gunakan penyunting kesukaan Anda. Sebagai contoh dengan menggunakan penyunting sederhana:

Ubuntu menyediakan Netbeans pada repo universe. Oleh sebab itu, aktifkan repo universe. Biasanya ada di /etc/sources.list dinonaktifkan sebagai komentar. Contoh konfigurasi repo saya yang mengaktifkan repo main, restricted, universe, dan multiverse:

Ingat untuk mengganti maverick dengan versi ubuntu Anda (lucid misalnya)! 😛

Setelah itu, jangan lupa data APT dimutakhirkan:

Pasang kedua perangkat lunak tersebut:

Selesai.

Agar peramban Anda dapat menggunakan Java, jangan lupa memasang sun-java6-plugin:

Just A Recall of Memory

Just A Recall of Memory

Hello, just want you to know that I'm still alive. I just want to talk about random stuff that popped over this week. Enjoy! 😛

Anyway, interestingly, this week there is a lawsuit encounter between Oracle and Google. The holy father of Java, James Gosling, whom leaved Sun after the acquisition, already predicted that Oracle will sue Google. SUN, whom play fair and square, never used their patent offensively. Even when Google makes Darvik, the Java JIT JVM for Android, SUN just let it slipped away. SUN had to put their relationship with developers in good terms. Well, Oracle surely not need to. They sue Google for Darvik.

This, according to Google spokesmen, is an attack not just to Google, but also to all of open source Java implementor. That's may be true, we can imagine all the enterprise Java goodies from IBM and other implementor becomes a good attacking target. Well, so far I only reading on one side of the story. So, Oracle, what's your reason for that?

Another great story is KDE SC 4.5.0 finally launched. Sadly, I've read that it would not be in Gentoo before 4.5.1. Sad indeed, I'm using Gentoo. FYI, I'm interested in two DE right now: Enlightenment (E17) and KDE 4.5. Both have strong connection with embedded devices. Since its early days of development, E17 had been known compiled to Zaurus (Yes, THE archaic smart phone). Meanwhile, Trolltech, the company behind Qt, the base of KDE SC, had been bought by Nokia.

I wish I can buy Beagleboard. Can someone from Indonesia without credit card buy that stuff? Dear lazy webm help.

How about GNOME?

Well, we'll wait for 3.0. From my personal opinion, I have two things about GNOME that should be changed: 1) The dumbed down version; 2) trying to be conservative. I like being conservative, but, I don't think less feature is "less is more". The most reason I would stuck to GTK+ is because of existing application rocks. Applications like Pidgin can't be replaced with Kopete, yet. I wish KDE SC could make a better solution for proxy environment. Firefox still uses GTK+ and many sites are doing well on that. Webkit just a new player being adopted worldwide Firefox still de facto.

Btw, happy feasting for you that do that.

Perjalanan Saujana dalam Gentoo

Perjalanan Saujana dalam Gentoo

Setelah ditinggal pergi Sabtu-Minggu, akhirnya Gentoo 64bit telah selesai memasang KDE4.4. Perjalanan terganggu ketika saya gagal masuk ke dalam sistem. Setelah berguru kepada Mbah Gugel dan bersemedi berjam-jam, akhirnya saya putuskan bahwa masalahnya ada pada perangkat keras, Acer Aspire. Sebelum Anda menuduh Acer jelek, saya perlu kemukakan bahwa komputer yang saya gunakan adalah sebuah PC bermerek yang sudah dimodifikasi. Saya hapus instalasi Windows Vista Premium (asli, karena bermerk). Omong-omong, bisakah di Indonesia kita minta refund untuk sistem operasi mahal itu?

Saya memasang sendiri 2 GB memori (bakunya 1 GB). Lalu, saya memasang kartu pengendali SCSI. Nah, ternyata, kartu pengendali inilah yang menyebabkan komputer ini gagal memuat Gentoo yang terpasang pada SATA. Anehnya, BIOS hanya mengenali SCSI saja. Akhirnya demi Gentoo, saya mencopot SCSI saya. Sebuah keputusan berat, namun cukup berarti. Akhirnya saya bisa memuat Gentoo. Mungkin saya perlu menambal BIOS dengan firmware yang baru. Beberapa modifikasi saya buat pada berkas /etc/make.conf untuk dapat mengompilasi secara optimal.

# Konfigurasi kompilasi

Saya mengubah kompilasi saya dengan menambahkan perintah sebagai berikut:

CFLAGS="-O2 -pipe -march=core2 -mtune=native -msse4.1"

Sebenarnya bisa saja ditambahkan " -fomit-frame-pointer" untuk membuang simbol-simbol debug. Tapi, saya rasa ini cukup aman untuk konfigurasi saya (CPU Core2 Duo E7400)

# Pemasangan Sun JDK

Pemasangan SUN Oracle JDK cukup rumit. Ternyata, kita harus menambah variabel berikut pada berkas /etc/make.conf atau pada berkas /etc/portage/package.license, yaitu:

 

ACCEPT_LICENSE="dlj-1.1"

Jika ada lisensi lain yang diperlukan dapat ditambahkan dengan pemisahan menggunakan spasi. Setelah ada dibuat seperti demikian, kita baru bisa memasang dengan normal paket sun-jdk.
 
Saya mengunduh driver NVIDIA Beta dari situs NVIDIA. Lalu, saya mengunduh driver Omnikey 5321 dari situsnya (wow, mereka menatar driver Linux). KDE 4 berjalan stabil, bagus, dan responsif. Masih banyak kilikan lainnya yang saya belum paparkan, tetapi rasanya itu perlu di episode selanjutnya. 😀
Java Could Not Connect To Host

Java Could Not Connect To Host

If you are experiencing: Caused by: java.net.SocketException: Network is unreachable

This is most likely because of the Debian bug to force all system using IPv6. According to the reference, you should do:

$ sudo sed -i ‘s/net.ipv6.bindv6only\ =\ 1/net.ipv6.bindv6only\ =\ 0/’ \ /etc/sysctl.d/bindv6only.conf && sudo invoke-rc.d procps restart

REFERENCE: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560044