<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Misc. on Ke's Notes and Blogs</title><link>https://kxue43.github.io/notes-and-blogs/</link><description>Recent content in Misc. on Ke's Notes and Blogs</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 13 Nov 2025 15:41:14 -0500</lastBuildDate><atom:link href="https://kxue43.github.io/notes-and-blogs/index.xml" rel="self" type="application/rss+xml"/><item><title>NeoVim Tips</title><link>https://kxue43.github.io/notes-and-blogs/notes/neovim-tips/</link><pubDate>Thu, 13 Nov 2025 15:41:14 -0500</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/neovim-tips/</guid><description>&lt;h2 id="color-palette" class="heading "&gt;Color palette&lt;a href="#color-palette" aria-labelledby="color-palette"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;When using NvChad, color palette is provided by 
 









 


 &lt;a href="https://github.com/NvChad/base46"&gt;NvChad/base46&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Themes define the actual RGB hex value of each &amp;ldquo;abstract color&amp;rdquo;.
Integration maps &amp;ldquo;abstract colors&amp;rdquo; to highlight groups of NeoVim and various plugins.&lt;/p&gt;
&lt;p&gt;To override highlight group colors, do it in &lt;code&gt;chadrc.lua&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After update, run &lt;code&gt;:lua require(&amp;quot;base46&amp;quot;).load_all_highlights()&lt;/code&gt; to re-compute the color files.
Otherwise, colors won&amp;rsquo;t update even after restarting NeoVim.&lt;/p&gt;</description></item><item><title>Fedora Silverblue Desktop</title><link>https://kxue43.github.io/notes-and-blogs/notes/fedora-silverblue/</link><pubDate>Mon, 27 Oct 2025 13:41:19 -0400</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/fedora-silverblue/</guid><description>&lt;p&gt;This document covers how to set up an x64 Fedora Silverblue as a developer machine.
It is geared towards Go, Python and JavaScript development.&lt;/p&gt;
&lt;p&gt;All commands on this page should be executed from the user&amp;rsquo;s home directory.&lt;/p&gt;





&lt;h2 id="install-nvidia-drivers" class="heading "&gt;Install Nvidia drivers&lt;a href="#install-nvidia-drivers" aria-labelledby="install-nvidia-drivers"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Follow the 
 









 


 &lt;a href="https://docs.fedoraproject.org/en-US/fedora-silverblue/troubleshooting/#_using_nvidia_drivers"&gt;official doc&lt;/a&gt;.&lt;/p&gt;





&lt;h2 id="configure-terminal" class="heading "&gt;Configure terminal&lt;a href="#configure-terminal" aria-labelledby="configure-terminal"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Download 
 









 


 &lt;a href="https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/JetBrainsMono.zip"&gt;JetBrainsMono Nerd Font&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>MacBook with MacPorts</title><link>https://kxue43.github.io/notes-and-blogs/notes/macbook-with-macports/</link><pubDate>Mon, 27 Oct 2025 13:40:57 -0400</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/macbook-with-macports/</guid><description>&lt;h2 id="introduction" class="heading "&gt;Introduction&lt;a href="#introduction" aria-labelledby="introduction"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This document covers how to set up an Intel-chip (x64) Macbook as a developer machine, using MacPorts as the package manager.&lt;/p&gt;
&lt;p&gt;This is intended for old Macbooks whose OS has dropped out of Homebrew Tier 1 support.
For example, when macOS Tahoe was released, Ventura dropped to Homebrew Tier 3 support.
A 2017 Macbook Pro cannot upgrade beyond Ventura, so it has to use MacPorts.
Since Tahoe is the last macOS that supports x64, eventually all Intel-chip Macbooks have to use MacPorts instead of Homebrew.&lt;/p&gt;</description></item><item><title>MacBook with Homebrew</title><link>https://kxue43.github.io/notes-and-blogs/notes/macbook-with-homebrew/</link><pubDate>Mon, 27 Oct 2025 13:36:55 -0400</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/macbook-with-homebrew/</guid><description>&lt;h2 id="introduction" class="heading "&gt;Introduction&lt;a href="#introduction" aria-labelledby="introduction"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This document covers how to set up an ARM64 Macbook as a developer machine.
It is geared towards Go, Python, JavaScript and Java development.&lt;/p&gt;
&lt;p&gt;All commands on this page should be executed from the user&amp;rsquo;s home directory.&lt;/p&gt;
&lt;p&gt;For using MacPorts instead of Homebrew as the package manager, refer to 
 









 



 
 

 
 &lt;a href="https://kxue43.github.io/notes-and-blogs/notes/macbook-with-macports/"&gt;MacBook with MacPorts&lt;/a&gt;.&lt;/p&gt;





