<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Karn Wong - Karn Wong&#x27;s Microblog</title>
      <link>https://karnwong.me/microblog/</link>
      <description>Homepage and blog by Karn Wong</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://karnwong.me/microblog/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Thu, 30 Apr 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>2026-04-30</title>
          <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-30/</link>
          <guid>https://karnwong.me/microblog/2026-04-30/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-30/">&lt;p&gt;Gotta make sure your apps don&#x27;t have funny security holes. Pentest engineers might not be on the same page as software engineers, and that&#x27;s normal, they speak different languages. Good news is as long as you are open and try to communicate, things will work out alright. Humans are very resilient.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.softwaresecured.com&#x2F;post&#x2F;why-pentests-break-engineering-workflows&quot;&gt;https:&#x2F;&#x2F;www.softwaresecured.com&#x2F;post&#x2F;why-pentests-break-engineering-workflows&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ทำของมาก็ต้องเช็ค security ไม่งั้นก็จะนอนกันไม่ค่อยหลับ แต่ฝั่งนึงก็เจาะเอาๆ อีกฝั่งก็สะดุ้ง ว่า ต้องแก้อะไรยังไงตรงไหนบ้าง&lt;&#x2F;p&gt;
&lt;p&gt;ก็ culture clash กันประมาณนึง แต่สื่อสารกันดีๆ เดี๋ยวมันจะรอด ปรับเข้าหากันคนละนิดคนละหน่อย&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.softwaresecured.com&#x2F;post&#x2F;why-pentests-break-engineering-workflows&quot;&gt;https:&#x2F;&#x2F;www.softwaresecured.com&#x2F;post&#x2F;why-pentests-break-engineering-workflows&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-04-27</title>
          <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-27/</link>
          <guid>https://karnwong.me/microblog/2026-04-27/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-27/">&lt;p&gt;I always say OSI Layer 8 is &quot;people&quot;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;diego-pacheco.blogspot.com&#x2F;2026&#x2F;01&#x2F;environments-and-people.html&quot;&gt;https:&#x2F;&#x2F;diego-pacheco.blogspot.com&#x2F;2026&#x2F;01&#x2F;environments-and-people.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;เหนือ hardware มี networking
บน networking มี app
พ้น app ไป ก็มนุษย์ตัวนิ่มๆ&lt;&#x2F;p&gt;
&lt;p&gt;เพราะปัญหาส่วนใหญ่ ไม่ได้แก้ที่เทค แต่ต้องแก้ที่คนและการสื่อสาร (ถ้าใช้เทคแก้แล้วจบ ป่านนี้จบไปนานแล้ว ไม่คาราคาซังนานขนาดนี้หรอก)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;diego-pacheco.blogspot.com&#x2F;2026&#x2F;01&#x2F;environments-and-people.html&quot;&gt;https:&#x2F;&#x2F;diego-pacheco.blogspot.com&#x2F;2026&#x2F;01&#x2F;environments-and-people.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-04-23</title>
          <pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-23/</link>
          <guid>https://karnwong.me/microblog/2026-04-23/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-23/">&lt;p&gt;Seen my fair share as well, but now I can laugh about it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;sre&#x2F;comments&#x2F;1rw0p4d&#x2F;whats_the_most_absurd_internal_request_youve&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;sre&#x2F;comments&#x2F;1rw0p4d&#x2F;whats_the_most_absurd_internal_request_youve&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Welcome to โลกคู่ขนาน แต่ก็อย่าด้อยค่าตำแหน่งอื่น เพราะทุกตำแหน่งถนัดกันคนละงาน เพราะถ้าเอา engineer มาทำงาน product จริงๆ อาจจะร้องกรี๊ดก็ได้&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;sre&#x2F;comments&#x2F;1rw0p4d&#x2F;whats_the_most_absurd_internal_request_youve&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;sre&#x2F;comments&#x2F;1rw0p4d&#x2F;whats_the_most_absurd_internal_request_youve&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-04-20</title>
          <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-20/</link>
          <guid>https://karnwong.me/microblog/2026-04-20/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-20/">&lt;p&gt;When things are too good and you have to ruin it by using it at the wrong time. RIP.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;worstofbreed.net&#x2F;&quot;&gt;https:&#x2F;&#x2F;worstofbreed.net&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ในเมื่อมีสิ่งที่ดี แต่สิ่งที่ดีที่ใช้ผิดจังหวะก็กลายร่างเป็นสิ่งที่แย่ได้เช่นกัน
มา มากรี๊ดด้วยกัน&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;worstofbreed.net&#x2F;&quot;&gt;https:&#x2F;&#x2F;worstofbreed.net&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-04-13</title>
          <pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-13/</link>
          <guid>https://karnwong.me/microblog/2026-04-13/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-13/">&lt;p&gt;I got started with humanities. Turns out I used it for software engineering, and that was before I put two and two together. Wild, isn&#x27;t it.&lt;&#x2F;p&gt;
&lt;p&gt;Once you can see that systems are communication patterns there&#x27;s a lot of things you can play with to get desired results.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blainsmith.com&#x2F;essays&#x2F;humanities-in-the-machine&#x2F;&quot;&gt;https:&#x2F;&#x2F;blainsmith.com&#x2F;essays&#x2F;humanities-in-the-machine&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ส่วนตัวพื้นมาจากทางมนุษย์ศาสตร์ (หนังสือยืนหนึ่งในใจฝั่งนี้ คือ Imagined Communities by Benedict Anderson) แต่มาจับ software ตอนหลัง พอมองออกว่า systems มันก็คือการสื่อสาร ทีนี้สนุกละ เห็นท่าเล่นเยอะเลย&lt;&#x2F;p&gt;
&lt;p&gt;(เหมือนที่เขาพูดกัน ว่า ถ้าเป็นปัญหาเทคป่านนี้จบไปนานแล้ว แต่ปัญหาส่วนใหญ่คือปัญหาคน ตกลงกันไม่ได้ก็จะลำบากหน่อย)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blainsmith.com&#x2F;essays&#x2F;humanities-in-the-machine&#x2F;&quot;&gt;https:&#x2F;&#x2F;blainsmith.com&#x2F;essays&#x2F;humanities-in-the-machine&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-04-06</title>
          <pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-04-06/</link>
          <guid>https://karnwong.me/microblog/2026-04-06/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-04-06/">&lt;p&gt;When you are a CLI warrior but you need to work with CSS&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;เมื่อมนุษย์ ops ต้องมาจับ css แต่ชีวิตเกาะกับ terminal ก็ต้องใช้สิ่งนี้ มันดีมาก เลือกสีมาแล้วปรับค่าต่อได้เลย pipe ไปเรื่อยๆ
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-03-26</title>
          <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-03-26/</link>
          <guid>https://karnwong.me/microblog/2026-03-26/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-03-26/">&lt;p&gt;ได้ยินคนคุยกันแว่วๆ ว่า OpenClaw ต่างกับ Agents ยังไง เลยเป็นที่มา 👀&lt;&#x2F;p&gt;
&lt;p&gt;ใดๆ ก็ตามที่มี Gen AI &#x2F; LLM ประกบ ก็จะโดนเหมาเข่งว่าเป็น Agents ได้ไม่ยาก แต่ถ้าจะนิยามสั้นๆ:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;LLM คือตัวฐาน เป็นสมองก็ว่าได้ ซึ่งจะแยกร่างเป็นทรงหลักๆ ดังนี้:
&lt;ul&gt;
&lt;li&gt;Text Generation - นึกถึงเวลาคุยกับ Gemini &#x2F; ChatGPT ตัว LLM รับ text และพ่น text ออกมา&lt;&#x2F;li&gt;
&lt;li&gt;Automatic Speech Recognition - นึกถึง live transcription ที่เวลามีคนพูดแล้วตัวโมเดลจะพ่น text ออกมาแบบ real-time ก็คือ โมเดลรับ audio และพ่น text ออกมา&lt;&#x2F;li&gt;
&lt;li&gt;Multimodal - สามารถคุยกับโมเดลเป็น text หรือส่งรูป + prompt ก็ได้เหมือนกัน รับได้ทั้ง text&#x2F;image และพ่นได้ทั้งสองอย่างเช่นกัน&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Agents ก็คือ เอา LLM มาวางไว้ใต้สุด ใส่ prompts อัดทับ แต่มีแยกกลุ่ม prompts ไว้ แต่ละกลุ่ม prompts มี tools &#x2F; mcp &#x2F; skills ของตัวเอง มองเป็นแซนวิชละกัน แล้วก็ใส่ if-else &#x2F; control loop
เช่น build agent ก็คือเอาโมเดลที่เก่ง reasoning มา แล้วใส่ prompts ที่ปรับให้เหมาะกับการใช้เขียน backend แล้วผูกกับ tools &#x2F; mcp &#x2F; skills ที่เกี่ยวข้อง ก็มัดได้หนึ่ง agent&lt;&#x2F;p&gt;
&lt;p&gt;แล้ว OpenClaw ต่างกันยังไง&lt;&#x2F;p&gt;
&lt;p&gt;จะบอกว่า OpenClaw คือตัวครอบ agents ก็ว่าได้ เพราะตัว OpenClaw ทำโน่นทำนี่มาครอบ agents ไว้เยอะ เช่น การทำ automatic checks ทุกๆ 30 นาที เพื่อดูว่าต้องส่งข้อความอะไรให้ user ไหม
และ OpenClaw มี built-in integrations กับ chat platforms ไม่ว่าจะเป็น Telegram, WhatsApp, Discord ซึ่งถ้าเป็น agents ปกติ ต้องลงแรงเขียนท่อต่อเอง หรือถ้าโชคดีก็ต้องไปใช้ท่อที่มีคนทำเอาไว้ให้แล้ว&lt;&#x2F;p&gt;
&lt;p&gt;มองว่า OpenClaw เป็น application ของ agent ก่อนหน้า จะเป็นทรงเดียวกันกับ vision agent หรือ desktop agent ที่เคยผ่านๆ ตากันมา&lt;&#x2F;p&gt;
&lt;p&gt;ทีนี้ คำถามยอดฮิต ว่า ทำไม OpenClaw ใช้ token เยอะ
ที่มันเยอะ เพราะว่าตัว system prompt ยาวมาก แบบ plaintext ก็สิริรวม 20 KB แล้ว ซึงถือว่าเยอะ
อีกอย่าง เวลาคุยกับ OpenClaw แต่ละที หลังบ้านมันจะยิงหา LLM สองที นัยว่าคำตอบควรจะใกล้ๆ กัน แล้วค่อยมายำส่งให้ user (ถ้าอยากเห็นว่า OpenClaw ส่งอะไรไปหา LLM บ้าง ท่าง่ายสุดคือใช้ MLflow ปัก AI Gateway แล้วไปดู traces ก็เอา gateway credentials ไปให้ OpenClaw ใช้)&lt;&#x2F;p&gt;
&lt;p&gt;แล้วจะใช้ OpenClaw หรือ Agents ดี
อันนี้แล้วแต่บุคคล ลางเนื้อชอบลางยา ใครถูกใจชอบพออันไหนก็เลือกอันนั้น ไม่มีผิดถูก แต่ถ้าใช้ OpenClaw ก็จะแนะนำว่าไปลงใน vm เปล่าๆ แล้วแยกก้อนดีๆ กันโดนข้อมูลใน system รั่ว เพราะ OpenClaw ก็ใช้งานง่ายจริง ไม่เถียง แต่ก็แลกมากับความปลอดภัยของระบบ&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-02-23</title>
          <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-02-23/</link>
          <guid>https://karnwong.me/microblog/2026-02-23/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-02-23/">&lt;p&gt;Slides from my talk at AgentCon Bangkok. Interop is key, and don&#x27;t forget to monitor prod 👀&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;agentcon-bangkok-2026-how-to-stay-sane-in-the-age-of-agents&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;agentcon-bangkok-2026-how-to-stay-sane-in-the-age-of-agents&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สไลด์งาน AgentCon Bangkok ว่าด้วย interop และ monitoring in production
