<rss
      xmlns:atom="http://www.w3.org/2005/Atom"
      xmlns:media="http://search.yahoo.com/mrss/"
      xmlns:content="http://purl.org/rss/1.0/modules/content/"
      xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
      xmlns:dc="http://purl.org/dc/elements/1.1/"
      version="2.0"
    >
      <channel>
        <title><![CDATA[Block of Vaz]]></title>
        <description><![CDATA[Random thought of a System Engineer]]></description>
        <link>https://blog.siamstr.com/tag/siamdev/</link>
        <atom:link href="https://blog.siamstr.com/tag/siamdev/rss/" rel="self" type="application/rss+xml"/>
        <itunes:new-feed-url>https://blog.siamstr.com/tag/siamdev/rss/</itunes:new-feed-url>
        <itunes:author><![CDATA[VΔz]]></itunes:author>
        <itunes:subtitle><![CDATA[Random thought of a System Engineer]]></itunes:subtitle>
        <itunes:type>episodic</itunes:type>
        <itunes:owner>
          <itunes:name><![CDATA[VΔz]]></itunes:name>
          <itunes:email><![CDATA[VΔz]]></itunes:email>
        </itunes:owner>
            
      <pubDate>Fri, 04 Apr 2025 08:42:17 GMT</pubDate>
      <lastBuildDate>Fri, 04 Apr 2025 08:42:17 GMT</lastBuildDate>
      
      <itunes:image href="https://image.nostr.build/ba269bb842d8e1c6ada4ea3f9203aa570f1610cceeaca6a35c281f28274a914a.jpg" />
      <image>
        <title><![CDATA[Block of Vaz]]></title>
        <link>https://blog.siamstr.com/tag/siamdev/</link>
        <url>https://image.nostr.build/ba269bb842d8e1c6ada4ea3f9203aa570f1610cceeaca6a35c281f28274a914a.jpg</url>
      </image>
      <item>
      <title><![CDATA[ตั้งค่า Dark Theme สำหรับสาย Tilling Window Manager: darkman]]></title>
      <description><![CDATA[หากใครลองใช้ Linux แบบ Custom Windows Manger เองอย่าง Sway / i3 / bspwm จะทราบดีว่าการตั้งค่า Theme นั้นค่อนข้างยุ่งยาก และต้องจัดการเองทุกอย่างตั้งแต่หา Theme ที่จะใช้ บทความนี้จะใช้ `darkman` มาช่วยให้เราตั้งค่า Theme ได้สะดวกยิ่งขึ้น!]]></description>
             <itunes:subtitle><![CDATA[หากใครลองใช้ Linux แบบ Custom Windows Manger เองอย่าง Sway / i3 / bspwm จะทราบดีว่าการตั้งค่า Theme นั้นค่อนข้างยุ่งยาก และต้องจัดการเองทุกอย่างตั้งแต่หา Theme ที่จะใช้ บทความนี้จะใช้ `darkman` มาช่วยให้เราตั้งค่า Theme ได้สะดวกยิ่งขึ้น!]]></itunes:subtitle>
      <pubDate>Fri, 04 Apr 2025 08:42:17 GMT</pubDate>
      <link>https://blog.siamstr.com/post/gg-5vprd4cvzvqxjswqvc/</link>
      <comments>https://blog.siamstr.com/post/gg-5vprd4cvzvqxjswqvc/</comments>
      <guid isPermaLink="false">naddr1qq2kw3edx4m8qunyx33hvknk29vx5u6hw9myxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wlw4t8u</guid>
      <category>siamstr</category>
      
        <media:content url="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif" medium="image"/>
        <enclosure 
          url="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif" length="0" 
          type="image/gif" 
        />
      <noteId>naddr1qq2kw3edx4m8qunyx33hvknk29vx5u6hw9myxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wlw4t8u</noteId>
      <npub>npub1vaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qm45t60</npub>
      <dc:creator><![CDATA[VΔz]]></dc:creator>
      <content:encoded><![CDATA[<h2>darkman คืออะไร</h2>
<p><strong>Darkman</strong> เป็นโปรแกรมที่ช่วยควบคุมการเปลี่ยนโหมดสีของเดสก์ท็อประหว่างโหมดมืดและโหมดสว่างบนระบบปฏิบัติการ Unix-like. โปรแกรมนี้จะทำงานในเบื้องหลัง(background process) และสามารถตั้งค่าให้เปลี่ยนไปใช้โหมดมืดเมื่อพระอาทิตย์ตก หรือเปลี่ยนกลับไปใช้โหมดสว่างเมื่อพระอาทิตย์ขึ้นได้</p>
<h2>การทำงานของ Darkman</h2>
<p>เรียกใช้ผ่าน systemd service หรือคำสั่ง <code>darkman run</code> โดยตรงได้เลย</p>
<ol>
<li><strong>การตั้งค่าโหมด</strong>: Darkman สามารถตั้งค่าโหมดปัจจุบันเป็นโหมดมืดหรือโหมดสว่างได้ด้วยคำสั่ง <code>darkman set &lt;light|dark&gt;</code>.</li>
<li><strong>การตรวจสอบโหมดปัจจุบัน</strong>: สามารถตรวจสอบโหมดปัจจุบันได้ด้วยคำสั่ง <code>darkman get</code>.</li>
<li><strong>การสลับโหมด</strong>: สามารถสลับโหมดระหว่างโหมดมืดและโหมดสว่างได้ด้วยคำสั่ง <code>darkman toggle</code>.</li>
<li><strong>การทำงานอัตโนมัติ</strong>: Darkman จะทำงานอัตโนมัติโดยใช้ข้อมูลตำแหน่งที่ตั้งของระบบเพื่อกำหนดเวลาพระอาทิตย์ขึ้นและตก.</li>
<li><strong>การปรับแต่ง</strong>: สามารถเพิ่มสคริปต์เพื่อปรับแต่งการทำงานของโปรแกรมให้เข้ากับแอปพลิเคชันต่างๆ ได้.</li>
</ol>
<h2>การตั้งค่า darkman</h2>
<ol>
<li>สร้างไฟล์ <code>config.yaml</code> ในโฟลเดอร์ <code>~/.config/darkman/</code></li>
</ol>
<pre><code class="language-yaml">lat: 13.7563
lng: 100.5018 # ตำแหน่งกรุงเทพ
usegeoclue: false
dbusserver: true
portal: true
</code></pre>
<ol start="2">
<li>การตั้งค่า portal สำหรับ Darkman</li>
</ol>
<p>จะช่วยให้โปรแกรมสามารถเปลี่ยนโหมดสีของเดสก์ท็อปได้โดยใช้ XDG settings portal API.</p>
<p>2.1 สร้างไฟล์ portals.conf ในโฟลเดอร์ ~/.config/xdg-desktop-portal/</p>
<pre><code class="language-conf">[preferred]
org.freedesktop.impl.portal.Settings=darkman
</code></pre>
<p>2.1 รีสตาร์ท service xdg-desktop-portal เพื่อให้การตั้งค่าใหม่มีผล:</p>
<pre><code class="language-bash">systemctl --user restart xdg-desktop-portal
</code></pre>
<p>การตั้งค่านี้จะช่วยให้แอปพลิเคชันต่างๆ บนเดสก์ท็อปสามารถอ่านค่าโหมดสีจาก Darkman และปรับเปลี่ยนตามที่กำหนด.</p>
<ol start="3">
<li>Custom executables</li>
</ol>
<p>ใน Darkman สามารถเพิ่มการทำงานเพิ่มเติมเมื่อมีการเปลี่ยนโหมดสีของเดสก์ท็อป โดยการวางสคริปต์หรือโปรแกรมที่ต้องการในไดเรกทอรีที่กำหนด</p>
<p><strong>ไดเรกทอรีสำหรับ Custom executables</strong>:</p>
<ul>
<li><code>$XDG_DATA_DIRS/dark-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดมืด</li>
<li><code>$XDG_DATA_DIRS/light-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดสว่าง</li>
</ul>
<p><strong>ตัวอย่างการใช้งาน Custom executables</strong>:</p>
<ol>
<li><strong>สร้างสคริปต์สำหรับโหมดมืด</strong>:<ul>
<li>สร้างไฟล์ <code>set_dark_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/dark-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดมืด
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
notify-send "Dark Mode Activated"
</code></pre>
<ol start="2">
<li><strong>สร้างสคริปต์สำหรับโหมดสว่าง</strong>:<ul>
<li>สร้างไฟล์ <code>set_light_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/light-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดสว่าง
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
notify-send "Light Mode Activated"
</code></pre>
<ol start="3">
<li><strong>ตั้งค่าสิทธิ์การรันสคริปต์</strong>:<ul>
<li>ตั้งค่าสิทธิ์ให้สคริปต์สามารถรันได้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">chmod +x $XDG_DATA_DIRS/dark-mode.d/set_dark_mode.sh
chmod +x $XDG_DATA_DIRS/light-mode.d/set_light_mode.sh
</code></pre>
<p>เมื่อ Darkman เปลี่ยนโหมด สคริปต์เหล่านี้จะถูกเรียกใช้งานตามที่กำหนด</p>
<h3>การแก้ไขหากไม่พบ XDG_DATA_DIRS</h3>
<p>หากไม่พบตัวแปร <code>XDG_DATA_DIRS</code> คุณสามารถสร้างไดเรกทอรีที่จำเป็นเองได้ตามต้องการ โดยปกติแล้ว <code>XDG_DATA_DIRS</code> จะประกอบด้วยไดเรกทอรีเหล่านี้:</p>
<ul>
<li><code>~/.local/share/</code></li>
<li><code>/usr/local/share/</code></li>
<li><code>/usr/share/</code></li>
</ul>
<p>คุณสามารถสร้างไดเรกทอรีเหล่านี้และเพิ่มสคริปต์ของคุณได้ตามนี้:</p>
<ol>
<li><strong>สร้างไดเรกทอรี</strong>:<ul>
<li>สร้างไดเรกทอรีสำหรับโหมดมืดและโหมดสว่าง:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">mkdir -p ~/.local/share/dark-mode.d
mkdir -p ~/.local/share/light-mode.d
</code></pre>
<p><a href="https://github.com/vazw/dotfiles/tree/Void(wayland)/darkman">ตัวอย่าง Script ที่ผมใช้</a></p>
<ol start="2">
<li>ทำการ <strong>export XDG_DATA_DIRS</strong>:</li>
</ol>
<p>โดยทั่วไปเราสามารถตั้งตัวแปร Environments ต่าง ๆ ได้ที่ <code>~/.profile</code> และตัวแปรทั้งหมดจะถูกโหลดหลังจากเรา <strong>Login</strong></p>
<pre><code class="language-bash">export XDG_DATA_DIRS=$HOME/.local/share:/usr/local/share:/usr/share:$XDG_DATA_DIRS
</code></pre>
<p>Source: <a href="https://gitlab.com/WhyNotHugo/darkman">darkman</a></p>
]]></content:encoded>
      <itunes:author><![CDATA[VΔz]]></itunes:author>
      <itunes:summary><![CDATA[<h2>darkman คืออะไร</h2>
<p><strong>Darkman</strong> เป็นโปรแกรมที่ช่วยควบคุมการเปลี่ยนโหมดสีของเดสก์ท็อประหว่างโหมดมืดและโหมดสว่างบนระบบปฏิบัติการ Unix-like. โปรแกรมนี้จะทำงานในเบื้องหลัง(background process) และสามารถตั้งค่าให้เปลี่ยนไปใช้โหมดมืดเมื่อพระอาทิตย์ตก หรือเปลี่ยนกลับไปใช้โหมดสว่างเมื่อพระอาทิตย์ขึ้นได้</p>
<h2>การทำงานของ Darkman</h2>
<p>เรียกใช้ผ่าน systemd service หรือคำสั่ง <code>darkman run</code> โดยตรงได้เลย</p>
<ol>
<li><strong>การตั้งค่าโหมด</strong>: Darkman สามารถตั้งค่าโหมดปัจจุบันเป็นโหมดมืดหรือโหมดสว่างได้ด้วยคำสั่ง <code>darkman set &lt;light|dark&gt;</code>.</li>
<li><strong>การตรวจสอบโหมดปัจจุบัน</strong>: สามารถตรวจสอบโหมดปัจจุบันได้ด้วยคำสั่ง <code>darkman get</code>.</li>
<li><strong>การสลับโหมด</strong>: สามารถสลับโหมดระหว่างโหมดมืดและโหมดสว่างได้ด้วยคำสั่ง <code>darkman toggle</code>.</li>
<li><strong>การทำงานอัตโนมัติ</strong>: Darkman จะทำงานอัตโนมัติโดยใช้ข้อมูลตำแหน่งที่ตั้งของระบบเพื่อกำหนดเวลาพระอาทิตย์ขึ้นและตก.</li>
<li><strong>การปรับแต่ง</strong>: สามารถเพิ่มสคริปต์เพื่อปรับแต่งการทำงานของโปรแกรมให้เข้ากับแอปพลิเคชันต่างๆ ได้.</li>
</ol>
<h2>การตั้งค่า darkman</h2>
<ol>
<li>สร้างไฟล์ <code>config.yaml</code> ในโฟลเดอร์ <code>~/.config/darkman/</code></li>
</ol>
<pre><code class="language-yaml">lat: 13.7563
lng: 100.5018 # ตำแหน่งกรุงเทพ
usegeoclue: false
dbusserver: true
portal: true
</code></pre>
<ol start="2">
<li>การตั้งค่า portal สำหรับ Darkman</li>
</ol>
<p>จะช่วยให้โปรแกรมสามารถเปลี่ยนโหมดสีของเดสก์ท็อปได้โดยใช้ XDG settings portal API.</p>
<p>2.1 สร้างไฟล์ portals.conf ในโฟลเดอร์ ~/.config/xdg-desktop-portal/</p>
<pre><code class="language-conf">[preferred]
org.freedesktop.impl.portal.Settings=darkman
</code></pre>
<p>2.1 รีสตาร์ท service xdg-desktop-portal เพื่อให้การตั้งค่าใหม่มีผล:</p>
<pre><code class="language-bash">systemctl --user restart xdg-desktop-portal
</code></pre>
<p>การตั้งค่านี้จะช่วยให้แอปพลิเคชันต่างๆ บนเดสก์ท็อปสามารถอ่านค่าโหมดสีจาก Darkman และปรับเปลี่ยนตามที่กำหนด.</p>
<ol start="3">
<li>Custom executables</li>
</ol>
<p>ใน Darkman สามารถเพิ่มการทำงานเพิ่มเติมเมื่อมีการเปลี่ยนโหมดสีของเดสก์ท็อป โดยการวางสคริปต์หรือโปรแกรมที่ต้องการในไดเรกทอรีที่กำหนด</p>
<p><strong>ไดเรกทอรีสำหรับ Custom executables</strong>:</p>
<ul>
<li><code>$XDG_DATA_DIRS/dark-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดมืด</li>
<li><code>$XDG_DATA_DIRS/light-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดสว่าง</li>
</ul>
<p><strong>ตัวอย่างการใช้งาน Custom executables</strong>:</p>
<ol>
<li><strong>สร้างสคริปต์สำหรับโหมดมืด</strong>:<ul>
<li>สร้างไฟล์ <code>set_dark_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/dark-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดมืด
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
notify-send "Dark Mode Activated"
</code></pre>
<ol start="2">
<li><strong>สร้างสคริปต์สำหรับโหมดสว่าง</strong>:<ul>
<li>สร้างไฟล์ <code>set_light_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/light-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดสว่าง
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
notify-send "Light Mode Activated"
</code></pre>
<ol start="3">
<li><strong>ตั้งค่าสิทธิ์การรันสคริปต์</strong>:<ul>
<li>ตั้งค่าสิทธิ์ให้สคริปต์สามารถรันได้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">chmod +x $XDG_DATA_DIRS/dark-mode.d/set_dark_mode.sh
chmod +x $XDG_DATA_DIRS/light-mode.d/set_light_mode.sh
</code></pre>
<p>เมื่อ Darkman เปลี่ยนโหมด สคริปต์เหล่านี้จะถูกเรียกใช้งานตามที่กำหนด</p>
<h3>การแก้ไขหากไม่พบ XDG_DATA_DIRS</h3>
<p>หากไม่พบตัวแปร <code>XDG_DATA_DIRS</code> คุณสามารถสร้างไดเรกทอรีที่จำเป็นเองได้ตามต้องการ โดยปกติแล้ว <code>XDG_DATA_DIRS</code> จะประกอบด้วยไดเรกทอรีเหล่านี้:</p>
<ul>
<li><code>~/.local/share/</code></li>
<li><code>/usr/local/share/</code></li>
<li><code>/usr/share/</code></li>
</ul>
<p>คุณสามารถสร้างไดเรกทอรีเหล่านี้และเพิ่มสคริปต์ของคุณได้ตามนี้:</p>
<ol>
<li><strong>สร้างไดเรกทอรี</strong>:<ul>
<li>สร้างไดเรกทอรีสำหรับโหมดมืดและโหมดสว่าง:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">mkdir -p ~/.local/share/dark-mode.d
mkdir -p ~/.local/share/light-mode.d
</code></pre>
<p><a href="https://github.com/vazw/dotfiles/tree/Void(wayland)/darkman">ตัวอย่าง Script ที่ผมใช้</a></p>
<ol start="2">
<li>ทำการ <strong>export XDG_DATA_DIRS</strong>:</li>
</ol>
<p>โดยทั่วไปเราสามารถตั้งตัวแปร Environments ต่าง ๆ ได้ที่ <code>~/.profile</code> และตัวแปรทั้งหมดจะถูกโหลดหลังจากเรา <strong>Login</strong></p>
<pre><code class="language-bash">export XDG_DATA_DIRS=$HOME/.local/share:/usr/local/share:/usr/share:$XDG_DATA_DIRS
</code></pre>
<p>Source: <a href="https://gitlab.com/WhyNotHugo/darkman">darkman</a></p>
]]></itunes:summary>
      <itunes:image href="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif"/>
      </item>
      
      <item>
      <title><![CDATA[serde-derive มีปัญหาด้านประสิ…]]></title>
      <description><![CDATA[serde-derive มีปัญหาด้านประสิทธิภาพเนื่องจากเหตุผลหลายประการ:


โค้ดที่ซับซ้อนและซ้อนลึก: serde-derive สร้างโค้ดที่มีการเรียกใช้ฟังก์ชัน deserialize ซ้อนกันหลายชั้น ซึ่งทำให้เกิดการคัดลอกข้อมูล (memcpy) บ่อยครั้ง1.
การจัดการหน่วยความจำ: Rust และ…]]></description>
             <itunes:subtitle><![CDATA[serde-derive มีปัญหาด้านประสิทธิภาพเนื่องจากเหตุผลหลายประการ:


โค้ดที่ซับซ้อนและซ้อนลึก: serde-derive สร้างโค้ดที่มีการเรียกใช้ฟังก์ชัน deserialize ซ้อนกันหลายชั้น ซึ่งทำให้เกิดการคัดลอกข้อมูล (memcpy) บ่อยครั้ง1.
การจัดการหน่วยความจำ: Rust และ…]]></itunes:subtitle>
      <pubDate>Thu, 19 Dec 2024 07:27:01 GMT</pubDate>
      <link>https://blog.siamstr.com/post/note1qzanyqtt6ak6jsrys049fpe9smpcu4fftgyxqzk2jj8swfk6vq3s56h8r9/</link>
      <comments>https://blog.siamstr.com/post/note1qzanyqtt6ak6jsrys049fpe9smpcu4fftgyxqzk2jj8swfk6vq3s56h8r9/</comments>
      <guid isPermaLink="false">note1qzanyqtt6ak6jsrys049fpe9smpcu4fftgyxqzk2jj8swfk6vq3s56h8r9</guid>
      <category>2584</category>
      
      <noteId>note1qzanyqtt6ak6jsrys049fpe9smpcu4fftgyxqzk2jj8swfk6vq3s56h8r9</noteId>
      <npub>npub1vaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qm45t60</npub>
      <dc:creator><![CDATA[VΔz]]></dc:creator>
      <content:encoded><![CDATA[<p><code>serde-derive</code> มีปัญหาด้านประสิทธิภาพเนื่องจากเหตุผลหลายประการ:<br><br>1. <strong>โค้ดที่ซับซ้อนและซ้อนลึก</strong>: <code>serde-derive</code> สร้างโค้ดที่มีการเรียกใช้ฟังก์ชัน <code>deserialize</code> ซ้อนกันหลายชั้น ซึ่งทำให้เกิดการคัดลอกข้อมูล (memcpy) บ่อยครั้ง<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>2. <strong>การจัดการหน่วยความจำ</strong>: Rust และ LLVM ไม่เก่งในการทำ Return Value Optimization (RVO) ซึ่งทำให้การคัดลอกผลลัพธ์ของ <code>deserialize</code> กลับไปยังที่หมายปลายทางเกิดขึ้นบ่อยครั้ง<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>3. <strong>การสร้างผลลัพธ์หลายครั้ง</strong>: ในกรณีที่มีการ deserialize ข้อมูลประเภทเดียวกันหลายครั้ง มันจะสร้าง <code>Result&lt;T, _&gt;</code> แยกกันหลายครั้ง ซึ่งอาจทำให้เกิดปัญหาการใช้หน่วยความจำมากเกินไปและทำให้ stack overflow<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>4. <strong>ไม่สามารถทำงานขนานกันได้</strong>:  <code>serde-derive</code> มีการพึ่งพา chain ที่ไม่สามารถทำงานพร้อมกันได้ (sequential dependencies) ซึ่งหมายความว่าโค้ดที่สร้างขึ้นโดย serde-derive ต้องทำงานตามลำดับ ไม่สามารถทำงานหลายๆ อย่างพร้อมกันได้ (parallel execution) ทำให้เวลาในการคอมไพล์เพิ่มขึ้นและประสิทธิภาพลดลงในบางกรณี<br><br>ตัวอย่างเช่น ถ้าคุณมีหลายฟิลด์ที่ต้อง deserialize โค้ดที่สร้างขึ้นจะต้องทำการ deserialize ฟิลด์เหล่านั้นทีละฟิลด์ ไม่สามารถทำพร้อมกันได้ ซึ่งทำให้เกิดการหน่วงเวลาและใช้ทรัพยากรมากขึ้น<br><br>ดังนั้น <code>serde-derive</code> อาจไม่เหมาะสำหรับโค้ดที่ต้องการประสิทธิภาพสูง.<br><br><a href="https://github.com/serde-rs/serde/issues/2584">1</a>: <a href="https://github.com/serde-rs/serde/issues/2584">GitHub Issue <a href='/tag/2584/'>#2584</a></a><br><a href="https://github.com/serde-rs/serde/issues/2831">2</a>: <a href="https://github.com/serde-rs/serde/issues/2831">GitHub Issue <a href='/tag/2831/'>#2831</a></a><br><a href='/tag/siamstr/'>#siamstr</a> <a href='/tag/siamdev/'>#siamdev</a> <a href='/tag/rust/'>#rust</a></p>
]]></content:encoded>
      <itunes:author><![CDATA[VΔz]]></itunes:author>
      <itunes:summary><![CDATA[<p><code>serde-derive</code> มีปัญหาด้านประสิทธิภาพเนื่องจากเหตุผลหลายประการ:<br><br>1. <strong>โค้ดที่ซับซ้อนและซ้อนลึก</strong>: <code>serde-derive</code> สร้างโค้ดที่มีการเรียกใช้ฟังก์ชัน <code>deserialize</code> ซ้อนกันหลายชั้น ซึ่งทำให้เกิดการคัดลอกข้อมูล (memcpy) บ่อยครั้ง<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>2. <strong>การจัดการหน่วยความจำ</strong>: Rust และ LLVM ไม่เก่งในการทำ Return Value Optimization (RVO) ซึ่งทำให้การคัดลอกผลลัพธ์ของ <code>deserialize</code> กลับไปยังที่หมายปลายทางเกิดขึ้นบ่อยครั้ง<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>3. <strong>การสร้างผลลัพธ์หลายครั้ง</strong>: ในกรณีที่มีการ deserialize ข้อมูลประเภทเดียวกันหลายครั้ง มันจะสร้าง <code>Result&lt;T, _&gt;</code> แยกกันหลายครั้ง ซึ่งอาจทำให้เกิดปัญหาการใช้หน่วยความจำมากเกินไปและทำให้ stack overflow<a href="https://github.com/serde-rs/serde/issues/2584">1</a>.<br><br>4. <strong>ไม่สามารถทำงานขนานกันได้</strong>:  <code>serde-derive</code> มีการพึ่งพา chain ที่ไม่สามารถทำงานพร้อมกันได้ (sequential dependencies) ซึ่งหมายความว่าโค้ดที่สร้างขึ้นโดย serde-derive ต้องทำงานตามลำดับ ไม่สามารถทำงานหลายๆ อย่างพร้อมกันได้ (parallel execution) ทำให้เวลาในการคอมไพล์เพิ่มขึ้นและประสิทธิภาพลดลงในบางกรณี<br><br>ตัวอย่างเช่น ถ้าคุณมีหลายฟิลด์ที่ต้อง deserialize โค้ดที่สร้างขึ้นจะต้องทำการ deserialize ฟิลด์เหล่านั้นทีละฟิลด์ ไม่สามารถทำพร้อมกันได้ ซึ่งทำให้เกิดการหน่วงเวลาและใช้ทรัพยากรมากขึ้น<br><br>ดังนั้น <code>serde-derive</code> อาจไม่เหมาะสำหรับโค้ดที่ต้องการประสิทธิภาพสูง.<br><br><a href="https://github.com/serde-rs/serde/issues/2584">1</a>: <a href="https://github.com/serde-rs/serde/issues/2584">GitHub Issue <a href='/tag/2584/'>#2584</a></a><br><a href="https://github.com/serde-rs/serde/issues/2831">2</a>: <a href="https://github.com/serde-rs/serde/issues/2831">GitHub Issue <a href='/tag/2831/'>#2831</a></a><br><a href='/tag/siamstr/'>#siamstr</a> <a href='/tag/siamdev/'>#siamdev</a> <a href='/tag/rust/'>#rust</a></p>
]]></itunes:summary>
      
      </item>
      
      </channel>
      </rss>
    