&lt;h2 id="install-xcode-command-line-tools" class="heading "&gt;Install Xcode Command Line Tools&lt;a href="#install-xcode-command-line-tools" aria-labelledby="install-xcode-command-line-tools"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="codeblock syntax-highlight mb-3"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xcode-select --install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;h2 id="install-homebrew" class="heading "&gt;Install Homebrew&lt;a href="#install-homebrew" aria-labelledby="install-homebrew"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Use the macOS default Terminal app.&lt;/p&gt;</description></item><item><title>GPG for GitHub</title><link>https://kxue43.github.io/notes-and-blogs/notes/gpg-for-github/</link><pubDate>Tue, 05 Nov 2024 21:38:04 -0500</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/gpg-for-github/</guid><description>&lt;p&gt;GPG, or GNU Privacy Guard, is a free-software replacement for Symantec&amp;rsquo;s PGP cryptographic software suite.
GPG is not a new cryptographic algorithm. GPG keys are simply those generated by the GPG software using existing
algorithms such as RSA.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpg&lt;/code&gt; is a CLI tool for managing keys, and the keys it generates have more features. For example, GPG keys can
expire or be revoked. With GitHub, SSH keys are used for authentication, while GPG keys are used for
signing commits and tags. Commit-signing makes sure the committer is indeed who he/she claims to be &amp;mdash;
otherwise any one can claim to be any one by setting username and password with &lt;code&gt;git config&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>SSH Client and Server</title><link>https://kxue43.github.io/notes-and-blogs/notes/ssh-client-and-server/</link><pubDate>Tue, 05 Nov 2024 21:31:53 -0500</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/ssh-client-and-server/</guid><description>&lt;p&gt;This page describes how to set up a Linux machine as an SSH server and remote in from macOS.&lt;/p&gt;





&lt;h2 id="ssh-server-on-linux" class="heading "&gt;SSH Server on Linux&lt;a href="#ssh-server-on-linux" aria-labelledby="ssh-server-on-linux"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;First install OpenSSH server on the specific Linux distro if it&amp;rsquo;s not already present.&lt;/p&gt;
&lt;p&gt;Then check if the &lt;code&gt;sshd&lt;/code&gt; service is enabled and active.&lt;/p&gt;
&lt;div class="codeblock syntax-highlight mb-3"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl status sshd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;If not, enable and activate it by the following.&lt;/p&gt;</description></item><item><title>GNU GRUB and Multiboot</title><link>https://kxue43.github.io/notes-and-blogs/notes/gnu-grub-and-multiboot/</link><pubDate>Mon, 04 Nov 2024 21:45:41 -0500</pubDate><guid>https://kxue43.github.io/notes-and-blogs/notes/gnu-grub-and-multiboot/</guid><description>&lt;h2 id="bootloader" class="heading "&gt;Bootloader&lt;a href="#bootloader" aria-labelledby="bootloader"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The 
 









 


 &lt;a href="https://en.wikipedia.org/wiki/Bootloader"&gt;Bootloader Wiki page&lt;/a&gt; contains good information
about bootloaders in general.&lt;/p&gt;
&lt;p&gt;According to the Wiki page, BIOS and UEFI are first-stage bootloaders.
They start the second-stage bootloader such as GNU GRUB. Second-stage
bootloaders &amp;ldquo;are not themselves operating systems, but are able to load
an operating system properly and transfer execution to it; the operating
system subsequently initializes itself and may load extra device
drivers. The second-stage boot loader does not need drivers for its own
operation, but may instead use generic storage access methods provided
by system firmware such as the BIOS or Open Firmware, though typically
with restricted hardware functionality and lower performance&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Selenium vs. Playwright</title><link>https://kxue43.github.io/notes-and-blogs/blogs/selenium-vs-playwright/</link><pubDate>Sat, 05 Feb 2022 17:31:35 -0500</pubDate><guid>https://kxue43.github.io/notes-and-blogs/blogs/selenium-vs-playwright/</guid><description>&lt;p&gt;Recently I developed a Python program that scrapes a Single-Page Application with 
 









 


 &lt;a href="https://selenium-python.readthedocs.io/"&gt;Selenium&lt;/a&gt;,
and then reimplemented it with 
 









 


 &lt;a href="https://playwright.dev/python/"&gt;Playwright&lt;/a&gt;. This gave me firsthand knowledge of the difference
between the two. In this article, I shall explain my preference of Playwright over Selenium, and share some general
experience of scraping single-page applications.&lt;/p&gt;





&lt;h2 id="the-reason-and-result-of-the-reimplementation" class="heading "&gt;The reason and result of the reimplementation&lt;a href="#the-reason-and-result-of-the-reimplementation" aria-labelledby="the-reason-and-result-of-the-reimplementation"&gt;








&lt;!-- &lt;i class="fas fa-link anchor"&gt;&lt;/i&gt; --&gt;
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 576 512"&gt;&lt;use href="#fas-link"&gt;&lt;/use&gt;&lt;/svg&gt;&amp;nbsp;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;My scraping program needs to click an anchor element on the target webpage to trigger file download by the browser,
wait for the file download to finish, and then do something with the downloaded file. With Selenium, as surprising as
it may seem, waiting for file download to finish is not straightforward. According to its

 









 


 &lt;a href="https://www.selenium.dev/documentation/test_practices/discouraged/file_downloads/"&gt;official documentation&lt;/a&gt;:&lt;/p&gt;</description></item></channel></rss>