ทำดีๆ แต่แรกจะไม่ร้องกรี๊ดตอนทีมขยาย เพราะถึงตอนนั้นอาจจะมีของตกสำรวจแอบรันอยู่บน prod แล้วไม่รู้ รู้ตัวอีกทีคือโดนเก็บเงินแล้ว 👀&lt;&#x2F;p&gt;
&lt;p&gt;ถ้าเลี่ยงไม่ได้จริงๆ ที่จะต้องใช้หลายภาษาในการทำ agentic apps เพราะทีมชำนาญกันคนละภาษา ADK framework ของ Google ทำไว้ถือว่าดี one framework to rule them all กินเรียบสี่ภาษา ยังไม่เจอคนให้มากกว่านี้ (ถ้าอยากลองเล่น อ่านต่อในคอมเม้น)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;agentcon-bangkok-2026-how-to-stay-sane-in-the-age-of-agents&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;agentcon-bangkok-2026-how-to-stay-sane-in-the-age-of-agents&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ADK มี workshop ไปลองเล่นกันได้ อ่านคู่กับสไลด์จะงงน้อยหน่อย: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;fonylew&#x2F;bulding-ai-agents-with-adk-the-foundation&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;fonylew&#x2F;bulding-ai-agents-with-adk-the-foundation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-02-19</title>
          <pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-02-19/</link>
          <guid>https://karnwong.me/microblog/2026-02-19/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-02-19/">&lt;p&gt;เราควรเลิกเถียงกัน ว่า ops ต้องเขียนโค้ดไหม&lt;&#x2F;p&gt;
&lt;p&gt;แต่สิ่งที่ควรลด ละ เลิก จริงๆ คือ shift left แล้วให้ dev จัดการทุกอย่าง (dev จัดการเองได้ แต่ไม่ใช่ทุกอย่าง)&lt;&#x2F;p&gt;
&lt;p&gt;เอา dev ไปทำ features น่าจะเหมาะกับจุดประสงค์จริงๆ ของงานมากกว่า ให้แต่ละคนได้ focus ในสิ่งที่เป็นหน้าที่ของตัวเองจริงๆ&lt;&#x2F;p&gt;
&lt;p&gt;ไม่งั้นก็จะไม่ต่างอะไรกับการหา superman ยกทีม&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;charitydotwtf.substack.com&#x2F;p&#x2F;bring-back-ops-pride&quot;&gt;https:&#x2F;&#x2F;charitydotwtf.substack.com&#x2F;p&#x2F;bring-back-ops-pride&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-02-16</title>
          <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-02-16/</link>
          <guid>https://karnwong.me/microblog/2026-02-16/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-02-16/">&lt;p&gt;Ops is easy, if you use platforms that already abstract the hard parts for you. The real fun? A single mistake can bankrupt you. Gotta be smart about your cloud spends.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;devops&#x2F;comments&#x2F;1r2so5d&#x2F;whats_the_most_expensive_devops_mistake_youve&quot;&gt;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;devops&#x2F;comments&#x2F;1r2so5d&#x2F;whats_the_most_expensive_devops_mistake_youve&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;งาน ops ง่าย ถ้าใช้ท่อ deploy ที่ platform ต่างๆ มัดไว้ให้แล้ว&lt;&#x2F;p&gt;
&lt;p&gt;แต่ของจริง พลาดนิดเดียวมีสิทธิ์หมดตัว&lt;&#x2F;p&gt;
&lt;p&gt;ความโชคดีคือ มีคนที่เจ็บมาแล้วมาแชร์ให้ฟัง จะได้ไม่เดินพลาดซ้ำ (หวังว่า)&lt;&#x2F;p&gt;
&lt;p&gt;และ จ่ายครบจบแน่ มีอยู่จริง แต่บริหารยังไงให้จ่ายเท่าที่จำเป็น อันนี้ท้าทายกว่าเยอะ&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-02-12</title>
          <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-02-12/</link>
          <guid>https://karnwong.me/microblog/2026-02-12/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-02-12/">&lt;p&gt;Because data is beautiful&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.simonpcouch.com&#x2F;blog&#x2F;2026-01-20-cc-impact&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.simonpcouch.com&#x2F;blog&#x2F;2026-01-20-cc-impact&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ช่วงกลางปีที่แล้วเด็กเนิร์ดที่ Mountain View พบว่า คุยกับ AI ตานึง ใช้พลังงานเท่ากับไมโครเวฟ 1 วินาที
แต่ตอนนี้ agents โตแล้ว และวันนึงเฉลี่ยจะใช้พลังงานเท่ากับเครื่องล้างจานรอบนึง&lt;&#x2F;p&gt;
&lt;p&gt;ไปอ่านเต็มๆ ได้&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.simonpcouch.com&#x2F;blog&#x2F;2026-01-20-cc-impact&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.simonpcouch.com&#x2F;blog&#x2F;2026-01-20-cc-impact&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-02-03</title>
          <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-02-03/</link>
          <guid>https://karnwong.me/microblog/2026-02-03/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-02-03/">&lt;p&gt;Slides for National Coding Day 2026@Bangkok, TH. Mostly about why you should refactor, and things that are hard to rectify once they went to production.&lt;&#x2F;p&gt;
&lt;p&gt;Also for those who&#x27;s curious about AI impact, fret not. As long as AI can&#x27;t bridge the gap between IT and Finance for FinOps we are safe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;national-coding-day-2026-software-evolution-the-complete-lifecycle&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;national-coding-day-2026-software-evolution-the-complete-lifecycle&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สไลด์งาน National Coding Day&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ คือจะขยี้เรื่อง refactor และ สิ่งที่ทำไปแล้วจะแก้ยากถ้าเดินพลาด (วนกลับไปที่ layer ล่างสุด ระดับ infra)&lt;&#x2F;p&gt;
&lt;p&gt;ขอบคุณที่สนใจถามเกี่ยวกับ AI ใน session นี้&lt;&#x2F;p&gt;
&lt;p&gt;แต่ไม่ต้องเป็นห่วง เพราะ AI ยังทำ FinOps สู้คนไม่ได้ ไว้ AI คุยกับ dev และ finance รู้เรื่องเมื่อไหร่ค่อยกรี๊ดละกันนะ&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;national-coding-day-2026-software-evolution-the-complete-lifecycle&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;national-coding-day-2026-software-evolution-the-complete-lifecycle&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-01-26</title>
          <pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-01-26/</link>
          <guid>https://karnwong.me/microblog/2026-01-26/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-01-26/">&lt;p&gt;Because you can&#x27;t call it a day after releasing an agentic product. Gotta plug security holes as well, and because data exfiltration isn&#x27;t fun.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;advent-of-ai-security.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;advent-of-ai-security.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ใช้ AI เป็น ทำ agentic apps ได้ ก็อย่าลืมอุดรูรั่ว security ทั้งหลาย ไม่งั้นจะโดนเจาะจนพรุน และตามล้างตามเก็บ data exfiltration&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-01-22-1</title>
          <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-01-22-1/</link>
          <guid>https://karnwong.me/microblog/2026-01-22-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-01-22-1/">&lt;p&gt;You can&#x27;t stop students from using AI. But you can make them think very hard about it, because wrong answers with AI help means you lose more points.&lt;&#x2F;p&gt;
&lt;p&gt;This I like!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ploum.net&#x2F;2026-01-19-exam-with-chatbots.html&quot;&gt;https:&#x2F;&#x2F;ploum.net&#x2F;2026-01-19-exam-with-chatbots.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สมัยนี้คนใช้ AI เยอะ แล้วตอนสอบล่ะ? บทจะห้ามมันก็ห้ามกันไม่ได้หรอก แต่วางยาเล็กน้อย(?)ได้&lt;&#x2F;p&gt;
&lt;p&gt;ก็คือ อยากใช้ AI ตอบก็ใช้ไป แต่ต้อง verify ให้ได้นะว่าคำตอบถูก ถ้าผิดโดนหักเยอะกว่าไม่ใช้ AI ตอบนะ&lt;&#x2F;p&gt;
&lt;p&gt;และ correlation น่าสนใจ ระหว่าง AI usage preferences กับ exam score&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ploum.net&#x2F;2026-01-19-exam-with-chatbots.html&quot;&gt;https:&#x2F;&#x2F;ploum.net&#x2F;2026-01-19-exam-with-chatbots.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-01-22-2</title>
          <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-01-22-2/</link>
          <guid>https://karnwong.me/microblog/2026-01-22-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-01-22-2/">&lt;p&gt;Great read regarding recent ux on mac os (which I&#x27;m not too happy about).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tonsky.me&#x2F;blog&#x2F;tahoe-icons&#x2F;&quot;&gt;https:&#x2F;&#x2F;tonsky.me&#x2F;blog&#x2F;tahoe-icons&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ถ้ารู้สึกว่า tahoe ui มันดูเยอะๆ ยังไงชอบกล ใช่แล้ว คุณไม่ได้คิดไปเอง&lt;&#x2F;p&gt;
