<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>weblog_Raihan</title><link>/</link><description>Recent content on weblog_Raihan</description><generator>Hugo</generator><language>ms-MY</language><copyright>Copyright &amp;copy; 2017-2026 &lt;a class='grey' href="/contact/"&gt;Puan Raihan&lt;/a&gt;.</copyright><lastBuildDate>Tue, 26 May 2026 14:01:00 +0800</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Beralih ke Wayland: Tetapan Pelayan RDP</title><link>/posts/beralih-ke-wayland-pelayan-rdp/</link><pubDate>Sat, 23 May 2026 17:36:51 +0800</pubDate><guid>/posts/beralih-ke-wayland-pelayan-rdp/</guid><description>&lt;p&gt;Kedua-dua komputer riba, milik saya dan anak-anak mula mengadaptasi &lt;code&gt;Wayland&lt;/code&gt; sebagai protokol pelayan paparan. Saya mencari-cari pengganti kepada &lt;code&gt;TigerVNC&lt;/code&gt;, supaya dapat saya akses &lt;em&gt;desktop&lt;/em&gt; jauh komputer riba anak-anak saya ini, setidak-tidaknya dengan permasalahan dan ralat yang minima.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Laptop&lt;/em&gt; saya hanya menggunakan kompositor &lt;code&gt;sway&lt;/code&gt;, manakala untuk peranti anak, saya pasangkan &lt;em&gt;desktop&lt;/em&gt; &lt;code&gt;plasma&lt;/code&gt;. Selepas membuat beberapa carian, mencuba pelbagai aplikasi dan kaedah, saya putuskan untuk mengimplimentasikan protokol yang saya bincangkan selanjutnya di sini.&lt;/p&gt;</description></item><item><title>NFSv4 dengan Autentikasi Kerberos</title><link>/side-notes/nfsv4-dengan-autentikasi-kerberos/</link><pubDate>Mon, 15 Sep 2025 19:42:33 +0800</pubDate><guid>/side-notes/nfsv4-dengan-autentikasi-kerberos/</guid><description>&lt;h2 id="pengenalan"&gt;Pengenalan&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;NFSv4&lt;/code&gt; boleh digunakan dengan beberapa kaedah autentikasi. Secara lalai, banyak konfigurasi hanya menggunakan &lt;code&gt;AUTH_SYS&lt;/code&gt;, iaitu kawalan akses berdasarkan &lt;code&gt;UID/GID&lt;/code&gt;, yang kurang selamat kerana maklumat dihantar tanpa penyulitan. Dengan integrasi &lt;code&gt;Kerberos&lt;/code&gt;, akses dapat dikawal melalui tiket pengesahan yang sah, dan data boleh dilindungi dengan penyulitan (contoh: &lt;code&gt;sec=krb5p&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Panduan ini menunjukkan konfigurasi &lt;code&gt;NFSv4&lt;/code&gt; dengan &lt;code&gt;Kerberos&lt;/code&gt; menggunakan hos Arch Linux sebagai server dan VM Debian 13 sebagai klien.&lt;/p&gt;</description></item><item><title>Penyediaan Sijil SSL dengan Keytool</title><link>/side-notes/ssl_tls/penyediaan-sijil-ssl-dengan-keytool-java/</link><pubDate>Wed, 27 Aug 2025 12:37:07 +0800</pubDate><guid>/side-notes/ssl_tls/penyediaan-sijil-ssl-dengan-keytool-java/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Buat skrip &lt;code&gt;bash&lt;/code&gt; seperti di bawah:&lt;/p&gt;
&lt;div class="card mt-n2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;/etc/hadoop/keystore/keytool_gen.sh&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5f8700"&gt;#!/usr/bin/env zsh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;alias&lt;/span&gt; &lt;span style="color:#0087ff"&gt;keytool&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;/usr/lib/jvm/jdk-17.0.16-oracle-x64/bin/keytool&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;ROOT_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;root.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;CA_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;ca.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;SERVER_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;server.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;TRUSTSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;truststore.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;PASSWORD&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;CITY&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;STATE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;COUNTRY&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;MY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# DNS and IP configurations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;DNS1&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;single.cluster.vm&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;IP1&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;192.168.122.74&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#DNS2=&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#IP2=&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# SAN extension with both DNS names and IP addresses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#SAN_EXTENSION=&amp;#34;dns:$DNS1,ip:$IP1,dns:$DNS2,ip:$IP2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;SAN_EXTENSION&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;dns:&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;,ip:&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$IP1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Starting certificate generation process...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;SAN values: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Clean up any existing files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm *.csr *.jks *.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 1. Generate Root CA (self-signed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Root CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-Root, OU=Root, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext bc:c -validity &lt;span style="color:#00afaf"&gt;3650&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Export Root CA certificate for client truststore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Exporting Root CA certificate...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root -exportcert -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; root.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 2. Generate Intermediate CA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Intermediate CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-CA, OU=CA, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext bc:c -validity &lt;span style="color:#00afaf"&gt;1825&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Send CSR to Root for signing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating Intermediate CA CSR...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca -certreq -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Signing Intermediate CA certificate with Root CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root -gencert &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext &lt;span style="color:#0087ff"&gt;BC&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;0&lt;/span&gt; -infile ca.csr -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Import root + signed certificate back to intermediate keystore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Importing certificates to Intermediate CA keystore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -importcert -alias root -file root.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -importcert -alias ca -file ca.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Create truststore for server/client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating truststore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -importcert -alias root -file root.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -importcert -alias ca -file ca.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 3. Generate Server Certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Server Certificate...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; -alias jetty &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-Server, OU=Server, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext ku:c=digitalSignature,keyEncipherment -ext &lt;span style="color:#0087ff"&gt;san&lt;/span&gt;=&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -validity &lt;span style="color:#00afaf"&gt;730&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Send CSR to Intermediate for signing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating Server CSR...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; -alias jetty -certreq -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Signing Server certificate with Intermediate CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca -gencert &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext ku:c=digitalSignature,keyEncipherment -ext &lt;span style="color:#0087ff"&gt;san&lt;/span&gt;=&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -infile server.csr -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; server.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Create full certificate chain and import back to server keystore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating certificate chain and importing to server keystore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat server.pem ca.pem | keytool -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -importcert -alias jetty -file server.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Export certificates from truststore to PEM format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Exporting truststore certificates to PEM format...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -exportcert -alias root -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; root-trust.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -exportcert -alias ca -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca-trust.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat root-trust.pem ca-trust.pem &amp;gt; ca-bundle.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Certificate generation completed successfully!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generated files:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Root CA: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, root.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Intermediate CA: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ca.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Server Certificate: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, server.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Truststore: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ca-bundle.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;SAN values included: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; ke dalam direktori i.e. &lt;code&gt;/etc/hadoop/keystore&lt;/code&gt;, jadikannya &lt;em&gt;executable&lt;/em&gt; dan jalankan skrip.&lt;/p&gt;</description></item><item><title>Langkah-langkah Membina Pakej OpenSSl 1.1 dari Sumber</title><link>/side-notes/bina-openssl1.1-dari-sumber/</link><pubDate>Fri, 22 Aug 2025 22:02:30 +0800</pubDate><guid>/side-notes/bina-openssl1.1-dari-sumber/</guid><description>&lt;p&gt;Berikut langkah lengkap untuk bina &lt;em&gt;OpenSSL 1.1 shared libraries&lt;/em&gt; di Fedora.
&lt;br class="mt-2"&gt;&lt;/p&gt;
&lt;h2 id="persedian-mengikut-distribusi"&gt;Persedian mengikut distribusi&lt;/h2&gt;
&lt;br class="mb-1"&gt;
&lt;h3 id="fedora"&gt;Fedora&lt;/h3&gt;
&lt;div class="card" style="margin-bottom:2rem;"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dnf install perl-core perl-IPC-Cmd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="debian"&gt;Debian&lt;/h3&gt;
&lt;div class="card" style="margin-bottom:2.5rem;"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install perl build-essential&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="muat-turun"&gt;Muat turun&lt;/h2&gt;
&lt;div class="card" style="margin-bottom:2.5rem;"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget -P ~/Downloads https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;cd&lt;/span&gt; Build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -xvf ~/Downloads/openssl-1.1.1w.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="bersihkan-build-lama"&gt;Bersihkan &lt;em&gt;build&lt;/em&gt; lama&lt;/h2&gt;
&lt;p&gt;Kalau anda sudah susun dengan opsyen &lt;code&gt;no-shared&lt;/code&gt; sebelum ini, pastikan direktori bersih:&lt;/p&gt;
&lt;div class="card mt-n2" style="margin-bottom:2.5rem;"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;cd&lt;/span&gt; ~/Build/openssl-1.1.1w &lt;span style="color:#4e4e4e"&gt;# contoh kalau ini source&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make clean&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="konfigurasi-semula-dengan-opsyen-shared--fpic"&gt;Konfigurasi semula dengan opsyen &amp;lsquo;shared -fPIC&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;Gunakan &lt;code&gt;--prefix&lt;/code&gt; supaya ia masuk ke &lt;code&gt;/usr/local/openssl1.1&lt;/code&gt; (tanpa mengganggu OpenSSL sistem):&lt;/p&gt;</description></item><item><title>Panduan Hadoop Mod Selamat (Kerberos) pada Nod Tunggal</title><link>/posts/panduan-hadoop-kerberos-pada-nod-tunggal/</link><pubDate>Fri, 22 Aug 2025 22:02:30 +0800</pubDate><guid>/posts/panduan-hadoop-kerberos-pada-nod-tunggal/</guid><description>&lt;p&gt;Rancangan saya untuk meneliti konfigurasi Hadoop dalam mod selamat, mengikut amalan standard Hadoop yang memperuntukkan setiap servis dijalankan oleh pengguna khusus, akhirnya terlaksana. Walaupun hanya menggunakan nod tunggal, memahami asasnya terlebih dahulu sudah memadai sebelum beralih kepada kluster berbilang nod. Di sini saya dokumentasikan langkah perjalanannya.&lt;/p&gt;
&lt;p&gt;Saya menjalankan eksperimen ini dalam &lt;em&gt;VM&lt;/em&gt; &lt;strong&gt;Debian 13&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Aliran Kerja Autentikasi OpenLDAP melalui SASL/GSSAPI dan TLS</title><link>/mermaid/openldap-gssapi/</link><pubDate>Sat, 09 Aug 2025 15:42:36 +0800</pubDate><guid>/mermaid/openldap-gssapi/</guid><description>&lt;pre class="mermaid"&gt;
 
 ---
title: Seni Bina Integrasi OpenLDAP + Kerberos GSSAPI + TLS
---
flowchart BT
 subgraph Client[&amp;#34;Klien&amp;#34;]
 A[&amp;#34;kinit: Dapatkan tiket Kerberos&amp;#34;]
 B[&amp;#34;ldapadd / ldapsearch&amp;lt;br&amp;gt;guna SASL GSSAPI&amp;#34;]
 end
 subgraph Network[&amp;#34;Rangkaian&amp;#34;]
 TLS[&amp;#34;Saluran TLS&amp;lt;br&amp;gt;SSL/TLS encryption&amp;#34;]
 end
 subgraph LDAP_Server[&amp;#34;Pelayan OpenLDAP&amp;#34;]
 C[&amp;#34;slapd: Konfigurasi TLS&amp;lt;br&amp;gt;dan SASL GSSAPI&amp;#34;]
 D[&amp;#34;Keytab Kerberos&amp;lt;br&amp;gt;ldap.keytab&amp;#34;]
 E[&amp;#34;ACL: Kawalan akses&amp;#34;]
 DB[(&amp;#34;Pangkalan Data LDAP&amp;#34;)]
 end
 subgraph KDC[&amp;#34;Kerberos KDC&amp;#34;]
 F[&amp;#34;Prinsipal ldap/hostname&amp;#34;]
 G[&amp;#34;Pengeluaran tiket TGT &amp;amp; tiket servis&amp;#34;]
 end
 A -- Meminta TGT --&amp;gt; F
 F -- Mengeluarkan TGT --&amp;gt; A
 B -- Meminta tiket servis untuk LDAP --&amp;gt; G
 G -- Memberi tiket servis --&amp;gt; B
 B --&amp;gt; TLS
 TLS --&amp;gt; C
 C -- Sahkan tiket GSSAPI --&amp;gt; D
 C -- Periksa hak akses --&amp;gt; E
 E --&amp;gt; DB
&lt;/pre&gt;</description></item><item><title>Konfigurasi Asas OpenLDAP dengan Autentikasi SASL</title><link>/posts/konfigurasi-asas-openldap-dengan-autentikasi-sasl/</link><pubDate>Sat, 09 Aug 2025 15:42:36 +0800</pubDate><guid>/posts/konfigurasi-asas-openldap-dengan-autentikasi-sasl/</guid><description>&lt;pre class="mermaid"&gt;
 
 ---
title: Seni Bina Integrasi OpenLDAP + Kerberos GSSAPI + TLS
---
flowchart BT
 subgraph Client[&amp;#34;Klien&amp;#34;]
 A[&amp;#34;kinit: Dapatkan tiket Kerberos&amp;#34;]
 B[&amp;#34;ldapadd / ldapsearch&amp;lt;br&amp;gt;guna SASL GSSAPI&amp;#34;]
 end
 subgraph Network[&amp;#34;Rangkaian&amp;#34;]
 TLS[&amp;#34;Saluran TLS&amp;lt;br&amp;gt;SSL/TLS encryption&amp;#34;]
 end
 subgraph LDAP_Server[&amp;#34;Pelayan OpenLDAP&amp;#34;]
 C[&amp;#34;slapd: Konfigurasi TLS&amp;lt;br&amp;gt;dan SASL GSSAPI&amp;#34;]
 D[&amp;#34;Keytab Kerberos&amp;lt;br&amp;gt;ldap.keytab&amp;#34;]
 E[&amp;#34;ACL: Kawalan akses&amp;#34;]
 DB[(&amp;#34;Pangkalan Data LDAP&amp;#34;)]
 end
 subgraph KDC[&amp;#34;Kerberos KDC&amp;#34;]
 F[&amp;#34;Prinsipal ldap/hostname&amp;#34;]
 G[&amp;#34;Pengeluaran tiket TGT &amp;amp; tiket servis&amp;#34;]
 end
 A -- Meminta TGT --&amp;gt; F
 F -- Mengeluarkan TGT --&amp;gt; A
 B -- Meminta tiket servis untuk LDAP --&amp;gt; G
 G -- Memberi tiket servis --&amp;gt; B
 B --&amp;gt; TLS
 TLS --&amp;gt; C
 C -- Sahkan tiket GSSAPI --&amp;gt; D
 C -- Periksa hak akses --&amp;gt; E
 E --&amp;gt; DB
&lt;/pre&gt;

&lt;br class="mb-1"&gt;
&lt;p&gt;&lt;code&gt;OpenLDAP&lt;/code&gt; ialah perisian sumber terbuka yang menyediakan implementasi protokol &lt;em&gt;Lightweight Directory Access Protocol&lt;/em&gt; (&lt;code&gt;LDAP&lt;/code&gt;) untuk menyimpan dan mengurus data direktori secara terpusat, seperti maklumat pengguna, kumpulan, dan konfigurasi rangkaian.&lt;/p&gt;</description></item><item><title>Konfigurasi Libvirt Selamat dengan TLS dan Pengesahan Kerberos melalui SASL</title><link>/posts/konfigurasi-libvirt-dengan-tls-dan-kerberos-sasl/</link><pubDate>Thu, 31 Jul 2025 23:18:21 +0800</pubDate><guid>/posts/konfigurasi-libvirt-dengan-tls-dan-kerberos-sasl/</guid><description>&lt;img src="/posts/konfigurasi-libvirt-dengan-tls-dan-kerberos-sasl/images/libvirt-tls-gssapi-overview.png" class="fix mb-4" width="" height=""&gt;

&lt;p&gt;Percubaan saya dengan &lt;code&gt;libvirt&lt;/code&gt; pada mulanya tidaklah serius. Hanya ingin mengenali asas pengurusan mesin maya menerusi &lt;code&gt;virt-install&lt;/code&gt; dan &lt;code&gt;virsh&lt;/code&gt;, sambil-sambil membaca dokumentasi yang ditemui di Internet. Namun begitu, semakin lama saya mencuba, semakin tertarik saya kepada aspek keselamatan dan pengesahan sambungan klien dalam &lt;code&gt;libvirt&lt;/code&gt;, sesuatu yang sebelum ini saya abaikan kerana berasakan tidak perlu.&lt;/p&gt;
&lt;p&gt;Rujukan seperti &lt;code&gt;ArchWiki&lt;/code&gt; hanya memperkenalkan topik autentikasi ini secara sepintas lalu, dengan pautan kepada dokumentasi rasmi: &lt;a href="https://libvirt.org/auth.html#ACL_server_config"&gt;libvirt: Connection authentication&lt;/a&gt;. Dari sinilah saya mula menyelami secara lebih serius kaedah-kaedah autentikasi yang disokong oleh &lt;code&gt;libvirt&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Diagram Hubungan antara Pelayar, Nginx dan Hugo</title><link>/mermaid/nginx-hugo-livereload/</link><pubDate>Wed, 30 Jul 2025 11:38:38 +0800</pubDate><guid>/mermaid/nginx-hugo-livereload/</guid><description>&lt;pre class="mermaid"&gt;
 
 sequenceDiagram
 participant B as Browser
 participant N as Nginx
 participant H as Hugo

 B-&amp;gt;&amp;gt;N: HTTPS request to &amp;#34;blog-hugo.loc&amp;#34;
 N-&amp;gt;&amp;gt;H: proxy to &amp;#34;127.0.0.1:1313&amp;#34;
 H--&amp;gt;&amp;gt;N: HTML + livereload.js
 N--&amp;gt;&amp;gt;B: HTML response

 B-&amp;gt;&amp;gt;N: /livereload.js
 N-&amp;gt;&amp;gt;H: proxy to &amp;#34;/livereload.js&amp;#34;
 H--&amp;gt;&amp;gt;B: livereload.js

 B-&amp;gt;&amp;gt;H: 🔌 Open WebSocket
 Note left of H: Watches file changes
 H--&amp;gt;&amp;gt;B: Reload signal
 Note right of B: 🔁 Auto reloads page
&lt;/pre&gt;</description></item><item><title>Menghubungkan Hugo dengan Nginx dan LiveReload</title><link>/posts/menghubungkan-hugo-dengan-nginx-dan-livereload/</link><pubDate>Wed, 30 Jul 2025 11:38:38 +0800</pubDate><guid>/posts/menghubungkan-hugo-dengan-nginx-dan-livereload/</guid><description>&lt;div class="text-center"&gt;

 &lt;img src="/posts/menghubungkan-hugo-dengan-nginx-dan-livereload/webdev-tools.jpg" class="fixnb mt-1 mb-4 text-center" width="480" height=""&gt;

&lt;/div&gt;
&lt;p&gt;Dalam proses pembangunan laman statik menggunakan &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;, ada kalanya kita mahu mengaksesnya melalui domain tempatan seperti &lt;code&gt;https://blog-hugo.loc&lt;/code&gt; dan pada masa yang sama menikmati ciri &lt;code&gt;LiveReload&lt;/code&gt; secara automatik.&lt;/p&gt;
&lt;p&gt;Catatan ini menunjukkan cara:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mengkonfigurasi &lt;code&gt;Nginx&lt;/code&gt; sebagai proksi songsang (&lt;em&gt;reverse proxy&lt;/em&gt;) untuk pelayan pembangunan &lt;code&gt;Hugo&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Mengaktifkan sokongan &lt;code&gt;WebSocket&lt;/code&gt; untuk &lt;code&gt;LiveReload&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Menjalankan &lt;code&gt;Hugo&lt;/code&gt; dengan parameter sesuai agar kena dengan penggunaan proksi &lt;code&gt;HTTPS&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Jana Sijil HTTPS untuk Domain yang Berasaskan 'localhost'</title><link>/side-notes/ssl_tls/jana-sijil-https-domain-localhost/</link><pubDate>Mon, 28 Jul 2025 12:40:49 +0800</pubDate><guid>/side-notes/ssl_tls/jana-sijil-https-domain-localhost/</guid><description>&lt;p&gt;Panduan ini diadaptasi daripada &amp;ldquo;&lt;a href="https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8"&gt;How to create an HTTPS certificate for localhost domains&lt;/a&gt;&amp;rdquo;, bertujuan mengaktifkan sokongan &lt;code&gt;HTTPS&lt;/code&gt; pada domain yang menghala ke alamat IP &lt;code&gt;127.0.0.1&lt;/code&gt;, iaitu &lt;code&gt;localhost&lt;/code&gt;, &lt;code&gt;audio.loc&lt;/code&gt; dan &lt;code&gt;laravel.loc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Semua fail berkaitan pensijilan ini disimpan dalam satu direktori khas: &lt;code&gt;/etc/nginx/ssl&lt;/code&gt;.&lt;/p&gt;
&lt;div class="alert border-warning mb-4 fs-6"&gt;
Sila ubah nilai negara, negeri, bandar dan nama entiti dalam parameter pensijilan mengikut keperluan anda.
&lt;/div&gt;
&lt;h2 id="persediaan-direktori"&gt;Persediaan Direktori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cipta direktori dan tukar ke dalamnya:
&lt;div class="card mt-1 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p /etc/nginx/ssl &amp;amp;&amp;amp; &lt;span style="color:#0087ff"&gt;cd&lt;/span&gt; /etc/nginx/ssl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sijil-akar-root-ca"&gt;Sijil Akar (Root CA)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cipta fail konfigurasi dengan entri berikut:&lt;/p&gt;</description></item><item><title>Warna Terminal</title><link>/side-notes/bash/warna-terminal/</link><pubDate>Sat, 26 Jul 2025 13:34:39 +0800</pubDate><guid>/side-notes/bash/warna-terminal/</guid><description>&lt;h2 id="turutan-kod-untuk-paparan-teks-berwarna-di-terminal"&gt;Turutan kod untuk paparan teks berwarna di terminal&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class="fs-5"&gt;\033[&lt;/code&gt; - untuk &lt;em&gt;non-printing escape sequences&lt;/em&gt; ;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters"&gt;SGR Parameters&lt;/a&gt;&lt;/p&gt;
&lt;div class="alert alert-dark"&gt;
&lt;em&gt;Separator&lt;/em&gt; bagi kombinasi kod-kod parameter &lt;em&gt;SGR&lt;/em&gt; adalah simbol &lt;em&gt;&lt;code&gt;semicolon, ;&lt;/code&gt;&lt;/em&gt;.
&lt;/div&gt;
&lt;p&gt;Saya hanya rekodkan yang mana relevan kepada saya dari laman web di atas:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Kod&lt;/th&gt;
					&lt;th&gt;Ciri-ciri Paparan&lt;/th&gt;
					&lt;th&gt;Penerangan&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;Tetapkan semula / Normal&lt;/td&gt;
					&lt;td&gt;Semua ciri ditutup&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;&lt;em&gt;Bold&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Tulisan tebal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;Ringan&lt;/td&gt;
					&lt;td&gt;Tulisan nipis&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;Miring&lt;/td&gt;
					&lt;td&gt;Hanya untuk tulisan tertentu e.g. &lt;strong&gt;Hack&lt;/strong&gt;. &lt;code&gt;Terminus&lt;/code&gt; tidak menyokong ciri ini&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;Bergaris bawah&lt;/td&gt;
					&lt;td&gt;Tulisan dengan satu garisan bawah&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;Berkelip perlahan&lt;/td&gt;
					&lt;td&gt;Tulisan berkelip. &lt;em&gt;Mengganggu tumpuan. Tidak disokong sekiranya ditetapkan latar belakang&lt;/em&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;Berkelip laju&lt;/td&gt;
					&lt;td&gt;Tulisan berkelip. &lt;em&gt;Mengganggu tumpuan. Tidak disokong sekiranya ditetapkan latar belakang&lt;/em&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;Kontra (&lt;em&gt;inverted&lt;/em&gt;)&lt;/td&gt;
					&lt;td&gt;Ciri terbalik antara warna latar belakang dan hadapan&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;30&lt;/td&gt;
					&lt;td&gt;Warna hitam&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;31&lt;/td&gt;
					&lt;td&gt;Warna merah&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;32&lt;/td&gt;
					&lt;td&gt;Warna hijau&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;33&lt;/td&gt;
					&lt;td&gt;Warna kuning&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;34&lt;/td&gt;
					&lt;td&gt;Warna biru&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;35&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;magenta&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;36&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;cyan&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;37&lt;/td&gt;
					&lt;td&gt;Warna putih&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;38&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Diikuti kod &lt;code&gt;;5;N&lt;/code&gt;, dengan &amp;lsquo;N&amp;rsquo; merujuk kepada nombor kod 256 warna (&lt;em&gt;256C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;40&lt;/td&gt;
					&lt;td&gt;Warna hitam&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;41&lt;/td&gt;
					&lt;td&gt;Warna merah&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;42&lt;/td&gt;
					&lt;td&gt;Warna hijau&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;43&lt;/td&gt;
					&lt;td&gt;Warna kuning&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;44&lt;/td&gt;
					&lt;td&gt;Warna biru&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;45&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;magenta&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;46&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;cyan&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;47&lt;/td&gt;
					&lt;td&gt;Warna putih&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;48&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Diikuti kod &lt;code&gt;;5;N&lt;/code&gt;, dengan &amp;lsquo;N&amp;rsquo; merujuk kepada nombor kod 256 warna (&lt;em&gt;256C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;90&lt;/td&gt;
					&lt;td&gt;Warna hitam terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;91&lt;/td&gt;
					&lt;td&gt;Warna merah terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;92&lt;/td&gt;
					&lt;td&gt;Warna hijau terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;93&lt;/td&gt;
					&lt;td&gt;Warna kuning terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;94&lt;/td&gt;
					&lt;td&gt;Warna biru terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;95&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;magenta&lt;/em&gt; terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;96&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;cyan&lt;/em&gt; terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;97&lt;/td&gt;
					&lt;td&gt;Warna putih terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar hadapan&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;100&lt;/td&gt;
					&lt;td&gt;Warna hitam terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;101&lt;/td&gt;
					&lt;td&gt;Warna merah terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;102&lt;/td&gt;
					&lt;td&gt;Warna hijau terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;103&lt;/td&gt;
					&lt;td&gt;Warna kuning terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;104&lt;/td&gt;
					&lt;td&gt;Warna biru terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;105&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;magenta&lt;/em&gt; terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;106&lt;/td&gt;
					&lt;td&gt;Warna &lt;em&gt;cyan&lt;/em&gt; terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;107&lt;/td&gt;
					&lt;td&gt;Warna putih terang&lt;/td&gt;
					&lt;td&gt;Tetapan &lt;strong&gt;latar belakang&lt;/strong&gt; (&lt;em&gt;8C&lt;/em&gt;)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class="fs-4"&gt;m&lt;/code&gt; - untuk &lt;em&gt;colour escape sequences&lt;/em&gt;
&lt;br&gt;&lt;/p&gt;</description></item><item><title>Penyediaan Dua VM Fedora (QEMU/KVM)</title><link>/side-notes/vm/penyediaan-dua-vm-fedora-qemu-kvm/</link><pubDate>Sat, 26 Jul 2025 09:51:03 +0800</pubDate><guid>/side-notes/vm/penyediaan-dua-vm-fedora-qemu-kvm/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Untuk penyediaan dua &lt;em&gt;VM&lt;/em&gt; dengan distribusi yang sama ini, saya gunakan imej &lt;code&gt;QEMU qcow2&lt;/code&gt; bagi &lt;code&gt;Fedora Server 41&lt;/code&gt;, yang dimuat turun dari laman ini di bawah seksyen &lt;a href="https://fedoraproject.org/server/download"&gt;For Intel and AMD x86_64 systems&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setiap satu &lt;em&gt;VM&lt;/em&gt; ditetapkan alamat IP-nya sendiri dan hal ini dapat dicapai (terima kasih) dengan adanya fungsi untuk menambah peranti &lt;code&gt;TUN/TAP&lt;/code&gt;. Fungsi ini membolehkan pengguna untuk menambah alamat IP yang ditugaskan kepada &lt;em&gt;VM&lt;/em&gt; masing-masing melalui laluan (&lt;em&gt;route&lt;/em&gt;) daripada alamat IP yang dimiliki oleh hos.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Carta Aliran Trafik Nginx ke Backend</title><link>/mermaid/nginx-dan-backend/</link><pubDate>Sat, 12 Jul 2025 17:29:27 +0800</pubDate><guid>/mermaid/nginx-dan-backend/</guid><description>&lt;div class="text-center"&gt;
&lt;pre class="mermaid"&gt;
 
 ---
title: Aliran Trafik daripada Nginx ke &amp;#39;Backend&amp;#39;
---
flowchart TD
 A([&amp;#34;NGINX&amp;lt;br&amp;gt;(Reverse Proxy)&amp;#34;])
 A --&amp;gt; B{&amp;#34;BACKEND&amp;#34;}
 B --&amp;gt; C[&amp;#34;Apache&amp;lt;br&amp;gt;(PHP-FPM)&amp;#34;]
 B --&amp;gt; D[&amp;#34;Flask&amp;lt;br&amp;gt;(Gunicorn)&amp;#34;]
 B --&amp;gt; E[&amp;#34;Laravel&amp;lt;br&amp;gt;(PHP-FPM)&amp;#34;]
&lt;/pre&gt;

&lt;/div&gt;</description></item><item><title>Nginx sebagai Proksi Songsang untuk Pelbagai Backend</title><link>/posts/nginx-proksi-songsang-pelbagai-backend/</link><pubDate>Sat, 12 Jul 2025 17:29:27 +0800</pubDate><guid>/posts/nginx-proksi-songsang-pelbagai-backend/</guid><description>&lt;div class="text-center"&gt;
&lt;pre class="mermaid"&gt;
 
 ---
title: Aliran Trafik daripada Nginx ke &amp;#39;Backend&amp;#39;
---
flowchart TD
 A([&amp;#34;NGINX&amp;lt;br&amp;gt;(Reverse Proxy)&amp;#34;])
 A --&amp;gt; B{&amp;#34;BACKEND&amp;#34;}
 B --&amp;gt; C[&amp;#34;Apache&amp;lt;br&amp;gt;(PHP-FPM)&amp;#34;]
 B --&amp;gt; D[&amp;#34;Flask&amp;lt;br&amp;gt;(Gunicorn)&amp;#34;]
 B --&amp;gt; E[&amp;#34;Laravel&amp;lt;br&amp;gt;(PHP-FPM)&amp;#34;]
&lt;/pre&gt;

&lt;/div&gt;
&lt;br class="mb-1"&gt;
&lt;p&gt;Dalam pembangunan perisian moden, kita jarang bergantung kepada satu teknologi sahaja. Saya sediakan catatan ini bagi memaparkan bagaimana &lt;code&gt;Nginx&lt;/code&gt; boleh digunakan sebagai proksi songsang untuk menyatukan pelbagai pelayan latar; &lt;code&gt;Apache&lt;/code&gt;, &lt;code&gt;Flask&lt;/code&gt; (melalui &lt;code&gt;Gunicorn&lt;/code&gt;), dan &lt;code&gt;Laravel&lt;/code&gt; (melalui &lt;code&gt;PHP-FPM&lt;/code&gt;), dalam satu mesin pembangunan berasaskan &lt;code&gt;Arch Linux&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sebelum melangkah lebih jauh, pastikan anda telah menyediakan konfigurasi asas seperti yang diterangkan dalam catatan saya terdahulu: &lt;a href="/posts/konfigurasi-lemp-dalam-arch-linux/"&gt;Konfigurasi LEMP dalam Arch Linux&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Pemasangan &amp; Konfigurasi Hadoop (Distribusi Pseudo) dan Latihan: WordCount2</title><link>/posts/konfigurasi-hadoop-pseudo-wordcount2/</link><pubDate>Fri, 09 Aug 2024 10:26:45 +0800</pubDate><guid>/posts/konfigurasi-hadoop-pseudo-wordcount2/</guid><description>&lt;p&gt;Saya cuba menyediakan &lt;code&gt;Hadoop&lt;/code&gt; dengan kluster nod tunggal (&lt;em&gt;Single Node Cluster&lt;/em&gt;) di &lt;em&gt;VM Fedora&lt;/em&gt;. Pada hemat saya, mungkin tak akan mampu lagilah untuk saya usahakan penyediaan pengoperasian berdistribusi penuh bersama &lt;code&gt;Kerberos&lt;/code&gt; sebagai kaedah pengesahan kerana &lt;code&gt;Hadoop&lt;/code&gt; memerlukan sistem yang berprestasi tinggi.&lt;/p&gt;
&lt;p&gt;Berdasarkan jawapan yang disediakan oleh platform-platform AI, saya ringkaskan syarat minimum sistem untuk mengehoskan &lt;code&gt;Hadoop&lt;/code&gt; dengan kluster nod tunggal, memandangkan perkakasan komputer riba saya hanya mampu menampung sumber berskala kecil:&lt;/p&gt;</description></item><item><title>Pemahaman Asas Kerberos dan SSH</title><link>/posts/pemahaman-asas-kerberos-dan-ssh/</link><pubDate>Sat, 20 Jul 2024 13:49:44 +0800</pubDate><guid>/posts/pemahaman-asas-kerberos-dan-ssh/</guid><description>&lt;img src="/posts/pemahaman-asas-kerberos-dan-ssh/kerberos-gssapi.jpg" class="fix mb-4" width="" height=""&gt;

&lt;p&gt;Saya melaburkan masa yang agak lama untuk menghadam kegunaan protokol Kerberos menerusi banyaknya sesi percubaan yang mengecewakan. Setelah menempuh bersiri-siri episod kehampaan, kali ini terbayar juga sekian jumlah sumbangan tenaga yang agak melelahkan itu.&lt;/p&gt;
&lt;p&gt;Penjelasan yang tuntas mengenai kaedah pengesahan dengan Kerberos ini boleh diperolehi dari &lt;code&gt;YouTube&lt;/code&gt;,
&lt;a href="https://www.youtube.com/watch?v=5N242XcKAsM"&gt;Kerberos Authentication Explained | A deep dive&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sungguh! Prosesnya begitu rumit, sementelah betapa sebelum ini banyak kekeliruan yang saya alami dek kurangnya kemahiran dan kefahaman tentang perbezaan antara domain dan &lt;code&gt;REALM&lt;/code&gt;, juga dalam bab menguruskan domain.&lt;/p&gt;</description></item><item><title>Konfigurasi Pelayan TigerVNC (Dalaman) untuk Desktop Jauh</title><link>/posts/konfigurasi-pelayan-tigervnc-desktop-jauh/</link><pubDate>Fri, 21 Jun 2024 12:58:49 +0800</pubDate><guid>/posts/konfigurasi-pelayan-tigervnc-desktop-jauh/</guid><description>&lt;div class="text-center mb-1"&gt;Paparan desktop hos (tetingkap sebelah kanan) dari skrin klien melalui &lt;code&gt;vncviewer&lt;/code&gt;.&lt;/div&gt;

 &lt;img src="/posts/konfigurasi-pelayan-tigervnc-desktop-jauh/images/remote_desktop.jpg" class="fixnb" width="" height=""&gt;

&lt;br class="mb-4"&gt;
&lt;p&gt;&lt;em&gt;Ditulis semula.&lt;/em&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Melalui perbincangan bersama anak-anak, saya jelaskan bahawa ada ketikanya saya akan melihat aktiviti di komputer riba mereka (menggunakan distro &lt;code&gt;Arch Linux&lt;/code&gt;) melalui skrin sistem operasi saya (juga distro &lt;code&gt;Arch Linux&lt;/code&gt;).&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Hal ini juga sesungguhnya menyenangkan apabila saya perlu mengambil alih &lt;em&gt;laptop&lt;/em&gt; mereka sebagai &amp;ldquo;admin&amp;rdquo; setiap kali diadukan sebarang masalah berkait sistem.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Sebelum ini, saya gunakan &lt;code&gt;DWService&lt;/code&gt; untuk memantau dari &lt;em&gt;web browser&lt;/em&gt; saya. Selepas merajinkan diri meneroka pakej-pakej &lt;em&gt;server&lt;/em&gt; (pelayan) VNC, berhasil jugalah mendapatkannya dengan pakej-pakej binari yang tersedia dalam &lt;code&gt;TigerVNC&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;</description></item><item><title>GIMP: Gabungan Lapisan Imej (Separa Lut Sinar)</title><link>/posts/gimp-gabungan-lapisan-imej-separa-lutsinar/</link><pubDate>Mon, 15 May 2023 21:38:10 +0800</pubDate><guid>/posts/gimp-gabungan-lapisan-imej-separa-lutsinar/</guid><description>&lt;div id="hasil-imej" class="text-center" style="margin-top:4rem;"&gt;

 &lt;img src="/posts/gimp-gabungan-lapisan-imej-separa-lutsinar/scaled.png" class="fixnb mb-1" width="" height=""&gt;

Rajah: Hasil grafik setelah disunting dengan GIMP
&lt;/div&gt;&lt;br class="mt-5"&gt;
&lt;p&gt;&lt;em&gt;I&amp;rsquo;m a fan of SVG now!&lt;/em&gt; Oleh yang demikian, terhasillah tips ini setelah memerah idea dan uniknya kali ini, eksperimen dijalankan tanpa sebarang pencarian maklumat. Kah!&lt;/p&gt;
&lt;p&gt;Tersebutlah kisah seorang wanita yang kepingin sekali menyunting gabungan kepingan-kepingan imej namun kecewalah ia kerana begitu sukar mendapatkan kualiti penghasilan yang memuaskan. (Kita bukan graduan Reka Bentuk Multimedia!)&lt;/p&gt;
&lt;p&gt;Lalu ia berfikir dan terus berfikir, sambil tangannya tiada putus asa mengerjakan buah fikirannya, ligat mengikut rentak imaginasinya. Maka giranglah ia apabila akhirnya, dapat jua ia laksanakan dengan tara kepuasan yang baik nilai di matanya.
&lt;br&gt;&lt;/p&gt;</description></item><item><title>Eksperimen: Imitasi Arch Linux (Dummy System)</title><link>/posts/eksperimen-imitasi-arch-linux/</link><pubDate>Wed, 08 Feb 2023 11:58:44 +0800</pubDate><guid>/posts/eksperimen-imitasi-arch-linux/</guid><description>&lt;p&gt;Dari semasa ke semasa, saya menyemak tatacara yang masih relevan dalam pemasangan distribusi atau sistem operasi seperti Arch. Jika terdapat sebarang perubahan, mestilah dikemaskini maklumat dan perkembangannya.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Terbaharu, saya dapati terdapat sedikit isu dalam penggunaan &lt;code&gt;arch-chroot&lt;/code&gt;. Arahan &lt;code&gt;lsblk&lt;/code&gt; dengan opsyen output seperti &amp;lsquo;&lt;code&gt;FSTYPE, UUID dan LABEL&lt;/code&gt;&amp;rsquo; tidak memaparkan tanda-tanda atau maklumat blok yang ada. Begini gambarannya:-

 &lt;img src="/posts/eksperimen-imitasi-arch-linux/chroot1.jpg" class="fixnb mt-1" width="" height=""&gt;
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Barangkali, adanya pepijat &lt;em&gt;(bugs)&lt;/em&gt; dalam &lt;code&gt;arch-chroot&lt;/code&gt; yang terkini sehingga menyebabkan fail sistem (&lt;code&gt;API&lt;/code&gt; &lt;em&gt;filesystems&lt;/em&gt;) yang diperlukan tidak lagi &lt;em&gt;mounted&lt;/em&gt; secara automatik.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Spice WebDAVD: Cara Berkongsi Folder dengan VM Windows di Virt-Manager</title><link>/posts/spice-webdav-kongsi-folder-windows-vm/</link><pubDate>Thu, 15 Dec 2022 07:56:46 +0800</pubDate><guid>/posts/spice-webdav-kongsi-folder-windows-vm/</guid><description>&lt;div class="alert border-warning mb-5"&gt;
&lt;ul&gt;
&lt;li&gt;Penyediaan VM menggunakan &lt;code&gt;Virt-Manager&lt;/code&gt; ini dilaksanakan sebagai pengguna biasa.&lt;/li&gt;
&lt;li class="mt-3"&gt;Dua fail ISO untuk dimuatturun sebagai pra-syarat:
&lt;ol&gt;
&lt;li class="mt-3"&gt;&lt;a href="https://www.microsoft.com/en-us/software-download/windows11" target="_blank"&gt;Windows&lt;/a&gt;&lt;/li&gt;
&lt;li class="mt-3 mb-n2"&gt;&lt;a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.266-1/" target="_blank"&gt;virtio-win.iso&lt;/a&gt; yang disumbangkan oleh komuniti Fedora.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Jika terbiasa menjalankan &lt;em&gt;VM&lt;/em&gt; secara manual dengan perintah baris &lt;code&gt;qemu-system-x86_64&lt;/code&gt; untuk sistem emulasi penuh dengan &lt;code&gt;QEMU&lt;/code&gt; berserta opsyen &lt;code&gt;-enable-kvm&lt;/code&gt; bagi memanfaatkan kelajuan &lt;code&gt;hypervisor KVM&lt;/code&gt;, berikut merupakan pakej asas yang diperlukan dalam distro &lt;code&gt;Arch Linux&lt;/code&gt;:-&lt;/p&gt;
&lt;pre class="output mt-3 mb-5"&gt;
qemu-base
qemu-audio-spice
qemu-hw-display-qxl
qemu-ui-spice-app
virt-viewer
&lt;/pre&gt;
&lt;p&gt;Untuk memasang &lt;em&gt;VM&lt;/em&gt; &lt;code&gt;Windows 11&lt;/code&gt; dari aplikasi &lt;code&gt;GUI&lt;/code&gt;, hanya perlu tambah pakej &lt;code&gt;virt-manager&lt;/code&gt;:&lt;/p&gt;
&lt;div class="card mt-n2 mb-5"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -S virt-manager &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Dari awal &lt;em&gt;setup&lt;/em&gt; distro &lt;code&gt;Arch&lt;/code&gt; lagi, saya sudah masukkan diri saya sebagai pengguna ke dalam grup &lt;code&gt;wheel&lt;/code&gt;. Untuk &lt;code&gt;KVM&lt;/code&gt; dan khusus bagi &lt;code&gt;Virt-Manager&lt;/code&gt; ini, saya tambahkan diri saya ke dalam grup &lt;code&gt;kvm&lt;/code&gt; dan &lt;code&gt;libvirt&lt;/code&gt; dengan arahan berikut:&lt;/p&gt;
&lt;div class="card mt-n2 mb-5"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo gpasswd -a user kvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo gpasswd -a user libvirt &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Kawalan Ibu Bapa (KidLogger) dalam Distro Arch Linux</title><link>/posts/kawalan-ibu-bapa-dalam-arch-linux/</link><pubDate>Sat, 23 Jul 2022 00:00:24 +0800</pubDate><guid>/posts/kawalan-ibu-bapa-dalam-arch-linux/</guid><description>Saya amat mengimpikan keupayaan menghalang secara langsung interaksi anak-anak dengan dunia hiburan seperti &lt;em&gt;YouTube Kids&lt;/em&gt; yang membuatkan mereka menatap sebuah kotak / bingkai kecil bernama skrin. Ah, gagal! Ibarat peribahasa, &amp;ldquo;Hendak seribu daya, tak hendak seribu dalih&amp;rdquo;, anak-anak terdedah jua dengan skrin ini apabila berada di rumah. Peribahasa ini pula mudah dipatahkan dengan hujah bahawa pandemik &lt;em&gt;Covid&lt;/em&gt; memaksa mereka untuk belajar menggunakan peranti digital selama hampir dua tahun sebelum ini.</description></item><item><title>Struktur (LVM2 + XFS) &amp; Btrfs dalam LUKS2</title><link>/posts/struktur-lvm+xfs-dan-btrfs-dalam-luks/</link><pubDate>Wed, 29 Jun 2022 00:39:58 +0800</pubDate><guid>/posts/struktur-lvm+xfs-dan-btrfs-dalam-luks/</guid><description>&lt;div class="alert alert-dark fs-6"&gt;
&lt;ul&gt;
&lt;li&gt;Saya sediakan tulisan ini sebagai nota untuk rujukan saya sendiri.&lt;/li&gt;
&lt;li class="mt-3"&gt;&lt;em&gt;I used the command provided in [&lt;a href="/posts/perintah-baris-qemu-linux-freebsd-windows11"&gt;my previous post&lt;/a&gt;] applicable for Linux (UEFI) to load the Live CD.&lt;/em&gt;&lt;/li&gt;
&lt;li class="mt-3"&gt;Walaupun tiada keperluan kerana saya memang sudah menggunakan sistem ini sebagai sistem operasi utama saya, tetapi apa yang saya catatkan ini berguna untuk saya aplikasikan bagi tujuan pemasangan di komputer riba sebagai hos di lain-lain masa. Pun begitu, sekiranya tuan / puan membaca dan menggunakan nota saya ini sebagai rujukan, perlu saya ingatkan bahawa akan ada beberapa perkara yang perlu dilaras mengikut keadaan misalnya sambungan WiFi tidak terpakai dalam VM tetapi ia perlu dikonfigurasi bagi sistem hos.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="text-warning-emphasis mt-4"&gt;&lt;i class="bi-info-circle me-1"&gt;&lt;/i&gt; &amp;nbsp;Sila pastikan sistem hos sudah bersambung dengan rangkaian Internet.&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Perintah Baris QEMU/KVM: NVMe Emulation; Linux, FreeBSD &amp; Windows 11 Sebagai Sistem Tetamu (Guest OSs)</title><link>/posts/perintah-baris-qemu-linux-freebsd-windows11/</link><pubDate>Sun, 12 Jun 2022 21:38:55 +0800</pubDate><guid>/posts/perintah-baris-qemu-linux-freebsd-windows11/</guid><description>Windows 11: Ada beberapa perkara yang perlu dilakukan untuk memasang &lt;code&gt;VM Windows 11&lt;/code&gt;. Hal ini adalah diakibatkan oleh cip komputer &lt;em&gt;(microcontroller)&lt;/em&gt; yang dilekatkan kepada &lt;em&gt;motherboard&lt;/em&gt; di dalam kebanyakan peranti moden sekarang ini yang dinamakan sebagai &lt;em&gt;Trusted Platform Module&lt;/em&gt; (TPM). Perlu pasang pakej &lt;code&gt;swtpm&lt;/code&gt; terlebih dahulu sama ada dari &lt;code&gt;git&lt;/code&gt; &lt;a href="https://github.com/stefanberger/swtpm"&gt;stefanberger / swtpm&lt;/a&gt; atau dari distribusi masing-masing. &lt;code&gt;Arch Linux&lt;/code&gt; ada menyediakan pakej ini dalam repositori &lt;em&gt;community&lt;/em&gt;.</description></item><item><title>Melukis Jalur Gemilang dengan ConTeXt</title><link>/posts/melukis-jalur-gemilang-dengan-context/</link><pubDate>Sun, 03 Oct 2021 16:04:42 +0800</pubDate><guid>/posts/melukis-jalur-gemilang-dengan-context/</guid><description>&lt;p&gt;Terdapat dua versi yang saya sediakan. Saya ada menghantar e-mel kepada &lt;code&gt;Jabatan Penerangan Malaysia&lt;/code&gt; di awal minggu kedua bulan Oktober ini bertanyakan versi manakah yang lebih tepat berdasarkan lakaran yang pernah mereka terbitkan, namun tiada sebarang jawapan yang diterima buat masa ini melainkan hanya pengesahan bahawa mereka telah menerima e-mel itu dan telah memajukannya kepada pihak yang berkenaan.&lt;/p&gt;</description></item><item><title>MetaFun dalam ConTeXt</title><link>/posts/metafun-dalam-context-1/</link><pubDate>Mon, 13 Sep 2021 12:09:08 +0800</pubDate><guid>/posts/metafun-dalam-context-1/</guid><description>&lt;div class="text-center mb-5" style="font-size:150%;"&gt;'السلام عليكم'&lt;/div&gt;
&lt;p&gt;Saya akan sentuh berkenaan &lt;code&gt;Graphic buffers&lt;/code&gt; dalam siaran kali ini.&lt;/p&gt;
&lt;p&gt;Apa kegunaan &lt;em&gt;penampan grafik&lt;/em&gt; ini? Ianya sangat berguna dalam penyediaan sebuah dokumentasi kerana kod-kodnya boleh digunakan untuk dua benda; paparan kod dan juga hasil grafiknya.&lt;/p&gt;
&lt;p&gt;Coretan kod (&lt;em&gt;code snippet&lt;/em&gt;) ini diletakkan di dalam &lt;code&gt;penampan&lt;/code&gt; (&lt;em&gt;buffer&lt;/em&gt;), dan ia boleh diulangguna kemudiannya.&lt;/p&gt;
&lt;p&gt;Terdapat tiga kod arahan yang boleh digunakan setelah menyediakan coretan kod dalam &lt;code&gt;penampan&lt;/code&gt; ini iaitu &lt;code&gt;\typebuffer&lt;/code&gt;, &lt;code&gt;\getbuffer&lt;/code&gt; dan juga &lt;code&gt;\processMPbuffer&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Melukis Grafik Dengan ConTeXt</title><link>/posts/melukis-grafik-dengan-context/</link><pubDate>Tue, 24 Aug 2021 08:41:57 +0800</pubDate><guid>/posts/melukis-grafik-dengan-context/</guid><description>&lt;p&gt;Sejak PdPR bermula, ada sebahagian masa ibu terfikir-fikir apa yang boleh ibu buat dalam menyediakan bahan bantu untuk ibu ajarkan sendiri kepada Kak Long, terutamanya apabila melibatkan subjek Matematik.&lt;/p&gt;
&lt;p&gt;Dengan silibus yang semakin meningkat serta melebihi keupayaan seorang kanak-kanak normal dan biasa, kenalah juga ibu kreatif dalam memberikan penerangan. Yalah, dalam keadaan pandemik sekarang, ibu bapalah yang berperanan dalam mendidik anak-anaknya.&lt;/p&gt;
&lt;p&gt;Sebagai contoh, perbundaran kepada puluh terdekat sudah diperkenalkan kepada anak-anak tahun satu. Susah juga untuk ibu terangkan kepada Kak Long apa logiknya disebalik mengetahui perbundaran dalam usia 7 tahun ini.&lt;/p&gt;</description></item><item><title>Zon Masa Kini Disokong oleh Hugo</title><link>/archives/posts/zon-masa-kini-disokong-oleh-hugo/</link><pubDate>Sat, 14 Aug 2021 22:27:27 +0800</pubDate><guid>/archives/posts/zon-masa-kini-disokong-oleh-hugo/</guid><description>Yay, bermula versi &lt;code&gt;0.87.0&lt;/code&gt;, &lt;code&gt;Hugo&lt;/code&gt; kini menyokong tetapan lalai bagi &lt;code&gt;Zon Masa&lt;/code&gt; (&lt;em&gt;Time Zone&lt;/em&gt;)! Hal ini bermaksud, dengan menetapkan bahasa dan zon masa tempatan di dalam fail konfigurasi &lt;code&gt;Hugo&lt;/code&gt;, tarikh dan masa siaran dapat dipaparkan dalam bahasa ibunda.</description></item><item><title>Perkembangan Terbaru ConTeXt</title><link>/posts/perkembangan-terbaru-context/</link><pubDate>Sat, 24 Jul 2021 21:38:04 +0800</pubDate><guid>/posts/perkembangan-terbaru-context/</guid><description>&lt;p&gt;[&lt;a href="https://www.pragma-ade.com/"&gt;PRAGMA ADE&lt;/a&gt;] mengumumkan dan sudah pun mengeluarkan enjin terbaru bagi &lt;code&gt;ConTeXt&lt;/code&gt; yang dinamakan sebagai &lt;code&gt;LUAMETATEX&lt;/code&gt;. &lt;code&gt;LuaMetaTEX&lt;/code&gt; ini terkandung di dalam versi &lt;code&gt;ConTeXt&lt;/code&gt; yang baru bernama &lt;code&gt;LMTX&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Memetik pengenalan mengenai &lt;code&gt;LuaMetaTEX&lt;/code&gt; melalui pautan [&lt;a href="https://www.pragma-ade.com/general/manuals/luametatex.pdf"&gt;LuaMetaTEX Reference Manual&lt;/a&gt;] yang tidak akan saya terjemahkan ke dalam Bahasa Melayu ini,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;&amp;hellip; we could move
on with a follow up tagged MetaTEX, a name we already had in mind for a while, but as Lua is an important component, it got expanded to LuaMetaTEX. This follow up is a lightweight companion to LuaTEX that will be maintained alongside.&lt;br class="mb-1"&gt;
&amp;hellip;&lt;br class="mb-2"&gt;
For ConTEXt users the LuaMetaTEX engine will become the default. As mentioned, the ConTEXt variant for this engine is tagged LMTX. The pair can be used in production, just as with LuaTEX and MkIV. In fact, most users will probably not really notice the difference. In some cases there will be a drop in performance, due to more work being delegated to Lua, but on the average performance is much be better, due to some changes below the hood of the engine. Memory
consumption is also less. The timeline of development is roughly: from 2018 upto 2020 engine development, 2019 upto 2021 the stepwise code split between MkIV and LMTX, while in 2021 and 2022 we will (mostly) freeze MkIV and LMTX will be the default.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Kemas Kini Blog (Hugo)</title><link>/archives/posts/kemas-kini-blog/</link><pubDate>Tue, 13 Jul 2021 10:56:58 +0800</pubDate><guid>/archives/posts/kemas-kini-blog/</guid><description>&lt;div class="alert alert-dark mb-5"&gt;
&lt;i class="bi-info-circle"&gt;&lt;/i&gt; &amp;nbsp;&lt;b&gt;Pengumuman Penting!&lt;/b&gt;&lt;br&gt;
&lt;code&gt;Hugo&lt;/code&gt; melalui keluaran versi &lt;code&gt;0.87.0&lt;/code&gt; telah pun menyediakan sokongan bagi &lt;code&gt;Zon Masa&lt;/code&gt;. Maka usaha tambahan untuk memaparkan tarikh dan masa dalam Bahasa Melayu seperti yang telah dibincangkan panjang-panjang di dalam siaran ini tidak lagi diperlukan. Terus ke siaran terbaru saya bertajuk "&lt;a href="/archives/posts/zon-masa-kini-disokong-oleh-hugo"&gt;Zon Masa Kini Disokong oleh Hugo&lt;/a&gt;" &lt;sup&gt;[Arkib]&lt;/sup&gt; untuk bacaan lanjut.
&lt;/div&gt;
&lt;p&gt;Di sinilah perhatian beralih semenjak pengasingan diri dari dunia media sosial.&lt;/p&gt;
&lt;p&gt;Maka, mengemaskini blog ini ialah antara perkara yang dapat saya fokuskan.&lt;/p&gt;</description></item><item><title>Hubungi Saya</title><link>/contact/</link><pubDate>Sat, 10 Jul 2021 10:48:54 +0800</pubDate><guid>/contact/</guid><description>&lt;div class="text-center mb-4"&gt;

 &lt;img src="/contact/dp.jpg" class="dp" width="" height=""&gt;

&lt;/div&gt;
&lt;div class="alert alert-dark fs-6"&gt;
Mahu berkongsi idea, pembetulan, atau kemusykilan? Saya mengalu-alukannya. Sila hantarkan mesej melalui borang di bawah. Namun begitu, pastikan anda tidak menghantar sebarang mesej berbentuk gangguan seksual. Saya percaya bahawa tuan/puan ialah individu yang berwibawa, bertamadun, dan bermaruah. Terima kasih.&lt;br class="top2"&gt;
Would you like to share your ideas, corrections, or related concerns? Feel free to send me a message using the form below. However, please refrain from sending messages containing sexual harassment. I trust that you present yourself as an honorable and civilized individual, someone with pride and integrity. Thank you.
&lt;/div&gt;
&lt;div class="form mt-5"&gt;
 &lt;form name="contactMe" method="post" data-netlify="true" data-netlify-honeypot="bot-field"&gt;
 &lt;div class="form-group mb-4" style="display:none;"&gt;
 &lt;label class="form-label"&gt;Don’t fill this out if you’re human (jangan isi ruangan ini jika anda seorang manusia) :&lt;/label&gt;
 &lt;input name="bot-field" type="text" class="form-control" /&gt;
 &lt;/div&gt;
 &lt;div class="row"&gt;
 &lt;div class="col-sm mb-4"&gt;
 &lt;label class="form-label"&gt;&lt;span class="text-danger-emphasis"&gt;*&lt;/span&gt; Nama (&lt;em&gt;Name&lt;/em&gt;):&lt;/label&gt;
 &lt;input name="name" type="text" class="form-control" required/&gt;
 &lt;/div&gt;
 &lt;div class="col-sm mb-4"&gt;
 &lt;label class="form-label"&gt;&lt;span class="text-danger-emphasis"&gt;*&lt;/span&gt; E-mel (&lt;em&gt;E-mail&lt;/em&gt;):&lt;/label&gt;
 &lt;input name="email" type="email" class="form-control" required/&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="form-group"&gt;
 &lt;label class="form-label"&gt;&lt;span class="text-danger-emphasis"&gt;*&lt;/span&gt; Mesej (&lt;em&gt;Message&lt;/em&gt;):&lt;/label&gt;
 &lt;textarea name="message" class="form-control" rows="4" required placeholder="Bagaimana boleh saya bantu? How can I help you?"&gt;&lt;/textarea&gt;
 &lt;/div&gt;
 &lt;!-- Button trigger modal --&gt;
 &lt;div class="row"&gt;
 &lt;div class="col my-4"&gt;
 &lt;button type="submit" class="btn btn-primary"&gt;
 Hantar (&lt;em&gt;Send&lt;/em&gt;)
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="col my-4 text-end"&gt;
 &lt;a href="/contact/0x437D0BC50F28BFB7.asc" class="grey fs-6"&gt;Kunci Awam PGP&lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/form&gt;
&lt;/div&gt;
&lt;!-- Modal --&gt;
&lt;div class="modal fade" id="thankYouModal" tabindex="-1" aria-labelledby="thankYouModalLabel" aria-hidden="true"&gt;
 &lt;div class="modal-dialog"&gt;
 &lt;div class="modal-content"&gt;
 &lt;div class="modal-header"&gt;
 &lt;h1 class="modal-title fs-5" id="thankYouModalLabel"&gt;Terima kasih kerana menghubungi saya.&lt;/h1&gt;
 &lt;/div&gt;
 &lt;div class="modal-body"&gt;
 Maklum balas daripada pihak tuan / puan amatlah saya hargai. Saya pasti meneliti mesej yang tuan / puan sudah hantarkan ini dan akan cuba memberikan jawapan balas dalam kapasiti serta keupayaan masa dan tenaga saya.
 &lt;/div&gt;
 &lt;div class="modal-footer"&gt;
 &lt;button type="button" class="btn btn-outline-info" data-bs-dismiss="modal"&gt;&lt;i class="bi bi-x-lg fw-bold me-2"&gt;&lt;/i&gt;Tutup&lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
const handleSubmit = event =&gt; {
 event.preventDefault();

 const myForm = event.target;
 const formData = new FormData(myForm);

 fetch("/", {
 method: "POST",
 headers: { "Content-Type": "application/x-www-form-urlencoded" },
 body: new URLSearchParams(formData).toString()
 })
 .then(() =&gt; {
 // Display the modal instead of the alert
 const modal = new bootstrap.Modal(document.getElementById("thankYouModal"));
 modal.show();

 // Optionally, reset the form
 myForm.reset();
 })
 .catch(error =&gt; {
 console.error(error);
 alert("Maaf, penghantaran gagal. Sila cuba lagi sebentar nanti.");
 });
};

document.querySelector('form[name="contactMe"]').addEventListener("submit", handleSubmit);
&lt;/script&gt;</description></item><item><title>Kunci GnuPG (GPG)</title><link>/posts/kunci-gnupg/</link><pubDate>Tue, 22 Jun 2021 16:24:46 +0800</pubDate><guid>/posts/kunci-gnupg/</guid><description>&lt;p&gt;Pembelajaran seterusnya; berkaitan tajuk di atas.&lt;/p&gt;
&lt;p&gt;Pelajaran dan perkara baru bagi saya, sebab ada ternampak orang lain sediakan kunci PGP miliknya. Tertanya-tanya juga, apa ke bendanyalah kunci PGP ini, ya?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Archwiki&lt;/code&gt; pun menjadi rujukan. Menurut &lt;a href="https://wiki.archlinux.org/title/GnuPG" target="_blank"&gt;&lt;sup&gt;[1]&lt;/sup&gt; Archwiki&lt;/a&gt; yang mengambil petikan dari &lt;a href="https://www.gnupg.org/" target="_blank"&gt;&lt;sup&gt;[2]&lt;/sup&gt; laman web rasmi GnuPG&lt;/a&gt;:-&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;GnuPG&lt;/code&gt; ialah pelaksanaan penuh dan percuma bagi standard &lt;code&gt;OpenPGP&lt;/code&gt; sebagaimana ditakrifkan oleh &lt;code&gt;RFC4880&lt;/code&gt; (juga dikenali sebagai &lt;code&gt;PGP&lt;/code&gt;). &lt;code&gt;GnuPG&lt;/code&gt; membenarkan anda untuk menyulitkan dan menandatangani data serta komunikasi anda; ia dibangunkan dengan ciri-ciri sebuah sistem pengurusan kunci yang serba boleh berserta modul-modul akses bagi semua jenis direktori kunci awam. &lt;code&gt;GnuPG&lt;/code&gt;, juga dikenali sebagai &lt;code&gt;GPG&lt;/code&gt;, ialah sebuah alat perintah baris dengan ciri-ciri yang memudahkan integrasi dengan aplikasi lain. Banyak aplikasi &lt;em&gt;frontend&lt;/em&gt; dan &lt;em&gt;libraries&lt;/em&gt; yang tersedia. &lt;code&gt;GnuPG&lt;/code&gt; juga menyediakan sokongan untuk &lt;code&gt;S/MIME&lt;/code&gt; dan &lt;code&gt;Secure Shell (ssh)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Reka Bentuk Jam Menggunakan LibreOffice Writer</title><link>/posts/reka-bentuk-jam-libreoffice-writer/</link><pubDate>Tue, 13 Apr 2021 17:51:50 +0800</pubDate><guid>/posts/reka-bentuk-jam-libreoffice-writer/</guid><description>&lt;p&gt;Ada masa lapang, bolehlah sediakan sedikit bahan ilmiah untuk bantu anak belajar di rumah. Saya reka jam bulat yang dicetak di atas kertas A4 untuk memperkenalkan fungsi jam kepada anak sulong saya ini.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Dia mula bersekolah di sekolah kebangsaan bagi darjah satu pada tahun 2021 ini. Perkenalkan secara santai sahaja. Biar dia seronok belajar. Bukan dengan paksaan apatah lagi kekerasan.&lt;/p&gt;</description></item><item><title>Manual Rujukan Bash: Catatan 2</title><link>/side-notes/bash/catatan2/</link><pubDate>Mon, 30 Nov 2020 21:18:58 +0800</pubDate><guid>/side-notes/bash/catatan2/</guid><description>&lt;p&gt;&lt;i class="bi bi-bookmark-star text-warning-emphasis me-1"&gt;&lt;/i&gt; Sumber: &lt;a href="https://www.gnu.org/software/bash/manual"&gt;Bash Reference Manual&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rujukan Bab 3: Ciri-ciri Asas &lt;em&gt;Shell&lt;/em&gt; (&lt;em&gt;Basic Shell Features&lt;/em&gt;)&lt;br class="mt-1"&gt;
&lt;span class="fs-6"&gt;Subtopik 3.3 Fungsi-fungsi &lt;em&gt;Shell&lt;/em&gt; (&lt;a href="https://www.gnu.org/software/bash/manual/bash.html#Shell-Functions"&gt;&lt;em&gt;Shell Functions&lt;/em&gt;&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;hr class="mt-4"&gt;
&lt;p&gt;Contoh skrip diberi bagi menunjukkan bahawa &lt;em&gt;shell&lt;/em&gt; menggunakan &lt;em&gt;&lt;code&gt;dynamic scoping&lt;/code&gt;&lt;/em&gt; untuk mengawal keterlihatan pemboleh ubah dalam satu-satu fungsi:&lt;/p&gt;
&lt;div class="card mt-n2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func1()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0087ff"&gt;local&lt;/span&gt; &lt;span style="color:#0087ff"&gt;var&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#39;func1 local&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; func2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func2()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;In func2, var = &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$var&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;var&lt;/span&gt;=global
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Baris&lt;/th&gt;
					&lt;th&gt;Keterangan&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;tentukan fungsi1 ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;pembuka &lt;em&gt;curly brace(s)&lt;/em&gt; (rujuk &lt;a href="https://www.gnu.org/software/bash/manual/bash.html#Command-Grouping"&gt;3.2.5.3 Grouping Commands&lt;/a&gt;);&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;tentukan pemboleh ubah lokal bagi fungsi1 ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;panggil fungsi2 ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;penutup &lt;em&gt;curly brace(s)&lt;/em&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;&lt;em&gt;whitespace&lt;/em&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;tentukan fungsi2 ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;pembuka &lt;em&gt;curly brace(s)&lt;/em&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;ayat untuk dipaparkan di &lt;code&gt;Terminal&lt;/code&gt; dengan memanggil pemboleh ubah &lt;code&gt;$var&lt;/code&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;penutup &lt;em&gt;curly brace(s)&lt;/em&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;&lt;em&gt;whitespace&lt;/em&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;tentukan pemboleh ubah global ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;13&lt;/td&gt;
					&lt;td&gt;panggil fungsi1 ;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pengeluaran di terminal adalah:-
&lt;br class="mt-1"&gt;
&lt;code&gt;In func2, var = func1 local&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Manual Rujukan Bash: Catatan 1</title><link>/side-notes/bash/catatan1/</link><pubDate>Fri, 27 Nov 2020 20:03:40 +0800</pubDate><guid>/side-notes/bash/catatan1/</guid><description>&lt;p&gt;&lt;i class="bi bi-bookmark-star text-warning-emphasis me-1"&gt;&lt;/i&gt; Sumber: &lt;a href="https://www.gnu.org/software/bash/manual"&gt;Bash Reference Manual&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rujukan Bab 3: Ciri-ciri Asas &lt;em&gt;Shell&lt;/em&gt; (&lt;em&gt;Basic Shell Features&lt;/em&gt;)&lt;br class="mt-1"&gt;
&lt;span class="fs-6"&gt;Subtopik 3.2.5.2 Binaan-binaan Bersyarat (&lt;a href="https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs"&gt;&lt;em&gt;Conditional Constructs&lt;/em&gt;&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;hr class="mt-4"&gt;
&lt;p&gt;Contoh skrip diberi bagi &lt;code&gt;case&lt;/code&gt; :&lt;/p&gt;
&lt;div class="card mt-n2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; -n &lt;span style="color:#00afaf"&gt;&amp;#34;Enter the name of an animal: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;read&lt;/span&gt; ANIMAL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; -n &lt;span style="color:#00afaf"&gt;&amp;#34;The &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$ANIMAL&lt;/span&gt;&lt;span style="color:#00afaf"&gt; has &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5f8700"&gt;case&lt;/span&gt; &lt;span style="color:#0087ff"&gt;$ANIMAL&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; horse | dog | cat) &lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; -n &lt;span style="color:#00afaf"&gt;&amp;#34;four&amp;#34;&lt;/span&gt;;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; man | kangaroo ) &lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; -n &lt;span style="color:#00afaf"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; *) &lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; -n &lt;span style="color:#00afaf"&gt;&amp;#34;an unknown number of&amp;#34;&lt;/span&gt;;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5f8700"&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34; legs.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Baris&lt;/th&gt;
					&lt;th&gt;Keterangan&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;untuk memasukkan nama haiwan dengan baris ayat di dalam petikan (simbol petikan &amp;quot;&amp;quot; atau koma pembuka terbalik &amp;amp; koma penutup terbalik) ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;untuk membaca nama haiwan yang dimasukkan dengan pemboleh ubah&lt;code&gt; HAIWAN&lt;/code&gt; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;untuk cetak pengeluaran pemboleh ubah &amp;ldquo;&lt;code&gt;$HAIWAN&lt;/code&gt; (yang dimasukkan) mempunyai &amp;quot; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;binaan bersyarat case bagi pemboleh ubah &lt;code&gt;$HAIWAN&lt;/code&gt; bermula;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;senaraikan nama-nama haiwan untuk kes pertama dengan simbol saluran paip &amp;lt;&lt;code&gt;|&lt;/code&gt;&amp;gt; (rujuk &lt;a href="https://www.gnu.org/software/bash/manual/bash.html#Pipelines"&gt;3.2.3 Pipelines&lt;/a&gt;) sebagai pemisah, tutup senarai dengan penutup kurungan dan cetak pengeluaran ciri &amp;ldquo;(berkaki) empat&amp;rdquo; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;senarai nama-nama haiwan untuk kes kedua dan cetak pengeluaran ciri &amp;ldquo;(berkaki) dua&amp;rdquo; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;bagi haiwan selainnya dan cetak pengeluaran ciri &amp;ldquo;(berkaki) yang tidak diketahui&amp;rdquo; ;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;tutup binaan bersyarat &lt;code&gt;esac&lt;/code&gt;;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;sambung cetakan bagi melengkapkan ayat ciri-ciri haiwan (mempunyai berapa) &amp;quot; kaki&amp;rdquo; ;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jika masukkan pemboleh ubah &amp;lsquo;kucing&amp;rsquo;, maka pengeluaran di terminal adalah:-
&lt;br class="mt-1"&gt;
&lt;code&gt;The cat has four legs.&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Mengautomasi Penyusunan Dokumen ConTeXt: Bahagian 2</title><link>/posts/mengautomasi-penyusunan-dokumen-context_2/</link><pubDate>Tue, 24 Nov 2020 10:37:58 +0800</pubDate><guid>/posts/mengautomasi-penyusunan-dokumen-context_2/</guid><description>&lt;p&gt;Telah lebih dari satu tahun berlalu semenjak saya dihubungi oleh Dave Jarvis melalui emel. Beliau memperkenalkan kepada saya blog beliau yang memuatkan penerangan teknikal untuk menaip Markdown dengan ConTeXt, bersama-sama dengan bahasa pengaturcaraan &lt;code&gt;R&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Menyebarkan Kunci SSH ke Repositori Git</title><link>/posts/menyebarkan-kunci-ssh-git/</link><pubDate>Mon, 09 Nov 2020 16:57:01 +0800</pubDate><guid>/posts/menyebarkan-kunci-ssh-git/</guid><description>&lt;div class="alert alert-dark fs-6 mt-3 mb-5" role="alert"&gt;
&lt;p&gt;&lt;strong&gt;Situasi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Anda mempunyai banyak repositori di platform &lt;code&gt;Git&lt;/code&gt; dan mahu &lt;em&gt;set up&lt;/em&gt; kunci &lt;code&gt;SSH&lt;/code&gt; untuk disebarkan (&lt;em&gt;deployed&lt;/em&gt;) ke setiap repositori. Hal ini memudahkan proses mengemas kini perubahan yang berlaku pada direktori / fail yang terkandung di dalam projek.&lt;br&gt;
Sebagai contoh, ada dua projek / repositori; satu di &lt;code&gt;GitHub&lt;/code&gt; dan satu lagi di &lt;code&gt;GitLab&lt;/code&gt;. Nama repositori di &lt;code&gt;GitHub&lt;/code&gt; ialah &lt;code&gt;blog-hugo&lt;/code&gt; manakala nama repositori di &lt;code&gt;GitLab&lt;/code&gt; ialah &lt;code&gt;homes-app&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Konfigurasi LEMP dalam Arch Linux</title><link>/posts/konfigurasi-lemp-dalam-arch-linux/</link><pubDate>Mon, 06 Apr 2020 19:00:56 +0800</pubDate><guid>/posts/konfigurasi-lemp-dalam-arch-linux/</guid><description>&lt;p&gt;Assalamu&amp;rsquo;alaikum.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LEMP&lt;/code&gt; dalam catatan ini merangkumi empat komponen berikut:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L = &lt;code&gt;Linux&lt;/code&gt; sebagai sistem operasi dan distro utama pembangunan web ;&lt;/li&gt;
&lt;li&gt;E = &lt;code&gt;nginx&lt;/code&gt; sebagai pelayan (&lt;em&gt;server&lt;/em&gt;) web HTTP ;&lt;/li&gt;
&lt;li&gt;M = &lt;code&gt;MariaDB&lt;/code&gt; sebagai pelayan pangkalan data ; &amp;amp;&lt;/li&gt;
&lt;li&gt;P = &lt;code&gt;PHP&lt;/code&gt; sebagai bahasa skrip yang digunakan dalam pembangunan laman web dinamik.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert border-info mt-4 mb-5"&gt;
"M" boleh juga merujuk kepada &lt;code&gt;MySQL&lt;/code&gt;, manakala "P" boleh merujuk kepada bahasa lain seperti &lt;code&gt;Python&lt;/code&gt; atau &lt;code&gt;Perl&lt;/code&gt; dalam konteks tertentu.
&lt;/div&gt;
&lt;p&gt;Penulisan ini menghimpunkan konfigurasi tiga komponen penting dalam pembangunan aplikasi web dinamik (juga dikenali sebagai &amp;ldquo;&lt;em&gt;back-end development&lt;/em&gt;&amp;rdquo;), iaitu &lt;code&gt;Nginx&lt;/code&gt;, &lt;code&gt;PHP&lt;/code&gt; dan &lt;code&gt;MariaDB&lt;/code&gt;.
&lt;br class="mb-5"&gt;&lt;/p&gt;</description></item><item><title>Konfigurasi Pencetak &amp; Pengimbas HP dalam Arch Linux</title><link>/posts/konfigurasi-pencetak-hp-arch-linux/</link><pubDate>Mon, 29 Jan 2018 07:20:15 +0800</pubDate><guid>/posts/konfigurasi-pencetak-hp-arch-linux/</guid><description>&lt;p&gt;Suami saya memiliki pencetak &amp;ldquo;&lt;code&gt;HP Ink Tank Wireless 415&lt;/code&gt;&amp;rdquo;. Maka saya ambil peranan untuk membuat tetapan bagi pencetak ini dari komputer riba saya agar boleh digunakan oleh seisi rumah, baik dari distro Arch, telefon pintar mahupun komputer riba atau peribadi (sinonim dengan singkatan &amp;ldquo;PC&amp;rdquo;).&lt;/p&gt;
&lt;div class="alert alert-dark my-4"&gt;
&lt;ul&gt;
&lt;li&gt;Pencetak dengan buatan dan model di atas ialah pencetak tanpa wayar.&lt;/li&gt;
&lt;li class="mt-4"&gt;Ia tidak menyokong cetakan &lt;b&gt;&lt;em&gt;duplex&lt;/em&gt;&lt;/b&gt; (yakni mampu mencetak halaman depan dan belakang secara auto). Makanya, cetakan &lt;em&gt;duplex&lt;/em&gt; perlu dilaksanakan secara manual.&lt;/li&gt;
&lt;li class="mt-4 mb-n2"&gt;Pasang aplikasi &lt;code&gt;HP Smart&lt;/code&gt; untuk mencetak dan mengimbas dari telefon pintar atau PC dengan sistem operasi &lt;code&gt;Windows&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Tanpa berlengah lagi, berikut ialah langkah-langkah yang saya lakukan.
&lt;br&gt;&lt;/p&gt;</description></item><item><title>Mengautomasi Penyusunan Dokumen ConTeXt: Bahagian 1</title><link>/posts/mengautomasi-penyusunan-dokumen-context/</link><pubDate>Fri, 01 Dec 2017 21:58:17 +0800</pubDate><guid>/posts/mengautomasi-penyusunan-dokumen-context/</guid><description>&lt;p&gt;Seperti yang dijanjikan, di dalam tulisan kali ini saya bincangkan cara untuk menyusun dokumen &lt;code&gt;ConTeXt&lt;/code&gt; dengan menggunakan aplikasi penyunting fail kegemaran saya, &lt;code&gt;Vim&lt;/code&gt; dan juga pembaca pdf &lt;code&gt;Zathura&lt;/code&gt;.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Untuk pemasangan, sila rujuk laman web rasmi [&lt;a href="https://www.pragma-ade.com/"&gt;PRAGMA Advanced Document Engineering&lt;/a&gt;].&lt;br class="mb-4"&gt;&lt;/p&gt;
&lt;h2 id="kompilasi-fail-context"&gt;Kompilasi Fail ConTeXt&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;p&gt;Arahan yang digunakan untuk menyusun fail &lt;code&gt;.tex&lt;/code&gt; dan menghasilkan dokumen PDF adalah,&lt;/p&gt;
&lt;div class="card mt-n2 mb-5"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;context filename.tex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Automasi Penyusunan Dokumen ConTeXt dari Vim
&lt;br class="mb-2"&gt;&lt;/p&gt;
&lt;p&gt;Jadi, saya teruskan dengan membincangkan cara untuk memudahkan proses mengkompilasi dokumen yang dihasilkan melalui &lt;code&gt;ConTeXt&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>ConTeXt vs LaTeX (Table)</title><link>/posts/context-vs-latex-table/</link><pubDate>Mon, 13 Nov 2017 11:04:13 +0800</pubDate><guid>/posts/context-vs-latex-table/</guid><description>&lt;p&gt;Saya pernah menyebut di dalam salah sebuah status saya sebelum ini bahawa saya akan mencari masa terluang untuk belajar &lt;code&gt;ConTeXt&lt;/code&gt; pula selepas &lt;code&gt;LaTeX&lt;/code&gt;. Ada masa terluang sikit-sikit, saya belajar walaupun banyak juga tergaru-garu dan berkerut-kerut kening tambah-tambah lagi selalu hilang tumpuan kerana anak-anak perlulah dilayan juga.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Jadi di dalam penulisan kali ini, saya akan tunjukkan serba sedikit perbezaan di antara keduanya. Saya gunakan &lt;code&gt;table&lt;/code&gt; dalam penghasilan dokumen melalui &lt;code&gt;LaTeX&lt;/code&gt; dan &lt;code&gt;ConTeXt&lt;/code&gt; ini.&lt;br&gt;&lt;/p&gt;</description></item><item><title>VimTeX and Zathura</title><link>/posts/vimtex-and-zathura/</link><pubDate>Wed, 25 Oct 2017 22:03:56 +0800</pubDate><guid>/posts/vimtex-and-zathura/</guid><description>&lt;div class="alert alert-dark border-primary mb-4"&gt;
&lt;i class="bi-info-circle"&gt;&lt;/i&gt; Updated on 24 September 2020:-&lt;br&gt;
Synctex-searches work just fine by installing &lt;code&gt;zathura&lt;/code&gt; and all the dependencies from Arch official repository (&lt;code&gt;libmupdf&lt;/code&gt; can be skipped) as long as we set the &lt;code&gt;vimtex-clientserver&lt;/code&gt; (please refer to the &lt;a href="#vimtex-config"&gt;first related configuration file&lt;/a&gt; below) which is specifically for &lt;code&gt;vimtex-synctex-inverse-search&lt;/code&gt;.
&lt;/div&gt;
&lt;p&gt;I use &lt;sup&gt;[1]&lt;/sup&gt; &lt;a href="https://github.com/lervag/vimtex"&gt;vimtex&lt;/a&gt;, a &lt;code&gt;vim plugin&lt;/code&gt; that provides support for writing and compiling &lt;code&gt;LaTeX&lt;/code&gt; documents and &lt;sup&gt;[2]&lt;/sup&gt; &lt;a href="https://pwmt.org/projects/zathura/"&gt;zathura&lt;/a&gt; as the document viewer.&lt;/p&gt;
&lt;p&gt;In the beginning, I was determined to stick to &lt;sup&gt;[3]&lt;/sup&gt; &lt;a href="https://mupdf.com/"&gt;MuPDF&lt;/a&gt; as the PDF viewer due to its fast and complete features despite being small and lightweight but I kept encountering unpleasant experiences while compiling documents where it always froze the screen of my laptop when I closed the viewer.&lt;/p&gt;</description></item><item><title>Pengenalan Tentang LaTeX</title><link>/posts/pengenalan-tentang-latex/</link><pubDate>Sun, 22 Oct 2017 20:06:33 +0800</pubDate><guid>/posts/pengenalan-tentang-latex/</guid><description>&lt;h2 id="pengenalan"&gt;Pengenalan&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;p&gt;Awalannya, saya fikirkan sudah begitu banyak penulisan berkenaan apa itu &lt;code&gt;LaTeX&lt;/code&gt; boleh didapati melalui kajian dan carian di Internet, malahan buku yang menerangkan dengan begitu terperinci akan kegunaannya juga sudah sekian banyak dikeluarkan.&lt;/p&gt;
&lt;p&gt;Tetapi kali ini saya fikir tidak mengapalah. Penulisan ini, jikalau saya menulis dengan lebih lanjut tentang ketiga-tiga perisian ini, sudah tentunya saya juga yang akan termanfaat daripadanya di masa akan datang. Selain saya boleh membuat rujukan kembali dengan membaca pos ini, saya juga boleh meneliti untuk menilai sejauh mana perkembangan saya dalam menulis hal-hal keilmuan seperti ini.&lt;/p&gt;</description></item><item><title>Create A Custom Refresh Image on Windows 8.1</title><link>/archives/posts/create-custom-refresh-image-on-windows-8.1/</link><pubDate>Wed, 13 Sep 2017 10:57:09 +0800</pubDate><guid>/archives/posts/create-custom-refresh-image-on-windows-8.1/</guid><description>&lt;div class="alert alert-dark mb-5"&gt;
&lt;i class="bi bi-info-circle me-1"&gt;&lt;/i&gt; I just found out that &lt;code&gt;Microsoft&lt;/code&gt; made it compulsory for those who still use &lt;code&gt;Windows 8&lt;/code&gt; to upgrade the system to &lt;code&gt;Windows 10&lt;/code&gt; which was made available for free before 2018 for they will stop providing support for &lt;code&gt;Windows 8&lt;/code&gt; after this. Regardless, I rarely use Windows so I will just keep this writing posted in case it can be referred to later.
&lt;/div&gt;
&lt;p&gt;When I first bought this &lt;code&gt;Lenovo Ideapad&lt;/code&gt; in November 2014, it came with a bunch of&amp;hellip; well, useless apps to me.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Nota Peribadi</title><link>/notes/</link><pubDate>Wed, 08 Mar 2017 22:52:01 +0800</pubDate><guid>/notes/</guid><description>&lt;h2 id="additional-config-for-ranger-files"&gt;Additional Config for Ranger Files&lt;/h2&gt;
&lt;div class="card mt-3 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;~/.config/ranger/commands.py&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5f8700"&gt;class&lt;/span&gt; &lt;span style="color:#0087ff"&gt;empty&lt;/span&gt;(Command):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;&amp;#34;&amp;#34;:empty
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00afaf"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00afaf"&gt; Empties the trash directory ~/.Trash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00afaf"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5f8700"&gt;def&lt;/span&gt; &lt;span style="color:#0087ff"&gt;execute&lt;/span&gt;(&lt;span style="color:#0087ff"&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0087ff"&gt;self&lt;/span&gt;.fm.run(&lt;span style="color:#00afaf"&gt;&amp;#34;sudo rm -rf $HOME/.Trash/.*&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0087ff"&gt;self&lt;/span&gt;.fm.run(&lt;span style="color:#00afaf"&gt;&amp;#34;sudo rm -rf $HOME/.Trash/*&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;~/.config/ranger/rc.conf&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;map&lt;/span&gt; DD shell mv -t $HOME/.Trash %s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span class="fs-6"&gt;&lt;strong&gt;Rujukan:&lt;/strong&gt; &lt;a href="https://wiki.archlinux.org/index.php/ranger#Configuration"&gt;&lt;em&gt;Ranger Configuration&lt;/em&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr class="mb-5"&gt;
&lt;h2 id="activate-vim-tablemode"&gt;Activate Vim TableMode&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;video class="responsive-video mt-n2 mb-4" width="480" height="" controls playsinline&gt;
 &lt;source src="vim-table-mode.webm" type="video/webm"&gt;
&lt;/video&gt;
&lt;h3 id="note-about-vim-tablemode"&gt;Note about Vim TableMode&lt;/h3&gt;
&lt;p&gt;(Visual mode)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;\tm&lt;/code&gt; to enable/disable TableMode.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Insert mode)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Start with an empty first row.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then, type using the following format to create the table (borders and alignment will be automatically generated from the basic input):&lt;/p&gt;</description></item><item><title>Network Sharing for Qemu via WiFi</title><link>/archives/posts/network-sharing-for-qemu-via-wifi/</link><pubDate>Thu, 02 Mar 2017 11:12:34 +0800</pubDate><guid>/archives/posts/network-sharing-for-qemu-via-wifi/</guid><description>&lt;div class="alert alert-dark mb-5"&gt;
&lt;i class="bi bi-bookmark-star text-warning-emphasis me-1"&gt;&lt;/i&gt; This is only applicable for &lt;code&gt;BSD-based operating systems&lt;/code&gt; as Guest OSs.
&lt;/div&gt;
&lt;p&gt;I created a simple &lt;code&gt;bash&lt;/code&gt; script for adding a &lt;code&gt;TAP&lt;/code&gt; device and then executed the commands provided below in the terminal.&lt;br&gt;&lt;/p&gt;
&lt;h3 id="from-host-os"&gt;From Host OS:&lt;br&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;code&gt;tap&lt;/code&gt; device and allow permission to the user, set the device up, assign a &lt;code&gt;manual ip address&lt;/code&gt; to be used by the &lt;code&gt;guest&lt;/code&gt; OS (in my case, it is &lt;code&gt;192.168.0.50&lt;/code&gt;), and forward the ARP proxy to the tap device.&lt;/p&gt;</description></item><item><title>(Arkib) Nota</title><link>/archives/notes/</link><pubDate>Sun, 01 Jan 2017 22:52:01 +0800</pubDate><guid>/archives/notes/</guid><description>&lt;h2 id="combiningmerging-pictures-with-imagemagick"&gt;&lt;em&gt;Combining/Merging Pictures with ImageMagick&lt;/em&gt;&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Left-to-Right:&lt;/p&gt;
&lt;div class="card mt-2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;convert +append -background black image1.jpg image2.jpg output.jpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Top-to-Bottom:&lt;/p&gt;
&lt;div class="card mt-2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;convert -append -background black image1.jpg image2.jpg output.jpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;EXAMPLE of merging photos with borders and centered position:-&lt;/p&gt;
&lt;div class="card mt-2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;convert +append -background black -border &lt;span style="color:#00afaf"&gt;1&lt;/span&gt; -bordercolor white -gravity center image1.jpg image2.jpg output.jpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="fs-6"&gt;&lt;strong&gt;Rujukan:&lt;/strong&gt; &lt;a href="https://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr class="mb-5"&gt;
&lt;h2 id="connect-to-wifi-with-wpa_"&gt;&lt;em&gt;Connect to WiFi with wpa_supplicant&lt;/em&gt;&lt;/h2&gt;
&lt;br class="mb-2"&gt;
&lt;p&gt;This is somehow a primitive method for connecting to a wireless network but I just prefer doing it this way. Please refer to step number (i) and (ii) if you are running it for the first time. Otherwise, skip to step number (iii).
&lt;br&gt;&lt;/p&gt;</description></item></channel></rss>