SVN Export on Github

SVN Export on Github

We sometimes just need to download one branch of GIT without its history. Kind of like svn export thingie. A feature of SVN that would export a branch without any SVN metadata.

Suppose we have a Github repository:

Lo, we could do this:

And this to see what GIT versions available:

And this to see what version had been released in the past:

Cool hidden stuff from Github.

Bacaan Lebih Lanjut

Pasang ZFS Terbaru pada Ubuntu Xenial 16.04

Pasang ZFS Terbaru pada Ubuntu Xenial 16.04

Ubuntu Xenial secara baku memasang ZFS. Sayangnya, saya sering pindah-pindah sistem operasi sehingga versi ZFS yang dimiliki oleh Ubuntu Xenial tidak memadai. Ada fitur yang tidak kompatibel dengan versi ZFS Ubuntu.

Untungnya, perkakas ZFS yang sudah ada di Xenial sudah mumpuni. Yang perlu diperbaiki hanya versi kernelnya. Jadi, itulah yang hendak kita lakukan: memasang kernel ZFS terbaru pada Ubuntu Xenial sehingga fitur-fitur terbaru didukung.

Saya belum tahu efeknya, tetapi mohon berhati-hati bila menggunakan perkakas berbeda dengan kernel. Kalau saya, saya punya cadangan. Lagipula, saya biasa melakukan ini dari CD Pemasangan KDE Neon, distro GNU/Linux berdasarkan Ubuntu Xenial.

Mohon berhati-hati.  Saya tidak bertanggung jawab atas risiko yang Anda lakukan.

Teknis Setelah Mukadimah

Untuk kernel dari Ubuntu, hapus kernel ZFS yang sudah ada:

Pasang ketergantungan:

Unduh SPL:

Buat:

Unduh ZFS:

Buat:

Selesai.

Memasang Darktable di Ubuntu Xenial 16.04
Darktable logo

Memasang Darktable di Ubuntu Xenial 16.04

Darktable adalah sebuah perangkat lunak untuk memroses gambar secara profesional. Aplikasi ini bisa memroses format RAW. Sistem proses kerja yang digunakan adalah dia mencatat perubahan apa saja yang dilakukan terhadap gambar sehingga efek-efek tersebut disusun dan diaplikasikan terhadap gambar asli. Dengan demikian, gambar asli dapat terjaga.

Aplikasi ini mendukung OpenCL. OpenCL adalah teknologi yang menggunakan GPU sebagai prosesor tambahan. Laptop saya AMD A10 7300 Kaveri mendukung OpenCL yang memanfaatkan tambahan 6 Compute Unit yang ada di GPU.

Use OpenCL option

Use OpenCL option

Cara pasangnya mudah.

Omong-omong, saya baru mencoba saja. Dari tampilan antarmuka yang cukup banyak, sepertinya memang perkakas ini untuk profesional. Banyak yang bisa dilakukan dengan Darktable ini. Mudah-mudahan buat yang hobi fotografi bisa membagikan pengalaman menggunakan aplikasi Darktable ini.

Darktable application

Darktable application

Pasang ZFS GIT di Ubuntu 16.04 Xenial

Pasang ZFS GIT di Ubuntu 16.04 Xenial

Set:

Cuma memastikan versi yang lama tidak ada:

Pasang ketergantungan:

INI IMPLEMENTASI YANG RUSAK UNTUK XENIAL. SAYA TIDAK MENGHAPUS KARENA UNTUK KEPERLUAN RISET DI VERSI OS YANG LAIN. MOHON IKUTI CARA DI TULISAN INI.

 

Bacaan Lebih Lanjut

Resep: Jemalloc

Resep: Jemalloc

Pastikan bahwa:

terpasang. Perkakas autoconf diperlukan untuk membuat makro-makro yang dibutuhkan. Hal ini karena versi VCS biasanya perlu menjalankan autogen.sh untuk membuat skrip configure.

Ambil dari GIT:

Lakukan tiga langkah sulap seperti biasa:

Eh, empat, deh. Lupa. Kalau memasang dari repositori langsung, bukan versi terbit, harus dibuatkan makronya terlebih dahulu. Baris configure saya tambahkan parameter GCC untuk menggunakan kode-kode ke prosesor saya berhubung jemalloc untuk laptop. Baris make dijalankan sebanyak jumlah prosesor. Baris instalasi secara spesifik dijabarkan untuk hanya memasang pustaka dan binari jemalloc. Ada galat kompilasi dokumentasi di jemalloc yang menyebabkan pemasangan menyeluruh (sudo make install) menjadi gagal.

Membuat Pemerintahan yang Tangkas dengan Metodologi Tangkas (Agile Method)

Membuat Pemerintahan yang Tangkas dengan Metodologi Tangkas (Agile Method)