&lt;p&gt;เหวอสุดคือเปิด pdf แล้วขอบมน นั่งหานานมากว่าปิด config ตรงไหน สรุปเป็นที่ระดับ os level&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tonsky.me&#x2F;blog&#x2F;tahoe-icons&#x2F;&quot;&gt;https:&#x2F;&#x2F;tonsky.me&#x2F;blog&#x2F;tahoe-icons&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2026-01-19</title>
          <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-01-19/</link>
          <guid>https://karnwong.me/microblog/2026-01-19/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-01-19/">&lt;p&gt;In case you are looking for bedtime stories. Love the illustrations!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;authzed.com&#x2F;resources&#x2F;dibs-and-the-magic-library&quot;&gt;https:&#x2F;&#x2F;authzed.com&#x2F;resources&#x2F;dibs-and-the-magic-library&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gentlydownthe.stream&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.gentlydownthe.stream&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;phippy&#x2F;the-childrens-illustrated-guide-to-kubernetes&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.cncf.io&#x2F;phippy&#x2F;the-childrens-illustrated-guide-to-kubernetes&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;เผื่อมีคนกำลังหานิทานก่อนนอน (ก็นิทานจริงๆ นะ รูปเยอะ ประโยคง่ายๆ ไม่ซับซ้อน 😆)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;authzed.com&#x2F;resources&#x2F;dibs-and-the-magic-library&quot;&gt;https:&#x2F;&#x2F;authzed.com&#x2F;resources&#x2F;dibs-and-the-magic-library&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gentlydownthe.stream&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.gentlydownthe.stream&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;phippy&#x2F;the-childrens-illustrated-guide-to-kubernetes&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.cncf.io&#x2F;phippy&#x2F;the-childrens-illustrated-guide-to-kubernetes&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>2026-01-07</title>
          <pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2026-01-07/</link>
          <guid>https://karnwong.me/microblog/2026-01-07/</guid>
          <description xml:base="https://karnwong.me/microblog/2026-01-07/">&lt;p&gt;Slides from Microsoft Ignite After Party 2025 is up.&lt;&#x2F;p&gt;
&lt;p&gt;TLDR: make your services portable so you don&#x27;t have to spend too much time on supporting multiple infrastructures. Because some of your workloads might be on-prem, some are on cloud. This way, it&#x27;s easier to maintain and you get more sleep 😪&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;microsoft-ignite-after-party-2025-azure-infrastructure-for-cloud-native-solutions&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;microsoft-ignite-after-party-2025-azure-infrastructure-for-cloud-native-solutions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สไลด์งาน Microsoft Ignite After Party ของท้ายปี 2025 อัพแล้ว&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ concept ง่ายมาก ทำยังไงก็ได้ให้ solution ที่ทำ อยู่ที่ไหนก็ได้ ถ้าจะสลับที่จะได้ไม่เหนื่อยมาก เพราะบางทีอาจจะต้องเอาบางส่วนมาลง on-prem แต่บางอย่างอยู่บน cloud ใช้ท่าเดียวกันได้ก็จะง่ายกับการ maintain และชีวิตก็จะสบาย เพราะมีเวลานอนมากขึ้น 😪&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;microsoft-ignite-after-party-2025-azure-infrastructure-for-cloud-native-solutions&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;microsoft-ignite-after-party-2025-azure-infrastructure-for-cloud-native-solutions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-12-16</title>
          <pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-12-16/</link>
          <guid>https://karnwong.me/microblog/2025-12-16/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-12-16/">&lt;p&gt;Terraform CDKTF will sunset. There is pulumi if you still prefer programming languages interface for IaC, but you might need to change some of your workflows.&lt;&#x2F;p&gt;
&lt;p&gt;Alternative is vendor&#x27;s IaC solution, such as AWS CDK, but if you have to work with stuff outside of AWS perimeter it might be challenging.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Terraform CDKTF sunset แล้ว&lt;&#x2F;p&gt;
&lt;p&gt;สำหรับคนที่อยากใช้ programming languages ทำ IaC อาจจะต้องย้ายไป pulumi แทน&lt;&#x2F;p&gt;
&lt;p&gt;อันนี้แล้วแต่สะดวกเลย ว่ายังอยากอยู่ใน terraform ecosystem ต่อ หรือจะไป pulumi เต็มตัว&lt;&#x2F;p&gt;
&lt;p&gt;สำหรับคนที่ต้องใช้แบบ on-prem อาจจะต้องทำการบ้านเพิ่ม ว่า สามารถใช้ pulumi แบบไม่มี external cloud dependencies ได้ไหม (ของตัว pulumi เอง) แล้วก็เรื่องของ licensing&lt;&#x2F;p&gt;
&lt;p&gt;แต่จริงๆ จะใช้อะไรทำ IaC ก็ได้ แล้วแต่ถนัด บาง cloud vendor มี IaC ของตัวเอง ใช้ได้เหมือนกัน แต่อย่าลืมดู ecosystem support ว่า extend ได้ขนาดไหน&lt;&#x2F;p&gt;
&lt;p&gt;ขอให้ทุกท่านโชคดีกับการ migrate ครั้งนี้&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-11-21</title>
          <pubDate>Fri, 21 Nov 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-11-21/</link>
          <guid>https://karnwong.me/microblog/2025-11-21/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-11-21/">&lt;p&gt;Recommend these for markdown linter&#x2F;formatter&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rvben&#x2F;rumdl&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;rvben&#x2F;rumdl&lt;&#x2F;a&gt; - for markdown itself&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hougesen&#x2F;mdsf&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;hougesen&#x2F;mdsf&lt;&#x2F;a&gt; - for markdown code blocks&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As for pre-commit, github.com&#x2F;j178&#x2F;prek. It&#x27;s backward compatible with pre-commit.&lt;&#x2F;p&gt;
&lt;p&gt;All are written in rust. Fast, that they are 😎.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;markdown linters &#x2F; formatters แนะนำสองตัวนี้&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rvben&#x2F;rumdl&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;rvben&#x2F;rumdl&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hougesen&#x2F;mdsf&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;hougesen&#x2F;mdsf&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;rumdl เอาไว้จัดการ markdown&lt;&#x2F;p&gt;
&lt;p&gt;msdf เอาไว้จัดการ code block ใน markdown อีกที&lt;&#x2F;p&gt;
&lt;p&gt;หลังบ้านเป็น rust ไวแน่นอน&lt;&#x2F;p&gt;
&lt;p&gt;ส่วน pre-commit ตอนนี้มี &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;j178&#x2F;prek&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;j178&#x2F;prek&lt;&#x2F;a&gt; แล้ว backward compatible กับ pre-commit (และไวกว่าด้วย)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-11-13</title>
          <pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-11-13/</link>
          <guid>https://karnwong.me/microblog/2025-11-13/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-11-13/">&lt;p&gt;ไปแงะ adk framework มา ของเค้าดีนะ จริงๆ ตอนนี้ก็พร้อมใช้แหละ แต่อาจจะต้อง DIY บางอย่างเองอยู่ ต้องรอให้สุกกว่านี้อีกซักหน่อย (จะเป็นพวก production features มากกว่า แต่ features ทั่วไปก็ใช้ได้ละ)&lt;&#x2F;p&gt;
&lt;p&gt;ไปแงะๆ กันได้: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kahnwong&#x2F;a2a-go-demo&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;kahnwong&#x2F;a2a-go-demo&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ที่เห็นได้ชัดคือ IDE ไม่โวยวายตอน index golang project แต่ตอนเขียน python IDE OOM หลายรอบมาก แต่ก็เข้าใจได้ ไส้อาจจะเยอะ&lt;&#x2F;p&gt;
&lt;p&gt;ส่วน deployment size:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;python deps: 466 MB&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;golang binaries:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;agent_a: 17 MB&lt;&#x2F;li&gt;
&lt;li&gt;agent_b: 17 MB&lt;&#x2F;li&gt;
&lt;li&gt;agent_root: 21 MB&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;คร่าวๆ ก็คือ deployment size ห่างกัน 400 MB (ยังไม่นับ python runtime นะ ก็จะ ++ เพิ่มไปอีก)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>2025-10-30</title>
          <pubDate>Thu, 30 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-30/</link>
          <guid>https://karnwong.me/microblog/2025-10-30/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-30/">&lt;p&gt;ใช้ linux มานาน แต่รอบนี้ใช้กับ laptop แล้วแบกออกนอกบ้านด้วย ค่อนข้างว้าวกับ trackpad ที่พัฒนาไปไกลแล้ว ใช้ gesture ได้เหมือนแมคเลย&lt;&#x2F;p&gt;
&lt;p&gt;เครื่องนี้มี fingerprint scanner แล้วเจอบั๊กตอนเอาออกนอกบ้านวันแรก เพราะ fprintd daemon ไม่ตื่นหลังจาก suspend (ขอบคุณคนที่ใช้มือเดียวคอยถือคอมให้ตอนใส่พาสเวิดที่ยาวมาก) แต่เจอวิธีแก้ละ&lt;&#x2F;p&gt;
&lt;p&gt;ที่ surprise สุดคือ thinkpad x13 มันเบามาก ไม่ถึงโล เบาแบบ ไม่น่าเชื่อ วางบนตักแล้วไม่รู้สึกว่าหนักเลย หวังว่าจะไม่นิสัยเสียใช้คอมบนเตียง 😅&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-28</title>
          <pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-28/</link>
          <guid>https://karnwong.me/microblog/2025-10-28/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-28/">&lt;p&gt;วันก่อนไปเล่า DataOps ที่งาน Data &amp;amp; AI Day&lt;&#x2F;p&gt;
