<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Xianzhi: Portfolio Site</title>
    <link>https://xianzhiwang1.github.io/posts/</link>
    <description>Recent content in Posts on Xianzhi: Portfolio Site</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 13 May 2026 11:07:06 -0500</lastBuildDate>
    <atom:link href="https://xianzhiwang1.github.io/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Solving a Saddle Point Problem</title>
      <link>https://xianzhiwang1.github.io/posts/saddle-point-deal-ii/</link>
      <pubDate>Wed, 13 May 2026 11:07:06 -0500</pubDate>
      <guid>https://xianzhiwang1.github.io/posts/saddle-point-deal-ii/</guid>
      <description>&lt;h3 id=&#34;a-finite-element-saddle-point-solver-written-with-dealii&#34;&gt;A finite-element saddle-point solver written with deal.II&lt;/h3&gt;&#xA;&lt;p&gt;This post walks through a research/coursework project&#xA;that I worked on this&#xA;during spring 2025 semester:&#xA;a two-component finite-element solver, written in C++ using&#xA;the &lt;a href=&#34;https://www.dealii.org/&#34;&gt;deal.II&lt;/a&gt; library, for a saddle-point system that&#xA;arises when one tries to compute the harmonic Riesz representation of a given&#xA;functional in the dual of $H^1$. The full code documentation lives at&#xA;&lt;a href=&#34;https://xianzhiwang1.github.io/math676-project/&#34;&gt;&lt;code&gt;saddle-point-project&lt;/code&gt;&lt;/a&gt;&#xA;url, it is grown out of the MATH 676 project that I completed in spring 2025.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tech Notebook: A Machine Learning &amp; Deep Learning Journey</title>
      <link>https://xianzhiwang1.github.io/posts/my-tech-blog/</link>
      <pubDate>Sat, 03 Jan 2026 22:34:22 -0500</pubDate>
      <guid>https://xianzhiwang1.github.io/posts/my-tech-blog/</guid>
      <description>&lt;p&gt;&lt;strong&gt;The actual blog (with code) is at:&lt;/strong&gt; &lt;a href=&#34;https://xianzhiwang1.github.io/tech-blog/&#34;&gt;https://xianzhiwang1.github.io/tech-blog/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I maintain a personal technical blog where I write up what I learn as I work&#xA;through machine learning and deep learning, both inside coursework and on my&#xA;own. This project grows out of the CS0451 Machine Learning class&#xA;I took at Middlebury College.&#xA;The overarching theme of this tech blog&#xA;is &lt;em&gt;understanding by building&lt;/em&gt;: each post takes a&#xA;single idea, walks through the math behind it, implements it in Python&#xA;(usually from scratch first, then alongside a library reference), and then&#xA;puts the implementation to work on a real dataset. The site is built with&#xA;&lt;a href=&#34;https://quarto.org/&#34;&gt;Quarto&lt;/a&gt; and published from a stack of Jupyter&#xA;notebooks, so every post is a fully reproducible mix of derivations,&#xA;explanations, code, plots, and embedded source files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Neovim (Lua) authoring: Packer.nvim, Markdown preview, and TeX Live</title>
      <link>https://xianzhiwang1.github.io/posts/neovim-lua-packer-texlive-markdown-latex-workflow/</link>
      <pubDate>Tue, 14 Jan 2025 12:54:45 -0600</pubDate>
      <guid>https://xianzhiwang1.github.io/posts/neovim-lua-packer-texlive-markdown-latex-workflow/</guid>
      <description>&lt;p&gt;Neovim is my primary &lt;strong&gt;modal editor&lt;/strong&gt; for technical writing and lightweight IDE-style tasks. Configuration is expressed in &lt;strong&gt;Lua&lt;/strong&gt; and versioned in &lt;a href=&#34;https://github.com/Xianzhiwang1/my-neovim-config-from-scratch&#34;&gt;this repository&lt;/a&gt;. The setup is intentionally incremental: curated plugins, predictable keymaps, and a reproducible local toolchain rather than a monolithic distribution.&lt;/p&gt;&#xA;&lt;p&gt;Plugin management uses &lt;a href=&#34;https://github.com/wbthomason/packer.nvim&#34;&gt;Packer.nvim&lt;/a&gt; today; I am evaluating &lt;strong&gt;Lazy.nvim&lt;/strong&gt; for faster startup and declarative spec loading (see below). For Markdown, &lt;code&gt;Alt+k&lt;/code&gt; triggers &lt;strong&gt;markdown-preview.nvim&lt;/strong&gt; in an existing browser session—equivalent to &lt;code&gt;:MarkdownPreview&lt;/code&gt;—via Packer declarations such as:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terminal email with Mutt: Gmail, OAuth 2.0, IMAP, and SMTP</title>
      <link>https://xianzhiwang1.github.io/posts/mutt-oauth2-gmail-imap-smtp-terminal-email/</link>
      <pubDate>Tue, 14 Jan 2025 12:51:24 -0600</pubDate>
      <guid>https://xianzhiwang1.github.io/posts/mutt-oauth2-gmail-imap-smtp-terminal-email/</guid>
      <description>&lt;p&gt;This write-up summarizes a &lt;strong&gt;CLI-first email stack&lt;/strong&gt; built around &lt;a href=&#34;http://www.mutt.org/&#34;&gt;Mutt&lt;/a&gt; on Linux, with &lt;strong&gt;Google Gmail&lt;/strong&gt; over &lt;strong&gt;IMAP/SMTP&lt;/strong&gt; and &lt;strong&gt;OAuth 2.0&lt;/strong&gt; for authentication—relevant when &lt;strong&gt;Google Workspace&lt;/strong&gt; or policy blocks legacy &lt;strong&gt;app passwords&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For a personal Gmail account where &lt;strong&gt;app passwords&lt;/strong&gt; remain available, &lt;a href=&#34;https://github.com/LukeSmithxyz/mutt-wizard&#34;&gt;mutt-wizard&lt;/a&gt; plus an app password is the fastest path: generate credentials in the Google Account security UI, install the wizard from GitHub, and follow its prompts. That flow assumes comfort with the shell and a working &lt;code&gt;muttrc&lt;/code&gt; layout.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Layered keyboard layout with KMonad on Linux (i3)</title>
      <link>https://xianzhiwang1.github.io/posts/kmonad-layered-keymaps-linux-i3-workstation/</link>
      <pubDate>Tue, 14 Jan 2025 12:48:18 -0600</pubDate>
      <guid>https://xianzhiwang1.github.io/posts/kmonad-layered-keymaps-linux-i3-workstation/</guid>
      <description>&lt;p&gt;This note documents how I use &lt;a href=&#34;https://github.com/kmonad/kmonad&#34;&gt;KMonad&lt;/a&gt;, a cross-platform, user-space keyboard remapping daemon written in Haskell, to implement a &lt;strong&gt;layered keymap&lt;/strong&gt; on a Linux workstation. The configuration lives alongside my window manager setup in &lt;a href=&#34;https://github.com/Xianzhiwang1/i3-config/&#34;&gt;this i3 repository&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Compared to QMK/ZMK firmware, KMonad runs in &lt;strong&gt;user space&lt;/strong&gt; on the host OS, which makes it easy to iterate on declarative layout definitions without flashing hardware. The mental model is similar to embedded keymaps: &lt;strong&gt;layers&lt;/strong&gt;, &lt;strong&gt;tap-hold&lt;/strong&gt; behaviors, and modifier chords, expressed as structured configuration rather than ad hoc desktop shortcuts.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