Mark Schwartz berbicara mengenai bagaimana dia mau mengubah Departemen Imigrasi Amerika Serikat menjadi lebih mudah dan efisien. Berikut apa yang saya tangkap dari apa yang dia bagikan ditambah beberapa addendum dari saya.

  • Problem pertama Schwartz adalah adanya aturan MD 102 (Management Directive #102) dari Homeland Security untuk pengadaan proyek TIK. Dokumen tersebut menyediakan falsafah pengembangan menggunakan sebuah pengembangan air terjun (Waterfall SDLC) yang komprehensif. Pada buku tersebut, tercantum proses apa saja yang dilakukan dan dokumen apa saja yang harus dilakukan. Setelah mempelajarinya, Beliau mengumpulkan semua pelatih tangkas dan membuat sebuah sabda MD001, “mulai sekarang kita semua tangkas.” Beliau mendefinisikan 8 nilai inti dalam metodologi tangkas yang hendak diimplementasi.
  • Lebih lanjut, yang perlu dilakukan oleh Schwartz adalah menerjemahkan semua kebutuhan yang dicakup dalam MD102 dan memetakannya ke dalam sebuah Praktik Tangkas sehingga menjadi Birokrasi Ramping (Lean Bureaucracy).
    • Menggunakan Continues Integration (Integrasi Berkesinambungan) dan semua perkakas yang biasa digunakan: Chef (Infrastruktur sebagai pemrograman, otomatisasi deployment), Jenkins (perkakas pembangunan secara berkesinambungan), GIT (DVCS), Gradle, New Relic (Manajemen Log), AWS (Infrastruktur Awan), Gradle (perkakas kompilasi), Spring (Java).
    • Menerjemahkan aturan-aturan hukum menjadi Test Driven Methodology: (Metodologi Berbasis Pengujian)
      • Misalnya, untuk UU Disabilitas dibuatkan pengujian kode yang dapat mendukung disabilitas.
      • Menerapkan standarisasi keamanan menjadi analisis kode statik (Static Code Analysis).
      • Menerapkan level permainan yang sama bagi semua kontraktor yang menang tender. Mereka dapat langsung masuk dan menyelesaikan aplikasi tanpa bergantung kepada dokumentasi yang sebelumnya. Hal ini diakibatkan dari sifat Metodologi Tangkas yang menyediakan unit test dan berbagai macam penunjang sehingga pengembang bisa langsung masuk.
    • Menyediakan grafik-grafik dari data yang dapat dikumpulkan dari hulu ke hilir sehingga menghasilkan dokumen empirik yang dapat dinilai secara obyektif.
      • Semua Komponen pada Integrasi Berkesinambungan dapat dicatat!
      • Hal ini karena infrastruktur sendiri dijahit dalam kode-kode (Chef) yang dapat dimonitor (debug) dan dihitung.
      • Jenkins dapat menghasilkan catatan mengenai hasil kompilasi dan deployment setiap versi pembangunan (build).
      • Spring menyediakan instrumentasi untuk mengukur. (Lihat Spring Boot)
      • Infrastruktur Awan dapat menyediakan seberapa besar penggunaan sumber daya secara menyeluruh.
    • Menjalankan Chaos Monkey! 😛

Beliau juga berbicara pada AWS Government, Education and Nonprofits Symposium. Pada forum tersebut, Beliau menyatakan sebenarnya kebutuhan proses dalam birokrasi adalah

The speed from when we [government] realize a mission need to the time when we deploy a capability to meet that mission need.

Atau diterjemahkan sebagai berikut:

Waktu yang dibutuhkan untuk pemerintah mendapatkan sebuah kebutuhan misi sampai waktu yang diperlukan saat sebuah kemampuan yang dihasilkan untuk memenuhi kebutuhan tersebut.

Biasanya yang terjadi adalah Pemerintah mendapatkan sebuah kebutuhan dan menunggu sampai lebih banyak lagi kebutuhan sehingga dapat dibundel menjadi satu Program Kerja. Akibat satu bundel Proker ini, mereka harus menulis sekitar 105 dokumen tebal yang kemungkinan tidak ada yang membaca. Baru, setelah itu mereka masuk ke Lelang. Setelah lelang berbagai hal (barang-barang, jasa pemasangan ke Pusat Data, jasa pengembangan, dll.), aplikasi dikembangkan. Setelah selesai pengembangan, aplikasi diuji untuk memenuhi kebutuhan. Terakhir, aplikasi diuji keamanan. Baru setelah itu (kemungkinan) digunakan.

Proses ini dapat menghabiskan waktu 12 tahun. Artinya, ada 12 tahun masa yang diperlukan untuk sebuah kebutuhan Pemerintah untuk dapat benar-benar dikerjakan. Bisa jadi, kebutuhan tersebut sudah berubah.

Yang dilakukan adalah Schwartz dan tim menciptakan sebuah Sistem Integrasi Berkesinambungan (Continues Integration System) yang memiliki sejumlah pengujian. Hal yang dilakukan oleh pengembang, setelah mereka menguji kode mereka, mereka pun menerbitkan (push) kode mereka ke sistem ini. Lalu, sistem ini yang kemudian menjalankan berbagai proses tes secara otomatis. Sehingga, setelah selesai proses ini sehingga menghasilkan satu versi pembangunan yang sukses, sistem ini langsung secara otomatis dapat diterbitkan ke infrastruktur awan untuk dijalankan langsung.

Untuk setiap pembaca yang belum begitu paham Metodologi Tangkas, Metodologi Tangkas menekankan pada “code often, deploy often”. Dalam Metodologi Tangkas Scrum, hal ini diterjemahkan dengan menyediakan solusi dari hulu ke hilir untuk Kebutuhan yang tidak terlalu besar. Bahkan, Scrum menyarankan untuk memotong-motong sebuah kebutuhan yang besar menjadi kebutuhan-kebutuhan yang kecil (atomik).

Kebutuhan-kebutuhan kecil ini menjadi semacam sayembara (bounty) yang dapat diambil oleh pengembang. Setiap kebutuhan atomik ini dihargai dengan poin. Dengan adanya poin ini, pengembang dapat menghitung berapa waktu yang dibutuhkan untuk menghasilkan produk. Semua berlangsung secara empirik karena ada nilai dan proses. Kegiatan pengembangan pun dilakukan dari hulu (back end) ke hilir (front end). Sehingga, pada setiap akhir kegiatan pengembangan kebutuhan atomik, ada aplikasi yang berjalan (berfungsi/dapat diakses dan digunakan).

Dari sisi Pemerintahan, dengan kebutuhan yang kecil, maka risiko yang dapat dihasilkan pun mengecil. Sehingga, dokumentasi yang dibutuhkan, penilaian yang dilakukan, dan audit yang diperlukan tidak sebanyak yang lama. Waktu yang dibutuhkan pun menjadi kecil!

Apa artinya ini?

Inovasi sebenarnya lebih mudah di pemerintahan. Kalau secara personal, akan banyak diketemukan banyak inovasi dari hampir semua orang. Namun, yang sebenarnya terjadi adalah banyak orang yang memiliki ide untuk meningkatkan berbagai proses merasa tak berkuasa. Mereka takut untuk harus terpenjara membuat 105 dokumentasi per ide mereka.

Dengan adanya Manajemen Identitas (SSO) yang sudah ada, infrastruktur awan yang sudah tersertifikasi fedRAMP, dan Infrastruktur Integrasi Berkesinambungan yang memenuhi kaidah-kaidah hukum, maka dapat dibuat eksperimen dengan biaya hampir tidak ada dengan potensi risiko yang rendah. Hal ini dapat dicapai asalkan ide yang ditawarkan dapat diterjemahkan menjadi aplikasi yang kemudian dapat dipublikasikan melalui Infrastruktur Integrasi Berkesinambungan tadi.

Eksperimen ini dapat langsung dijalankan dan diuji apakah berjalan baik atau tidak. Bila tidak, maka dapat langsung ditutup dengan hanya mematikan VM tersebut. Potensi kerugian pun minimal. Dengan potensi risiko dan biaya yang kecil, orang-orang tinggal diyakinkan untuk tidak malu untuk berinovasi. Hal ini mendukung inovasi dalam pemerintahan.

Satu catatan kecil, apa yang dilakukan Schwartz ini belum resmi karena menunggu Pemilu AS berakhir. Untuk mencari contoh yang berhasil, cari tidak lebih jauh ke Singapura. Singapura memiliki Badan Teknologi tersendiri untuk itu.

Singapura

Pada simposium yang sama, Chan Cheow Hoe menunjukkan bagaimana cara menerapkan layanan publik pada infrastruktur awan. Sebelum lebih lanjut membahas isinya, berikut hal menarik yang saya dapatkan dari Singapura:

  • Singapura telah mereformasi Depkominfo dan Departemen Penerangannya menjadi IMDA dan GovTech.
    • GovTech bertugas membangun platform kunci yang mendukung perkembangan infrastruktur teknologi yang aman untuk dapat dimanfaatkan oleh berbagai individu dan bisnis di Singapura. Misi mereka mendefinisikan Singapura sebagai Smart Nation. Sumber inovasi untuk TIK, IoT, dan membantu meningkatkan kemampuan Pemerintah Singapura dalam domain-domain ini.
    • IMDA bertujuan untuk membangun konten yang menghubungkan komunitas dan kepentingan. [sejujurnya saya tidak tertarik membahas peran IMDA, silakan baca sendiri di situs ;-P]
  • Ada beberapa hal yang hendak dicakup oleh GovTech:
    • Pemimpin dalam transformasi digital.
    • Program kerja Smart Nation dan Digital Gov.
    • Meningkatkan Kemitraan Teknologi
    • Membuat Open Data/OpenGov [Jakarta SmartCity seharusnya, UU Keterbukaan Informasi tujuannya, KPU C1 2014 contohnya] data.gov.sg yang dapat dimanfaatkan oleh berbagai pihak melalui API.

Berikut hal-hal yang dibicarakan oleh Chan Cheow Hoe:

  • Membuat sebuah pedoman dengan empat nilai berikut:
    • Meminimalisasi gesekan saat berhubungan dengan pemerintah. Intinya, mengurangi pertemuan langsung dengan pemerintah. Misalnya, pembuatan data terintegrasi dengan banyak perusahaan sehingga dapat membantu warga dalam membuat laporan pajak secara otomatis. (e-Filing yang terintegrasi)
      There should be no transaction if it’s not necessary.
    • Membuat komunitas digital dan ekosistem yang bermakna. Intinya, sih, sistem pelaporan Jakarta SmartCity plus beberapa eksperimen fungsionalitas.
    • Mengantisipasi isu-isu dan menyelesaikannya. Intinya, Big Data Analysis.
    • Menjembatani jurang digital. Intinya, berbagai program kerja pengentasan buta teknologi.
  • Menyediakan Infrastruktur Hibrida:
    • Managed Hosting. Untuk aplikasi-aplikasi tradisional.
    • Government cloud. Untuk sistem dengan data negara yang sensitif.
    • Public cloud. Untuk sistem yang menghasilkan data yang berhubungan dengan masyarakat.
  • Menerbitkan standarisasi Multi-Tier Cloud Security (MTCS) untuk menyeragamkan setiap penyedia layanan awan. Standarisasi MTCS ini sejajar dengan ISO27001. Dengan demikian, infrastruktur yang aman pun terjamin untuk kebutuhan Singapura (baik pemerintah mau pun sektor privat).

Bahkan Schwartz menyadari bahwa Pemerintah Singapura merupakan “kompetitor” yang luar biasa. Dia bahkan melucu bahwa dia jadi tertarik mau pindah ke Singapura. Aduh, kok, tulisan ini jadi panjang lebar, yah? Oh, tidak, waktu bermain game saya habis menulis ini.

Indonesia

Tadi saya perasaan mau menulis sesuatu, tapi hasrat bermain saya meninggi. Saya rasa rekan-rekan punya ide yang lebih baik. Ini beberapa hasil analisis saya.

  • PENTING: Perbanyak bergaul dengan Agile coach (pelatih tangkas). Baik AS mau pun Singapura merangkul profesional dalam membangun infrastruktur dan kebijakan.
  • Hukum: Anehnya, Hukum di Indonesia justru mendorong inovasi ini. Tidak ada MD102, bahkan adanya UU yang mendorong pembukaan (sebagian) data pemerintah ke sektor publik.
  • Hukum: Bahkan, ada hukum yang mengharuskan data ada di Indonesia untuk memproteksi kepentingan rakyat Indonesia.
  • Infrastruktur: Perkaya dan perkuat koneksi IIX! Kenyataannya, kebanyakan bisnis lebih percaya AWS. Bahkan, mereka lebih mempercayai Digital Ocean dan Microsoft Azure yang baru saja loncat ke sektor awan. Semuanya tidak ada satu pun di Indonesia.
  • Infrastruktur: PLN memiliki layanan yang semakin baik, demikian dari hasil survei kecil-kecilan saya dengan teman-teman Facebook saya. Seharusnya, ini bisa jadi modal untuk penyediaan datacenter yang lebih terpadu. Berapa, sih, biaya untuk membangun satu infrastruktur kecil untuk menyokong datacenter?
  • Infrastruktur: Sebagian besar (semua) pemain Indonesia yang menyediakan infrastruktur awan tidak menawarkan teknologi DevOps, tetapi teknologi kuno yang sulit untuk menerapkan Sistem Integrasi Berkesinambungan dan Infrastruktur Sebagai Kode.
  • Standarisasi: Baik AS (fedRAMP) mau pun Singapura (MTCS) memiliki standarisasi infrastruktur awan. Di Indonesia apa, ya?

Sejauh mana Indonesia mengantisipasi DevOps? Saya tahu Pak Utian sedang membangun pasukan OpenStack. Semoga pemerintah lebih aktif lagi mendorong infrastruktur TIK di Indonesia. Menghapus peraturan-peraturan non-UU yang konyol. Jangan sampai “produk Indonesia, dikode oleh perusahaan India, dan dipublikasikan di AWS Singapura.”***

Bisa, ‘kah, 99,9% produk Indonesia?

Sebelum Anda menuduh saya juga berpangku tangan. Tadinya, sih, saya mau menulis tentang Gradle dan teknologi terbaru lainnya. Tetapi, komentar yang saya terima hanya komentar SPAM dan SEO. Di blog tanpa iklan, bisa diambil langsung RSS-nya, dan bisa diaktifkan tanpa Javascript dan Cookies begini masih saja dibegitukan. Malas, ah, jadinya.

Lagi pula, saya juga termasuk yang masih aliran Stallmanisme, termasuk yang masih anti awan (agak murtad, sih). Tapi, kenyataan pahit. Mau tak mau, kita harus belajar terbang di awan. Ha… ha… ha….

 

***Saya bukannya anti globalisasi, tapi setidaknya Indonesia juga menjadi produsen dalam beberapa hal sehingga seimbanglah neracanya.

Memasang RVM

Memasang RVM

RVM adalah sebuah pengatur lingkungan Ruby. Dengan menggunakan RVM, kita bisa memiliki beberapa versi Ruby yang tidak saling bertabrakan. Cocok untuk pengembangan aplikasi Ruby yang versinya sering kali tidak bisa stabil mengikuti distro.

Impor kunci GPG:

Pasang RVM seperti biasa:

Selesai.

Catatan Pribadi: Pemasangan ZFS Pada Ubuntu 16.04 Xenial

Catatan Pribadi: Pemasangan ZFS Pada Ubuntu 16.04 Xenial

Versi kernel disesuaikan dengan kebutuhan, namun untuk kesederhanaan anggap saja versi yang sama dengan kernel yang sedang berjalan.

Pasang hal-hal yang dibutuhkan sesuai panduan pada ZFSOnLinux. Saya menambahkan GIT dan GNU Autoconf karena hendak memasang versi GIT.

Setelah ini, mari bangun komponen-komponen ZFS, yakni: SPL dan ZFS itu sendiri.

Memasang SPL

Unduh:

Sebenarnya tidak perlu dengan –with-linux. Sebagai pengingat saja kalau misalnya mau memasang untuk kernel versi lainnya. Misalnya, ada versi kernel terbaru dan sebelum masuk dengan kernel tersebut, kita pasang terlebih dahulu modul kernel. Jalankan skrip konfigurasi untuk mendapatkan skrip configure yang lazim dipakai untuk mengompilasi. Biasanya kalau unduh dari SCM (CVS, SVN, Mercurial, GIT, dan sebagainya), skrip tersebut belum ada. Lalu, lakukan stanza yang seperti biasanya.

Tentu saja, biasakan untuk mengompilasi dengan pengguna biasa. Baru setelah mau dipasang, dieskalasi jadi administrator.

Memasang ZFS

Unduh:

Lakukan empat stanza standar.

Selesai. Bagaimana menjalankan ZFS sudah ada di tulisan yang lain.

King of Fighters XIII Steam Edition pada GNU/Linux Wine
WINE Is Not Emulator

King of Fighters XIII Steam Edition pada GNU/Linux Wine

Valve telah berhasil membuat Steam, sebuah platform yang berhasil menciptakan ekonomi mayanya sendiri. Di saat yang lain sedang berjuang menciptakan ekosistem, Yang Dipermuliakan Gaben mengundang seorang ekonom, Yanis Varoufakis, untuk membuat sebuah ekonomi maya di Steam. Yanis Varoufakis inilah yang saban hari menolong Yunani melewati masa-masa kelamnya ketika negara tersebut tengah terancam bangkrut.

[Jadi, jangan bilang saya tidak riset. Saya membuka Steam dalam rangka mempelajari ekonomi maya itu. uhuk ;-P]

Salah satu riset saya waktu itu adalah membeli beberapa permainan. Salah satu permainan itu adalah King of Fighters XIII edisi Steam. Ada sedikit pergumulan untuk memasang permainan ini di GNU/Linux karena dia harus menggunakan Wine.

Oh, iya, saya menggunakan KDE Neon, turunan Ubuntu 16.04 Xenial. Saya juga normalnya menggunakan Wine 1.9 yang memiliki Gallium Nine (DirectX 9 dengan Gallium Mesa 3D). Saya juga memilih untuk menjalankan Wine 32-bit.

Supaya kita satu visi, pastikan bahwa winetricks sudah terpasang. Saya lebih suka versi GIT. Tetapi, kalau tidak mau pusing, Anda bisa menggunakan yang versi paket Ubuntu.

Pasang Wine 1.6. Wine versi ini sangat diperlukan untuk memasang pustaka WMP9. Wine versi terbaru tidak bisa dipakai untuk memasang pustaka-pustaka.

Selanjutnya, pasang beberapa pustaka yang perlu.

Sudah. Selanjutnya, kembali pasang Wine versi terbaru yang keren.

Selanjutnya, pada detik ini silakan langsung memasang Steam seperti biasa; unduh dari situsnya, pasang Steam, login, dan pasang KoF XIII. Kalau tidak ada apa-apa, KoF XIII bisa berjalan seperti biasa.

KoF XIII for Steam

King of Fighters XIII Steam edition, Mai Shiranui winning pose.

 

Bacaan Lebih Lanjut

MariaDB + Galera Cluster + HAProxy untuk Basisdata Lebih Handal

MariaDB + Galera Cluster + HAProxy untuk Basisdata Lebih Handal

HA Proxy Galera

HA Proxy encapsulate a Galera cluster for High-Availability solution.

Ada banyak aplikasi PHP di luar sana yang secara naas belum bisa pindah dari MySQL ke PostgreSQL. Aplikasi seperti WordPress dan Magento. Untuk aplikasi-aplikasi kritikal tersebut, diperlukan adanya redundansi untuk menjamin data. Untungnya, sekarang sudah ada produk Galera Cluster yang bisa mencapai itu. Produk ini menjadikan serangkaian MySQL Server untuk memiliki replikasi data yang sama.

Eh, tapi kayaknya kalau nanti PHP7 sudah resmi, mereka bakal dipaksa menggunakan ADODB, deh. Abstraksi ADODB memungkinkan SQL yang portabel. Hmm… sepertinya alasan ini nantinya bakal tidak ada.

Atau, mungkin Anda tertarik mengetahui bagaimana layanan MySQL Object (DBaaS) pada AWS dibuat? Atau, bagaimana layanan DBaaS pada OpenStack dibuat?

Ah, sudahlah, apa pun alasan supaya artikel ini ditulis supaya menjaga semangat ngeblog. Sejujurnya, saya menulis tutorial ini karena mood lagi naik akibat mendapatkan banyak Pokémon unik tadi siang di Perpustakaan Pusat UI.

Konfigurasi Peladen

Supaya tidak pusing, saya jelaskan dalam contoh kali ini ada 4 peladen. Satu peladen untuk HAProxy (harusnya dua, tapi saya malas). Lalu, tiga peladen menjadi peladen MySQL. Saya memilih untuk menggunakan MariaDB karena gratis dan mudah konfigurasi Galera-nya.

Peladen HAPROXY (selanjutnya dalam artikel akan saya sebut HAProxy)

  • IP 1: 192.168.1.12
  • IP 2: 192.168.101.1

IP 1 adalah IP eksternal yang digunakan untuk berhubungan dengan aplikasi. IP 2 adalah IP internal dalam jaringan lokal basisdata. Perhatikan baik-baik! Implementasi pusat data yang baik seharusnya memisahkan antara jaringan aplikasi, jaringan basisdata, jaringan administrasi, dan jaringan lainnya. Walau pun keempat peladen ini dijalankan pada VirtualBox sekalipun, tetap saya pisahkan untuk menunjukkan arsitektur yang benar.

Ada tiga peladen yang akan digunakan sebagai peladen basisdata. Saya akan namakan MariaDB1 (192.168.101.10), MariaDB2 (192.168.101.11), dan MariaDB3 (192.168.101.12). Walau pun nantinya setiap peladen bisa ditulisi, saya akan menggunakan peladen MariaDB1 sebagai awalan.

Berhubung saya malas, saya akan kurang detail menjelaskan. Silakan tinggalkan komentar bila kurang jelas. Saya menggunakan Debian Jessie sebagai sistem operasi dasar. Lalu, saya memilih menggunakan MariaDB 10.1 karena dia sudah mendukung langsung Galera Cluster.

Memasang MariaDB

Lakukan ini pada setiap peladen MariaDB: MariaDB1, MariaDB2, dan MariaDB3. Pokoknya, identik!

Memasang Peladen MariaDB

Aktifkan repositori MariaDB. Sebagai contoh dengan menggunakan Perkakas Konfigurasi Repositori kali ini saya ambil cermin Biznet karena yang sebelumnya Kartolo. Buatlah berkas /etc/apt/sources.list.d/mariadb.list yang berisi:

Atau cara lainnya:

Setelah itu, impor kunci publik repositori MariaDB:

MariaDB versi 10.1 sudah memasang Galera secara baku. Jadi, perintah pemasangan menjadi lebih mudah, cukup:

Setelah itu, matikan layanan MariaDB:

Atau, kalau Anda nyentrik atau punya alasan idealisme lainnya sehingga tidak menggunakan SystemD:

Setelah ini, konfigurasi Galera.

Berkas yang Identik

Debian Jessie menggunakan konfigurasi /etc/mysql/debian.cnf untuk menyediakan pengguna internalnya. Pengguna internal ini yang digunakan oleh Debian dalam mengonfigurasi peladen MySQL. Salin berkas tersebut dari MariaDB1 ke MariaDB2 dan MariaDB3 sehingga ketiganya memiliki /etc/mysql/debian.cnf yang identik.

Hanya berkas ini yang tidak identik karena dibuat secara otomatis oleh Debian pada saat pemasangan. Tetapi, kita perlu ketiga peladen memiliki konfigurasi yang identik. Itu sebabnya, satu berkas yang berbeda ini yang perlu disamakan.

Buat Konfigurasi untuk Kluster Galera

Pada ketiga peladen (MariaDB1, MariaDB2, MariaDB3) buat konfigurasi /etc/mysql/conf.d/galera.cnf

Silakan ganti nama berkas galera.cnf dengan nama lain kalau Anda mau. Silakan ganti “apakek_cluster” sesuai selera Anda untuk mendapatkan nama kluster yang jauh lebih baik.

Aktifkan Salah Satu Peladen Terlebih Dahulu

Lakukan langkah ini di salah satu peladen yang akan dimulai pertama kali. Bisa jadi karena pemasangan baru seperti saat ini. Atau, bisa jadi ada mati lampu sehingga menyebabkan seluruh kluster mati. Atau, laptop Anda baru dinyalakan kembali. Intinya, lakukan langkah ini pada saat tidak ada satu pun peladen yang menyala dan kluster ini baru mau dinyalakan dulu.

Bila pada kasus mati lampu atau peladen mati mendadak (crash), periksa berkas /var/lib/mysql/grastate.dat pada masing-masing peladen untuk memilih mana peladen dengan data terbaru. Sehingga, peladen tersebutlah yang dimulai pertama kali.

Bila Anda menggunakan SystemD, gunakan skrip ini:

Atau, demi alasan idealisme atau apa pun sehingga Anda membuang SystemD dan menggunakan sistem init lainnya:

Pada saat ini seharusnya sudah berjalan:

Kalau 0, berarti Anda ada salah konfigurasi di suatu tempat.

Jalankan Peladen MariaDB Sisanya

Pada dua peladen sisanya, MariaDB dijalankan dengan cara normal:

Atau

Seharusnya, apabila tidak ada kerusakan, pada akhirnya akan ada tiga peladen.

Sampai saat ini, Galera sudah selesai dibuat. Anda lakukan operasi SQL pada salah satu peladen mana pun hasilnya akan sama.

BONUS TUGAS

Terakhir, untuk tugas. Silakan buat satu pengguna Admin Super yang bisa membuat basis data dan penggunanya. Pengguna ini harus bisa mengakses dari luar.

Konfigurasi HAProxy

Pada salah satu peladen MariaDB (MariaDB1/MariaDB2/MariaDB3), buat sebuah pengguna HAProxy di basisdata. Pengguna ini akan mengkueri basisdata untuk mengecek keberlangsungan masing-masing peladen.

Ganti nama pengguna haproxy dengan sesuatu yang lebih kreatif. Demi keamanan, jangan cuma copas saja di sini!

Lalu, masuk pada peladen HAProxy dan pasang HAProxy di sana:

Lalu, buat konfigurasi HAProxy. Caranya, tambahkan baris-baris ini pada berkas konfigurasi /etc/haproxy/haproxy.cfg

Ganti nama pengguna haproxy dengan sesuatu yang lebih kreatif. Demi keamanan, jangan cuma copas saja di sini!

Lalu, jalankan ulang HAProxy. (Pada titik ini saya sudah malas membuat dua versi)

Selesai.

Optimasi

Bonus untuk landasan pemikiran. Berikut arsitektur-arsitektur alternatif yang bisa dibuat untuk memenuhi kebutuhan.

  1. Ganti HAProxy dengan perangkat keras router atau load-balancer.
  2. Pasang HAProxy pada setiap peladen aplikasi agar menghilangkan bottleneck jaringan. Jadi, hubungan antara aplikasi dan basisdata menjadi M:N. Kalau pakai ini, HAProxy lebih baik bind ke localhost jangan ke IP. Jadi, akses per aplikasi langsung ke localhost. Ini pondasi arsitektur layanan mikro (microservice architecture).
    HAProxy per apps

    HAProxy per apps

  3. Partisi peladen-peladen aplikasi untuk mengakses hanya salah peladen dalam kluster.
  4. Tambah jumlah peladen dalam kluster.

Jumlah kluster 3 itu adalah demi memenuhi konsep kuorum.

Optimasi Lebih Lanjut yang Belum Sempat Ditulis Karena Saya Ingin Mencari Pokémon Lagi Riset Lebih Lanjut

Ada riset lanjutan yang dapat membuat arsitektur aplikasi lebih terskalakan. Yakni, membuat sebuah peladen obyek penyimpan (storage object) semacam Amazon S3 dengan menggunakan OpenStack Swift dengan menggunakan CEPH. Atau, implementasi sederhana dengan GlusterFS atau NFS. Silakan kembangkan lebih lanjut agar aplikasi Anda lebih terskalakan.

Gunakan Puppet, Ansible, Chef, atau konfigurator apa pun yang lebih baik. Kalau arsitektur sudah skala besar seperti ini, mengubah peladen satu persatu itu sudah mustahil bila tanpa ada kesalahan. Buat tutorial ini menjadi cookbook/rule yang bisa secara dinamis di-deploy.

Semoga bermanfaat.

Bacaan Lebih Lanjut

Pokémon GO

Pokémon GO

Pokémon GO adalah sebuah permainan baru yang memiliki fitur AR (Augmented Reality). Teknologi AR ini memberikan efek bahwa lingkungan sekitar kita ada hal-hal yang lain. Dalam hal ini, ada Pokémon yang sedang bermain di atas meja contohnya.

Setidaknya di UI banyak orang berkumpul bermain permainan ini. Tempat yang paling sering dikunjungi adalah Perpustakaan UI, terutama yang mendekati danau. Kalau waktu malam, Parkiran FIB, Halte Sepeda Fasilkom, dan Perpustakaan UI.

Pokémon GO dikembangkan oleh Niantic, perusahaan yang mengembangkan permainan serupa, INGRESS. Data spasial Pokémon GO ini memang diambil dari INGRESS. Jangan heran oleh sebab itu di Indonesia banyak situs yang bisa dikunjungi untuk mendapatkan Pokémon langka. Bahkan, kalau mau lebih lanjut, kita bisa menebak Pokémon langka dari permainan INGRESS.

Demikian. Mengenai isu privasi dan dampak sosial, saya akan tuliskan lebih lanjut apabila kemalasan menghilang. Sekian.

KDE5: GIT dan GIT_ASKPASS

KDE5: GIT dan GIT_ASKPASS

Pada KDE5, para pengguna GIT akan selalu disedihkan dengan pertanyaan seperti ini:

Mengapa hanya KDE5? Karena GIT menyediakan integrasi dengan GNOME Keyring. Ya, bisa saja memasang GNOME Keyring. Tapi, itu bukanlah KDE5 yang kita cintai! ;-(

Untungnya, ada integrasi dengan mekanisme SSHASKPASS.

Pertama-tama, pasang implementasi KDE5 untuk SSHASKPASS.

Buat ksshaskpass sebagai penyimpan sandi.

Selanjutnya, Anda harus membuat keputusan.

Memasukkan Login per Repositori GIT

Kalau Anda hanyalah pengguna dari sebuah repositori tunggal, Anda cukup menyimpan login di lokal saja. Ini dilakukan di setiap direktori GIT.

Kemungkinan besar, Anda adalah seorang leecher seperti saya pengembang yang mengakses lebih dari satu repositori dalam sebuah situs GIT. Untuk itu, bisa dibuatkan repositorinya.

Sampai sini, Anda sudah selesai.

Terakhir

Apa yang terjadi?

Bacaan Lebih Lanjut

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi
Wily Broke The Window

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi

Saya punya problema KMail2 yang saya pasang di KDE semenjak KDE SC 4 sering crash. Bahkan, saya terpaksa menghapus ulang seluruh konfigurasi KDE demi bisa memasang ulang KMail2. Memang, saya bisa saja memasang Thunderbird. Tapi, saya jatuh cinta dengan cara pakai di KMail2.

Setelah pemasangan KDE Neon, distro baru berdasarkan Kubuntu LTS 16.04, saya menemukan bahwa saya tidak bisa menggunakan KMail2! Usut punya usut, ternyata karena sistem saya menggunakan Oracle MySQL 5.7. Ada sintaks SQL yang tidak lagi cocok dengan versi teranyar itu. Saya pun harus memilih pindah ke MariaDB 10.x.

Saya temukan lebih lanjut, ternyata pustaka Akonadi yang dipakai oleh KMail2 menggunakan abstraksi Qt SQL. Lah, ‘kan, Qt SQL mendukung banyak basisdata! Saya pun memilih untuk dari pada pindah ke MariaDB, pindah ke PostgreSQL.

Sedikit Noktah dalam Pemasangan

Saya memasang PostgreSQL seperti yang saya telah tulis sebelumnya. Oh, iya, bakal ada pesan kesalahan pada saat pemasangan paket Debian PostgreSQL pada Kubuntu 16.04 dan turunannya kalau menggunakan cara tersebut. Hal ini karena versi BASH yang disediakan memiliki aturan yang lebih ketat untuk mode ketat.

Solusinya adalah mengganti setiap “$1” menjadi “${1:-}” pada berkas /usr/share/postgresql-common/supported-versions. Pada ViM, regex yang dipakai:

Baru, ulangi kembali pemasangan PostgreSQL.

Mungkin Anda akan lebih beruntung dari saya dengan memasang paket dari Kubuntu. Tapi, setahu saya, sih, tidak bisa.

Kalau Anda tidak menggunakan PostgreSQL pada sistem Anda, matikan saja instan PostgreSQL yang berjalan di sistem.

Lumayan menghemat beberapa mega memori dan proses CPU.

Konfigurasi Akonadi Sebelum Dipasang

Pertama-tama, mari buat direktori konfigurasi Akonadi:

Lalu, buat berkas konfigurasi untuk Akonadi menggunakan PostgreSQL:

Ganti 9.5 dengan versi PostgreSQL yang Anda pakai.

Pemasangan KMail2

Selanjutnya, tinggal pasang saja:

Bila sudah sampai sini, seharusnya pemasangan lancar. Begitu menjalankan KMail2, Akonadi akan mengonfigurasi dirinya untuk menjalankan instan PostgreSQL khusus.

Terakhir

Saya sering memakai laptop sampai baterai kosong. Komputer saya kadang kena mati lampu. Sampai detik ini, keduanya masih stabil dan saya sampai detik ini belum pernah menghapus ulang KMail2.

Semoga beruntung, silakan bertanya.

Memasang Steam pada Ubuntu Xenial 16.04 dan Turunannya
Steam

Memasang Steam pada Ubuntu Xenial 16.04 dan Turunannya

Ubuntu akhirnya memasukkan Steam ke repositori Multiverse-nya. Hal ini yang menyebabkan paket Debian Steam dari situs Steam Valve tidak lagi kompatibel dengan Ubuntu teranyar ini. Paket Steam pada repositori Ubuntu disebut steam. Sedangkan versi Valve nama yang dipakai adalah steam-launcher.

Kalau Anda menggunakan turunan Ubuntu, bukan Ubuntu asli — saya sendiri KDE Neon 5.6 — Anda mungkin harus memasang software-properties-common agar ada perintah add-apt-repository yang akan dipakai untuk memasang repositori. Supaya kita ada di satu halaman yang sama, maka mari pasang perkakas itu.

Sekarang kita bisa lanjut.

Pemasangan Mula-mula

Seperti biasa, aktifkan arsitektur 32-bita.

Buang pustaka S3 Texture Compression baku. INGAT! Ini mungkin ilegal di negara lain, terutama negara dengan paten perangkat lunak, uhuk AS uhuk.

Unduh libtxc-dxtn0 dari repositori xorg-edger. INGAT! Bukan dari Debian Multimedia seperti pada Tambora.

Anehnya, Steam akan menjadi cerewet kalau versi 64-bita tidak dipasang. Makanya, kedua paket dipasang bersamaan.

Selanjutnya, aktifkan repositori Multiverse.

Pasang Steam!

Kalau Anda jalankan perintah steam, kemungkinan Steam akan gagal dijalankan. Hal ini karena Steam memaketkan pustaka C++ dan versi GCC-nya sendiri!

Matikan Steam yang gagal berjalan sempurna itu. Lalu, hapus semua pustaka C++ dan GCC bawaan Steam.

Beberapa orang, termasuk tadinya saya, menyarankan untuk menghapus pustaka dinamis saja. Namun, setelah berjibaku, saya menemukan bahwa Steam menggunakan pustaka statik juga untuk pustaka C++ dan GCC.

Selesai.

Akhir Kata

Mengapa saya menyarankan untuk menggunakan Steam versi Ubuntu, bukan yang dari Valve? Sebenarnya, sih, bisa saja. Asalkan Anda mau menerima pesan kesalahan bahwa paket Steam usang. Saya, sih, tidak mau.

false alarm about outdated version

Steam warns us that our version is outdated

Bacaan Lebih Lanjut

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.^
Membuat Sub Modul pada Gradle Sebagai Lanjutan Tulisan Iseng Kemarin Karena Mood Saya Enak Setelah Puas Menonton Warcraft Kemarin

Membuat Sub Modul pada Gradle Sebagai Lanjutan Tulisan Iseng Kemarin Karena Mood Saya Enak Setelah Puas Menonton Warcraft Kemarin

Kisanak pikir setelah mengerti jurus Kunyuk Melempar Pisang, Kisanak sudah bisa menguasai dunia persilatan? Kisanak harus mawas diri dan mengerti bahwa di atas langit masih ada langit lagi. Jurus itu mungkin bisa membuat Anda selamat di dunia persilatan. Camkan ini:

Di atas langit masih ada langit; ilmu yang dikuasai hanyalah setitik dari samudera.

Ketika aplikasi yang dibuat hanya sederhana, ilmu jurus Kunyuk Melempar Pisang sudah cukup. Masalah baru ketahuan setelah Kisanak naik level dengan aplikasi yang besar dan kompleksitas tinggi. Niscaya Kisanak akan menemukan bahwa Kisanak hanyalah jawara kampung.

Untuk dapat merajai dunia persilatan, ada konsep lain yang Kisanak mesti pahami: modularitas.

Kisanak harus bisa memilah. Mana yang kekhususannya untuk menghadapi basisdata. Mana yang kekhususannya menampilkan dan memroses laman web. Mana kekhususannya mengurusi logaritma. Dan berbagai kekhususan lainnya. Dengan memahami kekhususan ini, Kisanak bisa melakukan dua konsep ini: reuse dan melacak ketergantungan.

Reuse, adalah konsep sakral pemrograman. Seperti pemeo berkata, “do not invent the wheels.” Kode yang baik adalah yang bisa memisahkan dengan baik fungsi-fungsi dalam berkas/proyek terpisah sehingga dapat dimanfaatkan oleh banyak pihak. Proses untuk mengubah dari kode yang kompleks dan rumit menjadi terpecah-pecah dan modular ini disebut proses decoupling.

Decoupling adalah sebuah Dao yang mendalam. Banyak yang berusaha menemukan misteri dibaliknya. Sedikit yang dapat menguasai Dao ini. Mereka yang telah mencapai pencerahan, merekalah sesungguhnya yang merajai dunia persilatan!

Di dunia persilatan, ada beberapa ilmu kanuragan untuk decoupling. Ada yang memiliki karma tinggi sehingga bisa mampu menguasai level tinggi menggunakan ilmu Pemrograman Dinamis (Dynamic Programming), ilmu Kalkulus Lambda (Lambda Programming), dan lain-lain. Banyak juga orang yang tergabung dalam sekte-sekte yang memiliki repositori Dao mendalam. Mereka ini banyak mengkultivasi ilmu Design Pattern. Pernah ada legenda bahwa sebuah ilmu ilmu legendaris yang sepertinya hilang ditelan bumi seperti KAOS bisa menguasai penuh Dao ini.

Sayangnya, untuk orang-orang biasa, yang paling banyak dikultivasi orang adalah variasi ilmu Tebak-tebak Berhadiah. Ilmu ini mudah dikuasai, namun ia takkan mampu memberikan pencerahan sampai menguasai seluruh Dao. Itu sebabnya, bagi orang-orang kebanyakan, mukadimah ini semua tidak berguna.

Mereka akan mengira bahwa apa yang ditulis ini hanyalah mengisi luang supaya entri ini banyak. Camkanlah satu rahasia langit ini, Kisanak: tutorial ini hanyalah gerbang menuju Dao decoupling. Yang perlu dipahami selanjutnya adalah melatih pikiran.

Melatih jiwa, melatih raga. Melatih roh, melatih kode. Lepas dari Samsara, lepas dari debug tak berakhir.

Pindah ke Gradle Modular

Mari dapatkan proyek yang telah dibuat sebelumnya:

Setelah masuk ke direktori proyek terdahulu, mari ubah menjadi modular.

Buat direktori untuk menjadi sebuah submodul dan pindahkan berkas build.gradle dan seluruh kode sumber.

Ingat, build.gradle adalah seperti Makefile. Isinya adalah aturan yang diperlukan untuk mengompilasi.

Selanjutnya, beritahu percuma bahwa dia memiliki submodul percuma-app.

Terakhir, tambahkan modul percuma-app sebagai syarat yang dibutuhkan oleh percuma.

Karena kita mau mengompilasi proyek ini, maka jangan lupa tambahkan plugin java pada aturan Gradle. Secara otomatis Gradle akan menjalankan perintah-perintah yang dijalankan pada proyek utama pada submodulnya nanti. Kalau tidak percaya, silakan saja coba:

Hasilnya harusnya sama, sih.

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

Memasang Kubuntu 16.04 UEFI dengan Debootstrap
Wily Broke The Window

Memasang Kubuntu 16.04 UEFI dengan Debootstrap

Mengenai skema partisi yang Anda pilih, semuanya bebas. Yang penting, sisakan 100 s.d. 200MB diska untuk partisi UEFI dengan format FAT32 atau FAT16.

UEFI mandates on GPT partition.

UEFI mandates on GPT partition.

Karena Windoze dan beberapa vendor lama, UEFI masih memungkinkan untuk membuat format partisi BIOS (4 partisi utama maksimal). Namun, karena saya memasang ini di laptop saya sendiri, saya membeli kosong sehingga memformat seluruh diska dengan format partisi GPT. Saya membuat satu partisi di awal dengan besar 200MB dan format FAT16 untuk partisi UEFI.

My laptop partition as an example

My laptop partition as an example

Saya tidak menyatakan proses pemformatan karena sudah pernah dibahas di blog ini berulang kali. Lagi pula, saya memformat menggunakan Manajer Partisi KDE yang ada di CD Pemasang Kubuntu. Tak perlu menyusahkan diri dengan terminal.

Oh, iya, supaya tidak bingung, saya mengasumsikan ini semua dilakukan dari CD/USB Live Pemasang Kubuntu 16.04 Xenial.

Persiapan

Sebelum mulai, saya mengubah /etc/apt/sources.list CD/USB sehingga berisi:

Ini biar proses pemasangan menggunakan repo terdekat.

Lalu, seperti biasa saya pasang debootstrap:

Sampai sini saya mengasumsikan bahwa Anda telah memformat diska Anda dengan benar sebelum lanjut dengan Manajer Partisi KDE atau pun cara lainnya.

Pasang Sistem Dasar

Lakukan stanza yang biasa dilakukan:

Baru setelah itu, pasang KDE:

Konfigurasi zona waktu dan lokalisasi:

Tambahkan pengguna:

Pasang kernel dan GRUB EFI:

Konfigurasikan dan pasang GRUB EFI. Ingat! Dua langkah ini perlu dilakukan agar sistem dapat dinyalakan ulang.

Sisanya terserah Anda karena langkah-langkah ini sudah membuat sistem Anda berjalan.

TAMAT.

WordPress JP: Installing MariaDB

WordPress JP: Installing MariaDB

THERE WAS A BUG IN THE SERVER THAT MADE ME LOST THIS POST. THIS IS THE RETRIEVED VERSION THAT I BACK UP.

It’s obvious that I speed write and take everything from guide. As I said before, writing this in Bahasa Indonesia kind of hard for me. So, I write this as I do in parallel.

Setup Filesystem

Disable ZFS file-level prefetch as in the guide:

That would be last on the next reboot, but for now disable:

Create the dataset and the optimizations:

It is optimized to use cache for metadata only if we are going to use INNODB. Its chunk is 16k, so we set it also in ZFS. In the guide we are told that MariaDB log is a 128k chunk — default chunk in ZFS.

Remember that ZFSOnLinux Bug early on? Yeah, we should regenerate Ramdisk everytime we’ve done something to /etc/zfs/zpool.cache. To be honest, I don’t know if any of the operation we did earlier warrant such action. But, just do that for precaution.

And now, we go with installing MariaDB server.

Installing Database Server

According to MariaDB Repository configuration page, let’s set MariaDB:

Import its key and update our list:

Install MariaDB server:

Disable MariaDB server double buffer by add a line (mine, vanilla at line 142) with:

And restart MariaDB server:

From this onward, we are ready to install WordPress, NGINX and such.

Bacaan Lebih Lanjut