&lt;p&gt;จากประสบการณ์จริง ไม่อิงนิยาย เพราะเรื่องจริงมันเศร้ายิ่งกว่านิยาย 🥲&lt;&#x2F;p&gt;
&lt;p&gt;ขั้นกว่าของการทำของขึ้นได้ คือ รับมือกับ users (ทั้งภายใน ภายนอก และ technical users) ยังไม่นับเรื่อง security ล้านแปด ที่จะมากันไม่หยุดหย่อน&lt;&#x2F;p&gt;
&lt;p&gt;ขึ้นของเรื่องเล็ก operate ยังไงให้รอดและไม่จมน้ำก่อน&lt;&#x2F;p&gt;
&lt;p&gt;สไลด์อัพแล้ว ไปอ่านกันได้&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&quot;&gt;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-23</title>
          <pubDate>Thu, 23 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-23/</link>
          <guid>https://karnwong.me/microblog/2025-10-23/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-23/">&lt;p&gt;Was implementing SMART reading feature for my cli utils app, and found that my server&#x27;s ssd is on its last legs. Replaced the ssd and use the old one for a temp mountpoint. 2 weeks later it suddenly disconnected, and &lt;code&gt;sudo blkid&lt;&#x2F;code&gt; hangs. I think I dodged a bullet there.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;วันก่อนเจอว่า ssd ที่ใช้ใน server มี bad sectors เยอะมาก เลยรีบซื้อมาเปลี่ยน&lt;&#x2F;p&gt;
&lt;p&gt;แต่ ssd เก่าก็น่าจะพอยังใช้ได้อยู่ เลยเอามาเป็น external drive เก็บ temp files ใหญ่ๆ&lt;&#x2F;p&gt;
&lt;p&gt;ผ่านไปสองอาทิตย์ ssd ตัวที่ว่านี้ อยู่ๆ หลุดจาก mountpoint, ใช้ sudo blkid ก็ไม่ขึ้น&lt;&#x2F;p&gt;
&lt;p&gt;หวุดหวิดมาก มี backup ไว้ทุกอย่างก็จริง แต่ก็จะเสียเวลาประมาณนึงในการ restore ทุกสิ่งอย่าง&lt;&#x2F;p&gt;
&lt;p&gt;ขอบคุณที่อะไรไม่รู้ดลใจให้ไปงอก SMART feature ใน cli utils ของตัวเอง เอาไว้เช็คสภาพ hard disk เลยเจอว่า bad sectors อย่างเยอะ&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-21</title>
          <pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-21/</link>
          <guid>https://karnwong.me/microblog/2025-10-21/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-21/">&lt;p&gt;Recently gave a talk at PyCon Thailand about ONNX.&lt;&#x2F;p&gt;
&lt;p&gt;TLDR; stacking ONNX with rust can reduce latency by 20%.&lt;&#x2F;p&gt;
&lt;p&gt;See workshop repo in the slides.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&quot;&gt;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;อัพสไลด์งาน pycon แล้ว ขอบคุณทุกคนที่ให้ความสนใจ ถึงแม้ว่า session จะเป็น classical ML แต่ก็มีหลายคนที่สนใจ LLM เข้ามาถาม&lt;&#x2F;p&gt;
&lt;p&gt;ขอบคุณคนที่รีวิวสไลด์และป้ายยา vllm ตั้งแต่ปีที่แล้ว เลยไม่ตายไมค์ตอนคนถาม 🙏&lt;&#x2F;p&gt;
&lt;p&gt;workshop repo ดู qr code ในสไลด์&lt;&#x2F;p&gt;
&lt;p&gt;เสาร์นี้ไปงาน data &amp;amp; ai day มาเจอกันได้ รอบนี้พาทัวร์ DataOps&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&quot;&gt;https:&#x2F;&#x2F;karnwong.me&#x2F;speaking&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-16</title>
          <pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-16/</link>
          <guid>https://karnwong.me/microblog/2025-10-16/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-16/">&lt;p&gt;ไปแงะ ML inference ecosystem ของฝั่ง web มา&lt;&#x2F;p&gt;
&lt;p&gt;ก็คงไม่ train&#x2F;eval บน web stack อันนั้นทรมานตัวเองเกิน&lt;&#x2F;p&gt;
&lt;p&gt;สรุปสั้นๆ คือ google ทำ mediapipe library ที่มีหลาย module หากินในงาน ML ไว้ให้แล้ว พวก LLM&#x2F;audio&#x2F;vision&#x2F;text&lt;&#x2F;p&gt;
&lt;p&gt;ไม่ได้แงะทั้งหมด แต่เห็นบางตัวอย่าง face detection ยืนอยู่บน tensorflow lite (เปลี่ยนเป็น LiteRT ละ รอบนี้รองรับ pytorch และ jax แล้ว) ซึ่ง browser runtime ก็ไม่รู้จัก tensorflow กะเขาหรอก แต่ไปยืมมือ wasm แทน&lt;&#x2F;p&gt;
&lt;p&gt;ถ้ามี scikit-learn ก็ได้สองท่า ไปเกาะ pyodide ที่เป็น python runtime in browser เอา หรือ ไปออก onnx ยืนพื้น wasm เหมือนเดิม แต่มี accelerator ตัวอื่นพอใช้ได้เหมือนกัน&lt;&#x2F;p&gt;
&lt;p&gt;ส่วน neural networks ก็ไปเกาะ LiteRT เอา&lt;&#x2F;p&gt;
&lt;p&gt;อันนี้ mediapipe catalog สำเร็จรูปมาให้แล้ว ใช้ไม่ยาก ตึมึน vibe coding ได้เลย ลองมาละ&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ai.google.dev&#x2F;edge&#x2F;mediapipe&#x2F;solutions&#x2F;guide&quot;&gt;https:&#x2F;&#x2F;ai.google.dev&#x2F;edge&#x2F;mediapipe&#x2F;solutions&#x2F;guide&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-09</title>
          <pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-09/</link>
          <guid>https://karnwong.me/microblog/2025-10-09/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-09/">&lt;p&gt;ไปเล่น unikernel มา&lt;&#x2F;p&gt;
&lt;p&gt;เล่าแบบสั้นๆ คือ เอา binary&#x2F;runtime+code โปะบน kernel ตรงๆ เลย ไม่มี os คั่นกลาง - boot image เล็กจริง binary จิ๋วๆ boot image อยู่ที่ 15 mb&lt;&#x2F;p&gt;
&lt;p&gt;ตอนเทสมันจะทะลุ kvm ซึ่ง ผลค่อนข้าง inconsistent กัน บางเครื่อง unikernel ช้ากว่าแบบไม่เยอะมาก แต่บางเครื่องช้ากว่าเกินครึ่ง&lt;&#x2F;p&gt;
&lt;p&gt;docker ยังไงก็ไวกว่า ใกล้ๆ กับการรันแบบ native&lt;&#x2F;p&gt;
&lt;p&gt;จะเหมาะสุดถ้าเอา binary โปะทับตรงๆ เพราะไม่ต้องหอบ runtime + deps + file ติดมาด้วย (แปะไม่ครบ วนลูปเทสนานหน่อย)&lt;&#x2F;p&gt;
&lt;p&gt;แต่ถามว่าควรใช้มั้ย คิดว่ายัง เพราะมันยังดูไม่ค่อยสุกดีซักอัน debug ยากด้วยเพราะไม่มี os ให้เกาะ เลยทะลวงยาก และ docker ก็ไวกว่าแบบไม่ต้องคิด จะไปโยนขึ้น cloud ก็ต้องไปท่า vm ก็จะเหนื่อยหน่อยกับการทำ monitoring + scaling&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-07</title>
          <pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-07/</link>
          <guid>https://karnwong.me/microblog/2025-10-07/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-07/">&lt;p&gt;viz เป็นแบบ interactive, กด filter เองได้บางส่วน&lt;&#x2F;p&gt;
&lt;p&gt;มี viz ที่เป็นของ gpu clusters ด้วย&lt;&#x2F;p&gt;
&lt;p&gt;ถ้าไม่อยากแปลผล viz เอง มีสรุปให้อ่าน&lt;&#x2F;p&gt;
&lt;p&gt;ถ้าสงสัยว่าข้อมูลได้แต่ใดมา มี faq ให้อ่านคลายความสงสัย&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;epoch.ai&#x2F;data&#x2F;ai-models&quot;&gt;https:&#x2F;&#x2F;epoch.ai&#x2F;data&#x2F;ai-models&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-10-02</title>
          <pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-10-02/</link>
          <guid>https://karnwong.me/microblog/2025-10-02/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-10-02/">&lt;p&gt;SedonaDB มาแล้ว syntax เดียวกับ sedona ที่ใช้กับ spark&lt;&#x2F;p&gt;
&lt;p&gt;ลงเป็น lib ใน python ท่าปกติ ยืนพื้นบน datafusion ไวแน่นอน (ขอบคุณที่ไม่ไปแตะ geopandas เลย)&lt;&#x2F;p&gt;
&lt;p&gt;จะได้ไม่ต้องรำ spark + setup JARs ตอนปั้น query&lt;&#x2F;p&gt;
&lt;p&gt;(ยังคงเจ็บกับ duckdb ที่ spatial implementation มีไม่ครบ และ h3 extension ก๊องขั้นสุด)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sedona.apache.org&#x2F;sedonadb&#x2F;latest&#x2F;&quot;&gt;https:&#x2F;&#x2F;sedona.apache.org&#x2F;sedonadb&#x2F;latest&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-09-26</title>
          <pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-09-26/</link>
          <guid>https://karnwong.me/microblog/2025-09-26/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-09-26/">&lt;p&gt;I have a secrets sharing service deployed for personal use. Once the secret is accessed, it&#x27;s gone.&lt;&#x2F;p&gt;
