Konfigurasi Jaringan Di Ubuntu Dengan Netplan

Pada suatu hari, saya ingin melakukan konfigurasi sederhana di server Ubuntu. Saya ingin mengubah yang sebelumnya menggunakan DHCP menjadi alamat statis dan memakai DNS yang saya tentukan. Seperti biasanya, saya segera melakukan pencarian di Google. Namun, semakin banyak membaca hasil pencarian yang muncul, saya semakin bingung apa yang harus dilakukan. Saya menemukan beberapa kata kunci seperti NetworkManager, systemd-networkd, dan Netplan, namun tidak mendapatkan penjelasan yang berarti mengenai seperti apa hubungan mereka dan mana yang harus saya pakai. Saya pun melakukan sedikit riset untuk mencari tahu jawaban ini.

Kategori: Network Tags: Ubuntu

Memakai Iterator Dan Generator Di Node.js

Di JavaScript, tidak ada class khusus untuk mewakili iterator. Semua object adalah iterator bila object tersebut memiliki sebuah method dengan nama next() yang mengembalikan sebuah object yang mengandung value dan/atau done. Ini disebut sebagai iterator protocol. Sebuah object disebut sebagai iterable apabila ia memiliki method dengan nama @@iterator (Symbol.iterator) yang mengembalikan sebuah iterator. Untuk next() yang dikerjakan secara asynchronous (seperti async next()), saya dapat mengganti @@iterator menjadi @@asyncIterator (Symbol.asyncIterator). Object dari String, Array, TypedArray, Map dan Set merupakan iterable. Konstruksi for...of dan for await...of dapat dipakai untuk melakukan iterasi pada iterable.

Kategori: Pemograman Tags: Node

Memakai Stream Di Node.js

Untuk membaca sebuah file, saya dapat menggunakan modul fasilitas yang ditawarkan oleh fs seperti readFile() untuk versi asynchronous atau readFileSync() untuk versi synchronous. Kedua functions tersebut akan membaca seluruh isi file dan menyimpannya ke memori (RAM) sebagai Buffer. Namun, sama seperti proses lainnya di sistem operasi, aplikasi Node.js juga memiliki batasan alokasi memori. Sebagai contoh, pada sistem saya, ukuran Buffer maksimum adalah 2 GB. Bila saya membaca file lebih besar dari 2 GB dengan readFile() atau readFileSync(), saya akan memperoleh pesan kesalahan seperti Range Error [ERR_FS_FILE_TOO_LARGE]: File size is greater than 2 GB. Apa yang harus saya lakukan bila tetap ingin memproses file tersebut? Saya bisa menggunakan Stream yang akan memproses file dalam bentuk potongan-potongan kecil. Secara garis besar, walaupun lebih rumit, stream akan lebih efisien terutama dalam memproses file besar.

Kategori: Pemograman Tags: Node

Menjalankan Kode Program Native Di Node.js

Ada kalanya modul bawaan Node.js tidak cukup dan programmer perlu mengakses fitur native di sistem operasi. Untuk itu, Node.js memiliki fasilitas memanggil kode program native yang ditulis dalam bahasa C/C++. Untuk mengetahui package yang menggunakan kode program native, saya dapat mencari file berakhiran *.node di node_modules. Sebagai contoh, package fsevents yang popular berisi kode program native dalam C untuk memberikan notifikasi bila file di folder tertentu berubah di sistem operasi Mac. Pada artikel ini, saya akan mencoba memanggil kode program native C yang menggunakan Xlib untuk menampilkan sebuah window di dekstop Linux.

Kategori: Pemograman Tags: Node

Memakai Asynchronous Context Tracking Di Node.js

AsyncLocalStorage adalah class bawaan Node (terletak di modul async_hooks) yang dapat digunakan untuk memberikan context pada eksekusi operasi asynchronous dan juga semua operasi asynchronous yang dipanggil oleh operasi tersebut. Untuk menunjukkan kondisi dimana class ini dapat membantu, saya menulis sebuah kode program tanpa async context seperti berikut ini:

Kategori: Pemograman Tags: Node

Memakai Shared Module Di Monorepo TypeScript Untuk Firebase Functions

Hari ini saya kembali menemukan sesuatu yang secara konseptual seharusnya mudah diterapkan, tetapi begitu dikerjakan, ternyata tidak sesederhana yang saya bayangkan. Pada sebuah kode program monorepo, saya menerapkan shared module yang didukung oleh Node.js. Kode program bisa berjalan saat dikerjakan oleh node di komputer lokal, tapi ini tidak akan bekerja saat saya men-deploy kode program tersebut di Firebase Functions. Mengapa demikian?

Pemisahan Jaringan Dengan OpenWRT

Setiap perangkat yang terhubung di router yang sama dapat berkomunikasi satu dengan yang lainnya. Kebebasan ini akan mempermudah pengguna dalam menghubungkan berbagai perangkat IoT, media server, smart phone, komputer dan sebagainya. Namun, bila dilihat dari sudut pandang keamanan komputer, tidak ada yang bisa menjamin bahwa seluruh perangkat yang terhubung adalah perangkat yang aman. Ada saatnya saya ingin membatasi komunikasi perangkat tertentu yang terhubung di router yang sama. Hal ini dapat dicapai dengan membuat subnet baru, melakukan partisi dengan menggunakan VLAN, dan juga konfigurasi firewall.

Kategori: Network Tags: OpenWRT

Memakai QEMU untuk menjalankan Windows di Ubuntu

Untuk mengoptimalkan kinerja Android emulator, saya mengaktifkan KVM pada sistem operasi Ubuntu yang saya pakai. KVM adalah hypervisor yang terintegrasi pada kernel sistem operasi Linux. Ini adalah teknologi yang sering dipakai oleh penyedia infrastruktur cloud seperti Google Compute Engine, Google Container Engine dan Amazon EC2. Karena fasilitas KVM terbatas pada perangkat virtual CPU, memori dan I/O, biasanya ia dikombinasikan dengan virtual machine yang menyediakan emulasi perangkat grafis, penyimpanan, jaringan, dan sebagainya. Salah satu virtual machine yang sering dipakai bersama dengan KVM adalah QEMU.

Kategori: OS Tags: Ubuntu