<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on zhiwen.dev</title>
    <link>https://www.zhiwen.dev/posts/</link>
    <description>Recent content in Posts on zhiwen.dev</description>
    <image>
      <title>zhiwen.dev</title>
      <url>https://www.zhiwen.dev/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://www.zhiwen.dev/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.147.7</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 03 Apr 2026 17:58:31 +0800</lastBuildDate>
    <atom:link href="https://www.zhiwen.dev/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>network debugging tools</title>
      <link>https://www.zhiwen.dev/posts/network-debugging-tools/</link>
      <pubDate>Fri, 16 Jan 2026 21:37:01 +0800</pubDate>
      <guid>https://www.zhiwen.dev/posts/network-debugging-tools/</guid>
      <description>&lt;p&gt;&amp;ldquo;This is supposed to work!&amp;rdquo;, as we told ourselves as we attempt to integrate multiple systems together.&lt;/p&gt;
&lt;p&gt;Often in deployment environments, connections can fail unknowingly as we try to bring together complex systems and integrations across multiple network zones and dependencies. There are several tools that help you identify the critical point(s) of failure.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tool&lt;/th&gt;
          &lt;th&gt;Answers&lt;/th&gt;
          &lt;th&gt;OSI / Stack Layers&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tcpdump&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;What packets are actually on the wire?&lt;/td&gt;
          &lt;td&gt;L2–L7 (Packet-level visibility)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ping&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Can I reach the host? Latency? Packet loss?&lt;/td&gt;
          &lt;td&gt;L3 (Network / ICMP)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;traceroute&lt;/code&gt; / &lt;code&gt;tracert&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Where along the path does it fail?&lt;/td&gt;
          &lt;td&gt;L3 (Network)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;nc&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Can I connect to a raw TCP/UDP socket?&lt;/td&gt;
          &lt;td&gt;L4 (Transport)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;openssl&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Does TLS/session/handshake work correctly?&lt;/td&gt;
          &lt;td&gt;L5–L6 (Session &amp;amp; Presentation – TLS)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;dig&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Is DNS resolving correctly?&lt;/td&gt;
          &lt;td&gt;L7 (Application – DNS)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Does the application respond correctly?&lt;/td&gt;
          &lt;td&gt;L7 (Application – HTTP/TLS)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;nmap*&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;What ports/services are exposed?&lt;/td&gt;
          &lt;td&gt;L3–L7 (Discovery &amp;amp; probing)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;I was hesitant in placing &lt;code&gt;nmap&lt;/code&gt; in this list due to how often a tool like this would be quickly flagged by IDS/IPS systems. However, if your network or systems allow such a tool, nmap can be very powerful, extending beyond connectivity debugging, to advanced functions such as service and os fingerprinting.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>what makes a great engineer</title>
      <link>https://www.zhiwen.dev/posts/what-makes-a-great-engineer/</link>
      <pubDate>Mon, 15 Dec 2025 19:11:09 +0800</pubDate>
      <guid>https://www.zhiwen.dev/posts/what-makes-a-great-engineer/</guid>
      <description>&lt;p&gt;Lately, I&amp;rsquo;ve been thinking about what actually makes a great engineer. I&amp;rsquo;ve had an intuitive sense of it, but never managed to structure it clearly.&lt;/p&gt;
&lt;p&gt;Earlier this week, I had a 1-to-1 session with my tech lead where we discussed topics surrounding performance, feedbacks and concerns. One of the conversations that stood out to me was him defining what makes a &amp;ldquo;great&amp;rdquo; engineer — aptitude, attitude, experience &amp;amp; environment.&lt;/p&gt;
&lt;p&gt;I found this framing both simple and insightful. It took something abstract and made it tangible. It also gave me some inspiration — This post is my attempt to further unpack those qualities and add my own perspective.&lt;/p&gt;</description>
    </item>
    <item>
      <title>a new blog</title>
      <link>https://www.zhiwen.dev/posts/my-first-post/</link>
      <pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://www.zhiwen.dev/posts/my-first-post/</guid>
      <description>&lt;p&gt;I enjoy writing documentations as I am &amp;ldquo;forced&amp;rdquo; to convert ideas into technical writing. Knowing these documentations will be consumed by other fellow engineers means I HAD to write in a maintainable and readable manner.&lt;/p&gt;
&lt;p&gt;However, as an engineer who also has a homelab, I often struggle with writing documentation for my homelab. My homelab serves a single-digit number of users and there was only one maintainer - me, myself, and I. There wasn&amp;rsquo;t enough ROI to justify spending time writing any form of documentation for services I am running.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