&lt;p&gt;My friend just told me that he&#x27;s been using the said service I deployed for &quot;personal use&quot; with his &quot;team&quot;. Because he trusts my server.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll take that as a compliment 😆&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;วันก่อน pair programming กับเพื่อน (ก็ไม่เชิง คือมันต้องไปขูดของออกจาก vm เลยคลำทางกับปั้น bash script แบบหนักๆ) คิดถึงความ mind meld ที่เดากันออก ว่าแต่ละคนกำลังจะทำอะไรโดยแค่ดูว่าอีกคนถามหรือพิมพ์อะไร&lt;&#x2F;p&gt;
&lt;p&gt;เจาะของเจอแล้ว ต้องขูดออกมาแยกก้อน เลยต้องให้เพื่อนส่ง artifacts list มา จะได้ปั้น bash script ให้ เพื่อนเลยบอกว่า ทุกวันนี้ใช้ secrets sharing service ที่เรา deploy (บนโดเมนตัวเอง) กับทีมเขาอยู่&lt;&#x2F;p&gt;
&lt;p&gt;เป็นเรื่องดี? 😂&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-09-13</title>
          <pubDate>Sat, 13 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-09-13/</link>
          <guid>https://karnwong.me/microblog/2025-09-13/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-09-13/">&lt;p&gt;สาย privacy ถูกใจสิ่งนี้ ในลิ้งมี paper + technical report&lt;&#x2F;p&gt;
&lt;p&gt;huggingface มี แต่ถ้าอยากใช้บน ollama ต้องใช้กำลังภายในนิดนึง&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;research.google&#x2F;blog&#x2F;vaultgemma-the-worlds-most-capable-differentially-private-llm&#x2F;&quot;&gt;https:&#x2F;&#x2F;research.google&#x2F;blog&#x2F;vaultgemma-the-worlds-most-capable-differentially-private-llm&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-09-12</title>
          <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-09-12/</link>
          <guid>https://karnwong.me/microblog/2025-09-12/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-09-12/">&lt;p&gt;This secrets scanning tool is very fast, and it returns normal exit code when found secrets. Very impressed!&lt;&#x2F;p&gt;
&lt;p&gt;Normally I don&#x27;t use mongodb (only for storing logs) but gotta say this is a gem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mongodb&#x2F;kingfisher&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;mongodb&#x2F;kingfisher&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ส่วนตัวเข็ดกับการใช้สายเขียวทำ app db แต่ถ้าใช้เก็บ logs อย่างเดียวจะดีกว่า&lt;&#x2F;p&gt;
&lt;p&gt;แต่รอบนี้ทำถึง secrets scanning tool ตัวนี้ไวจริง ปกติใช้ trufflehog แต่รู้สึกมันผีๆ ไปหน่อยตอนพ่น exit code ถ้าเจอ secrets ต้องอ้อมกันนิดนึง แต่ kingfisher ใช้ท่ามาตราฐาน ไม่ได้หมก exit code ไว้&lt;&#x2F;p&gt;
&lt;p&gt;แนะนำให้ปักเข้า pre-commit กันมือลั่นตอน git push ขึ้นมา&lt;&#x2F;p&gt;
&lt;p&gt;re-roll secrets จะไม่ค่อยสนุกถ้าต้องทำ เสี่ยง downtime อีก&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mongodb&#x2F;kingfisher&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;mongodb&#x2F;kingfisher&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-09-10</title>
          <pubDate>Wed, 10 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-09-10/</link>
          <guid>https://karnwong.me/microblog/2025-09-10/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-09-10/">&lt;p&gt;ชีวิตเด็กวิศวะ จะได้ยินคนกรี๊ดประจำ ตอนได้ parts ออกมาจากเครื่อง CNC แล้ว mating ไม่ได้ เพราะ margin น้อยไป&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Software engineering is unlike traditional engineering disciplines in that for most of its lifetime it&#x27;s had the luxury of purely deterministic expectations. This is not true in nearly every other type of engineering.&lt;&#x2F;p&gt;
&lt;p&gt;— potatolicious, in a conversation about AI engineering&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</description>
      </item>
      <item>
          <title>2025-09-01</title>
          <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-09-01/</link>
          <guid>https://karnwong.me/microblog/2025-09-01/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-09-01/">&lt;p&gt;Controversial แต่ก็อ่านได้ จะได้รู้ว่ามีคนคิดแบบนี้จริงๆ&lt;&#x2F;p&gt;
&lt;p&gt;Top comment เป็นตัวแทนให้ทุกคนแล้ว&lt;&#x2F;p&gt;
&lt;p&gt;คือจะคิดแบบนี้ก็ไม่ผิด แต่มันมีจริงๆ ที่ชาว swe ต้องมาผ่าตัดของที่ data ขึ้นไว้&lt;&#x2F;p&gt;
&lt;p&gt;แต่สลับกันก็มี คือทีม swe ขึ้น data pipelines ไว้ ชาว data มาเห็นคือจับผ่าตัดยกใหญ่&lt;&#x2F;p&gt;
&lt;p&gt;ถ้าจะสรุปก็คือ มันก็ไม่ใช่ว่ารู้ data อย่างเดียวแล้วจะทำ pipelines รอด มันต้องรู้หลักการ swe ด้วย รู้แค่อย่างใดอย่างนึงก็ขึ้นของได้แหละ แต่อาจจะมองไม่ครบมุม&lt;&#x2F;p&gt;
&lt;p&gt;ส่วนงาน ML ก็บันเทิงพอๆ กัน dev ใช้งานได้ พอจะเอาขึ้น production ต้องผ่าตัดชุดใหญ่ (ด่านยากสุด คือ ขอให้ DS ใช้ git)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;better-programming&#x2F;data-engineering-is-not-software-engineering-af81eb8d3949&quot;&gt;https:&#x2F;&#x2F;medium.com&#x2F;better-programming&#x2F;data-engineering-is-not-software-engineering-af81eb8d3949&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-28</title>
          <pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-28/</link>
          <guid>https://karnwong.me/microblog/2025-08-28/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-28/">&lt;p&gt;ทำให้ pain points ย้อนกลับมาที่คนสร้าง เดี๋ยวเขาก็แก้เอง&lt;&#x2F;p&gt;
&lt;p&gt;ใจเขาใจเรา business logic ดีแค่ไหน แต่ถ้า users ไม่เข้าใจเหมือนคนสร้าง ก็ล่มอยู่ดี&lt;&#x2F;p&gt;
&lt;p&gt;นึกถึงเคสนึงที่น้องๆ มัด 3 features เข้ามาไว้ใน pr เดียว&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ ก็ทำได้ ไม่ผิดกติกา แค่ตอนเอาขึ้น production จะลุ้นหนักหน่อย ว่า feature ไหนทำร่วง&lt;&#x2F;p&gt;
&lt;p&gt;แต่ในเมื่อ features พันกันใน pr ไปแล้ว ก็..... stand by อยู่แก้ยันเช้าละกันนะ&lt;&#x2F;p&gt;
&lt;p&gt;หลังจากนั้น น้องๆ ทำ pr แยก features กันโดยอัตโนมัติ เจ็บนี้อีกนาน&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Entrepreneur&#x2F;comments&#x2F;1mw5yfg&#x2F;forced_every_engineer_to_take_sales_calls_they&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Entrepreneur&#x2F;comments&#x2F;1mw5yfg&#x2F;forced_every_engineer_to_take_sales_calls_they&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-27</title>
          <pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-27/</link>
          <guid>https://karnwong.me/microblog/2025-08-27/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-27/">&lt;p&gt;polars is faster than pandas. But when it comes to spatial operations everyone fallbacks to geopandas, especially when it comes to reading geoparquet files.&lt;&#x2F;p&gt;
&lt;p&gt;I find this very amusing, but personally I use spark sedona 😛&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;โลกนี้มี polars ที่ไวกว่า pandas&lt;&#x2F;p&gt;
&lt;p&gt;แต่บทต้องทำ spatial operations ทุกคนใน polars ecosystem พร้อมใจกันไปยืมมือ geopandas&lt;&#x2F;p&gt;
&lt;p&gt;โดยเฉพาะตอนอ่าน geoparquet สุดท้ายโดนไล่ไปคุยผ่าน geopandas parquet reader ตายที่ parsing bottleneck อยู่ดี&lt;&#x2F;p&gt;
&lt;p&gt;WKB&#x2F;WKT&#x2F;geometry column อีกล้านแปด ที่แต่ละ implementation คุยกันคนละอย่าง เพราะแต่ละยี่ห้อมอง geometry column คนละแบบ&lt;&#x2F;p&gt;
&lt;p&gt;แต่ถ้าเจ็บทีเดียวแต่จบ จะแนะนำ spark sedona เล่นใหญ่หน่อย แต่จบทุกงานจริงๆ&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-25</title>
          <pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-25/</link>
          <guid>https://karnwong.me/microblog/2025-08-25/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-25/">&lt;p&gt;Services และ tools ต่างๆ ที่ใช้ ให้ความสำคัญกับ privacy ไม่เท่ากัน อันนี้ก็แล้วแต่ว่ายอมรับกันได้ขนาดไหน
