<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My Program</title>
	<atom:link href="https://diary.tw/feed" rel="self" type="application/rss+xml" />
	<link>https://diary.tw</link>
	<description>我的程式, 我的觀點</description>
	<lastBuildDate>Sat, 06 Jun 2026 02:15:29 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://diary.tw/files/2020/11/cropped-my-program-icon-32x32.png</url>
	<title>My Program</title>
	<link>https://diary.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">185306385</site>	<item>
		<title>Squid Proxy的規則設定</title>
		<link>https://diary.tw/archives/2733</link>
					<comments>https://diary.tw/archives/2733#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Sat, 06 Jun 2026 01:52:52 +0000</pubDate>
				<category><![CDATA[好用軟體]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[policy]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2733</guid>

					<description><![CDATA[通常架設好 Squid Proxy 後, 用來做 Proxy 代理功能時, 會希望能限制可使用的來源 IP 或 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>通常架設好 Squid Proxy 後, 用來做 Proxy 代理功能時, 會希望能限制可使用的來源 IP 或是可訪問或不可訪問的 IP (除了做權限管控外, 還可以管理限制使用者可以訪問的目的網站).</p>
<p>今天有個需求是這樣的, 允許特定 IP 訪問特定的網站, 乍看下會這樣下:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="htaccess">acl AllowedIPs src 192.168.100.0/24
acl AllowedDomains dstdomain .google.com .yahoo.com
http_access allow AllowedIPs
http_access allow AllowedDomains
http_access deny all
</pre>
<p>但是這樣會變成 OR 的邏輯, 也就是只要白名單 IP, 或是白名單域名(包含子域名), 就會放行, 與原本需要的特定 IP 訪問特定網域不同.</p>
<p><span id="more-2733"></span></p>
<p>所以若是要 AND 的邏輯, 就必需寫在同一行如下:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="htaccess">acl AllowedIPs src 192.168.100.0/24 
acl AllowedDomains dstdomain .google.com .yahoo.com
http_access allow AllowedIPs AllowedDomains 
http_access deny all</pre>
<p>這樣就只有特定 IP 訪問特定網域時才能使用, 否則都會是 403回應囉.</p>
<p>這在設定內網存取外網時特別有用.</p>
<p>官方文件: <a href="https://www.squid-cache.org/Doc/" target="_blank" rel="noopener">https://www.squid-cache.org/Doc/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2733/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2733</post-id>	</item>
		<item>
		<title>如何檢測proxy工作是否正常</title>
		<link>https://diary.tw/archives/2728</link>
					<comments>https://diary.tw/archives/2728#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Sun, 31 May 2026 01:17:50 +0000</pubDate>
				<category><![CDATA[系統技術]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2728</guid>

					<description><![CDATA[若要檢測 proxy是否工作正常, 可以將 proxy設定在自己的瀏覽器中來進行, 並透過 IP查詢來看是否有 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>若要檢測 proxy是否工作正常, 可以將 proxy設定在自己的瀏覽器中來進行, 並透過 IP查詢來看是否有改變到 proxy server的IP就可以知道是否工作正常與正確設定完成.</p>
<p>不過若是想快速測試不想改動自己的 Browser設定, 可以用 curl 工具來進行測試, 說明如下:</p>
<p>正常不使用 Proxy的狀況來訪問:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">curl https://ip.diary.tw/</pre>
<p>可以問到自己的 IP. 若是要觀察 http header, 可以使用 -i, 會同時輸出 header 與察容, 或使用 -I來顯示 header only:</p>
<p><span id="more-2728"></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">curl -i https://ip.diary.tw/
curl -I https://ip.diary.tw/</pre>
<p>若是多加上 proxy server, 則多加上 -x 或是 &#8211;proxy 方式指定 proxy server, 後面再加上要查詢的網址:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">curl -x http://[username]:[password]@proxy.example.com:80 https://ip.diary.tw/</pre>
<p>若 proxy server有要驗證, 可以同時將 [username]:[password]寫上來直接帶入, 若沒有則可以省略, 若只要查詢 header only就組合上面的指令:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">curl -x http://[username]:[password]@proxy.example.com:80 -I https://ip.diary.tw/</pre>
<p>這樣就可以準確而快速地測試 proxy server是否能正常工作並協助你帶不同的出口 IP.</p>
<p>參考資料:</p>
<ul>
<li><a href="https://oxylabs.io/blog/curl-with-proxy" target="_blank" rel="noopener">https://oxylabs.io/blog/curl-with-proxy</a></li>
<li><a href="https://stackoverflow.com/questions/9445489/performing-http-requests-with-curl-using-proxy" target="_blank" rel="noopener">https://stackoverflow.com/questions/9445489/performing-http-requests-with-curl-using-proxy</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2728/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2728</post-id>	</item>
		<item>
		<title>使用自定義 x-signature 在Cloudflare中來保護API</title>
		<link>https://diary.tw/archives/2721</link>
					<comments>https://diary.tw/archives/2721#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Fri, 29 May 2026 16:48:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cloudflare]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2721</guid>

					<description><![CDATA[在 Cloudflare 中, 若是有一組自己的 API, 想要簡單地透過 Cloudflare 來保護, 有 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在 Cloudflare 中, 若是有一組自己的 API, 想要簡單地透過 Cloudflare 來保護, 有很多方法, 不過大多需要是付費的版本才能提供, 像是 API Shield.</p>
<p>若是想要快速而輕量地達成這個 API的保護, 可以透過 Worker 來檢查 x-signature 的 header 來實現.</p>
<p>在 Cloudflare 的 Workers &amp; Pages 介面,  Create application, 然後給定一個名稱如 api-check, 然後在右上角的 Edit Code 進入程式編輯器.</p>
<p>輸入以下程式碼:</p>
<p><span id="more-2721"></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">const EXPIRY_SECONDS = 300;

export default {
  async fetch(request, env, ctx) {
    // 1. 將您的秘密金鑰設定在環境變數 (安全起見建議後續設定為 Secret)
    const SECRET_KEY = env.API_SECRET_KEY;
    
    const url = new URL(request.url);
    const apiPath = url.pathname;
    const host = url.host;

    // 2. 擷取外部夥伴傳入的 X-Signature 標頭
    const xSignature = request.headers.get("X-Signature");
    if (!xSignature) {
      return new Response(JSON.stringify({ error: "Unauthorized: Missing X-Signature header" }), {
        status: 401,
        headers: { "Content-Type": "application/json" }
      });
    }

    // 3. 解析標頭格式 (預期格式: token-timestamp)
    const parts = xSignature.split("-");
    if (parts.length !== 2) {
      return new Response(JSON.stringify({ error: "Unauthorized: Invalid signature format" }), {
        status: 401,
        headers: { "Content-Type": "application/json" }
      });
    }
    const [clientToken, timestampStr] = parts;
    const clientTimestamp = parseInt(timestampStr, 10);

    // 4. 驗證時間戳記是否超時 (防止重放攻擊)
    const currentTimestamp = Math.floor(Date.now() / 1000);
    if (Math.abs(currentTimestamp - clientTimestamp) &gt; EXPIRY_SECONDS) {
      return new Response(JSON.stringify({ error: "Unauthorized: Signature expired" }), {
        status: 401,
        headers: { "Content-Type": "application/json" }
      });
    }

    // 5. 使用 Web Crypto API 在本端重新計算 HMAC-SHA256
    // 簽章組合公式：路徑 + 網域 + 時間戳記 (符合原 WAF v0 規範)
    const messageStr = `${apiPath}${host}${clientTimestamp}`;
    
    try {
      const encoder = new TextEncoder();
      const keyData = encoder.encode(SECRET_KEY);
      const messageData = encoder.encode(messageStr);

      const cryptoKey = await crypto.subtle.importKey(
        "raw",
        keyData,
        { name: "HMAC", hash: "SHA-256" },
        false,
        ["sign"]
      );

      const signatureBuffer = await crypto.subtle.sign("HMAC", cryptoKey, messageData);
      
      // 將計算結果轉為十六進位字串 (Hex)
      const serverToken = Array.from(new Uint8Array(signatureBuffer))
        .map(b =&gt; b.toString(16).padStart(2, '0'))
        .join('');

      // 6. 比對客戶端與伺服器端的 Token 是否一致
      if (clientToken !== serverToken) {
        return new Response(JSON.stringify({ error: "Unauthorized: Signature mismatch" }), {
          status: 401,
          headers: { "Content-Type": "application/json" }
        });
      }
    } catch (err) {
      return new Response(JSON.stringify({ error: "Internal Server Error during verification" }), {
        status: 500,
        headers: { "Content-Type": "application/json" }
      });
    }

    // 7. 驗證通過，將請求原封不動轉發 (Proxy) 給後端的真實源站
    // 註：fetch(request) 會保留原始的 URL、Header 與 Body
    return fetch(request);
  }
};</pre>
<p>其中的 <span class="enlighter-text">EXPIRY_SECONDS 就是限制這個 x-signature 效期只有 300 秒, 你可以依實際的狀況增加或減少這個過期秒數設定, 完成後按下 deploy.</span></p>
<p>然後我們要將這個程式中用到的 API_SECRET_KEY 放在 Workers &amp; Pages 的 Setting 中的 Variables, 所以按下左上角回到 Workers &amp; Pages 頁面, 切換到 Setting 頁籤, 在最上面的 Variables &amp; Secrets 中, add 一個 Secret 的變數, 內容請自訂, 如 x-123-456-789, 一樣要 deploy 即可, 到這裡完成 Workers 的程式準備.</p>
<p>接下來要透過 Domains 來綁定對應的 API 服務, 若你原本的 API 服務是在 myapi.example.com/api/v1/xxxx 這樣, 你可以在 Workers &amp; Pages 下的 Domains 中, Add Domain, 設定對應的主域名, 然後選擇 Route Pattern, 指定 myapi.example.com/api/* 這樣的路徑, 按下 add route 完成設定, 到這裡就把 server 端在 Cloudflare 上的配置設定完成了.</p>
<p>接下來就是 Client 的部分了, 由於有自定義了 x-signature header, 所以我們就是利用自己的程式來實作這個部分, 把 x-signature header 做出來, 再進行訪問即可, Python 程式如下:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import hmac
import hashlib
import time
import requests
from urllib.parse import urlparse

# 1. 設定基本資料
SECRET_KEY = "x-123-456-789"

api_url = "https://myapi.example.com/api/v1/users"

parsed_url = urlparse(api_url)
api_path = parsed_url.path
host = parsed_url.hostname

# 2. 取得當前 Unix 時間戳記 (秒)
current_time = int(time.time())

# 3. 依照 Cloudflare 規範組合簽章訊息 (路徑 + 時間戳記)
# message = f"{api_path}{current_time}"
message = f"{api_path}{host}{current_time}"

# 4. 使用 HMAC-SHA256 進行雜湊，並轉為十六進位字串
token = hmac.new(
    SECRET_KEY.encode('utf-8'),
    message.encode('utf-8'),
    hashlib.sha256
).hexdigest()

# 5. 將「Token」與「時間戳記」用格式 `token-timestamp` 組合起來
# 這是 Cloudflare is_timed_hmac_valid_v1 函數要求的標準格式
x_signature = f"{token}-{current_time}"

# 6. 帶入 Header 發出請求
headers = {
    "X-Signature": x_signature
}

response = requests.get(api_url, headers=headers)
print(response.json())</pre>
<p>其中的 SECRET_KEY 與前面 Cloudflare 中設的 API_SECRET_KEY 設定為一樣的就可以了, 這樣就可以在不傳遞 shared key, 又可以有效地透過這個簡易的 x-signature header 來訪問 API了.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2721/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2721</post-id>	</item>
		<item>
		<title>網路升級了-1G/600M</title>
		<link>https://diary.tw/archives/2716</link>
					<comments>https://diary.tw/archives/2716#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Wed, 27 May 2026 02:39:14 +0000</pubDate>
				<category><![CDATA[懶得分類]]></category>
		<category><![CDATA[BROADBAND]]></category>
		<category><![CDATA[Kbro]]></category>
		<category><![CDATA[UPLINK]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2716</guid>

					<description><![CDATA[Kbro 提供了 1G/600M 方案, 大幅提升了上行的速度, 家裡網路由原來的 1G/50M 升上來, 加 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Kbro 提供了 1G/600M 方案, 大幅提升了上行的速度, 家裡網路由原來的 1G/50M 升上來, 加一點點價就可以將上行升級 12倍, 非常划算.</p>
<p>來測速看看吧:</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-large wp-image-2717" src="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454-1024x951.png" alt="" width="580" height="539" srcset="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454-1024x951.png 1024w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454-300x279.png 300w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454-768x713.png 768w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454-1200x1114.png 1200w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-27-103454.png 1259w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p>很不錯的測速效果呢, 有架站的朋友可以試試吧!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2716/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2716</post-id>	</item>
		<item>
		<title>用Antigravity CLI繼續開發</title>
		<link>https://diary.tw/archives/2714</link>
					<comments>https://diary.tw/archives/2714#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Sun, 24 May 2026 16:09:39 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Antigravity CLI]]></category>
		<category><![CDATA[Gemini CLI]]></category>
		<category><![CDATA[Gemini Pro]]></category>
		<category><![CDATA[Google]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2714</guid>

					<description><![CDATA[繼之前的 Gemini CLI 開發 (請參考這篇 &#8211; https://diary.tw/arch [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>繼之前的 Gemini CLI 開發 (請參考這篇 &#8211; <a href="https://diary.tw/archives/2705" target="_blank" rel="noopener">https://diary.tw/archives/2705</a>), 由於最近的 Google I/O 大會, 宣佈了將下架 Gemini CLI, 轉到 Antigravity CLI, 所以我也得對應調整一下開發工具到 Antigravity CLI (簡稱 agy).</p>
<p>為了安裝 agy, 先看了一下官方資料, 原來必須先裝 Antigravity (IDE) 後才能安裝 Antigravity CLI (不過現在拿掉了 &#8211; <a href="https://antigravity.google/download#antigravity-cli" target="_blank" rel="noopener">https://antigravity.google/download#antigravity-cli</a>), 有兩件事我需要先確認才能將 Gemini CLI 轉到 Antigravity CLI:</p>
<ol>
<li>是否一定要 Antigravity (IDE)</li>
<li>是否仍可以使用連接 Gemini Pro 方案的帳戶而不只有 API連接方式</li>
</ol>
<p><span id="more-2714"></span></p>
<p>為了測試一下這兩個問題, 所以先開了一台 DigitalOcean VM 來安裝 Antigravity CLI:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">curl -fsSL https://antigravity.google/cli/install.sh | bash</pre>
<p>很快地就裝好了, 然後用 agy 指令啟動, 一樣可以連接 Gemini Pro 帳戶, 連接程序與原本 Gemini CLI 相同, 於是就接著測一下開發的功能, 發現很快很不錯, 而且是用 Gemini Flash 3.5 模型, 比原本在 Gemini  CLI 中的最高 Gemini Pro 3.1 還要新, 而且介面比原本的好, 原來的 Gemini CLI 是用 node js 寫的, Antigravity CLI 則是改用 Go 寫的, 看起來有對介面再優化過了, 所以雖然不得不, 但也算是升級了.</p>
<p>於是就放心在原本的開發環境來安裝, 很快裝好後, 連接 Google 帳戶完成, 繼續來開發原本的專案, 效果很不錯, 而且也更快更強大了, 非常推薦原本在用 Gemini CLI 的朋友們快來升級到 Antigravity CLI.</p>
<p>另外原本在 Gemini CLI 在美國上班的尖峰時間會慢的問題, 在 Antigravity CLI 目前還沒有這個狀況, 再加上可用的模型更多, 非常值得升級.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2714/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2714</post-id>	</item>
		<item>
		<title>Gemini CLI開發經驗分享</title>
		<link>https://diary.tw/archives/2705</link>
					<comments>https://diary.tw/archives/2705#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Mon, 04 May 2026 14:57:44 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[Vibe Coding]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2705</guid>

					<description><![CDATA[如之前這篇 https://diary.tw/archives/2689提到, 目前已是開通 Gemini A [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>如之前這篇 <a href="https://diary.tw/archives/2689" target="_blank" rel="noopener">https://diary.tw/archives/2689</a>提到, 目前已是開通 Gemini AI Pro 方案的狀況下, 想說來試看看 Gemini CLI 寫寫程式, 看看效果如何, 結果用起來還挺方便好用的.</p>
<p>從無到有打造一個程式, 不用半天的時間, 第一個寫的小程式是python 專案, 利用 speedtest-cli 來進行網路的測速, 並且記錄到 sqlite 資料庫, 再利用 streamlit (這個是 Gemini CLI建議的) 來進行 dashboard 的介面展示, 整個專案很快就完成了, 的確非常快速方便, 畫面如下:</p>
<p><img decoding="async" class="aligncenter size-large wp-image-2706" src="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-1024x733.png" alt="" width="580" height="415" srcset="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-1024x733.png 1024w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-300x215.png 300w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-768x550.png 768w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-1536x1099.png 1536w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553-1200x859.png 1200w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-224553.png 1649w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p><span id="more-2705"></span></p>
<p>於是就打算再來寫個更複雜一點的程式, 就是一個小型的社群網站, 這次就和 AI 互動比較多, 先討論規畫再實作, 於是用 Nodejs 與 Mysql (後來還加上了 Redis 可以加速快取) 來進行這個社群網站的開發, 做得來有模有樣的, 真的很不錯, 花了一共約 10多個小時 (分好幾天進行), 有個雛形出來了, 目前已有的功能有會員、好友、通知、發文(含相片、編輯、刪除)、留言、按讚、hashtag、後台管理等, 貼文中支援 markdown 語法、Youtube 連結會自動 embed youtube player 、Instagram 相片、reel 連結自動 embed 對應語法等功能, 會再持續增加更多的功能進行, 目前就想成一個都是公開內容的 facebook 吧!</p>
<p>一開始用還蠻順利的, 而且 quota 還蠻大的, 但是最近發現晚上 Gemini 反應速度大幅下降了, 白天還好, 所以可以多利用白天來進行或是就把指令給出讓它自行執行(RUN 在 tmux session 裡才不會登出), 這樣就可以用零散的時間來進行開發了.</p>
<p>有興趣的網友們可以玩看看, 也順便給些建議吧!</p>
<p>網址: <a href="https://socialnet.diary.tw/" target="_blank" rel="noopener">https://socialnet.diary.tw/</a></p>
<p><img decoding="async" class="aligncenter size-large wp-image-2707" src="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-225456-933x1024.png" alt="" width="580" height="637" srcset="https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-225456-933x1024.png 933w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-225456-273x300.png 273w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-225456-768x843.png 768w, https://diary.tw/files/2026/05/螢幕擷取畫面-2026-05-04-225456.png 1190w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2705/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2705</post-id>	</item>
		<item>
		<title>markdown轉換工具-markdown.new</title>
		<link>https://diary.tw/archives/2696</link>
					<comments>https://diary.tw/archives/2696#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 14:18:13 +0000</pubDate>
				<category><![CDATA[好用軟體]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[pdf]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2696</guid>

					<description><![CDATA[基本上在使用 AI 工具時, 希望能節省 context windows所使用的 token, 所以給 AI  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: left">基本上在使用 AI 工具時, 希望能節省 context windows所使用的 token, 所以給 AI 閱讀的內容盡量要文字化, 減少再次轉換的token消耗, 可以參考這篇:</p>
<p><a href="https://www.bnext.com.tw/article/90731/reduce-claude-token-usage-by-changing-habits-not-plan" target="_blank" rel="noopener">Claude老是達到用量上限？4個情境、9個技巧，教你有效縮減token</a></p>
<p>這裡有個好工具, 而且是 Cloudflare 提供的:</p>
<p><a href="https://markdown.new/" target="_blank" rel="noopener">https://markdown.new/</a></p>
<p>將提供給 AI 閱讀的內容進行 markdown 化, 舉例, 將某網頁內容 markdown化, 如下:</p>
<p><a href="https://markdown.new/https://diary.tw/archives/2559" target="_blank" rel="noopener">https://markdown.new/https://diary.tw/archives/2559</a></p>
<p>就可以將原來的 web page 內容轉為 markdown 的文檔格式, PDF 也可以哦, 如:</p>
<p><a href="https://jmh.mohw.gov.tw/storage/files/rUxcxnpNHJyTDBRGji1itnZYkQXEZmUIIWpAh2iS.pdf" target="_blank" rel="noopener">https://jmh.mohw.gov.tw/storage/files/rUxcxnpNHJyTDBRGji1itnZYkQXEZmUIIWpAh2iS.pdf</a></p>
<p>加上 markdown.new 後:</p>
<p><a href="https://markdown.new/https://jmh.mohw.gov.tw/storage/files/rUxcxnpNHJyTDBRGji1itnZYkQXEZmUIIWpAh2iS.pdf" target="_blank" rel="noopener">https://markdown.new/https://jmh.mohw.gov.tw/storage/files/rUxcxnpNHJyTDBRGji1itnZYkQXEZmUIIWpAh2iS.pdf</a></p>
<p>如此一來, 便能有效地將原本網頁或是 PDF檔式的檔案轉換成對 AI 較有效率的 markdown 格式了.</p>
<p><span id="more-2696"></span></p>
<p>另外若是需要其他的檔案格式轉換為 markdown, 一樣可以利用這個工具 &#8211; file to markdown:</p>
<p><a href="https://markdown.new/file-to-markdown" target="_blank" rel="noopener">https://markdown.new/file-to-markdown</a></p>
<p>支援 20多種的檔案格式, 如: PDF, DOCX, XLSX, images, CSV, JSON, TXT, XML 等. (不過若是 TXT 應該是不太需要再轉為 markdown 了, 因為已經很小了)</p>
<p>反之若有需要閱讀 markdown 的內容, 則可以使用這個 markdown viewer 工具:</p>
<p><a href="https://markdownviewer.pages.dev/" target="_blank" rel="noopener">https://markdownviewer.pages.dev/</a></p>
<p>[2026/5/5 11:02] 若是檔案不適合用線上工具，可以使用這個地端的轉換工具 Markitdow  <a href="https://github.com/microsoft/markitdown" target="_blank" rel="noopener">https://github.com/microsoft/markitdown</a></p>
<p>&nbsp;</p>
<p>繼續閱讀:</p>
<ul>
<li><a href="https://blog.cloudflare.com/markdown-for-agents/" target="_blank" rel="noopener">https://blog.cloudflare.com/markdown-for-agents/</a></li>
<li><a href="https://free.com.tw/markdown-new/" target="_blank" rel="noopener">https://free.com.tw/markdown-new/</a></li>
<li><a href="https://keychtouch.pixnet.net/blog/posts/869493618440938202" target="_blank" rel="noopener">https://keychtouch.pixnet.net/blog/posts/869493618440938202</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2696/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2696</post-id>	</item>
		<item>
		<title>被加到5TB的Google Drive</title>
		<link>https://diary.tw/archives/2689</link>
					<comments>https://diary.tw/archives/2689#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 01:33:35 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[drive]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[Google]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2689</guid>

					<description><![CDATA[昨天看到消息: https://www.techbang.com/posts/128668-google-ai [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>昨天看到消息: <a href="https://www.techbang.com/posts/128668-google-ai-pro-free-5tb-for-ai-creations" target="_blank" rel="noopener">https://www.techbang.com/posts/128668-google-ai-pro-free-5tb-for-ai-creations</a></p>
<p>由於原本一直是 Google One 的 200GB 每月 90元方案, 不過因為去年有台哥大的 Perplexity AI 一年方案, 已使用了一年, 剛好因為換 Google Pixel 10 Pro 手機, 也提供了一年的 Gemini AI Pro 方案, 所以變成了每個月 0元 2TB空間, 才剛用一個月不到, 馬上就被升級到 5TB, 這樣真的很划算耶, 空間大而且又有 Gemini AI Pro, 很划算耶.</p>
<p>剛登入 Google Drive 來看, 已經被升級到 5TB 空間了, 真棒!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2690" src="https://diary.tw/files/2026/04/20260403-google-drive.png" alt="" width="220" height="126" /></p>
<p>繼續閱讀:</p>
<ul>
<li><a href="https://applealmond.com/posts/308905" target="_blank" rel="noopener">https://applealmond.com/posts/308905</a></li>
<li><a href="https://tech.udn.com/tech/story/123454/9419221" target="_blank" rel="noopener">https://tech.udn.com/tech/story/123454/9419221</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2689/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2689</post-id>	</item>
		<item>
		<title>LLM Security Leaderboard大語言資安排行榜</title>
		<link>https://diary.tw/archives/2684</link>
					<comments>https://diary.tw/archives/2684#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 08:00:21 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[ranking]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2684</guid>

					<description><![CDATA[從這裡看來的: https://blogs.cisco.com/ai/llm-security-leaderb [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>從這裡看來的: <a href="https://blogs.cisco.com/ai/llm-security-leaderboard" target="_blank" rel="noopener">https://blogs.cisco.com/ai/llm-security-leaderboard</a></p>
<p>Cisco 透過技術方法來分析與檢討目前坊間的LLM大語言模型的資安能力, 希望透過這樣的方式來評估現有的LLM於應用時應該要補強或留意之處.</p>
<p>排行榜在這裡: <a href="https://leaderboard.aidefense.cisco.com/rankings" target="_blank" rel="noopener">https://leaderboard.aidefense.cisco.com/rankings</a></p>
<p>看起來 Anthropic 的 Opus, Sonnet, Haiku 都有不錯的表現, 其他大廠的LLM也都不惶多讓, 透過右上角的 All Models 的切換, 我們可以看到所有被測試的 LLM 表現.</p>
<p>測試的方法在這裡可以看到: <a href="https://leaderboard.aidefense.cisco.com/methodology" target="_blank" rel="noopener">https://leaderboard.aidefense.cisco.com/methodology</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2684/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2684</post-id>	</item>
		<item>
		<title>Facebook在第三方網站的按讚功能將下架了</title>
		<link>https://diary.tw/archives/2679</link>
					<comments>https://diary.tw/archives/2679#respond</comments>
		
		<dc:creator><![CDATA[tim]]></dc:creator>
		<pubDate>Sun, 14 Dec 2025 16:00:03 +0000</pubDate>
				<category><![CDATA[WebTrend]]></category>
		<category><![CDATA[comment]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Like]]></category>
		<category><![CDATA[Social Plugin]]></category>
		<guid isPermaLink="false">https://diary.tw/?p=2679</guid>

					<description><![CDATA[在 Facebook Developer Blog: https://developers.facebook. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在 Facebook Developer Blog: <a href="https://developers.facebook.com/blog/post/2025/11/10/platform-evolution-facebook-social-plugins-to-be-discontinued-february-2026" target="_blank" rel="noopener">https://developers.facebook.com/blog/post/2025/11/10/platform-evolution-facebook-social-plugins-to-be-discontinued-february-2026</a> 或是直接到這個按讚功能 (Facebook Like Button) 的 Social Plugin: <a href="https://developers.facebook.com/docs/plugins/like-button" target="_blank" rel="noopener">https://developers.facebook.com/docs/plugins/like-button</a> 都可以看到, 即將在 2026/2/10 下架這個陪伴我們許久的 Facebook Like Button 功能.</p>
<p>不過在 Facebook 的本身的網站或 APP 上, 不會受到影響, 會受到影響的是第三方網站上 Embed Facebook Like Button, 將會在 2026/2/10 之後, 變成一個 0x0 的圖像, 這樣的退場機制, 除了很優雅的不影響這個網站的呈現與排版外, 更重要的是, 一個時代的眼淚.</p>
<p>過去的 Web 2.0開始, 大量的網站互動, 使用者生成內容, 藉由社群媒體的力量來推廣與 Social Plugin 的互相串接, 讓在第三方網站上也可以看到這個 Facebook 的按讚功能, 隨著時間的演進, 官方也即將下架了, 之後這個在第三方網站上的按讚功能, 就再也看不到了呢!</p>
<p>另外還有 Comment Plugin 也是一樣會隨之下架, 所以後也都會看不到了呢.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://diary.tw/archives/2679/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2679</post-id>	</item>
	</channel>
</rss>