ความเป็นจริงคือ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;email: ยังไงก็ต้องติดต่อกับชาวบ้าน ถ้าเป็น email provider ที่มี video call ผูกมาด้วย ไปสมัครติดไว้ก็ดี จะได้ไม่ติดปัญหาตอนต้องเข้าประชุม&lt;&#x2F;li&gt;
&lt;li&gt;photos: immich รับจบ อันนี้รอดแบบสวยๆ&lt;&#x2F;li&gt;
&lt;li&gt;search engine: ยังไงก็ต้องใช้ google เพราะ search results ภาษาไทยบน duckduckgo ไม่ค่อยดี&lt;&#x2F;li&gt;
&lt;li&gt;file sharing: จริงๆ มีหลายตัวให้เลือกที่มี privacy ค่อนข้างสูง ความบันเทิงจะเกิดขึ้นตอนต้องแชร์แบบล็อกคน ก็จะเหนื่อยหน่อย เพราะคนก็จะไม่ค่อยอยากสมัคร platform ใหม่ เอาเป็นว่า services ปกติที่คนอื่นใช้กัน มีติดไว้บ้างก็ดี&lt;&#x2F;li&gt;
&lt;li&gt;messaging: ประเทศไทย messenger, line ครองเมือง จะใช้ signal ก็น่าจะติสท์ไปหน่อย (ส่วนตัวใช้ matrix แล้วผูก bridges เอา ติสท์กว่า?)&lt;&#x2F;li&gt;
&lt;li&gt;calendar: เคยลองถึงขั้นทำ caldav server เองแล้ว อย่าไปทางนี้ ไม่คุ้ม google calendar ดีสุดในสามโลกแล้ว&lt;&#x2F;li&gt;
&lt;li&gt;totp authenticator: จริงๆ ไม่ค่อยซีเรียส แต่ดูดีๆ ว่า export data ออกมาได้มั้ย ไม่งั้นจะร้องไห้กันตอนย้ายแอป&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;สำหรับ mobile os มีหลายอันให้เลือก เมื่อก่อนเคยลง android แบบที่เอา google services ออก แต่กลายเป็นว่าใช้ google maps ไม่ได้ open street map ใช้ดูทางหลักได้ แต่ปักร้านไม่ค่อยได้ เพราะอัพเดทไม่ทัน google maps และ จะใช้ mobile banking ไม่ได้&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ จะลองไป privacy แบบสุดโต่งก็ได้ แต่ก็จะแนะนำให้พกมือถืออีกเครื่องแบบปกติ จะได้ไม่ฉุกละหุกกับการใช้ชีวิต&lt;&#x2F;p&gt;
&lt;p&gt;เคยอ่านเจอว่าบางคนเวลาไปไหนมาไหนเอามือถือไว้ใน Faraday cage อันนั้นก็ทำถึง แต่ทำไมเราต้องเหนื่อยขนาดนี้นะ 😂&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-24</title>
          <pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-24/</link>
          <guid>https://karnwong.me/microblog/2025-08-24/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-24/">&lt;p&gt;Google ทำถึงอีกแล้ว เด็กเนิร์ดที่จริงใจ&lt;&#x2F;p&gt;
&lt;p&gt;เพราะฉะนั้น เลิกเถียงกันเถิด คนรัน datacenter ออกมาพูดแล้ว&lt;&#x2F;p&gt;
&lt;p&gt;ไมโครเวฟ 1 วินาที ยอมๆ เถอะ&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;blog&#x2F;products&#x2F;infrastructure&#x2F;measuring-the-environmental-impact-of-ai-inference&quot;&gt;https:&#x2F;&#x2F;cloud.google.com&#x2F;blog&#x2F;products&#x2F;infrastructure&#x2F;measuring-the-environmental-impact-of-ai-inference&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-18</title>
          <pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-18/</link>
          <guid>https://karnwong.me/microblog/2025-08-18/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-18/">&lt;p&gt;Norway ที่ไม่ใช่ Norway&lt;&#x2F;p&gt;
&lt;p&gt;Yes ที่ไม่ใช่ Yes&lt;&#x2F;p&gt;
&lt;p&gt;อยากลุ้นระทึกตอนเขียน yaml เชิญได้ที่สถานี kubernetes&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ohyaml.wtf&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.ohyaml.wtf&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-16</title>
          <pubDate>Sat, 16 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-16/</link>
          <guid>https://karnwong.me/microblog/2025-08-16/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-16/">&lt;p&gt;ส่วนตัวใช้ todo.txt มาน่าจะเกิน 10 ปีละ ก็ยังไม่ย้ายออก flexible สุดในสามโลกล่ะ&lt;&#x2F;p&gt;
&lt;p&gt;reminder ใช้วิธีปักใน calendar เอา อะไรที่ต้องทำแบบมี timeline เอาลง calendar ให้หมด&lt;&#x2F;p&gt;
&lt;p&gt;อะไรที่อยากทำ แต่ตอนไหนก็ได้ ก็ใช้วิธีดู calendar เอาว่าว่างช่วงไหน แล้ว block เวลาเคลียร์ task เป็นอันๆ ไป&lt;&#x2F;p&gt;
&lt;p&gt;หรือบางทีพอมีเวลาว่าง ก็เช็ค todo เอาว่าพอมีอะไรทำเสร็จภายในช่วงนั้นมั้ย&lt;&#x2F;p&gt;
&lt;p&gt;เจ๋งสุดคือใช้ผ่าน command line ได้&lt;&#x2F;p&gt;
&lt;p&gt;ท่าโกงอีกอัน คือ เวลาเขียนโค้ดแล้วต้องงอก todo ก็งอกใน terminal แบบไวๆ เอา แล้วค่อยมาไล่เก็บ&lt;&#x2F;p&gt;
&lt;p&gt;แต่ถ้าท่านี้ไม่เวิก ก็ไม่ว่ากัน หาท่าที่เวิกกับตัวเองให้เจอก็พอ&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.al3rez.com&#x2F;todo-txt-journey&quot;&gt;https:&#x2F;&#x2F;www.al3rez.com&#x2F;todo-txt-journey&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-15</title>
          <pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-15/</link>
          <guid>https://karnwong.me/microblog/2025-08-15/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-15/">&lt;p&gt;I gave jujutsu a few tries, still doesn&#x27;t click. But then I heavily use git staging area. I guess it makes sense in a way.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-11</title>
          <pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-11/</link>
          <guid>https://karnwong.me/microblog/2025-08-11/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-11/">&lt;p&gt;Been using Immich for a very long time, really love how the creator documents &quot;bugs&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;immich.app&#x2F;cursed-knowledge&#x2F;&quot;&gt;https:&#x2F;&#x2F;immich.app&#x2F;cursed-knowledge&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ใครที่ทำ product ตัวเดียวกันนานๆ จะโชคดีได้เจอ bugs ประหลาดๆ (ถ้าได้ engineer ที่ทำงานที่เดียวกันมาเกิน 2 ปี แล้วมีส่วนในการทำ features และเก็บ bugs ถือว่าเจอของดี คว้าไว้แน่นๆ นะ คนที่อยู่นานพอเก็บกวาดซากตัวเองไม่ได้มีเยอะ)&lt;&#x2F;p&gt;
&lt;p&gt;มีคนทำ product ตัวนึงมาหลายปีละ เขาจดบันทึกไว้ ว่า เจอผีอะไรบ้าง เป็น case study ที่ดี ว่า ใดๆ ก็ตามที่ต้องมาไล่เก็บ bugs ควรจดบันทึกไว้ ว่า ไปเจออะไรมา ถึงต้องแก้กันท่านี้&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;immich.app&#x2F;cursed-knowledge&#x2F;&quot;&gt;https:&#x2F;&#x2F;immich.app&#x2F;cursed-knowledge&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-07-1</title>
          <pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-07-1/</link>
          <guid>https://karnwong.me/microblog/2025-08-07-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-07-1/">&lt;p&gt;I write a lot of apps for personal use, ranging from gui, tui, mobile app.&lt;&#x2F;p&gt;
&lt;p&gt;In all cases, adjusting the layout and padding takes the longest time. No surprises here 🤣&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;พอดีเขียนแอปใช้เองเยอะ มีหมดทั้ง gui, tui, mobile&lt;&#x2F;p&gt;
&lt;p&gt;ส่วนที่กินเวลานานสุด เหมือนกันทุกเคส คือ การจัดหน้า,ช่องไฟ, layout&lt;&#x2F;p&gt;
&lt;p&gt;เบอร์ที่อย่าคาดหวังกับ LLM เพราะยังไงก็ต้องเก็บรายละเอียดเอง&lt;&#x2F;p&gt;
&lt;p&gt;(จะบอกว่างานส่วนอื่นไม่เจอเคสแนวๆ นี้ก็ไม่น่าใช่ เพราะคนดาต้าก็สติแตกกับทศนิยมอยู่ ว่า แต่ละจุดที่ดาต้าไหลไป มีใครมือลั่นแปลงทศนิยมมั้ย)&lt;&#x2F;p&gt;
&lt;p&gt;(งาน ops ก็กรี๊ดกันตอนที่ naming convention ของแต่ละ resources ไม่ตรงกัน บางอันถ้าจะเปลี่ยนชื่อต้องทุบทิ้งแล้วขึ้นใหม่สถานเดียว)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-07-2</title>
          <pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-07-2/</link>
          <guid>https://karnwong.me/microblog/2025-08-07-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-07-2/">&lt;p&gt;Been trying to find activity recovery time on my garmin (or the app) to no avail.&lt;&#x2F;p&gt;
&lt;p&gt;But then you can retrieve the value via garmin connect sdk.&lt;&#x2F;p&gt;
&lt;p&gt;Yup, I added it to my custom watchface.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-05-1</title>
          <pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-05-1/</link>
          <guid>https://karnwong.me/microblog/2025-08-05-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-05-1/">&lt;p&gt;Found this gem while looking through garmin connect sdk.&lt;&#x2F;p&gt;
&lt;p&gt;At first I thought maybe it&#x27;s for Thai numbers? But I don&#x27;t think people are mad enough to do that.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ไถ garmin connect sdk แล้วเจอว่า มี config ชื่อ FONT_NUMBER_THAI_HOT ด้วย
ตอนแรกงง ว่า ฟ้อนเลขไทยเหรอ แต่ใครจะบ้า localize เลขไทย!!!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;karnwong.me&#x2F;microblog&#x2F;2025-08-05-1&#x2F;images&#x2F;2025-08-05.webp&quot; alt=&quot;garmin-thai-hot&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-05-2</title>
          <pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-05-2/</link>
          <guid>https://karnwong.me/microblog/2025-08-05-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-05-2/">&lt;p&gt;That moment when you are in deep focus mode but you need to cook.&lt;&#x2F;p&gt;
&lt;p&gt;The struggle is real.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-08-01</title>
          <pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-08-01/</link>
          <guid>https://karnwong.me/microblog/2025-08-01/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-08-01/">&lt;p&gt;The lengths I go to not have to fish out my phone out to check for stuff, yup - I wrote my own garmin apps to display qrcode and my todo list.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สองสามวันนี้นั่งคลำๆ Garmin Connect SDK เขียนแอปใช้เอง เพราะความขี้เกียจขั้นสุดที่ไม่อยากเอามือถือออกจากกระเป๋าเวลาต้องการดูอะไรไวๆ&lt;&#x2F;p&gt;
&lt;p&gt;Print statement ก็ยังคงใช้ debug ได้ทุกอย่าง&lt;&#x2F;p&gt;
&lt;p&gt;เจ็บกระดองใจตรงที่โดนวางยา ตอนยิง imageRequest มันไม่ยอมส่ง headers ให้ เลยต้องไปอ้อมใช้ apiKey ผ่าน queryParams แทน&lt;&#x2F;p&gt;
&lt;p&gt;ลงทุนเขียน app เอาไว้ดู qr code แค่นั้นเลย (มีหลังบ้านแยก ไปส่องดูได้ใน github)&lt;&#x2F;p&gt;
&lt;p&gt;มีทำไว้อีกอัน คือ เอาไว้ดู todo list (คนรอบตัวที่ยังคบกันอยู่ทุกวันนี้คงทำใจแล้วล่ะ ว่ายังไงก็เลิก DIY ไม่ได้ 55555)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-27</title>
          <pubDate>Sun, 27 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-27/</link>
          <guid>https://karnwong.me/microblog/2025-07-27/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-27/">&lt;p&gt;ใน bluesky มีคนถามว่า ใช้ llm ช่วยเขียน IaC (จะ terraform หรือ pulumi ก็แล้วแต่ศรัทธา) เวิกมั้ย&lt;&#x2F;p&gt;
&lt;p&gt;มันก็ช่วยทุ่นแรงได้ แต่ไล่เช็ค config ทุกจุดก็ดี ว่า ตรงตามที่ต้องการมั้ย&lt;&#x2F;p&gt;
&lt;p&gt;typo นิดเดียว อาจจะหมดตัวได้ตอนปัก machine size&lt;&#x2F;p&gt;
&lt;p&gt;ทั้งนี้ ถ้าใช้ ui หรือ web console สร้าง infra ไม่เป็น&lt;&#x2F;p&gt;
&lt;p&gt;IaC ไม่ใช่วิธีแก้ปัญหา จะงงกว่าเดิมด้วย เพราะมันไม่มี wizard ช่วยดัก control flow&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-24</title>
          <pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-24/</link>
          <guid>https://karnwong.me/microblog/2025-07-24/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-24/">&lt;p&gt;When you can write python and other languages, you might find yourself accidentally prototype in python, then rewrite in another language.&lt;&#x2F;p&gt;
&lt;p&gt;I am guilty of this, been doing this a lot with my projects, oops.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สิ่งที่จะเกิดขึ้น เมื่อเขียน python คล่องพอๆ กับภาษาอื่น คือ&lt;&#x2F;p&gt;
&lt;p&gt;จะมีการหลวมตัวเผา prototype ใน python แล้วค่อยไป rewrite ใหม่ในภาษาที่มีการทำ typing ดีๆ&lt;&#x2F;p&gt;
&lt;p&gt;ทำมากับหลายโปรเจคจนเห็น pattern ตัวเอง&lt;&#x2F;p&gt;
&lt;p&gt;ความเผลอมีอยู่จริง 🫣&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-23</title>
          <pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-23/</link>
          <guid>https://karnwong.me/microblog/2025-07-23/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-23/">&lt;p&gt;Was renaming env var and my IDE updated it in my sops file, and it bricked the file. Good to know that the key name is taken into the checksum as well.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-17</title>
          <pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-17/</link>
          <guid>https://karnwong.me/microblog/2025-07-17/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-17/">&lt;p&gt;Recently gave a talk about IaC and FinOps. People couldn&#x27;t agree on who should own cloud cost optimization initiative. But if you ask me, it&#x27;s a team sport :)&lt;&#x2F;p&gt;
&lt;p&gt;Also, if finance isn&#x27;t monitoring the numbers, high cloud costs would be the least of your worries.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;ops-ver-dot-se-infrastructure-as-code-and-business-values&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;ops-ver-dot-se-infrastructure-as-code-and-business-values&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สไลด์จากงาน OpsVer.se&lt;&#x2F;p&gt;
&lt;p&gt;ส่วนตัวมี pain point ว่า งาน cost optimization ไม่ค่อยมีเจ้าภาพชัดเจน เพราะ finance ก็บอกว่าจ่ายเยอะไป ต้องลด แต่ฝั่ง IT&#x2F;dev ก็จะบอกว่า ก็มันต้องใช้เท่านี้ ไม่งั้นติดเรื่อง SLA&lt;&#x2F;p&gt;
&lt;p&gt;gap จริงๆ คือ คนที่เข้าใจ cloud economics และสามารถคุยได้กับทั้ง finance &#x2F; IT &#x2F; dev มีน้อยมาก พอคุยกันคนละภาษา เลยไม่มีอะไรเดินหน้า ทุกอย่างคงไว้เป็น status quo&lt;&#x2F;p&gt;
&lt;p&gt;แต่จริงๆ ทุกฝ่ายสามารถช่วยกันได้ คนละไม้คนละมือ เพราะ finops คืองานกลุ่ม&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ ควรขอบคุณทาง finance ที่ช่วยดูว่า สายป่านของบริษัทยาวพอมั้ย ไม่งั้นค่า cloud แพงนี่คือเรื่องเล็กไปเลย&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;ops-ver-dot-se-infrastructure-as-code-and-business-values&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;ops-ver-dot-se-infrastructure-as-code-and-business-values&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-14</title>
          <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-14/</link>
          <guid>https://karnwong.me/microblog/2025-07-14/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-14/">&lt;p&gt;I&#x27;m in the &quot;labels don&#x27;t define your camp&quot; in case it isn&#x27;t obvious. But you are more than the sum of all parts.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.freyaindia.co.uk&#x2F;p&#x2F;nobody-has-a-personality-anymore&quot;&gt;https:&#x2F;&#x2F;www.freyaindia.co.uk&#x2F;p&#x2F;nobody-has-a-personality-anymore&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-07-12</title>
          <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-07-12/</link>
          <guid>https://karnwong.me/microblog/2025-07-12/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-07-12/">&lt;p&gt;Recently gave a talk about WASM. Mostly a tour on deployment infrastructure 😛&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;bkk-dot-js-number-23-intro-to-wasm&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;bkk-dot-js-number-23-intro-to-wasm&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;สไลด์ของวันก่อนที่ไปแชร์เกี่ยวกับ WASM มา&lt;&#x2F;p&gt;
&lt;p&gt;มีคนถามเยอะ ว่า ตอนไหนควรใช้ WASM&lt;&#x2F;p&gt;
&lt;p&gt;เลยมีเพิ่มหน้าเล็กน้อย&lt;&#x2F;p&gt;
&lt;p&gt;จริงๆ คือพาทัวร์ ว่า ตอน production ใช้ท่าไหนได้บ้าง&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;bkk-dot-js-number-23-intro-to-wasm&quot;&gt;https:&#x2F;&#x2F;speakerdeck.com&#x2F;kahnwong&#x2F;bkk-dot-js-number-23-intro-to-wasm&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-06-26</title>
          <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-06-26/</link>
          <guid>https://karnwong.me/microblog/2025-06-26/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-06-26/">&lt;p&gt;Finally! Back then we had to manually assign lochash to all datasets we have to join, and it&#x27;s a lot of stuff to keep track!&lt;&#x2F;p&gt;
&lt;p&gt;H3 makes things better but still it&#x27;s not as smooth as I&#x27;d like it to be. Data mapping is messy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;overturemaps.org&#x2F;announcements&#x2F;2025&#x2F;overture-maps-launches-gers-a-global-standard-for-interoperable-geospatial-ids-to-drive-data-interoperability&#x2F;&quot;&gt;https:&#x2F;&#x2F;overturemaps.org&#x2F;announcements&#x2F;2025&#x2F;overture-maps-launches-gers-a-global-standard-for-interoperable-geospatial-ids-to-drive-data-interoperability&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ชาว GIS จะสบายแล้ว&lt;&#x2F;p&gt;
&lt;p&gt;เมื่อก่อนจะเอาแต่ละอย่างมาผูกกัน ต้องไล่เช็ค zoom level (สมัยก่อนมี H3) แล้วต้องตี grid กะให้ขนาดพอดี แล้วงอก mapping column มาผูกกันข้าม dataset&lt;&#x2F;p&gt;
&lt;p&gt;join แล้ว join อีก join จนท้อ กว่าข้อมูลจะพร้อมให้เอาไปแงะ (เหนื่อยอีกทีตอนเช็คว่า ผูกตรงกันมั้ย กับ ทุก dataset)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;overturemaps.org&#x2F;announcements&#x2F;2025&#x2F;overture-maps-launches-gers-a-global-standard-for-interoperable-geospatial-ids-to-drive-data-interoperability&#x2F;&quot;&gt;https:&#x2F;&#x2F;overturemaps.org&#x2F;announcements&#x2F;2025&#x2F;overture-maps-launches-gers-a-global-standard-for-interoperable-geospatial-ids-to-drive-data-interoperability&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-06-25</title>
          <pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-06-25/</link>
          <guid>https://karnwong.me/microblog/2025-06-25/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-06-25/">&lt;p&gt;I&#x27;m eval-ing a tool where you can upload artifacts to it. The docs say you can use toolA, toolB, toolC to upload, but it doesn&#x27;t mention anywhere that you can also use toolX for this (and toolX is more popular and widely used). Very turf war vibe.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-06-24</title>
          <pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-06-24/</link>
          <guid>https://karnwong.me/microblog/2025-06-24/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-06-24/">&lt;p&gt;Recalled this prod story.&lt;&#x2F;p&gt;
&lt;p&gt;Had to restart a container on a vm to update its config (can also be changed via ui). Previous guy set it up, and he left the org by then, luckily we can ssh into the vm. We restarted container, only to find out that the &lt;code&gt;docker run command&lt;&#x2F;code&gt; didn&#x27;t mount volumes. OOF.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;วันนี้มีคนถามว่าจะ migrate gitlab on-prem ไปบน cloud vm ยังไง เลยนึกถึงเรื่องนี้&lt;&#x2F;p&gt;
&lt;p&gt;หลายปีมาแล้ว production service ต้อง restart เพราะมีการแก้ config ก็คือเอาไฟล์ใหม่ไปยัดแล้ว restart service น่ะแหละ (มันแก้จาก web ui ก้ได้ หรือปักไฟล์ให้อ่านก้ได้เหมือนกัน)&lt;&#x2F;p&gt;
&lt;p&gt;คนขึ้นไว้ออกไปแล้ว ยังดี ssh เข้าไปที่ vm ได้&lt;&#x2F;p&gt;
&lt;p&gt;เข้าไปปุ๊ป มี docker รันทิ้งไว้อยู่ แต่เป็นการรันแบบ docker run ... ตรงๆ ไม่ได้มี docker compose อันนี้ไม่เท่าไหร่&lt;&#x2F;p&gt;
&lt;p&gt;ที่พีค คือ มันเป็น stateful service คือต้องมีการ mount volume ไว้ แต่ เจ้า container ที่รันทิ้งไว้ ไม่ได้ mount volume ไว้......&lt;&#x2F;p&gt;
&lt;p&gt;แล้วดัน restart ไปแล้วด้วย ใครแก้อะไรไปบ้างไม่รู้ ที่แน่ๆ ตอนนั้นทำได้แค่เอาของที่ dev ส่งให้ล่าสุดไป mount คาไว้ก่อน แล้วรอโดนลูกค้าสวด&lt;&#x2F;p&gt;
&lt;p&gt;เรื่องนี้สอนให้รู้ว่า ของที่ระลึกบางอย่าง ไม่ต้องทิ้งไว้ให้ก็ได้&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-05-07</title>
          <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-05-07/</link>
          <guid>https://karnwong.me/microblog/2025-05-07/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-05-07/">&lt;p&gt;Poking holes into websites is my version of fun. People act like I grow two heads when I say I do it to relieve stress.&lt;&#x2F;p&gt;
&lt;p&gt;Oops.&lt;&#x2F;p&gt;
&lt;p&gt;And when I deploy a lot of new services to my kube cluster at home, yup that’s my peak stress and I need to let off some steam.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-04-02</title>
          <pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-04-02/</link>
          <guid>https://karnwong.me/microblog/2025-04-02/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-04-02/">&lt;p&gt;Happy to say I&#x27;m a direnv convert. No more setting up dotenv for every project I work on is a godsend (and especially when you write in multiple languages this gets old real fast).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-03-15</title>
          <pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-03-15/</link>
          <guid>https://karnwong.me/microblog/2025-03-15/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-03-15/">&lt;p&gt;I had this android tablet since 2019-ish, the last official update was android 8, so I thought why not flash Lineage on it.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out I can&#x27;t unlock bootloader because the [device region] and [account region] are not the same.&lt;&#x2F;p&gt;
&lt;p&gt;Yup, no longer buying devices from this manufacturer.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-02-21</title>
          <pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-02-21/</link>
          <guid>https://karnwong.me/microblog/2025-02-21/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-02-21/">&lt;p&gt;Was writing down vendors list from a security conference I attended last month.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s this one vendor, where their website at &lt;code&gt;www&lt;&#x2F;code&gt; is fine, but if you access it without leading www, it shows you an admin page. Hoo boy.&lt;&#x2F;p&gt;
&lt;p&gt;And their SSL cert is not valid!!!!! 😬&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-02-11</title>
          <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-02-11/</link>
          <guid>https://karnwong.me/microblog/2025-02-11/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-02-11/">&lt;p&gt;It&#x27;s very amazing with the amount of work put into Proton engine for running windows games on linux.&lt;&#x2F;p&gt;
&lt;p&gt;I installed a game from 2015-ish with native linux port - the screen stutters when I move the camera, and it crashes very often. But if I run this game through Proton, zero issues!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-02-06</title>
          <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-02-06/</link>
          <guid>https://karnwong.me/microblog/2025-02-06/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-02-06/">&lt;p&gt;I&#x27;ll never forget that time when my Intel NUC was running hot on idle (70 C). I removed a lot of workloads from it, still high temp.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out the culprit was accumulated dust. Turned it off, blow it from every angle. Lo and behold, the idle temp is now at 50 C.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-02-01</title>
          <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-02-01/</link>
          <guid>https://karnwong.me/microblog/2025-02-01/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-02-01/">&lt;p&gt;Upside from running Linux as my desktop setup is that I never run into BSOD.&lt;&#x2F;p&gt;
&lt;p&gt;Compared to when it was running Windows, occasionally it would get BSOD, sometimes in a middle of a gaming session 🥹&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-01-30-1</title>
          <pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-01-30-1/</link>
          <guid>https://karnwong.me/microblog/2025-01-30-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-01-30-1/">&lt;p&gt;I set up a custom-domain email for my family to use (name@lastname.com)&lt;&#x2F;p&gt;
&lt;p&gt;a year went by, and I got a request to &quot;shorten&quot; the email address&quot;&lt;&#x2F;p&gt;
&lt;p&gt;The part they want it to become shorter is, you guessed it, the &quot;domain&quot; part&lt;&#x2F;p&gt;
&lt;p&gt;She wanted it to be just $name@wong.com&lt;&#x2F;p&gt;
&lt;p&gt;You see where this is going 🤣&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-01-30-2</title>
          <pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-01-30-2/</link>
          <guid>https://karnwong.me/microblog/2025-01-30-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-01-30-2/">&lt;p&gt;Recently discovered the existence of QUIC and HTTP3. Modern, yes. Standardized, yes.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out caddy&#x27;s default already utilizes HTTP3. Modern technology is awesome. Gone were the days of manually setting up SSL and auto-renew cron.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-01-26-1</title>
          <pubDate>Sun, 26 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-01-26-1/</link>
          <guid>https://karnwong.me/microblog/2025-01-26-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-01-26-1/">&lt;p&gt;With pixi I can finally remove pyenv from my setup.&lt;&#x2F;p&gt;
&lt;p&gt;Previously needed it to use mamba for installing qgis on ARM mac for geoparquet support&lt;&#x2F;p&gt;
&lt;p&gt;Which means you only need two lines to install qgis via conda:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;curl -fsSL pixi.sh&#x2F;install.sh | bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pixi global install qgis&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;2025 is awesome&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-01-26-2</title>
          <pubDate>Sun, 26 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-01-26-2/</link>
          <guid>https://karnwong.me/microblog/2025-01-26-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-01-26-2/">&lt;p&gt;Very impressed with flox - dev venv standing on nix ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;Especially with the fact that it auto detects your project language &amp;amp; runtime means you do not have to setup the flox env from scratch, yay devx.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ถ้าคุณเป็นคนที่ประสาทจะกินกับการเซ็ตคอมของเดฟทุกคนในทีม&lt;&#x2F;p&gt;
&lt;p&gt;หรือ ตบตีปัญหา dev env ที่ไม่เคยตรงกันซักเครื่อง&lt;&#x2F;p&gt;
&lt;p&gt;แต่จะไปไล่เซ็ตทุกอย่างเป็น setup script ก็ไม่ได้ว่างขนาดนั้น&lt;&#x2F;p&gt;
&lt;p&gt;อยากใช้ nix แต่เซ็ตอัพไม่ง่ายสำหรับน้องๆ ในทีม&lt;&#x2F;p&gt;
&lt;p&gt;ขอแนะนำ flox - รมณ์ประมาณ nix แบบ venv&lt;&#x2F;p&gt;
&lt;p&gt;เจ๋งอย่าง คือ flox auto detect language + runtime จาก source code แล้วปั้น flox config มาให้ในระดับนึงแล้ว ชีวิตจะได้สบาย&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2025-01-23</title>
          <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2025-01-23/</link>
          <guid>https://karnwong.me/microblog/2025-01-23/</guid>
          <description xml:base="https://karnwong.me/microblog/2025-01-23/">&lt;p&gt;A few weeks back I was optimizing my website to reduce total size. Turns out google analytics took up 300 KB alone. Yeet it out and my homepage is reduced to 130 KB. Yay optimization!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2024-12-27-1</title>
          <pubDate>Fri, 27 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2024-12-27-1/</link>
          <guid>https://karnwong.me/microblog/2024-12-27-1/</guid>
          <description xml:base="https://karnwong.me/microblog/2024-12-27-1/">&lt;p&gt;Migrated my site from hugo to zola this week, gotta say using python to convert frontmatter to toml is kinda cheating.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2024-12-27-2</title>
          <pubDate>Fri, 27 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2024-12-27-2/</link>
          <guid>https://karnwong.me/microblog/2024-12-27-2/</guid>
          <description xml:base="https://karnwong.me/microblog/2024-12-27-2/">&lt;p&gt;Migrated authentik to pi4, because it should be in a landing zone. On initial access it took around 5 seconds to load, oof.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2024-12-25</title>
          <pubDate>Wed, 25 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2024-12-25/</link>
          <guid>https://karnwong.me/microblog/2024-12-25/</guid>
          <description xml:base="https://karnwong.me/microblog/2024-12-25/">&lt;p&gt;Installed Ubuntu on Mac Mini 2018 only to find out the WiFi driver is not supported. Thankfully there&#x27;s a whole wiki on how to install wireless drivers on T2 mac devices. It&#x27;s a warm and fuzzy feeling to know that the community is always there for your tech ailments.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2024-12-24</title>
          <pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://karnwong.me/microblog/2024-12-24/</link>
          <guid>https://karnwong.me/microblog/2024-12-24/</guid>
          <description xml:base="https://karnwong.me/microblog/2024-12-24/">&lt;p&gt;Was browsing HN and saw a thread about Proxmox shredding SSDs. Looking under the console and yup, it&#x27;s 13% degraded. It&#x27;s a used Mac Mini 2018 and only been used as Proxmox for a year.&lt;&#x2F;p&gt;
&lt;p&gt;I still love Proxmox, but I only use it to spin up scratch VMs. Maybe I&#x27;ll use the Mac Mini for distro hopping 😝&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
