<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6067556553711858174</id><updated>2026-10-16T01:45:18.281+08:00</updated><category term="android"/><category term="Linux"/><category term="Delphi"/><category term="PHP"/><category term="軟體筆記"/><category term="Database"/><category term="Kotlin"/><category term="英文"/><category term="python"/><category term="BI"/><category term="javascript"/><category term="jQuery"/><category term="手札"/><category term="LINE"/><category term="HTML5"/><category term="電腦硬體"/><category term="Flutter"/><category term="Gimp"/><category term="BASH"/><category term="CSS"/><category term="VisualStudioCode"/><category term="C#"/><category term="FPDF"/><category term="OpenVAS"/><category term="待探索"/><title type='text'>老灰鴨的筆記本</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>598</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-4060744003730561586</id><published>2026-10-16T01:40:03.209+08:00</published><updated>2026-10-16T01:45:00.539+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>AS1102TL NAS 跑 kokoro 生成日語 mp3 語音檔</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;參考資料 ----&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://github.com/hexgrad/kokoro&quot; target=&quot;_blank&quot;&gt;kokoro&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;mobaXterm&lt;/span&gt; 管理員權限登入 &lt;span style=&quot;font-family: courier;&quot;&gt;AS1102TL&lt;/span&gt;&lt;/p&gt;&lt;div&gt;要生成日語，需要 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;pyopenjtalk&lt;/span&gt;，下載並在 &lt;span style=&quot;font-family: courier;&quot;&gt;NAS&lt;/span&gt; 上進行編譯。&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 先在 AppCentral 找到 Entware 並安裝，這是 NAS 的套件管理
# 安裝的所有二進位檔、函式庫與標頭檔全都統一存放在 /opt（即 /volume1/.@plugins/AppCentral/entware/opt/）底下。
user$  opkg  update
user$  opkg  install  gcc  make  cmake

# The scripts cygdb, cython and cythonize are installed in &#39;/volume1/.@plugins/AppCentral/python3/bin&#39; which is not on PATH.

user$  export  TMPDIR=/volume1/tmp
user$  ~/.local/bin/pip3  install  cython  unidic-lite  --only-binary=:all:  --no-cache-dir


# 因為 pyopenjtalk 沒有提供適用於 ARM64 Linux + Python 3.12 的現成 Wheel 檔
# 所以要手動下載重新編譯
user$  cd /volume1/
# 建立暫存目錄 tmp
user$  mkdir  tmp
user$  cd  tmp
user$  mkdir  build_pyopenjtalk
user$  cd  build_pyopenjtalk
user$  ~/.local/bin/pip3  download  pyopenjtalk  --no-binary  :all:
# 本筆記下載了 pyopenjtalk-0.4.1.tar.gz
# 解壓縮
user$  tar  -xzf  pyopenjtalk-0.4.1.tar.gz
# 解壓縮的檔案放在 pyopenjtalk-0.4.1 目錄

user$  cd  /volume1/tmp/build_pyopenjtalk/pyopenjtalk-0.4.1/pyopenjtalk

# 這指令會將 openjtalk.pyx 生成 openjtalk.cpp
user$  python3  -m  cython  --cplus  openjtalk.pyx

# 以文字編輯軟體打開 openjtalk.cpp，如：vscode, notepad++...等，將這幾行插入 openjtalk.cpp 的第一列，再存檔
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;limits.h&amp;gt;
#ifndef SSIZE_MAX
#define SSIZE_MAX LONG_MAX
#endif pyopenjtalk/openjtalk.cpp

# 可透過 head -n 6 pyopenjtalk/openjtalk.cpp 確認前幾行已包含這些定義。

user$  export  PATH=/opt/bin:$PATH
user$  export  CC=/opt/bin/gcc
user$  export  CXX=/opt/bin/g++
user$  export  TMPDIR=/volume1/tmp

# 這步驟會消耗蠻多時間...請耐心等候
user$  ~/.local/bin/pip3  install  .  --no-build-isolation  --no-cache-dir

# 日語假名/羅馬字轉換工具
user$  ~/.local/bin/pip3  install  jaconv  mojimoji  --no-cache-dir
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;合成日語 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;tts_jp.py&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-py linenums&quot;&gt;&amp;nbsp;
import os
import warnings
import io
import onnxruntime as ort
import soundfile as sf
from kokoro_onnx import Kokoro
from pydub import AudioSegment
from pydub.utils import which
from misaki import ja


# 限制執行緒數量，避免在 1GB RAM NAS 上過載
os.environ[&quot;OMP_NUM_THREADS&quot;] = &quot;2&quot;
os.environ[&quot;ORT_NUM_THREADS&quot;] = &quot;2&quot;

warnings.filterwarnings(&quot;ignore&quot;, category=UserWarning, module=&quot;joblib&quot;)

# 將靜態 ffmpeg 所在目錄放到環境變數 PATH 最前端
FFMPEG_DIR = &quot;/volume1/Web/kokoro/ffmpeg-7.0.2-arm64-static&quot;
os.environ[&quot;PATH&quot;] = FFMPEG_DIR + &quot;:&quot; + os.environ.get(&quot;PATH&quot;, &quot;&quot;)

# 明確指定使用支援 libmp3lame 的 ffmpeg 執行檔路徑
AudioSegment.converter = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)
AudioSegment.ffmpeg = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)


# 檔案路徑設定
MODEL_PATH = &quot;/volume1/Web/kokoro/kokoro-v1.0.onnx&quot;
VOICES_PATH = &quot;/volume1/Web/kokoro/voices-v1.0.bin&quot;
OUTPUT_MP3 = &quot;/volume1/Web/mp3/lee_mood.mp3&quot;


# 目標字串
text_input = &quot;各作品はいくつかの世界設定を共有している。例外もあるが正式な作品のクレジットにはサンライズの共同筆名である矢立肇と、シリーズ第1作を手掛けた富野由悠季の名義を入れることが慣習となっている。&quot;
text_input = &quot;ガンダム（IP）は、映像作品を中心に、ガンプラなどのトイホビー、コンピュータゲーム、専門雑誌やコミックなどの書籍、ネットワークコンテンツ、アミューズメント施設など、さまざまな分野に展開する多角的な戦略を通じて、日本を代表するIPへと成長を遂げている。&quot;

# 初始化 Kokoro ONNX
kokoro = Kokoro(model_path=MODEL_PATH, voices_path=VOICES_PATH)

# 初始化日語音素處理器 (Misaki G2P)
g2p = ja.JAG2P()
res = g2p(text_input)
phonemes = res[0] if isinstance(res, tuple) else res

# 將中文轉為 Kokoro 需要的音素格式
print(f&quot;轉換音素結果: {phonemes}&quot;)

# 呼叫 create，傳入音素
print(&quot;正在合成語音...&quot;)
samples, sample_rate = kokoro.create(
    text=phonemes,
    voice=&quot;jf_nezumi&quot;,
    speed=1.0,
    is_phonemes=True
)


# 轉存為 MP3
# 先在記憶體中建立輕量 WAV 緩衝區，再由 pydub 調用 ffmpeg 封裝成 MP3
wav_buffer = io.BytesIO()
sf.write(wav_buffer, samples, sample_rate, format=&quot;WAV&quot;)
wav_buffer.seek(0)

audio_seg = AudioSegment.from_wav(wav_buffer)
audio_seg.export(OUTPUT_MP3, format=&quot;mp3&quot;, bitrate=&quot;192k&quot;)

print(f&quot;完成！音訊已輸出至: {OUTPUT_MP3}&quot;)
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;
相關筆記 ----&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/10/asustor-as1102tl-kokoro-mp3.html&quot; target=&quot;_blank&quot;&gt;在 ASUSTOR AS1102TL NAS 跑 kokoro tts(text-to-speech) 生成 mp3 語音檔&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/4060744003730561586/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/10/as1102tl-nas-kokoro-mp3.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/4060744003730561586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/4060744003730561586'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/10/as1102tl-nas-kokoro-mp3.html' title='AS1102TL NAS 跑 kokoro 生成日語 mp3 語音檔'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-5308056599631925887</id><published>2026-10-13T00:19:32.172+08:00</published><updated>2026-10-16T01:45:18.280+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>在 ASUSTOR AS1102TL NAS 跑 kokoro tts(text-to-speech) 生成 mp3 語音檔</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;參考資料 ----&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://github.com/hexgrad/kokoro&quot; target=&quot;_blank&quot;&gt;kokoro&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;mobaXterm&lt;/span&gt; 管理員權限登入 &lt;span style=&quot;font-family: courier;&quot;&gt;AS1102TL&lt;/span&gt;&lt;/p&gt;&lt;div&gt;因為 &lt;span style=&quot;font-family: courier;&quot;&gt;NAS AppCentral&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;FFmpeg&lt;/span&gt; 並不具生成 &lt;span style=&quot;font-family: courier;&quot;&gt;mp3&lt;/span&gt; 的能力，所以需要另外下載&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
user$  cd  /volume1/Web/kokoro/
user$  wget  https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-arm64-static.tar.xz
user$  tar  -xf  ffmpeg-release-arm64-static.tar.xz
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝 &lt;span style=&quot;font-family: courier;&quot;&gt;python3&lt;/span&gt; 的套件管理工具 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;pip&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
user$  curl  -sS  https://bootstrap.pypa.io/get-pip.py  -o  get-pip.py

# 透過本機 python3 執行安裝（建議加上 --user 避免破壞系統預設權限）
user$  python3  get-pip.py  --user

# 因為有加 --user 參數
# 所以 pip 會安裝在 user 家目錄的 ~/.local/bin
&amp;nbsp;
&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_YHDLE7tiq9l64WYSzm33oEw4g9uih62PTnoqHO0yQ75XXc7qk559OxgaxK3h_WSFnsxSdi0LWi7bNxCc0EiEQEZfGq1YB11VnSp7NQrbzg7QR1Ulka0vAckJLJshXYnt87aQMFOb9t5pvF8smKD1o-2FQWJ0UJie8Ad6UjutQAZsB6xvQ2LhTi6NRwk/s970/02_%E5%AE%89%E8%A3%9Dpip.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;188&quot; data-original-width=&quot;970&quot; height=&quot;124&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_YHDLE7tiq9l64WYSzm33oEw4g9uih62PTnoqHO0yQ75XXc7qk559OxgaxK3h_WSFnsxSdi0LWi7bNxCc0EiEQEZfGq1YB11VnSp7NQrbzg7QR1Ulka0vAckJLJshXYnt87aQMFOb9t5pvF8smKD1o-2FQWJ0UJie8Ad6UjutQAZsB6xvQ2LhTi6NRwk/w640-h124/02_%E5%AE%89%E8%A3%9Dpip.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝輕量版的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;kokoro-onnx&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 怕將 pip 路徑加入環境變數會對 NAS 造成影響，因此暫不加
# 執行 pip 時就必須輸入完整的 pip 路徑
user$   ~/.local/bin/pip3.12  install  --no-cache-dir  kokoro-onnx  soundfile  pydub

# 因為需中文音素支援，所以還要安裝 misaki 的中文模組
user$  ~/.local/bin/pip3.12  install  --no-cache-dir  kokoro-onnx  &quot;misaki[zh]&quot;
&amp;nbsp;&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1qEluuO0GQs7BYi1ztPjD1jn4tV6dx_V0GkeK0m2FZMexw2A1rnG50SnHAqwjUB8FVNW0dd244tNkx6RupQKsiQJQMMInE7Vka9SdgKz82K1X0tGoPWUucAw7graVocz5CuL-Ris3LIR6OfkEWFlcxnVnnlfnsD7b-5Q2aoSOODnKxc5d6JuteIZLNG8/s1101/03_%E5%AE%89%E8%A3%9Dkokoro-onnx.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;421&quot; data-original-width=&quot;1101&quot; height=&quot;244&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1qEluuO0GQs7BYi1ztPjD1jn4tV6dx_V0GkeK0m2FZMexw2A1rnG50SnHAqwjUB8FVNW0dd244tNkx6RupQKsiQJQMMInE7Vka9SdgKz82K1X0tGoPWUucAw7graVocz5CuL-Ris3LIR6OfkEWFlcxnVnnlfnsD7b-5Q2aoSOODnKxc5d6JuteIZLNG8/w640-h244/03_%E5%AE%89%E8%A3%9Dkokoro-onnx.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;下載音色庫&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 建立一個目錄存放，在本筆記，我放在 /volume1/Web/kokoro

# 下載 ONNX 模型權重 (約 300MB)
user$  wget  -O  kokoro-v1.0.onnx  https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/kokoro-v1.0.onnx

# 下載音色庫 voices-v1.0.bin (約 25MB)
user$  wget  -O  voices-v1.0.bin  https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/voices-v1.0.bin
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;想知道有哪些音色&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
user$  python3  -c  &quot;from  kokoro_onnx  import  Kokoro;  k=Kokoro(&#39;/volume1/Web/kokoro/kokoro-v1.0.onnx&#39;, &#39;/volume1/Web/kokoro/voices-v1.0.bin&#39;); print(k.get_voices())&quot;
&amp;nbsp;
&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYl7hynLNWRCOwemhFG5s8XmmZcakyFlzR7LAToPsnOf5IEwuxBzxU2TlW_XXZ7j5GjvjwQszqtd2BlQ4e9l3w_UG_ZZGL_viCR1laXlA1n3NOsZzI8unQTkdIPWbur_XAbqCFQP-_fXKDEagVHypQGCvJGcGl2yQRW6nkpAwQrHvJW3IhDaIjzxSShgk/s1105/warning.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;158&quot; data-original-width=&quot;1105&quot; height=&quot;92&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYl7hynLNWRCOwemhFG5s8XmmZcakyFlzR7LAToPsnOf5IEwuxBzxU2TlW_XXZ7j5GjvjwQszqtd2BlQ4e9l3w_UG_ZZGL_viCR1laXlA1n3NOsZzI8unQTkdIPWbur_XAbqCFQP-_fXKDEagVHypQGCvJGcGl2yQRW6nkpAwQrHvJW3IhDaIjzxSShgk/w640-h92/warning.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;紅框內就是 &lt;span style=&quot;font-family: courier;&quot;&gt;kokoro&lt;/span&gt; 的角色音色，&lt;/div&gt;&lt;div&gt;第一個字母代表&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;語言&lt;/span&gt;&lt;/span&gt;：&lt;/div&gt;&lt;div&gt;&lt;div&gt;z：中文 (&lt;span style=&quot;font-family: courier;&quot;&gt;Zho / Chinese&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;a：美式英語 (&lt;span style=&quot;font-family: courier;&quot;&gt;American English&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;b：英式英語 (&lt;span style=&quot;font-family: courier;&quot;&gt;British English&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;j：日語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Japanese&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;e：西班牙語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Español&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;f：法語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Français&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;h：印地語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Hindi&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;i：義大利語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Italian&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;p：巴西葡萄牙語 (&lt;span style=&quot;font-family: courier;&quot;&gt;Portuguese&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第二個字母代表&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;性別&lt;/span&gt;&lt;/span&gt;，f 是女性(&lt;span style=&quot;font-family: courier;&quot;&gt;female&lt;/span&gt;)，m 是男性(&lt;span style=&quot;font-family: courier;&quot;&gt;male&lt;/span&gt;)。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;目前 &lt;span style=&quot;font-family: courier;&quot;&gt;kokoro&lt;/span&gt; 的音色列表：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;美語：&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;af_alloy, af_aoede, af_bella, af_heart, af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;英語：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;bf_alice, bf_emma, bf_isabella, bf_lily,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;bm_daniel, bm_fable, bm_george, bm_lewis&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;西班牙語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;ef_dora,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;em_alex, em_santa&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;法語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;ff_siwis&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;印地語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;hf_alpha, hf_beta&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;hm_omega, hm_psi&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;義大利語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;if_sara&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;im_nicola&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;日語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;jm_kumo, pf_dora&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;巴西葡萄牙語：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;pm_alex, pm_santa&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;中文：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;警告訊息可以不理會，因為 &lt;span style=&quot;font-family: courier;&quot;&gt;joblib&lt;/span&gt;（底層用來處理並行運算的套件）在啟動時會嘗試在共享記憶體目錄（通常是 &lt;span style=&quot;font-family: courier;&quot;&gt;/dev/shm&lt;/span&gt;）建立旗標或暫存檔。在 &lt;span style=&quot;font-family: courier;&quot;&gt;ASUSTOR ADM&lt;/span&gt; 系統下，一般使用者帳號預設對&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;/dev/shm&lt;/span&gt;&amp;nbsp;沒有寫入權限，因此&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;joblib&lt;/span&gt;&amp;nbsp;自動降級為單線程序列模式（&lt;span style=&quot;font-family: courier;&quot;&gt;serial mode&lt;/span&gt;）運作。&lt;br /&gt;
&lt;br /&gt;
因為在 &lt;span style=&quot;font-family: courier;&quot;&gt;1GB RAM 的 NAS&lt;/span&gt; 上本來就建議以單線程/序列模式執行以防爆記憶體，這個降級對生成語音完全沒有負面影響。&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;合成中文 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;tts_zh.py&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-py linenums&quot;&gt;&amp;nbsp;
import os
import warnings
import io
import onnxruntime as ort
import soundfile as sf
from kokoro_onnx import Kokoro
from pydub import AudioSegment
from pydub.utils import which
from misaki import zh


# 限制執行緒數量，避免在 1GB RAM NAS 上過載
os.environ[&quot;OMP_NUM_THREADS&quot;] = &quot;2&quot;
os.environ[&quot;ORT_NUM_THREADS&quot;] = &quot;2&quot;

warnings.filterwarnings(&quot;ignore&quot;, category=UserWarning, module=&quot;joblib&quot;)

# 將靜態 ffmpeg 所在目錄放到環境變數 PATH 最前端
FFMPEG_DIR = &quot;/volume1/Web/kokoro/ffmpeg-7.0.2-arm64-static&quot;
os.environ[&quot;PATH&quot;] = FFMPEG_DIR + &quot;:&quot; + os.environ.get(&quot;PATH&quot;, &quot;&quot;)

# 明確指定使用支援 libmp3lame 的 ffmpeg 執行檔路徑
AudioSegment.converter = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)
AudioSegment.ffmpeg = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)


# 檔案路徑設定
MODEL_PATH = &quot;/volume1/Web/kokoro/kokoro-v1.0.onnx&quot;
VOICES_PATH = &quot;/volume1/Web/kokoro/voices-v1.0.bin&quot;
OUTPUT_MP3 = &quot;/volume1/Web/mp3/lee_mood.mp3&quot;


# 目標字串
text_input = &quot;你現在是怎樣的心情呢？是歡喜悲傷，還是一點點不知名的愁？&quot;


# 初始化 Kokoro ONNX
kokoro = Kokoro(model_path=MODEL_PATH, voices_path=VOICES_PATH)

# 初始化中文音素處理器 (Misaki G2P)
g2p = zh.ZHG2P()
res = g2p(text_input)
phonemes = res[0] if isinstance(res, tuple) else res

# 將中文轉為 Kokoro 需要的音素格式
print(f&quot;轉換音素結果: {phonemes}&quot;)

# 呼叫 create，傳入音素 (lang 改用 &#39;en-us&#39; 或省略驗證，is_phonemes=True)
print(&quot;正在合成語音...&quot;)
samples, sample_rate = kokoro.create(
    text=phonemes,
    voice=&quot;zm_yunyang&quot;,
    speed=1.0,
    is_phonemes=True
)


# 轉存為 MP3
# 先在記憶體中建立輕量 WAV 緩衝區，再由 pydub 調用 ffmpeg 封裝成 MP3
wav_buffer = io.BytesIO()
sf.write(wav_buffer, samples, sample_rate, format=&quot;WAV&quot;)
wav_buffer.seek(0)

audio_seg = AudioSegment.from_wav(wav_buffer)
audio_seg.export(OUTPUT_MP3, format=&quot;mp3&quot;, bitrate=&quot;192k&quot;)

print(f&quot;完成！音訊已輸出至: {OUTPUT_MP3}&quot;)
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;合成美語 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;tts_en.py&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-py linenums&quot;&gt;&amp;nbsp;
import os
import warnings
import io
import onnxruntime as ort
import soundfile as sf
from kokoro_onnx import Kokoro
from pydub import AudioSegment
from pydub.utils import which
# from misaki import zh


# 限制執行緒數量，避免在 1GB RAM NAS 上過載
os.environ[&quot;OMP_NUM_THREADS&quot;] = &quot;2&quot;
os.environ[&quot;ORT_NUM_THREADS&quot;] = &quot;2&quot;

warnings.filterwarnings(&quot;ignore&quot;, category=UserWarning, module=&quot;joblib&quot;)

# 將靜態 ffmpeg 所在目錄放到環境變數 PATH 最前端
FFMPEG_DIR = &quot;/volume1/Web/kokoro/ffmpeg-7.0.2-arm64-static&quot;
os.environ[&quot;PATH&quot;] = FFMPEG_DIR + &quot;:&quot; + os.environ.get(&quot;PATH&quot;, &quot;&quot;)

# 明確指定使用支援 libmp3lame 的 ffmpeg 執行檔路徑
AudioSegment.converter = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)
AudioSegment.ffmpeg = os.path.join(FFMPEG_DIR, &quot;ffmpeg&quot;)


# 檔案路徑設定
MODEL_PATH = &quot;/volume1/Web/kokoro/kokoro-v1.0.onnx&quot;
VOICES_PATH = &quot;/volume1/Web/kokoro/voices-v1.0.bin&quot;
OUTPUT_MP3 = &quot;/volume1/Web/mp3/lee_mood.mp3&quot;


# 目標字串
text_input = &quot;你現在是怎樣的心情呢？是歡喜悲傷，還是一點點不知名的愁？&quot;
text_input = &quot;American professors Robert E. Hall and Michael Woodford have won the 2026 Nobel prize in economics for developing new economic models that help governments and central banks stabilize their economies to minimize the impact of external shocks. &quot;


# 初始化 Kokoro ONNX
kokoro = Kokoro(model_path=MODEL_PATH, voices_path=VOICES_PATH)


# 合成美語語音
print(&quot;正在合成美語語音...&quot;)
samples, sample_rate = kokoro.create(
    text=text_input,
    voice=&quot;af_alloy&quot;,      # 美語女聲 (亦可更換為 am_adam, af_sarah, af_nicole 等)
    speed=1.0,
    lang=&quot;en-us&quot;           # 指定美語
)


# 轉存為 MP3
# 先在記憶體中建立輕量 WAV 緩衝區，再由 pydub 調用 ffmpeg 封裝成 MP3
wav_buffer = io.BytesIO()
sf.write(wav_buffer, samples, sample_rate, format=&quot;WAV&quot;)
wav_buffer.seek(0)

audio_seg = AudioSegment.from_wav(wav_buffer)
audio_seg.export(OUTPUT_MP3, format=&quot;mp3&quot;, bitrate=&quot;192k&quot;)

print(f&quot;完成！音訊已輸出至: {OUTPUT_MP3}&quot;)
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;相關筆記 ----&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/10/asustor-as1102tl-kokoro-mp3.html&quot; target=&quot;_blank&quot;&gt;在 ASUSTOR AS1102TL NAS 跑 kokoro tts(text-to-speech) 生成 mp3 語音檔&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/5308056599631925887/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/10/asustor-as1102tl-kokoro-mp3.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5308056599631925887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5308056599631925887'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/10/asustor-as1102tl-kokoro-mp3.html' title='在 ASUSTOR AS1102TL NAS 跑 kokoro tts(text-to-speech) 生成 mp3 語音檔'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_YHDLE7tiq9l64WYSzm33oEw4g9uih62PTnoqHO0yQ75XXc7qk559OxgaxK3h_WSFnsxSdi0LWi7bNxCc0EiEQEZfGq1YB11VnSp7NQrbzg7QR1Ulka0vAckJLJshXYnt87aQMFOb9t5pvF8smKD1o-2FQWJ0UJie8Ad6UjutQAZsB6xvQ2LhTi6NRwk/s72-w640-h124-c/02_%E5%AE%89%E8%A3%9Dpip.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-820907597842166436</id><published>2026-06-25T23:36:07.467+08:00</published><updated>2026-06-25T23:36:07.468+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>【Metabase】更新/升級 Metabase</title><content type='html'>&lt;div&gt;參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://www.metabase.com/docs/latest/installation-and-operation/upgrading-metabase?use_case=bi&quot; target=&quot;_blank&quot;&gt;Upgrading Metabase#Upgrading the JAR&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://www.metabase.com/changelog?use_case=bi&quot; target=&quot;_blank&quot;&gt;Metabase Full changelog&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://github.com/metabase/metabase/releases?use_case=bi&quot; target=&quot;_blank&quot;&gt;Release notes on GitHub.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本篇筆記環境：&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;VMware Workstation Pro 26H1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;LinuxMint22.2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;metabase v0.57.6&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh28MFbZPWaj9eN9cEnC7Y2feGbtjKOkrN7Stc08uO-HDY8kTpUN88AXcMETHSpoMrZ-qu5xEmsnZygvtdFMz8VFEdAuZrAOkWCrZu9eRw9hqnIGLttpMbUi_2UImwMX8qNuAMHctJxAnnNVKVa1WB7_NCMkQSHhEveqyzCGX-VJJIevMZl6MAwZCDqPL4/s926/%E6%9B%B4%E6%96%B0_01+02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;458&quot; data-original-width=&quot;926&quot; height=&quot;316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh28MFbZPWaj9eN9cEnC7Y2feGbtjKOkrN7Stc08uO-HDY8kTpUN88AXcMETHSpoMrZ-qu5xEmsnZygvtdFMz8VFEdAuZrAOkWCrZu9eRw9hqnIGLttpMbUi_2UImwMX8qNuAMHctJxAnnNVKVa1WB7_NCMkQSHhEveqyzCGX-VJJIevMZl6MAwZCDqPL4/w640-h316/%E6%9B%B4%E6%96%B0_01+02.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;備份 metabase 的系統資料庫：因為我的 metabase 是裝在虛擬機 Linuxmint22.2，所以偷懶直接備份虛擬機的整個目錄；萬一 更新/升級 失敗也不怕。&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;😁&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;目前(&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;2026.06.25&lt;/span&gt;&lt;/span&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;metabase 官網列出的版本，&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;最新版為 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;v62.3&lt;/span&gt;&lt;/span&gt;，而我的虛擬機內的版本&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;v57 的最新版修正版為 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;v57.20&lt;/span&gt;&lt;/span&gt;。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;官方建議：不要一次貿然的將版本升級到最新，建議先更新至修正版(v57.20)，確定沒問題後再升級至最新版本(v62.3)。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;登入&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Linuxmint&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 停止 metabase 服務
user$ sudo  systemctl  stop  metabase.service

# 切換到存放 metabase.jar 的目錄
user$ cd  /usr/share/metabase/

# 將 metabase.jar 改名, 我習慣在原檔名後加上日期 → metabase_20260625.jar
user:/usr/share/metabase$ sudo  mv  metabase.jar  metabase_20260625.jar

# 開啟 Linuxmint 內的瀏覽器，找到自己的 metabase 主版本，本例為 57
# 主版本號 57 的最後一個版本為 57.20，以滑鼠右鍵複製連結網址
# 以指令模式下載最新版本的 metabase.jar
user:/usr/share/metabase$ sudo  wget  -O  metabase.jar  &quot;https://downloads.metabase.com/v0.57.20.x/metabase.jar?_gl=1*1h59pic*_gcl_au*NTExNjgyNTUxLjE3ODIzODIxOTk.&quot;

# 變更 metabase.jar 的檔案屬性
user:/usr/share/metabase$ sudo  chown  metabase  metabase.jar
user:/usr/share/metabase$ sudo  chgrp  metabase  metabase.jar


# 重新開機，確定 metabase 能正常運作後，再重複上述的步驟升級至 v62.3
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/820907597842166436/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/06/metabase-metabase.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/820907597842166436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/820907597842166436'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/06/metabase-metabase.html' title='【Metabase】更新/升級 Metabase'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh28MFbZPWaj9eN9cEnC7Y2feGbtjKOkrN7Stc08uO-HDY8kTpUN88AXcMETHSpoMrZ-qu5xEmsnZygvtdFMz8VFEdAuZrAOkWCrZu9eRw9hqnIGLttpMbUi_2UImwMX8qNuAMHctJxAnnNVKVa1WB7_NCMkQSHhEveqyzCGX-VJJIevMZl6MAwZCDqPL4/s72-w640-h316-c/%E6%9B%B4%E6%96%B0_01+02.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-3860428507735558167</id><published>2026-05-27T23:50:36.171+08:00</published><updated>2026-05-27T23:55:18.181+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="軟體筆記"/><title type='text'>【軟體筆記】群暉(Synology) DS223j 設定 MariaDB + Python3 環境</title><content type='html'>&lt;div&gt;想要在&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt;&amp;nbsp;跑 &lt;span style=&quot;font-family: courier;&quot;&gt;python&lt;/span&gt; 排程，因此摸索寫了這篇筆記；雖然 &lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt; 底層也是 &lt;span style=&quot;font-family: courier;&quot;&gt;Linux&lt;/span&gt;，不過算是變形的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Linux&lt;/span&gt;，有其獨特性，所以本筆記的做法都是以不影響安全性及效率為前提。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;老人家的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt;&amp;nbsp;系統已更新至 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;DSM7.2&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;* 登入&lt;span style=&quot;font-family: courier;&quot;&gt; DS223j web 管理系統 DSM，NAS&amp;nbsp;&lt;/span&gt;本身也有一些系統程式是以 &lt;span style=&quot;font-family: courier;&quot;&gt;python2&lt;/span&gt; 或&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;python3&lt;/span&gt;&amp;nbsp;撰寫，所以在【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;套件中心&lt;/span&gt;&lt;/span&gt;】會看到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;python2&lt;/span&gt;&amp;nbsp;顯示已安裝，而&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;python3&amp;nbsp;&lt;/span&gt;雖然不是已安裝的狀態，但是若以 &lt;span style=&quot;font-family: courier;&quot;&gt;ssh&lt;/span&gt; 登入&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;DS223j 查看就會發現出廠時系統就安裝了 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;Python3.8.15&lt;/span&gt;&lt;/span&gt;。&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;因為我的程式要寫連線&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt;&amp;nbsp;的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MariaDB&lt;/span&gt;，所以需要安裝【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;pymysql&lt;/span&gt;】套件，所以要與系統的 Python3.8.15 分開，另外再安裝&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01;&quot;&gt;套件中心&lt;/span&gt;&amp;nbsp;的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Python3.9&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* 點選【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;套件中心&lt;/span&gt;&lt;/span&gt;】→【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;所有套件&lt;/span&gt;&lt;/span&gt;】→ 找到【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Python3.9&lt;/span&gt;】並點擊安裝&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaTM4iI2hJJM13zywfR0l0nRQC3aefI0zP4F_Xp7cH4mTDc_pZNEIebJ-TYvb3tav8v_xuqa7ZV43IoXo_ylzClq7CWx0zhTFp9WlZG9Trtm6rZdVlEFztR1op4lCwSXHJ3n7WRlMHeTQs9bVFMQa3zedmDhWZv1vKWFw8AwMLr1x-QuqDBoTsiU9JLs0/s1217/01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;605&quot; data-original-width=&quot;1217&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaTM4iI2hJJM13zywfR0l0nRQC3aefI0zP4F_Xp7cH4mTDc_pZNEIebJ-TYvb3tav8v_xuqa7ZV43IoXo_ylzClq7CWx0zhTFp9WlZG9Trtm6rZdVlEFztR1op4lCwSXHJ3n7WRlMHeTQs9bVFMQa3zedmDhWZv1vKWFw8AwMLr1x-QuqDBoTsiU9JLs0/w640-h318/01.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLz_u0LkTucM-usMMT0yyXzgdYr6uDR3CHDL_ErZULqfEbO30P9CZ6L0L4zb63cbKZ0PYeQdbey2GeJe0NsflLzCEKOaILJ75-gc3JBwcMLtEYHrMuKU_NKqUZbjNbK2ebnMYvL4OwTDAdqeW2UXgBzo90z3fTtlc5DDPQMVUcupbxx0xWQeBClZeqPo/s960/02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;544&quot; data-original-width=&quot;960&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLz_u0LkTucM-usMMT0yyXzgdYr6uDR3CHDL_ErZULqfEbO30P9CZ6L0L4zb63cbKZ0PYeQdbey2GeJe0NsflLzCEKOaILJ75-gc3JBwcMLtEYHrMuKU_NKqUZbjNbK2ebnMYvL4OwTDAdqeW2UXgBzo90z3fTtlc5DDPQMVUcupbxx0xWQeBClZeqPo/w640-h362/02.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* 以 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt; 連線進入 &lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt;，本筆記採用的軟體為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MobaXterm&lt;/span&gt;，注意：&lt;span style=&quot;background-color: #fcff01; color: #2b00fe; font-family: courier;&quot;&gt;NAS 和一般 Linux 不同，只允許系統管理者 ssh 連線。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;python3.9&lt;/span&gt; 的安裝目錄路徑是 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/var/packages/Python3.9/target/usr/bin/&lt;/span&gt;，執行檔名稱是 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;python3.9&lt;/span&gt;&lt;/span&gt;，在下圖中，可以看到套件中心自動為 &lt;span style=&quot;font-family: courier;&quot;&gt;python3.9&lt;/span&gt; 建立了 2 個捷徑，方便我們呼叫執行&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;python3.9。&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRYgtCaHR2rCatYnmG0i1sQV5FUD5VYCksPBPtjhaOiMpKE6QenlCtIXfOtoDWka__977ehEeC6A6hz2yDwEJNyiqoqQw-fAj4ErFwLExAHozUdpo6LpW5aVIm1Jqhv3LpHq_udWIFkirbTi06o53GeAgXmiir9xoeed4w2kybg8NzO1Nw4uVFMl66sfc/s617/03.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;123&quot; data-original-width=&quot;617&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRYgtCaHR2rCatYnmG0i1sQV5FUD5VYCksPBPtjhaOiMpKE6QenlCtIXfOtoDWka__977ehEeC6A6hz2yDwEJNyiqoqQw-fAj4ErFwLExAHozUdpo6LpW5aVIm1Jqhv3LpHq_udWIFkirbTi06o53GeAgXmiir9xoeed4w2kybg8NzO1Nw4uVFMl66sfc/w640-h128/03.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 切換到家目錄
admin@DS223j： cd ~

# 下載並安裝 pip
admin@DS223j：~＄ wget  https://bootstrap.pypa.io/pip/3.9/get-pip.py
admin@DS223j：~＄ /var/packages/Python3.9/target/usr/bin/python3.9  get-pip.py

# 安裝 pymysql
admin@DS223j：~＄ /var/packages/Python3.9/target/usr/bin/python3.9  -m  pip  install  pymysql
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;test.py&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-py linenums&quot;&gt;&amp;nbsp;
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pymysql


# DS223j 預設關閉了 TCP/IP 連線協定
# 所以改用 socket
def get_db_connection_nas():
    &quot;&quot;&quot;取得 NAS 資料庫連線&quot;&quot;&quot;
    # 請根據您的實際設定修改
    connection = pymysql.connect(
        user=&#39;資料庫連線帳號&#39;,
        password=&#39;密碼&#39;,
        database=&#39;資料庫名&#39;,
        unix_socket=&#39;/run/mysqld/mysqld.sock&#39;,
        charset=&#39;utf8&#39;,
        cursorclass=pymysql.cursors.DictCursor
    )
    return connection
    
    
def execute_and_print_query(pdo_nas, sql: str):
    print(&quot;\n&quot; + &quot;=&quot;*60)
    print(f&quot;執行 SQL: {sql}&quot;)
    print(&quot;=&quot;*60)
    
    try:
        with pdo_nas.cursor() as cursor:
            # 執行 SQL 查詢
            cursor.execute(sql)
            rows = cursor.fetchall()
            if rows and len(rows) &amp;gt; 0:
                field_names = list(rows[0].keys())
                print(f&quot;\n欄位: {&#39;, &#39;.join(field_names)}&quot;)
                print(&quot;-&quot;*60)
            
            # 取得記錄總數
            total_rows = len(rows)
            print(f&quot;\n總共 {total_rows} 筆記錄\n&quot;)
            
            # 逐筆 print 出來
            for idx, row in enumerate(rows, 1):
                print(f&quot;第 {idx} 筆記錄:&quot;)
                for field, value in row.items():
                    print(f&quot;  {field}: {value}&quot;)
                print(&quot;-&quot;*40)
            
            # 如果沒有記錄
            if total_rows == 0:
                print(&quot;查無任何記錄&quot;)
            
            return rows
            
    except Exception as e:
        print(f&quot;執行 SQL 時發生錯誤: {e}&quot;)
        return None




def main():
    &quot;&quot;&quot;主程式&quot;&quot;&quot;
    try:
        # 建立 mysql 連線
        pdo_nas = get_db_connection_nas()

        # 查詢記錄
        sql = &quot;SELECT * FROM table1&quot;
        result1 = execute_and_print_query(pdo_nas, sql)

        # 寫入紀錄
        sql_insert = f&quot;&quot;&quot;INSERT INTO table1
                        (field1, field2, field3)
                        VALUES
                        (&#39;欄位1值&#39;, &#39;欄位2值&#39;, &#39;欄位3值&#39;)&quot;&quot;&quot;
                    
        print(f&quot;sql = {sql_insert}&quot;)
        pdo_nas.cursor.execute(sql_insert)
        pdo_nas.commit()
        print(&quot;成功寫入&quot;)

    except Exception as e:
        print(f&quot;發生錯誤: {e}&quot;)
        traceback.print_exc()
    


if __name__ == &quot;__main__&quot;:
    main()
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;在儘量不更動 &lt;span style=&quot;font-family: courier;&quot;&gt;DS223j&lt;/span&gt; 的前提下，不改變 &lt;span style=&quot;font-family: courier;&quot;&gt;NAS&lt;/span&gt; 的環境變數，執行&lt;span style=&quot;font-family: courier;&quot;&gt; test.py&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 須完整路徑，但可以是別名(捷徑)，所以下面 3 種呼叫方式都行得通
admin@DS223j:/$ /var/packages/Python3.9/target/usr/bin/python3.9 test.py
admin@DS223j:/$ /var/packages/Python3.9/target/usr/bin/python3 test.py
admin@DS223j:/$ /var/packages/Python3.9/target/usr/bin/python test.py

&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/3860428507735558167/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/05/synology-ds223j-mariadb-python3.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3860428507735558167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3860428507735558167'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/05/synology-ds223j-mariadb-python3.html' title='【軟體筆記】群暉(Synology) DS223j 設定 MariaDB + Python3 環境'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaTM4iI2hJJM13zywfR0l0nRQC3aefI0zP4F_Xp7cH4mTDc_pZNEIebJ-TYvb3tav8v_xuqa7ZV43IoXo_ylzClq7CWx0zhTFp9WlZG9Trtm6rZdVlEFztR1op4lCwSXHJ3n7WRlMHeTQs9bVFMQa3zedmDhWZv1vKWFw8AwMLr1x-QuqDBoTsiU9JLs0/s72-w640-h318-c/01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-7504632021832052657</id><published>2026-04-06T23:02:00.016+08:00</published><updated>2026-04-27T23:24:16.522+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="Kotlin"/><title type='text'>【Kotlin】自定義 app 結束對話框</title><content type='html'>本筆記搭配使用 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;ViewBinding, AdMob, Edge-to-Edge&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;app&amp;nbsp; 層級 build.gradle&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-c linenums&quot;&gt;&amp;nbsp;
android {
    
    compileSdk {
        version = release(36)
    }
...
...

    buildFeatures {
        viewBinding = true
    }
    
    defaultConfig {
        ...
        ...
        minSdk = 26
        targetSdk = 36
    }
}

...
...

dependencies {

    ...
    ...
    
    // adMob
    implementation(&quot;com.google.android.gms:play-services-ads:25.1.0&quot;)
}
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;strings.xml&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;resources&amp;gt;
    
    &amp;lt;string name=&quot;dialog_title&quot;&amp;gt;確定要離開？&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;dialog_message&quot;&amp;gt;您確定要關閉應用程式嗎？&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;btn_cancel&quot;&amp;gt;取消&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;btn_exit&quot;&amp;gt;離開&amp;lt;/string&amp;gt;
    
    ...
    ...
 
    &amp;lt;!-- adMob app id 測試 --&amp;gt;
    &amp;lt;string name=&quot;admob_app_id&quot;&amp;gt;ca-app-pub-3940256099942544~3347511713&amp;lt;/string&amp;gt;
    &amp;lt;!-- 橫幅 測試 --&amp;gt;
    &amp;lt;string name=&quot;banner_ad_unit_id&quot;&amp;gt;ca-app-pub-3940256099942544/6300978111&amp;lt;/string&amp;gt;
 
&amp;lt;/resources&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;AndroidManifest.xml&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;manifest
 
    &amp;lt;!-- 存取網路連線 --&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;
 
    ...
    ...
 
    &amp;lt;application  ... &amp;gt;
 
        &amp;lt;meta-data
            android:name=&quot;com.google.android.gms.version&quot;
            android:value=&quot;@integer/google_play_services_version&quot; /&amp;gt;
        &amp;lt;meta-data
            android:name=&quot;com.google.android.gms.ads.APPLICATION_ID&quot;
            android:value=&quot;@string/admob_app_id&quot; /&amp;gt;
 
        ...
        ...
 
        &amp;lt;!-- AdMob 的 AdActivity --&amp;gt;
        &amp;lt;activity
            android:name=&quot;com.google.android.gms.ads.AdActivity&quot;
            android:configChanges=&quot;keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize&quot;
            android:theme=&quot;@android:style/Theme.Translucent&quot; /&amp;gt;
 
        ...
        ...
 
    &amp;lt;/application&amp;gt;
 
&amp;lt;/manifest&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;activity_main.xml&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:id=&quot;@+id/main&quot;    ← 注意這裡
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Hello World!&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot; /&amp;gt;

&amp;lt;/androidx.constraintlayout.widget.ConstraintLayout&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;自定義對話框 dialog_exit.xml&lt;/span&gt;，因為版面很單純，所以採用 &lt;span style=&quot;font-family: courier;&quot;&gt;LinearLayout&lt;/span&gt;。&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:ads=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;24dp&quot;&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/tv_dialog_title&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;@string/dialog_title&quot;
        android:textSize=&quot;20sp&quot;
        android:textStyle=&quot;bold&quot;
        android:textColor=&quot;?attr/colorOnSurface&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;24dp&quot;
        android:gravity=&quot;end&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;Button
            android:id=&quot;@+id/btn_cancel&quot;
            style=&quot;?attr/borderlessButtonStyle&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;@string/btn_cancel&quot; /&amp;gt;

        &amp;lt;Button
            android:id=&quot;@+id/btn_exit&quot;
            style=&quot;?attr/borderlessButtonStyle&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_marginStart=&quot;8dp&quot;
            android:text=&quot;@string/btn_exit&quot;
            android:textColor=&quot;?attr/colorError&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;!-- 做為 banner 的容器 --&amp;gt;
    &amp;lt;FrameLayout
        android:id=&quot;@+id/adContainer&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;16dp&quot;
        android:minHeight=&quot;250dp&quot; /&amp;gt;
        
&amp;lt;/LinearLayout&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MainActivity.kt&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java linenums&quot;&gt;&amp;nbsp;
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    
    private var preloadedAdView: AdView? = null    // 預載的廣告物件
    

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        // 設定返回鍵攔截（支援新舊所有 Android 版本）
        setupBackPressedListener()
        
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -&amp;gt;
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        
        // 對話框的 AdMob banner
        preloadBannerAd()
    }&lt;br /&gt;
    
    override fun onPause() {
        preloadedAdView?.pause()
        super.onPause()
    }
    
    
    override fun onResume() {
        super.onResume()
        preloadedAdView?.resume()
    }


    override fun onDestroy() {
        preloadedAdView?.destroy()
        super.onDestroy()
    }
    
    
    private fun setupBackPressedListener() {
        val callback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                // 當使用者按下返回鍵（或手勢返回）時，顯示對話框
                showExitCustomDialog()
            }
        }
        // 將 callback 加到 Dispatcher 中，它會自動處理生命週期
        onBackPressedDispatcher.addCallback(this, callback)
    }


    private fun showExitCustomDialog() {
        // 初始化 Dialog 的 View Binding
        val dialogBinding = DialogExitBinding.inflate(layoutInflater)
        
        // 將預載好的 AdView 放入對話框容器中
        preloadedAdView?.let { adView -&amp;gt;
            // 避免 AdView 重複被加入不同的 Parent
            (adView.parent as? ViewGroup)?.removeView(adView)
            dialogBinding.adContainer.addView(adView)
        }

        val dialog = MaterialAlertDialogBuilder(this)
            .setView(dialogBinding.root)
            .setCancelable(true)
            .create()

        dialogBinding.btnCancel.setOnClickListener {
            dialog.dismiss()
        }

        dialogBinding.btnExit.setOnClickListener {
            dialog.dismiss()
            finish()
        }

        dialog.show()
    }
    
    
    private fun preloadBannerAd() {
        preloadedAdView = AdView(this).apply {
            adUnitId = getString(R.string.banner_ad_unit_id)
            setAdSize(AdSize.MEDIUM_RECTANGLE)
            // 開始非同步載入
            loadAd(AdRequest.Builder().build())
        }
    }

}
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;實際的對話框效果&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1QbSx60vZna7Z7XPWi0DEDLH3yJQXCR9c9Eu2zP6qdMYFiIuYU4g-LVQ4XnnyL1C7DE2vFlaMkEPleGF1PLunS-n8C7DBblYrXr0QI0ERhAB9cigy3tjhqmiQ1_Shc7mbpp1JbKK-o_GhXL-pnBTkd_Uz9Zhpzg_I5p9vCJi4vDpo-L_FQjN_zrrc9LE/s548/01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;548&quot; data-original-width=&quot;480&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1QbSx60vZna7Z7XPWi0DEDLH3yJQXCR9c9Eu2zP6qdMYFiIuYU4g-LVQ4XnnyL1C7DE2vFlaMkEPleGF1PLunS-n8C7DBblYrXr0QI0ERhAB9cigy3tjhqmiQ1_Shc7mbpp1JbKK-o_GhXL-pnBTkd_Uz9Zhpzg_I5p9vCJi4vDpo-L_FQjN_zrrc9LE/s320/01.jpg&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/7504632021832052657/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/04/kotlin-app.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/7504632021832052657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/7504632021832052657'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/04/kotlin-app.html' title='【Kotlin】自定義 app 結束對話框'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1QbSx60vZna7Z7XPWi0DEDLH3yJQXCR9c9Eu2zP6qdMYFiIuYU4g-LVQ4XnnyL1C7DE2vFlaMkEPleGF1PLunS-n8C7DBblYrXr0QI0ERhAB9cigy3tjhqmiQ1_Shc7mbpp1JbKK-o_GhXL-pnBTkd_Uz9Zhpzg_I5p9vCJi4vDpo-L_FQjN_zrrc9LE/s72-c/01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-6534438788123928097</id><published>2026-03-31T19:42:00.001+08:00</published><updated>2026-04-02T23:43:33.167+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><title type='text'>【Metabase】套用香港行政區進行分析 -- 區級行政區</title><content type='html'>參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://data.gov.hk/tc-datasets/search/%E5%9C%B0%E6%96%B9%E8%A1%8C%E6%94%BF%E5%8D%80%E5%88%86%E7%95%8C&quot; target=&quot;_blank&quot;&gt;香港開放數據平台&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到 香港開放數據平台&amp;nbsp;→ 點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;數據集&lt;/span&gt;&lt;/span&gt;】→ 輸入【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;地方行政區分界&lt;/span&gt;&lt;/span&gt;】→ 下面會跳出【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;地方行政區分界&lt;/span&gt;&lt;/span&gt;】和【歷史地方行政區分界】→ 點擊【地方行政區分界】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh55CHcW_TP5ohNX0VbMjFamFkHJV5zNOZkYjhxxO1R-5hBG-KT51aMRehB98XES70WGmNbl6RFf_TMZw0igelo7wQLJQRCVK20WFpB_csJ4voia8Z_Lx1b1Mf92WFIlHj29QksrW7TJN14v1LgTcaiS2clkDcCjaRt-5DSZuDDG8MQF7AzQP1KttknbkY/s1322/03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;437&quot; data-original-width=&quot;1322&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh55CHcW_TP5ohNX0VbMjFamFkHJV5zNOZkYjhxxO1R-5hBG-KT51aMRehB98XES70WGmNbl6RFf_TMZw0igelo7wQLJQRCVK20WFpB_csJ4voia8Z_Lx1b1Mf92WFIlHj29QksrW7TJN14v1LgTcaiS2clkDcCjaRt-5DSZuDDG8MQF7AzQP1KttknbkY/w640-h212/03.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;→ 下面列出查詢結果【數據資源】&lt;/div&gt;&lt;div&gt;→ 我們要的就是【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;地方行政區分界 (英文／繁體中文) (JSON)&lt;/span&gt;】&amp;nbsp;&lt;/div&gt;&lt;div&gt;→ 點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;下載&lt;/span&gt;&lt;/span&gt;】鈕&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ZO2AkttNIVJceuTT_8rgnH1kvMkKO6lsX7wlREHQudRN1vqkyCY-evaMJ-t1MTQTGJDtDTtGb7wlW5LrXCHvjzEiWEkov-j5Vh-lTz_M0-FAb8jryv759tlJ_dQS2VTesO1QR8Ldn_BniaYv2XGz24Rk9-Xal4iMIkuST2LXgQxt-ne4x8H2s4jGXtc/s1647/04-3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1419&quot; data-original-width=&quot;1647&quot; height=&quot;552&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ZO2AkttNIVJceuTT_8rgnH1kvMkKO6lsX7wlREHQudRN1vqkyCY-evaMJ-t1MTQTGJDtDTtGb7wlW5LrXCHvjzEiWEkov-j5Vh-lTz_M0-FAb8jryv759tlJ_dQS2VTesO1QR8Ldn_BniaYv2XGz24Rk9-Xal4iMIkuST2LXgQxt-ne4x8H2s4jGXtc/w640-h552/04-3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;香港的行政區有 &lt;span style=&quot;font-family: courier;&quot;&gt;18&lt;/span&gt; 個，所以下載的檔名為【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;hksar_18_district_boundary.json&lt;/span&gt;】。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/6534438788123928097/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase_31.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/6534438788123928097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/6534438788123928097'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase_31.html' title='【Metabase】套用香港行政區進行分析 -- 區級行政區'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh55CHcW_TP5ohNX0VbMjFamFkHJV5zNOZkYjhxxO1R-5hBG-KT51aMRehB98XES70WGmNbl6RFf_TMZw0igelo7wQLJQRCVK20WFpB_csJ4voia8Z_Lx1b1Mf92WFIlHj29QksrW7TJN14v1LgTcaiS2clkDcCjaRt-5DSZuDDG8MQF7AzQP1KttknbkY/s72-w640-h212-c/03.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-3320592698481615303</id><published>2026-03-22T16:56:00.002+08:00</published><updated>2026-03-22T22:35:12.193+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><title type='text'>【Metabase】套用台灣地圖進行分析(二) -- 區、里(村)級行政區</title><content type='html'>參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://github.com/g0v/twgeojson&quot; target=&quot;_blank&quot;&gt;github.com/g0v/twgeojson&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://data.gov.tw/dataset/7441&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;政府資料開放平台：鄉鎮市區界線(TWD97經緯度)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://data.gov.tw/dataset/7438&quot; target=&quot;_blank&quot;&gt;村里界圖(TWD97經緯度)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到 &lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;http://github.com/g0v/twgeojson/json&quot; target=&quot;_blank&quot;&gt;github.com/g0v/twgeojson/json&lt;/a&gt;&lt;/span&gt;，有數個 &lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt; 檔，其中 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt; 是&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;區級&lt;/span&gt;&lt;/span&gt;行政區，&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;twVillage1982.geo.json&lt;/span&gt; 則是 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;里(村)級&lt;/span&gt;&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另有&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;twTown1982.topo.json&lt;/span&gt;&amp;nbsp;及&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;twVillage1982.topo.json&lt;/span&gt;，是 &lt;span style=&quot;font-family: courier;&quot;&gt;geo.json&lt;/span&gt; 的後繼優化格式，簡略記一下主要的差異：就是相鄰的 2 個區中間的界線不重複記錄。&lt;/div&gt;&lt;div&gt;例如：A 區與 B 區相鄰，&lt;span style=&quot;font-family: courier;&quot;&gt;geo.json&lt;/span&gt; 是完整地記錄 &lt;span style=&quot;font-family: courier;&quot;&gt;A&lt;/span&gt; 區的座標點 &lt;span style=&quot;font-family: courier;&quot;&gt;[1,2,3,4,5]&lt;/span&gt; 及 B 區的座標點 &lt;span style=&quot;font-family: courier;&quot;&gt;[1,6,7,8,9,2]&lt;/span&gt;，如此 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;點 1&lt;/span&gt; 及 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;點 2&lt;/span&gt; 就被記錄了 &lt;span style=&quot;font-family: courier;&quot;&gt;2 次&lt;/span&gt;，而 &lt;span style=&quot;font-family: courier;&quot;&gt;topo.json&lt;/span&gt; 則透過&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;&lt;b&gt;拓撲方法&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;只記錄 &lt;span style=&quot;font-family: courier;&quot;&gt;1 次 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;點1到點2&lt;/span&gt;&lt;/span&gt; 的弧線&lt;/span&gt;，相較之下，&lt;span style=&quot;font-family: courier;&quot;&gt;topo.json&lt;/span&gt;&amp;nbsp;的檔案就比較小。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAChxX3N8nqbToa2SNS4VOHakI5OsLY3wPrb4_jlmd23fH_jbEq-zqkw0rg7kG_ie9u48dFz4BeMAHpnrLBbT_BlrPV2PHzJ4LHaUX1l4UmvvIewzyhkfTQJYa8sGHO46r2nbnAW7KefP2UzfmJ3BomlExbagnVusHYQ1GeL1QMaJglo5myUf3fdpn9c/s436/06-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;226&quot; data-original-width=&quot;436&quot; height=&quot;333&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAChxX3N8nqbToa2SNS4VOHakI5OsLY3wPrb4_jlmd23fH_jbEq-zqkw0rg7kG_ie9u48dFz4BeMAHpnrLBbT_BlrPV2PHzJ4LHaUX1l4UmvvIewzyhkfTQJYa8sGHO46r2nbnAW7KefP2UzfmJ3BomlExbagnVusHYQ1GeL1QMaJglo5myUf3fdpn9c/w640-h333/06-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_ezQenPLQ4c1G-xJRG_5-Dc8aXs4BikuridZGCC_fnF2ypXBo5lxnrqCglDCWUfw7KDe0sriAUG0rEdKRYlxSnuKloXGrCslSNWV5ljN75d7C_R8kNJ6pVGwY2B8KBq6-60qjzSJX6JCHgEp_u4Ma82_ce3AUzdnsVxxA9TEPjw9Ir3v92R5WZK47ks/s657/01_github_g0v_json.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;535&quot; data-original-width=&quot;657&quot; height=&quot;522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_ezQenPLQ4c1G-xJRG_5-Dc8aXs4BikuridZGCC_fnF2ypXBo5lxnrqCglDCWUfw7KDe0sriAUG0rEdKRYlxSnuKloXGrCslSNWV5ljN75d7C_R8kNJ6pVGwY2B8KBq6-60qjzSJX6JCHgEp_u4Ma82_ce3AUzdnsVxxA9TEPjw9Ir3v92R5WZK47ks/w640-h522/01_github_g0v_json.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;而 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 目前只支援 &lt;span style=&quot;font-family: courier;&quot;&gt;geojson&lt;/span&gt; 格式&lt;/span&gt;&lt;/span&gt;，所以我們就下載這 2 個檔，以 &lt;span style=&quot;font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt; 為例&lt;/div&gt;&lt;div&gt;點擊&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt;&lt;/div&gt;&lt;div&gt;→ 點擊&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;【下載】圖示&lt;/span&gt;&lt;/span&gt;下載 &lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt; 檔&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD0U4oH58y28wwXZXRSv3qOB6eEpn2GeyDywY7_fIo8U99u5Gn28952-UCFts-2YNZIHEown1BvM7dGDJR4ny-qpro6Fb1MPRZcEmOyo18hnDLSxz9oVm_OcY9-ENkAjeDxRfq_x0QS9EGXWRoqZF3wXYSV_1KhqChgOial-BHzrMErb1P18Bnyqke7kw/s1016/02_download_town.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;222&quot; data-original-width=&quot;1016&quot; height=&quot;140&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD0U4oH58y28wwXZXRSv3qOB6eEpn2GeyDywY7_fIo8U99u5Gn28952-UCFts-2YNZIHEown1BvM7dGDJR4ny-qpro6Fb1MPRZcEmOyo18hnDLSxz9oVm_OcY9-ENkAjeDxRfq_x0QS9EGXWRoqZF3wXYSV_1KhqChgOial-BHzrMErb1P18Bnyqke7kw/w640-h140/02_download_town.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;→ 將&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt;&amp;nbsp;放置在 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/var/www/html/&lt;/span&gt; 下，然後在 &lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 設定&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt;&amp;nbsp;的 &lt;span style=&quot;font-family: courier;&quot;&gt;url&lt;/span&gt;，在本例為 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;http://localhost/twTown1982.geo.json&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;瞄一下檔案內容&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-json linenums&quot;&gt;&amp;nbsp;
{&quot;type&quot;: &quot;FeatureCollection&quot;,
 &quot;features&quot;: [

 ...
 ...
 
    {&quot;properties&quot;:{&quot;TOWNSN&quot;:&quot;64000002&quot;,&quot;TOWNID&quot;:&quot;6400003&quot;,&quot;COUNTYNAME&quot;:&quot;高雄市&quot;,&quot;TOWNNAME&quot;:&quot;左營區&quot;,&quot;name&quot;:&quot;高雄市/左營區&quot;},
				   &quot;type&quot;:&quot;Feature&quot;,
				   &quot;geometry&quot;:{&quot;type&quot;: &quot;Polygon&quot;, 
							   &quot;coordinates&quot;: [[[ 120.274766995608132, 22.706593189102705 ], 
                                   ...
                                   ...
                               ]] 
							}
				},
    ...
    ...
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;登入 &lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;，點擊【齒輪】圖示&lt;/div&gt;&lt;div&gt;→ 管理員設定&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqpyMrhucM8yz1y5Xba8Kxrz-n0ZacOSnKHN91AytjUuyY_VsgrsDhVwl22whJlxdSUDEfFdHiH2untC-VjnwqJ4ucmdO0YnpGzlh3bZ2Ic6pWo2o4qlwzfQbBnUn4wrGEW7ekA1zPXJqbX_TY0w3VzL3YxwTMNJdAq5VjNQQVicwho0vxOHxqTtdx0E/s220/03.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;173&quot; data-original-width=&quot;220&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqpyMrhucM8yz1y5Xba8Kxrz-n0ZacOSnKHN91AytjUuyY_VsgrsDhVwl22whJlxdSUDEfFdHiH2untC-VjnwqJ4ucmdO0YnpGzlh3bZ2Ic6pWo2o4qlwzfQbBnUn4wrGEW7ekA1zPXJqbX_TY0w3VzL3YxwTMNJdAq5VjNQQVicwho0vxOHxqTtdx0E/s1600/03.png&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;→ 地圖 → 新增一個地圖&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq8oBkaq5jl880MbWPXHdJccGSXmRtdvYUEBENQVp26OpSwG5WbkhLSmztuUhgCZJuhIqek4CYJDronmoFfPGYTtDmzQI5roVT5thv2_eWkYVQdN6dVP53KyE6tql5_MbvWtgT0swPSQj1LcehatcP4ajLsqSvGbIfG1yhGibmIxhyvpBfIPyWDV1iSBs/s1210/04.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;537&quot; data-original-width=&quot;1210&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq8oBkaq5jl880MbWPXHdJccGSXmRtdvYUEBENQVp26OpSwG5WbkhLSmztuUhgCZJuhIqek4CYJDronmoFfPGYTtDmzQI5roVT5thv2_eWkYVQdN6dVP53KyE6tql5_MbvWtgT0swPSQj1LcehatcP4ajLsqSvGbIfG1yhGibmIxhyvpBfIPyWDV1iSBs/w640-h284/04.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;→【&lt;span style=&quot;font-family: courier;&quot;&gt;URL&lt;/span&gt;】輸入&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;http://localhost/twTown1982.geo.json&lt;/span&gt;&lt;/div&gt;&lt;div&gt;→【區域識別符】選擇 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;TOWNID&lt;/span&gt;&lt;/div&gt;&lt;div&gt;→【區域顯示名稱】選擇 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;TOWNNAME&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJc9YqwAQ1L_DvxdJNmFyr0SkyMucHv4qZrEGYfa-IK8DomcpckZLnRg3hXodpixxXEh64mMlw6PQ3xtYPxAfXUvKE1a5rfgp-nhNjSuafQmIsnnTfF484c-R9nR5b8z4SgbjEnI7pJWvmQ89n6CsZpy_wljoaYK3HfDpcOWPKQ-XGfTKAlwi6BuIejdo/s1139/05.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;535&quot; data-original-width=&quot;1139&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJc9YqwAQ1L_DvxdJNmFyr0SkyMucHv4qZrEGYfa-IK8DomcpckZLnRg3hXodpixxXEh64mMlw6PQ3xtYPxAfXUvKE1a5rfgp-nhNjSuafQmIsnnTfF484c-R9nR5b8z4SgbjEnI7pJWvmQ89n6CsZpy_wljoaYK3HfDpcOWPKQ-XGfTKAlwi6BuIejdo/w640-h300/05.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;g0v/twgeojson&lt;/span&gt; 的是 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;2014 年&lt;/span&gt;的資料，理論上這幾年並沒有重新劃分區級行政區，所以資料應該仍可信、準確。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;g0v/twgeojson/json/twVillage1982.geo.json&lt;/span&gt; 則更細, 行政區範圍小至 &quot;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;村/里&lt;/span&gt;&lt;/span&gt;&quot;，村/里的劃分就可能不定期會變動了，例如老人家居住的里聽說最慢 2027 年就將要拆成 4 個里。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;建立&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;區級&lt;/span&gt;&lt;/span&gt;資料表存放 &lt;span style=&quot;font-family: courier;&quot;&gt;geojson&lt;/span&gt; 的資料，在本筆記，資料表命名為 &lt;span style=&quot;font-family: courier;&quot;&gt;town_geo&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sql linenums&quot;&gt;&amp;nbsp;
CREATE TABLE `town_geo` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `TOWNSN` VARCHAR(20),
    `TOWNID` VARCHAR(20),
    `COUNTYNAME` VARCHAR(50),
    `TOWNNAME` VARCHAR(50),
    `name` VARCHAR(100),
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;寫一個 &lt;span style=&quot;font-family: courier;&quot;&gt;php&lt;/span&gt; 讀取 &lt;span style=&quot;font-family: courier;&quot;&gt;twTown1982.geo.json&lt;/span&gt; 並存入 &lt;span style=&quot;font-family: courier;&quot;&gt;town_geo&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php
ini_set(&#39;display_errors&#39;, 1);
ini_set(&#39;memory_limit&#39;, &#39;512M&#39;);    // 放寬記憶體限制, 才能讀大檔案

// 資料庫連線設定
$host = &#39;localhost&#39;;
$dbname = &#39;資料庫名稱&#39;;
$username = &#39;帳號&#39;;
$password = &#39;密碼&#39;;

try {
    // 1. 建立 PDO 連線
    $pdo = new PDO(&quot;mysql:host=$host;dbname=$dbname;charset=utf8mb4&quot;, $username, $password);
    $pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 2. 讀取並解析 GeoJSON 檔案
    $jsonFile = &#39;twTown1982.geo.json&#39;;
    if (!file_exists($jsonFile)) {
        die(&quot;錯誤：找不到檔案 $jsonFile&quot;);
    }

    $jsonContent = file_get_contents($jsonFile);
    $data = json_decode($jsonContent, true);

    if ($data === null) {
        die(&quot;錯誤：JSON 解析失敗&quot;);
    }

    // 3. 準備 SQL 插入語句
    $sql = &quot;INSERT INTO town_geo (TOWNSN, TOWNID, COUNTYNAME, TOWNNAME, name) 
            VALUES (:townsn, :townid, :countyname, :townname, :name)&quot;;
    $stmt = $pdo-&amp;gt;prepare($sql);

    // 4. 開始交易 (Transaction) 以提升大量寫入的速度
    $pdo-&amp;gt;beginTransaction();

    $count = 0;
    foreach ($data[&#39;features&#39;] as $feature) {
        $props = $feature[&#39;properties&#39;];

        // 綁定參數並執行
        $stmt-&amp;gt;execute([
            &#39;:townsn&#39;     =&amp;gt; $props[&#39;TOWNSN&#39;] ?? null,
            &#39;:townid&#39;     =&amp;gt; $props[&#39;TOWNID&#39;] ?? null,
            &#39;:countyname&#39; =&amp;gt; $props[&#39;COUNTYNAME&#39;] ?? null,
            &#39;:townname&#39;   =&amp;gt; $props[&#39;TOWNNAME&#39;] ?? null,
            &#39;:name&#39;       =&amp;gt; $props[&#39;name&#39;] ?? null
        ]);
        
        $count++;
    }

    // 5. 提交交易
    $pdo-&amp;gt;commit();

    echo &quot;成功！共匯入 $count 筆資料。&quot;;

} catch (PDOException $e) {
    // 發生錯誤時回滾
    if (isset($pdo) &amp;amp;&amp;amp; $pdo-&amp;gt;inTransaction()) {
        $pdo-&amp;gt;rollBack();
    }
    echo &quot;資料庫錯誤：&quot; . $e-&amp;gt;getMessage();
} catch (Exception $e) {
    echo &quot;一般錯誤：&quot; . $e-&amp;gt;getMessage();
}
?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;如此就能結合自己的資料表，建立區級行政區的圖表了。&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEu5a3xDxkFru1k28v45a5mi5wyV7SjaGzSuQhmNw2j1Btna9oL3aPoOMu-7a2AEhUCXjZKsDn9sDwtiho1lu9HkvUxkpmo7oN26WpL_D9cznIdFj7HEZnG8krmpKopsYvh1GjmYCEFwN6AsQdhYSgHYAFl8Uu88iwAbtPpht2T00H4pQ1utvFuw9KYs/s635/07_town_geo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;172&quot; data-original-width=&quot;635&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEu5a3xDxkFru1k28v45a5mi5wyV7SjaGzSuQhmNw2j1Btna9oL3aPoOMu-7a2AEhUCXjZKsDn9sDwtiho1lu9HkvUxkpmo7oN26WpL_D9cznIdFj7HEZnG8krmpKopsYvh1GjmYCEFwN6AsQdhYSgHYAFl8Uu88iwAbtPpht2T00H4pQ1utvFuw9KYs/w640-h174/07_town_geo.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再建立&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;里(村)級&lt;/span&gt;&lt;/span&gt;資料表，在本例為 village_geo&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sql linenums&quot;&gt;&amp;nbsp;
CREATE TABLE `village_geo` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `VILLAGESN` VARCHAR(20),
    `VILLAGEID` VARCHAR(20),
    `COUNTYNAME` VARCHAR(50),
    `TOWNNAME` VARCHAR(50),
    `VILLAGENAM` VARCHAR(50),
    `name` VARCHAR(150),
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;寫一個 &lt;span style=&quot;font-family: courier;&quot;&gt;php&lt;/span&gt; 讀取 &lt;span style=&quot;font-family: courier;&quot;&gt;twVillage1982.geo.json&lt;/span&gt; 並存入 &lt;span style=&quot;font-family: courier;&quot;&gt;village_geo&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php
// 1. 提高記憶體限制（針對較大的村里 GeoJSON 檔案）
ini_set(&#39;memory_limit&#39;, &#39;512M&#39;);
set_time_limit(0); // 取消執行時間限制

// 資料庫連線設定
$host = &#39;localhost&#39;;
$dbname = &#39;資料庫名稱&#39;;
$username = &#39;帳號&#39;;
$password = &#39;密碼&#39;;

try {
    // 2. 建立 PDO 連線
    $pdo = new PDO(&quot;mysql:host=$host;dbname=$dbname;charset=utf8mb4&quot;, $username, $password);
    $pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 3. 讀取 GeoJSON 檔案
    $jsonFile = &#39;twVillage1982.geo.json&#39;;
    if (!file_exists($jsonFile)) {
        die(&quot;錯誤：找不到檔案 $jsonFile&quot;);
    }

    echo &quot;正在讀取檔案...\n&quot;;
    $jsonContent = file_get_contents($jsonFile);
    
    echo &quot;正在解析 JSON...\n&quot;;
    $data = json_decode($jsonContent, true);
    
    // 解析完立刻釋放字串記憶體
    unset($jsonContent); 

    if ($data === null) {
        die(&quot;錯誤：JSON 解析失敗，請檢查檔案格式。&quot;);
    }

    // 4. 準備 SQL 插入語句
    $sql = &quot;INSERT INTO village_geo (VILLAGESN, VILLAGEID, COUNTYNAME, TOWNNAME, VILLAGENAM, name) 
            VALUES (:v_sn, :v_id, :c_name, :t_name, :v_name, :full_name)&quot;;
    $stmt = $pdo-&amp;gt;prepare($sql);

    // 5. 開始交易處理 (大量資料寫入必備)
    $pdo-&amp;gt;beginTransaction();

    echo &quot;正在匯入資料...\n&quot;;
    $count = 0;
    foreach ($data[&#39;features&#39;] as $feature) {
        $props = $feature[&#39;properties&#39;];

        $stmt-&amp;gt;execute([
            &#39;:v_sn&#39;      =&amp;gt; $props[&#39;VILLAGESN&#39;] ?? null,
            &#39;:v_id&#39;      =&amp;gt; $props[&#39;VILLAGEID&#39;] ?? null,
            &#39;:c_name&#39;    =&amp;gt; $props[&#39;COUNTYNAME&#39;] ?? null,
            &#39;:t_name&#39;    =&amp;gt; $props[&#39;TOWNNAME&#39;] ?? null,
            &#39;:v_name&#39;    =&amp;gt; $props[&#39;VILLAGENAM&#39;] ?? null,
            &#39;:full_name&#39; =&amp;gt; $props[&#39;name&#39;] ?? null
        ]);
        
        $count++;
    }

    // 6. 提交交易
    $pdo-&amp;gt;commit();
    echo &quot;匯入完成！成功存入 $count 筆村里資料。&quot;;

} catch (PDOException $e) {
    if (isset($pdo) &amp;amp;&amp;amp; $pdo-&amp;gt;inTransaction()) {
        $pdo-&amp;gt;rollBack();
    }
    echo &quot;資料庫錯誤：&quot; . $e-&amp;gt;getMessage();
} catch (Exception $e) {
    echo &quot;一般錯誤：&quot; . $e-&amp;gt;getMessage();
}
?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;匯入的記錄如下圖&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmM7OeeFFaV0ISPzhUf41voy3TrGoXbBgDJSX1ZRuQDARsaSM8iW3TEHLWhvR4PDEmZFdoePAfJMlzRq5akFjzu2b_Bj248f_wt6N1aiwx68GakgFgpB-siyZz_9kV-Tkrc1QopYDJD9OweRzGicSjDUmk3ox2h4hs4gQwKsREVCGiwStvTautOKFpdoc/s794/07_village_geo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;166&quot; data-original-width=&quot;794&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmM7OeeFFaV0ISPzhUf41voy3TrGoXbBgDJSX1ZRuQDARsaSM8iW3TEHLWhvR4PDEmZFdoePAfJMlzRq5akFjzu2b_Bj248f_wt6N1aiwx68GakgFgpB-siyZz_9kV-Tkrc1QopYDJD9OweRzGicSjDUmk3ox2h4hs4gQwKsREVCGiwStvTautOKFpdoc/w640-h134/07_village_geo.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;如果您需要的圖資精細顆粒度要小到&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;村/里&lt;/span&gt;&lt;/span&gt;，&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;國土測繪中心&lt;/span&gt;&lt;/span&gt;在&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;政府資料開放平臺(opendata)&lt;/span&gt; 也有提供圖資，感覺有提續在更新，可能會較適合您，但國土測繪中心&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;沒有&lt;/span&gt;&lt;/span&gt;直接提供 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;geo.json&lt;/span&gt; 格式，我們需要轉換程式幫忙。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;到&amp;nbsp;&lt;a href=&quot;https://data.gov.tw/dataset/7438&quot; style=&quot;font-family: courier;&quot; target=&quot;_blank&quot;&gt;村里界圖(TWD97經緯度)&lt;/a&gt;，點擊【資料資源下載網址】，下載的是壓縮檔，找個目錄解壓縮存放，會看到解壓出來的檔案中有副檔名 &lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;&lt;b style=&quot;background-color: black;&quot;&gt;.shp&lt;/b&gt;&lt;/span&gt; 的檔案，這是主檔。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIU6zCvoQYG74xJFwJMoCTlsOoAgfl-r9Kt1Hh4wklB_6osZf3pnW-UmOu9_ytzeABeC3F1QMs75Eqb8xsOGPvdwKCmjtwn9MDcDesosXYuaSRdutYKBJ3xGNa0E6QxRATOqFxbwtQmbJq9A4CgqOaba_PSQoL97Gg6njewV9lvaiPDz7ZygdtoD9_It4/s1102/%E4%B8%8B%E8%BC%89%E6%9D%91%E9%87%8C%E7%95%8Cshp.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;596&quot; data-original-width=&quot;1102&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIU6zCvoQYG74xJFwJMoCTlsOoAgfl-r9Kt1Hh4wklB_6osZf3pnW-UmOu9_ytzeABeC3F1QMs75Eqb8xsOGPvdwKCmjtwn9MDcDesosXYuaSRdutYKBJ3xGNa0E6QxRATOqFxbwtQmbJq9A4CgqOaba_PSQoL97Gg6njewV9lvaiPDz7ZygdtoD9_It4/w640-h346/%E4%B8%8B%E8%BC%89%E6%9D%91%E9%87%8C%E7%95%8Cshp.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://qgis.org/download/&quot; target=&quot;_blank&quot;&gt;QGIS&lt;/a&gt;&lt;/span&gt;&amp;nbsp;下載格式轉換程式並安裝，藉助程式將 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;shp&lt;/span&gt; 轉換為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;geo.json&lt;/span&gt; 格式。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32rSodZ1OrnD5B8gSNkfqksqKVYwEsjC7hE5j-N2yhk1p7r0dEm8qzndoWSSr5JexLbw2RUkqebhpn9iwfVmyUNtYEIkP16NFOw-V7ebtHdpegPV4gsJl1eXDZkHy0-hwqQEHK6ni3NVF27NkcWjgiP54Et2LkqT7CoUeNehhDpVRiEoJLLPnZGHvbIA/s859/qgis_01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;178&quot; data-original-width=&quot;859&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32rSodZ1OrnD5B8gSNkfqksqKVYwEsjC7hE5j-N2yhk1p7r0dEm8qzndoWSSr5JexLbw2RUkqebhpn9iwfVmyUNtYEIkP16NFOw-V7ebtHdpegPV4gsJl1eXDZkHy0-hwqQEHK6ni3NVF27NkcWjgiP54Et2LkqT7CoUeNehhDpVRiEoJLLPnZGHvbIA/w640-h132/qgis_01.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;選擇 &lt;span style=&quot;font-family: courier;&quot;&gt;shp&lt;/span&gt; 檔，在本例為&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;VILLAGE_NLSC_1150306.shp&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipDryOVUBHL7wM7j7H-uODlymMqvgeGxeEzxIJQk4hEz-9BelkLRUSfz6EswKqDRyvKD_DBPVeyiL6WCSLOAvnfJpYWaprGXDZrb0y_30EYiuKWdpnFZzc_PhtaEJgWhSAMnoQvOSnKstgNUjqzfSIs_ZK3aBkK5pfIpITPcekaJv9h5wUC2E8zSMJ-do/s1086/qgis_02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;771&quot; data-original-width=&quot;1086&quot; height=&quot;454&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipDryOVUBHL7wM7j7H-uODlymMqvgeGxeEzxIJQk4hEz-9BelkLRUSfz6EswKqDRyvKD_DBPVeyiL6WCSLOAvnfJpYWaprGXDZrb0y_30EYiuKWdpnFZzc_PhtaEJgWhSAMnoQvOSnKstgNUjqzfSIs_ZK3aBkK5pfIpITPcekaJv9h5wUC2E8zSMJ-do/w640-h454/qgis_02.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjry0xtVkKetw80gdd0haWy60Qz_SVBoNUEVwzXQjdQtXKLitJguNtPd_Mg8gqlgUHGdpcsp25v03kxLjRL3zP9WJk80gt5qUnoDSpxn7c5Wc1sjvLOiX3GuvwOW7p8uYMiLCTbi1pKKmfqF4GOUu7ceJc4-q5oyf6mPs749DozvXikToweK0qPnQJDJXM/s1002/qgis_03.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;632&quot; data-original-width=&quot;1002&quot; height=&quot;404&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjry0xtVkKetw80gdd0haWy60Qz_SVBoNUEVwzXQjdQtXKLitJguNtPd_Mg8gqlgUHGdpcsp25v03kxLjRL3zP9WJk80gt5qUnoDSpxn7c5Wc1sjvLOiX3GuvwOW7p8uYMiLCTbi1pKKmfqF4GOUu7ceJc4-q5oyf6mPs749DozvXikToweK0qPnQJDJXM/w640-h404/qgis_03.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;功能表 【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Layer&lt;/span&gt;】→【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Save As&lt;/span&gt;】→【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Format&lt;/span&gt;】欄位選擇 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;GeoJSON&lt;/span&gt; → 輸入檔名，在本例為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;town_twd97&lt;/span&gt; → 按下【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;確定&lt;/span&gt;&lt;/span&gt;】鈕&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFs5pn8oEHZSOhRHSmueW0V_ibZRioOxtYw1Z4b22esqtomx4gXlEpYUmMcx4QAxg9kHGw8T5AuBLDjRtQ-kpFAGEXJ1MrJuwUEbrNAx13b_ZX-y_wsj6C6owLi3KxrtwkvGwhNIT36tWrzQWUhTytXrcGgqAjIGQoJNvWjVCcTs9O_u8d1trE3UoZ-V8/s664/qgis_05.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;664&quot; data-original-width=&quot;593&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFs5pn8oEHZSOhRHSmueW0V_ibZRioOxtYw1Z4b22esqtomx4gXlEpYUmMcx4QAxg9kHGw8T5AuBLDjRtQ-kpFAGEXJ1MrJuwUEbrNAx13b_ZX-y_wsj6C6owLi3KxrtwkvGwhNIT36tWrzQWUhTytXrcGgqAjIGQoJNvWjVCcTs9O_u8d1trE3UoZ-V8/w572-h640/qgis_05.png&quot; width=&quot;572&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟檔案，會發現 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;properties&lt;/span&gt;&amp;nbsp;內的欄位跟上面 &lt;span style=&quot;font-family: courier;&quot;&gt;g0v&lt;/span&gt; 的不同，由此可知，&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;properties&amp;nbsp;&lt;/span&gt;的欄位是各自定義的；所以，若您圖資是選擇國土測繪中心的，需注意匯入資料的欄位也會不同。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/01/metabase.html&quot; target=&quot;_blank&quot;&gt;套用台灣地圖進行分析(一) -- 市級行政區&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/3320592698481615303/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3320592698481615303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3320592698481615303'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase.html' title='【Metabase】套用台灣地圖進行分析(二) -- 區、里(村)級行政區'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAChxX3N8nqbToa2SNS4VOHakI5OsLY3wPrb4_jlmd23fH_jbEq-zqkw0rg7kG_ie9u48dFz4BeMAHpnrLBbT_BlrPV2PHzJ4LHaUX1l4UmvvIewzyhkfTQJYa8sGHO46r2nbnAW7KefP2UzfmJ3BomlExbagnVusHYQ1GeL1QMaJglo5myUf3fdpn9c/s72-w640-h333-c/06-2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8285176906240099502</id><published>2026-03-16T01:25:00.007+08:00</published><updated>2026-03-22T22:28:38.960+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><category scheme="http://www.blogger.com/atom/ns#" term="Database"/><title type='text'>【Metabase】限制/區隔一般 user 的查詢權限</title><content type='html'>有時，基於工作/職務劃分，公司的資料會進行可視資料權限的控管；例如：行銷部的可以看到有關客戶名單，但不能看業務部有關銷售的業績、人事資料...等，反之亦然。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 社群版沒有限制使用者可視資料的功能(付費版才有)，也就是說，當系統管理員建立了一個資料庫連線，則所有&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase 的一般使用者都能看到該連線的所有 table。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;不過我們有變通做法 --&amp;nbsp;&lt;/span&gt;從資料庫分別設定幾個限制權限的帳號，本筆記以&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL8 做範例，例如建立帳號 user1(代表業務部)，只授予 user1 能查詢檢視 table1，&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;建立帳號&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;user2(代表行銷部)，只能查詢檢視 table2&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;root&lt;/span&gt; 帳號登入 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt; 或 登入 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;Linux&lt;/span&gt;&lt;/span&gt; 開一個命令列視窗然後建立一個 &lt;span style=&quot;font-family: courier;&quot;&gt;MySQL&lt;/span&gt; 連線，本例示範在 &lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt; 操作&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvoSn26bBHkyjJAe3aAHT5Xy0G2xEjb8K4A5pY9bPoSmA3hF6InVKkSLH9OSfkWEk61cDdnqDb8UEPP444mqhJkefUoYemcXGxw20oeo70AjG9NODPHnmQ0FMaZyydXz9pIfWOddvoeUuqha45EkcgKVgeb78sC_Xcz2Y7w6XBwcpdVn3ToGn4OFIVaAI/s452/mysql21.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;185&quot; data-original-width=&quot;452&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvoSn26bBHkyjJAe3aAHT5Xy0G2xEjb8K4A5pY9bPoSmA3hF6InVKkSLH9OSfkWEk61cDdnqDb8UEPP444mqhJkefUoYemcXGxw20oeo70AjG9NODPHnmQ0FMaZyydXz9pIfWOddvoeUuqha45EkcgKVgeb78sC_Xcz2Y7w6XBwcpdVn3ToGn4OFIVaAI/w640-h262/mysql21.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sql linenums&quot;&gt;&amp;nbsp;
-- 建立使用者
CREATE  USER  &#39;user1&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;密碼&#39;;

-- 授予 USER1 查詢資料庫 db1 的 table1 的權限
GRANT  SELECT  ON  db1.table1  TO  &#39;user1&#39;@&#39;localhost&#39;;

-- 刷新權限(選擇性命令, 通常會自動生效)
FLUSH  PRIVILEGES;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;驗證：登出&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt;，以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;user1&lt;/span&gt; 登入，就能看到 &lt;span style=&quot;font-family: courier;&quot;&gt;user1&lt;/span&gt; 只能看到 &lt;span style=&quot;font-family: courier;&quot;&gt;db1&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;table1&lt;/span&gt; 的資料。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以管理員帳號登入&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&amp;nbsp;&lt;/span&gt;→&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;設定&amp;nbsp;&lt;/span&gt;→ 管理員設定&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgptUVIEME-OpICagn9TgKn12Aqpfz_43s-Ld1nykSHgMWxXIawQE_3OYlhTfcFnThNwXQDxfjVMYagZNsYEs-eLYquuB00VBHZ8sJFjEG3k20qjcxU57r-wXeAhztMYa4r9w4fYpeQbqnUlZOsdmSxdr4dr2lJb3DaDA_dFUzWIF-JHJcJ4dDxA9b2lmQ/s952/01-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;372&quot; data-original-width=&quot;952&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgptUVIEME-OpICagn9TgKn12Aqpfz_43s-Ld1nykSHgMWxXIawQE_3OYlhTfcFnThNwXQDxfjVMYagZNsYEs-eLYquuB00VBHZ8sJFjEG3k20qjcxU57r-wXeAhztMYa4r9w4fYpeQbqnUlZOsdmSxdr4dr2lJb3DaDA_dFUzWIF-JHJcJ4dDxA9b2lmQ/w640-h250/01-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;資料庫 → 新增資料庫(以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MySQL8&lt;/span&gt; 為例)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg3yT1V-Or37rGyddA-zicWP99CTGLgHm98_AJEwbwhlwc-Te0Us_hMb2uFD1ZPV8IcwzPr358y3_WN0gbg9XQR28ggUShkenffD4DSMLG7TBTN-37YChYCluqaYXRCEkxdmE5DyJd7z6WZc7-vBVvhW4exnrx2uXMzss-2KYeQoyfwzGdpUOMRcN8lck/s1333/02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;180&quot; data-original-width=&quot;1333&quot; height=&quot;86&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg3yT1V-Or37rGyddA-zicWP99CTGLgHm98_AJEwbwhlwc-Te0Us_hMb2uFD1ZPV8IcwzPr358y3_WN0gbg9XQR28ggUShkenffD4DSMLG7TBTN-37YChYCluqaYXRCEkxdmE5DyJd7z6WZc7-vBVvhW4exnrx2uXMzss-2KYeQoyfwzGdpUOMRcN8lck/w640-h86/02.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;輸入在前面為行銷建立的帳號 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;user1&lt;/span&gt;，並在【顯示名稱】輸入 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;sales&lt;/span&gt;(&lt;span style=&quot;font-family: courier;&quot;&gt;Linuxmint22.2&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;MySQL8&lt;/span&gt;&amp;nbsp;設定安裝可參考相關筆記)，重複步驟建立&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;user2&lt;/span&gt;，【顯示名稱】輸入&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;marketing&lt;/span&gt;。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWz-8SKiqRDip6Xucp_pZJISiPUZEQIZFiGNFmYmvF1G8hHPJIP7BsEz-2UkHCsXvkAX5p3V16L3hwKKC2COPnCBNcmg_bdkM0nGTOvzWGn4YQhZY2xabPaMTStsbpLzcTV6INR6UxHcQff8Fk8O6c1KOsPGEJKzts7nunn9zRXstdoIns-UGbJCj6cg/s1620/03_mysql%E9%80%A3%E7%B7%9A.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1620&quot; data-original-width=&quot;809&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWz-8SKiqRDip6Xucp_pZJISiPUZEQIZFiGNFmYmvF1G8hHPJIP7BsEz-2UkHCsXvkAX5p3V16L3hwKKC2COPnCBNcmg_bdkM0nGTOvzWGn4YQhZY2xabPaMTStsbpLzcTV6INR6UxHcQff8Fk8O6c1KOsPGEJKzts7nunn9zRXstdoIns-UGbJCj6cg/s16000/03_mysql%E9%80%A3%E7%B7%9A.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到【權限管理】→【所有使用者群組】，這個群組預設是可查詢所有資料庫的，而且會高過其他群組的設定，所以要把 &lt;span style=&quot;font-family: courier;&quot;&gt;marketing、sales&lt;/span&gt; 的【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;建立提問&lt;/span&gt;&lt;/span&gt;】取消&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgleJLKqUDbZRI1rWnEMSg130UgSsvRujRTfkE3xSm2dlEM5hBPqWWDdGAGFqZcGzm19bFeCdocW13y9hL2KhJuhtW-rUbJP6h3f0_50dO1vDFyW5w3mBsTrciyXEVO1y8m9x0fzXKkv-32Ir31MbKPrvPYsz65YVG28eDYhfHLTGOTbRlugGqN0r7n2MQ/s839/04_%E6%89%80%E6%9C%89%E4%BD%BF%E7%94%A8%E8%80%85%E7%BE%A4%E7%B5%84.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;524&quot; data-original-width=&quot;839&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgleJLKqUDbZRI1rWnEMSg130UgSsvRujRTfkE3xSm2dlEM5hBPqWWDdGAGFqZcGzm19bFeCdocW13y9hL2KhJuhtW-rUbJP6h3f0_50dO1vDFyW5w3mBsTrciyXEVO1y8m9x0fzXKkv-32Ir31MbKPrvPYsz65YVG28eDYhfHLTGOTbRlugGqN0r7n2MQ/w640-h400/04_%E6%89%80%E6%9C%89%E4%BD%BF%E7%94%A8%E8%80%85%E7%BE%A4%E7%B5%84.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;設定業務部只能&lt;/span&gt;查詢&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;sales 資料庫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-XkyuGR3OGj7x0mUXu0O-3YD96URqgiBuc1UClnuWdag7N6l1O-vcYoVYeB9mo1nUm8Lnvqqzj9I0NEynHR0NqLzD2w_pLZU7f5nUOvpx2MLEiHo8vDAtwWiCxCrDwNBRLRFXBVqe10AQQXfU6PXGaMRXZgJCv8BJLRxbzPPmnQWrN8KPvbWmHxgZet4/s656/05_%E6%A5%AD%E5%8B%99%E9%83%A8.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;180&quot; data-original-width=&quot;656&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-XkyuGR3OGj7x0mUXu0O-3YD96URqgiBuc1UClnuWdag7N6l1O-vcYoVYeB9mo1nUm8Lnvqqzj9I0NEynHR0NqLzD2w_pLZU7f5nUOvpx2MLEiHo8vDAtwWiCxCrDwNBRLRFXBVqe10AQQXfU6PXGaMRXZgJCv8BJLRxbzPPmnQWrN8KPvbWmHxgZet4/w640-h176/05_%E6%A5%AD%E5%8B%99%E9%83%A8.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;而行銷部只能&lt;/span&gt;查詢&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;marketing 資料庫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRaIXahT1rI2HMOXX_fogqAAr4aXfMzsK_sDGrUIfD0nrY9KZzjoblqQK3z-WbXaEtHTnet2PMRGX_ZYLtD6g5qtDb7e7HRxuR_p5wDO2oZSxpAJg9NhPVYeR213ir4K6ZSh-8The00bQ89Yr5ST8muUkXWJBpqIXhbVeo2BeKI0_-lwTOLWuF5c1nfLw/s656/06_%E8%A1%8C%E9%8A%B7%E9%83%A8.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;184&quot; data-original-width=&quot;656&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRaIXahT1rI2HMOXX_fogqAAr4aXfMzsK_sDGrUIfD0nrY9KZzjoblqQK3z-WbXaEtHTnet2PMRGX_ZYLtD6g5qtDb7e7HRxuR_p5wDO2oZSxpAJg9NhPVYeR213ir4K6ZSh-8The00bQ89Yr5ST8muUkXWJBpqIXhbVeo2BeKI0_-lwTOLWuF5c1nfLw/w640-h180/06_%E8%A1%8C%E9%8A%B7%E9%83%A8.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;hr&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;相關筆記 ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2025/12/metabaselinuxmint222-metabase.html&quot; target=&quot;_blank&quot;&gt;LinuxMint22.2，設定為開機即啟動 Metabase 服務&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8285176906240099502/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase-user.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8285176906240099502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8285176906240099502'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/03/metabase-user.html' title='【Metabase】限制/區隔一般 user 的查詢權限'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvoSn26bBHkyjJAe3aAHT5Xy0G2xEjb8K4A5pY9bPoSmA3hF6InVKkSLH9OSfkWEk61cDdnqDb8UEPP444mqhJkefUoYemcXGxw20oeo70AjG9NODPHnmQ0FMaZyydXz9pIfWOddvoeUuqha45EkcgKVgeb78sC_Xcz2Y7w6XBwcpdVn3ToGn4OFIVaAI/s72-w640-h262-c/mysql21.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-1734397433988432404</id><published>2026-01-26T16:36:00.000+08:00</published><updated>2026-01-26T16:36:01.277+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Database"/><title type='text'>【MySQL8】匯入大容量 .sql 檔</title><content type='html'>&lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt; 只能匯入容量 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;2M&lt;/span&gt; 以內的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;.sql&lt;/span&gt; 檔，若要匯入大容量&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;.sql&lt;/span&gt;，則需要以命令列操作
&lt;pre class=&quot;prettyprint lang-sql linenums&quot;&gt;&amp;nbsp;
# 切換到放置 .sql 檔的目錄下,
# 本例中, aa.sql 置於桌面
user$  cd  桌面

# 進入 su 模式
user$  sudo  su

# 匯入檔案
root#  mysql  -u  root  -p  資料庫名 &amp;lt; aa.sql
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/1734397433988432404/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/mysql8-sql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1734397433988432404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1734397433988432404'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/mysql8-sql.html' title='【MySQL8】匯入大容量 .sql 檔'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-1369196684934154782</id><published>2026-01-25T02:26:00.010+08:00</published><updated>2026-01-25T23:17:31.165+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><title type='text'>【Metabase】設定委託 Gmail 定時發送通知信件</title><content type='html'>&lt;div&gt;如果您設定的儀表板的數據是每日更新的，或是希望在您關心的某個數據發生較大的變化時(例如某日營業額突然暴量)通知您，就需要有台 &lt;span style=&quot;font-family: courier;&quot;&gt;mail server&lt;/span&gt; 寄送通知信件。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;若您也沒有自己架設的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;mail server，&lt;/span&gt;則可以申請 &lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt;，設定 &lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 委託&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt;&amp;nbsp;寄送通知信件；&lt;span style=&quot;font-family: courier;&quot;&gt;Gmail 這項服務基本上是免費的，不過 Google 為了避免被用來惡意寄發垃圾信，所以有每日 500 封、且單封信件大小不可超過 10M 的限制&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;登入 &lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt; 帳戶&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2bAOwhc-jxFGThOX_a5hoPNegh-RWfNZ_4xKp5iuxVXEvd4BVH4I45kKBOvfJn_lUvqEGwHBdZd7FoZzdsUdC7Y_O4fIa3gBWM06DalZXEnkpCwU8a5nRDITrmIbmxe_rq3UlJROdB33WvQfp391OxoFbQdxAnghcqUbWfDlixGfTCdZjTUHGw9ykuPc/s1403/smtp01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;443&quot; data-original-width=&quot;1403&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2bAOwhc-jxFGThOX_a5hoPNegh-RWfNZ_4xKp5iuxVXEvd4BVH4I45kKBOvfJn_lUvqEGwHBdZd7FoZzdsUdC7Y_O4fIa3gBWM06DalZXEnkpCwU8a5nRDITrmIbmxe_rq3UlJROdB33WvQfp391OxoFbQdxAnghcqUbWfDlixGfTCdZjTUHGw9ykuPc/w640-h202/smtp01.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點擊右上角的帳戶圖示 → 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;管理你的 &lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt; 帳戶&lt;/span&gt;&lt;/span&gt;】&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXQcBbCrQXi4jCNfuSMDHvBOJ9pBakN112BRw0XmLfN3fZyO8fLY2p6lkewHqp3BewcuW0levUwR-0PfB2TrWUgOyH-1uSwWOIftwT8XJajHSS3i2-GMTjdH2EkKwx8kfQqer1t2s5BC7qd9ts-Xr7nvB4dXafH5iOCTYrsut237llqkw3YSOxqw0p5k0/s602/smtp01-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;602&quot; data-original-width=&quot;438&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXQcBbCrQXi4jCNfuSMDHvBOJ9pBakN112BRw0XmLfN3fZyO8fLY2p6lkewHqp3BewcuW0levUwR-0PfB2TrWUgOyH-1uSwWOIftwT8XJajHSS3i2-GMTjdH2EkKwx8kfQqer1t2s5BC7qd9ts-Xr7nvB4dXafH5iOCTYrsut237llqkw3YSOxqw0p5k0/w291-h400/smtp01-2.png&quot; width=&quot;291&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;確認帳戶已啟用【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;兩步驟驗證&lt;/span&gt;】 →&amp;nbsp;在上方的搜尋框輸入【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;應用程式密碼&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrHkbnKMsjBbpnA6i3g_PHvOdor1Mv_sEidRLYqAUvEhN8RZUzpO9VP_KRC-C03r_qDwpnzI7cLM8qrT2TPDYMtnmJ7nks4vLq3Nk5bUDN_uAjK1iftwJA_eQZvvAAnPugg5RdWc24H7t9oB3spwmodWcdcZpt1L2gxjSA9XI92zIerQMycb8HGuwolg/s1224/smtp04.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;678&quot; data-original-width=&quot;1224&quot; height=&quot;355&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrHkbnKMsjBbpnA6i3g_PHvOdor1Mv_sEidRLYqAUvEhN8RZUzpO9VP_KRC-C03r_qDwpnzI7cLM8qrT2TPDYMtnmJ7nks4vLq3Nk5bUDN_uAjK1iftwJA_eQZvvAAnPugg5RdWc24H7t9oB3spwmodWcdcZpt1L2gxjSA9XI92zIerQMycb8HGuwolg/w640-h355/smtp04.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;為應用程式命名，在本例中，就叫做 &lt;span style=&quot;font-family: courier;&quot;&gt;metabase。&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsFEdPWvtniEOpFlE8P0hd6Q0slMdLE3u7aMxN1gUQlHwxJ0CEtshVDZhKO_9hmbq5zmFTLpLz1bJ8czyEqsJBjH56DkharpJiK2zN78qeOvt5yWdiHhwy08cvRXb_G3KUfxHuInRHTtPlnDAA3jHJQjdkQ-pYLtIHgG37h8O6qcBbwlIEBpTOmJtfJ8/s653/smtp05.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;631&quot; data-original-width=&quot;653&quot; height=&quot;386&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsFEdPWvtniEOpFlE8P0hd6Q0slMdLE3u7aMxN1gUQlHwxJ0CEtshVDZhKO_9hmbq5zmFTLpLz1bJ8czyEqsJBjH56DkharpJiK2zN78qeOvt5yWdiHhwy08cvRXb_G3KUfxHuInRHTtPlnDAA3jHJQjdkQ-pYLtIHgG37h8O6qcBbwlIEBpTOmJtfJ8/w400-h386/smtp05.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;系統產生 16 字的密碼&lt;/span&gt;，複製/記下來。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXvPCqzO3d2dDdyZXd1AvRMVLExOyNx3ctOLQRs7-I6RY4KfYE92GNSycO49-7_NTZh9H3r3pfBk_4k8FX0KkItMPxtA0aiC9jkXWxt9-a35i_GLBcZyc-zYDLZp_dU8GWWEf_wZhZcc7o1uW8Y0st45rJu3A7hjmfWctWH8hyK-u0a0aLOFaT5DPoUs/s725/smtp06.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;678&quot; data-original-width=&quot;725&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXvPCqzO3d2dDdyZXd1AvRMVLExOyNx3ctOLQRs7-I6RY4KfYE92GNSycO49-7_NTZh9H3r3pfBk_4k8FX0KkItMPxtA0aiC9jkXWxt9-a35i_GLBcZyc-zYDLZp_dU8GWWEf_wZhZcc7o1uW8Y0st45rJu3A7hjmfWctWH8hyK-u0a0aLOFaT5DPoUs/w400-h374/smtp06.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;管理員&lt;/span&gt;&lt;/span&gt;登入 &lt;span style=&quot;font-family: courier;&quot;&gt;metabase&lt;/span&gt;&amp;nbsp;→ 點擊右上角的&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;齒輪&lt;/span&gt;&lt;/span&gt;圖示&amp;nbsp;→ 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;管理員設定&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq1i-rmiS5Qu8qfNXsMuLT8Ucl5BPtbhF87_52EkaUynzm8AmdJ_spvRX40WmMVwfbqWT4qLG2pe5QREt7b0s0cUq6RLtd2MMgegFrHRkh59dRgG0dlPrpsDXA8Cnd2jre418iHuZ7LtMcvDXMMV4DuDc95MrMyF-OS4j7mUPen4I_cc47ZoVRO1Q5BGU/s432/smtp07.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;381&quot; data-original-width=&quot;432&quot; height=&quot;353&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq1i-rmiS5Qu8qfNXsMuLT8Ucl5BPtbhF87_52EkaUynzm8AmdJ_spvRX40WmMVwfbqWT4qLG2pe5QREt7b0s0cUq6RLtd2MMgegFrHRkh59dRgG0dlPrpsDXA8Cnd2jre418iHuZ7LtMcvDXMMV4DuDc95MrMyF-OS4j7mUPen4I_cc47ZoVRO1Q5BGU/w400-h353/smtp07.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;電子郵件設定&lt;/span&gt;&lt;/span&gt;】 → 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;編輯配置&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9yOgpavEpCflzDMR5P5I_tv_kGS0u6oi1xexx-oAvII29KmeB-qtV8wtfiIi8aGeAxmD6Eh6QfcA4QC6X9NE2ITeHqNx0okuqq53Pk9gJJ8ti1fhGMujdTJ9MDWftAF2sSZSJXS7x3GzXBQB3Ca2Rg-UOUNHljuBCSyQH0us1TDro2FhCBdZN-ojVYIo/s1196/smtp08.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;358&quot; data-original-width=&quot;1196&quot; height=&quot;192&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9yOgpavEpCflzDMR5P5I_tv_kGS0u6oi1xexx-oAvII29KmeB-qtV8wtfiIi8aGeAxmD6Eh6QfcA4QC6X9NE2ITeHqNx0okuqq53Pk9gJJ8ti1fhGMujdTJ9MDWftAF2sSZSJXS7x3GzXBQB3Ca2Rg-UOUNHljuBCSyQH0us1TDro2FhCBdZN-ojVYIo/w640-h192/smtp08.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;參考下圖，填入各個欄位。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg84xLMgF2_s4gKHtU0cmuym_SDNm2X685J8SMRO7cW17CMQk680EEJoBiElwOkCKozU0K2TymtrFD3wIe6OpA1aBmEX4DJRoJPAuTY-Tmhc3mBMQh60LybnBdm-0Zwi6UnoYGy25nnJrUxnT_dvAY6pYsRnHJcoChKMr64oQwFrV7cBQ65KgxqCjrLhbI/s642/smtp09.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;581&quot; data-original-width=&quot;642&quot; height=&quot;363&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg84xLMgF2_s4gKHtU0cmuym_SDNm2X685J8SMRO7cW17CMQk680EEJoBiElwOkCKozU0K2TymtrFD3wIe6OpA1aBmEX4DJRoJPAuTY-Tmhc3mBMQh60LybnBdm-0Zwi6UnoYGy25nnJrUxnT_dvAY6pYsRnHJcoChKMr64oQwFrV7cBQ65KgxqCjrLhbI/w400-h363/smtp09.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;寄送測試信，會寄到管理員的信箱。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2PgTvm7ngE06hHq0j4zw8FDcFnOGn-pwLxfmpD7KfqP9qj-OsmcTq-Upw4rqbgvGoJBTkjD-6TquBKiw7vQqRhAGTIRwriKTRc2GcQ1ptEDUbXL5gU4-kMCSaA79IJVDH9ju3_aejhrTB_Sf4r5UEw-8CaUBd4RZo2nhq72VQZiYwfUpygMNQ-x_89ZM/s744/smtp10.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;579&quot; data-original-width=&quot;744&quot; height=&quot;311&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2PgTvm7ngE06hHq0j4zw8FDcFnOGn-pwLxfmpD7KfqP9qj-OsmcTq-Upw4rqbgvGoJBTkjD-6TquBKiw7vQqRhAGTIRwriKTRc2GcQ1ptEDUbXL5gU4-kMCSaA79IJVDH9ju3_aejhrTB_Sf4r5UEw-8CaUBd4RZo2nhq72VQZiYwfUpygMNQ-x_89ZM/w400-h311/smtp10.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;由於我的管理員 &lt;span style=&quot;font-family: courier;&quot;&gt;email&lt;/span&gt; 是 &lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt;(但與申請 &lt;span style=&quot;font-family: courier;&quot;&gt;smtp.gmail.com&lt;/span&gt; 的帳號不同)，所以去 &lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt; 看有沒有收到信，若有信寄來，就表示設定成功了。&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsqQpHF6idQEsgDXyVwwyvZlU4kfzSHgFziSfkL_-SUZUWPCghj0pPswbGXi6B1reM1_eoiGFvEGFaibTrtW63BL730oG4ZXwc5tEUmVrzl6X0bM18469BXhcdykMJWtFTi5DzFXqAzPUc1UzkKU2KBz-SkNPMgTJ1IdRA7B32R5B3EefiWq6HmJ6pitE/s627/smtp11.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;279&quot; data-original-width=&quot;627&quot; height=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsqQpHF6idQEsgDXyVwwyvZlU4kfzSHgFziSfkL_-SUZUWPCghj0pPswbGXi6B1reM1_eoiGFvEGFaibTrtW63BL730oG4ZXwc5tEUmVrzl6X0bM18469BXhcdykMJWtFTi5DzFXqAzPUc1UzkKU2KBz-SkNPMgTJ1IdRA7B32R5B3EefiWq6HmJ6pitE/w640-h285/smtp11.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;拿&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase 現成自帶的範例儀表板實驗&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdsRsWisMYBZTm5TUViNVwRTjMXiWja6LyzV_ssZO3qWaR9IV_q9WXcsVirDgH0xB1mxU8fWdnQMBt1M31hNN_4ae5DzAGzpCxtg7PqSm5uCaQK3uIRlW8AOEETH9HBtm-51D5nMjVJOlKxayIC3XXXyrcyZXN4ozE8LT0pVB4RnHDUy3GySfH_RYUlyo/s807/smtp12.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;334&quot; data-original-width=&quot;807&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdsRsWisMYBZTm5TUViNVwRTjMXiWja6LyzV_ssZO3qWaR9IV_q9WXcsVirDgH0xB1mxU8fWdnQMBt1M31hNN_4ae5DzAGzpCxtg7PqSm5uCaQK3uIRlW8AOEETH9HBtm-51D5nMjVJOlKxayIC3XXXyrcyZXN4ozE8LT0pVB4RnHDUy3GySfH_RYUlyo/w640-h264/smtp12.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;打開 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;E-commerce Inshights&lt;/span&gt; 後，點擊儀表板右上角的 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;分享&lt;/span&gt;&lt;/span&gt;】圖示 → 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;訂閱&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfGEOkpMKcho7PAA8GhdN-lW6EVenpiTtmuJCNtqo99xS_3RaHAa28PYJTLoPcTvFAooSGm0ijXBG9zz1c3JGYa3vFEKiK79iN1__dr1sAecQPjo3yKCtZo0H29JP2gBD8kGxPcKRLNBCk7IcUm_j4yqEi3veNlKZbN45-6pOBcYEuUWKpseBUXAqQtko/s831/smtp13.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;275&quot; data-original-width=&quot;831&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfGEOkpMKcho7PAA8GhdN-lW6EVenpiTtmuJCNtqo99xS_3RaHAa28PYJTLoPcTvFAooSGm0ijXBG9zz1c3JGYa3vFEKiK79iN1__dr1sAecQPjo3yKCtZo0H29JP2gBD8kGxPcKRLNBCk7IcUm_j4yqEi3veNlKZbN45-6pOBcYEuUWKpseBUXAqQtko/w640-h212/smtp13.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可以從&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&amp;nbsp;的使用者名單選擇要訂閱的人，也可以自己輸入非&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&amp;nbsp;&lt;/span&gt;使用者 → 選擇發送頻率。&lt;/div&gt;&lt;div&gt;若是同一個儀表板，有不同的人在看，在【訂閱】所指定的收信者是各自獨立設定的。&lt;br /&gt;例如：A 已訂閱了&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;E-commerce Inshights&lt;/span&gt;，B 在【訂閱】是看不到有哪些人已經訂閱了&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;E-commerce Inshights 的。&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTAUqjG4TpNeHaMImMNSjX4vS2PfdHP_zoxTsyXIoqKEYKhGipQABY6cHtBe3uy4ZQPQ7yDN87Lf6HA1YSPcLc7fqjdWmxxX0Z7EBtCkRI9cjiUeE-0s-GnbXyIMc-tFOPiKiaQhXEeX4vVR7WEO_pnYABcicRibaM3Yr7tjnwnRKOvuf8FtgU-hNwvmQ/s452/smtp14.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;452&quot; data-original-width=&quot;435&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTAUqjG4TpNeHaMImMNSjX4vS2PfdHP_zoxTsyXIoqKEYKhGipQABY6cHtBe3uy4ZQPQ7yDN87Lf6HA1YSPcLc7fqjdWmxxX0Z7EBtCkRI9cjiUeE-0s-GnbXyIMc-tFOPiKiaQhXEeX4vVR7WEO_pnYABcicRibaM3Yr7tjnwnRKOvuf8FtgU-hNwvmQ/w385-h400/smtp14.png&quot; width=&quot;385&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;現在發送郵件&lt;/span&gt;&lt;/span&gt;】，確認是否設定正確。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBvzXoakfQP4A8mR0saO5hRc7Y6yNrHzAEILDrI534NG-BAzkAd204j1qJSIW-AQn4-de67uwNZ-kn3yGuu1puobcnW4jl5yZJxS8F5pbykmthIBkI7guK-nswpVdjZ2FuoWy5IXu8AbZSQrAS_jfltbkTPtMCUw2AhpDKebaQmrMirPZ00deG7vlFow0/s338/smtp15.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;338&quot; data-original-width=&quot;312&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBvzXoakfQP4A8mR0saO5hRc7Y6yNrHzAEILDrI534NG-BAzkAd204j1qJSIW-AQn4-de67uwNZ-kn3yGuu1puobcnW4jl5yZJxS8F5pbykmthIBkI7guK-nswpVdjZ2FuoWy5IXu8AbZSQrAS_jfltbkTPtMCUw2AhpDKebaQmrMirPZ00deG7vlFow0/s320/smtp15.png&quot; width=&quot;295&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;大約過 5 分鐘，去檢查信箱，就可以看到信件內容了。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqmG9vn-QcAmXr9hax3hBdRLTM8pSqL7EkW7j2PtuJrh6rjZ-bCxm4ysSNRKZeSNnJLwPDYpyWGK_kCoKF-slcQp_upaWGMiVewcvw9Mrst0psDUKp1VsaZvjM1CAUVBDS1sDukBsnvl81k3XXFIiB1pALyVV02SiGcHuFDfNf861aKRlY84YgcJHAwA/s1166/smtp16.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;173&quot; data-original-width=&quot;1166&quot; height=&quot;94&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqmG9vn-QcAmXr9hax3hBdRLTM8pSqL7EkW7j2PtuJrh6rjZ-bCxm4ysSNRKZeSNnJLwPDYpyWGK_kCoKF-slcQp_upaWGMiVewcvw9Mrst0psDUKp1VsaZvjM1CAUVBDS1sDukBsnvl81k3XXFIiB1pALyVV02SiGcHuFDfNf861aKRlY84YgcJHAwA/w640-h94/smtp16.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;信件是響應式(RWD) 的，包含了所有分頁的圖表及數據，個人覺得手機看也夠清楚。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNjrJlcifXBIeUA2jbrNg0jgbVviRFgZASguKps3NjBOblM9CkxRZucAUHJMlRWOcXZDAoCspmyYJ17gbnD1T9mew22xKU5FEqchmtszY7gio-WxdmnzxLnIQSB0N9kOh7UccC6wHvYq6_aHHaF0rHFcfqW3fISuq0KJM_fKEebcrf01HmZnaQPLENgUY/s1427/smtp17.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1427&quot; data-original-width=&quot;825&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNjrJlcifXBIeUA2jbrNg0jgbVviRFgZASguKps3NjBOblM9CkxRZucAUHJMlRWOcXZDAoCspmyYJ17gbnD1T9mew22xKU5FEqchmtszY7gio-WxdmnzxLnIQSB0N9kOh7UccC6wHvYq6_aHHaF0rHFcfqW3fISuq0KJM_fKEebcrf01HmZnaQPLENgUY/w370-h640/smtp17.jpg&quot; width=&quot;370&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/1369196684934154782/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/metabase-gmail.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1369196684934154782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1369196684934154782'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/metabase-gmail.html' title='【Metabase】設定委託 Gmail 定時發送通知信件'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2bAOwhc-jxFGThOX_a5hoPNegh-RWfNZ_4xKp5iuxVXEvd4BVH4I45kKBOvfJn_lUvqEGwHBdZd7FoZzdsUdC7Y_O4fIa3gBWM06DalZXEnkpCwU8a5nRDITrmIbmxe_rq3UlJROdB33WvQfp391OxoFbQdxAnghcqUbWfDlixGfTCdZjTUHGw9ykuPc/s72-w640-h202-c/smtp01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-3378434408483607009</id><published>2026-01-01T01:37:00.008+08:00</published><updated>2026-03-22T22:32:30.297+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><title type='text'>【Metabase】套用台灣地圖進行分析(一) -- 市級行政區</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;參考資料 ----&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://simplemaps.com/gis/country/tw&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;simplemaps&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 預設自帶 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;世界地圖&lt;/span&gt;&lt;/span&gt; &amp;amp; &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;美國地圖&lt;/span&gt;&lt;/span&gt;，如果需要台灣地圖幫助我們進行資料分析，則要手動新增台灣圖資。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;到 &lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://simplemaps.com/gis/country/tw&quot; target=&quot;_blank&quot;&gt;simplemaps&lt;/a&gt;&lt;/span&gt; 下載台灣的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;GeoJSON&lt;/span&gt; 的檔案 -- 檔名 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;tw.json&lt;/span&gt;，瞄一下 &lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt; 檔的內容，包含了一級行政區，其中屬性 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;id, name&lt;/span&gt; 是我們需要的。&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-json linenums&quot;&gt;&amp;nbsp;
{
  &quot;type&quot;: &quot;FeatureCollection&quot;, 
  &quot;features&quot;: [
    {
...
...

  &quot;type&quot;: &quot;Feature&quot;, 
      &quot;properties&quot;: {
        &quot;source&quot;: &quot;https://simplemaps.com&quot;, 
        &quot;id&quot;: &quot;TWKIN&quot;, 
        &quot;name&quot;: &quot;Kinmen&quot;
      }, 
      
...
...
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;因為在【&lt;a href=&quot;https://oldgrayduck.blogspot.com/2025/12/databaselinuxmint-222-mysql-80.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;LinuxMint 22.2 安裝設定 MySQL 8.0 + phpMyadmin&lt;/span&gt;&lt;/a&gt;】這篇筆記中，我們安裝了 &lt;span style=&quot;font-family: courier;&quot;&gt;phpMyadmin&lt;/span&gt;，所以 &lt;span style=&quot;font-family: courier;&quot;&gt;LinuxMint&lt;/span&gt;&amp;nbsp;一併安裝了 &lt;span style=&quot;font-family: courier;&quot;&gt;Apache&lt;/span&gt;，其網站根目錄位置為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/var/www/html/&lt;/span&gt;，&lt;/p&gt;&lt;p&gt;將 &lt;span style=&quot;font-family: courier;&quot;&gt;tw.json&lt;/span&gt; 放置在 &lt;span style=&quot;font-family: courier;&quot;&gt;/var/www/html/&lt;/span&gt; 下，然後在 &lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 設定 &lt;span style=&quot;font-family: courier;&quot;&gt;tw.json&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;url&lt;/span&gt;，在本例為 &lt;span style=&quot;font-family: courier;&quot;&gt;http://localhost/tw.json&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;登入 Metabase，點擊【齒輪】圖示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;→ 管理員設定&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX0POiJArI01zmOfHQ9SVfAYk48QxgFQZqn_-MIcTMr2bCASsPhpS8cuMTQFe5COjg8gg3dxhJe1XPBKEnNrxW1geet2kI-kzbVYH8o5K0t8dli5vQdj2ZggzzUi_5zUpm59WNY1xI_dt9BIh_8rzvNzWJIWglxpbhG_NNcgne_kgM5RSoxEYumH6Chjc/s220/03.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;173&quot; data-original-width=&quot;220&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX0POiJArI01zmOfHQ9SVfAYk48QxgFQZqn_-MIcTMr2bCASsPhpS8cuMTQFe5COjg8gg3dxhJe1XPBKEnNrxW1geet2kI-kzbVYH8o5K0t8dli5vQdj2ZggzzUi_5zUpm59WNY1xI_dt9BIh_8rzvNzWJIWglxpbhG_NNcgne_kgM5RSoxEYumH6Chjc/s1600/03.png&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;→ 地圖 → 新增一個地圖&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2M9eeQHzATiPsmG8AxEZiNq5HQtA9MYQFierdJF27IuqxzIFfRcqDUAlbj1oQsPEQHSOF2Af9iY6XdQLkTZGFVdBZSWElK0IQXDKl3SlA2te58IttU4GRHIQ20s-mmYyM5XfmXl3vbZfARXLlPUYdpolAIPPHPwKlfPVZJ5RSd91mViYR-hVW-s4GoSc/s1210/04.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;537&quot; data-original-width=&quot;1210&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2M9eeQHzATiPsmG8AxEZiNq5HQtA9MYQFierdJF27IuqxzIFfRcqDUAlbj1oQsPEQHSOF2Af9iY6XdQLkTZGFVdBZSWElK0IQXDKl3SlA2te58IttU4GRHIQ20s-mmYyM5XfmXl3vbZfARXLlPUYdpolAIPPHPwKlfPVZJ5RSd91mViYR-hVW-s4GoSc/w640-h284/04.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFo9btrQkWh9aDh8sljEZnQkOCF6okUgsO7PTU-de8l-1R_O_HrvQBXZteheIM60Xhwhj9lFfHhenJei_LoQwmXarhMpJA6c8yvD0G5aEt_BpWr8sxuxBC29OqM9gt1foK_JrV3XsZf_Q-SOUmT29E7h_uSeAoTrTLp6U6Uf-POqrmmJwUiPhfPeQg9Mc/s1140/02-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;550&quot; data-original-width=&quot;1140&quot; height=&quot;309&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFo9btrQkWh9aDh8sljEZnQkOCF6okUgsO7PTU-de8l-1R_O_HrvQBXZteheIM60Xhwhj9lFfHhenJei_LoQwmXarhMpJA6c8yvD0G5aEt_BpWr8sxuxBC29OqM9gt1foK_JrV3XsZf_Q-SOUmT29E7h_uSeAoTrTLp6U6Uf-POqrmmJwUiPhfPeQg9Mc/w640-h309/02-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;要注意的是：通常我們的資料庫中 縣/市 欄位並不是遵循 &lt;span style=&quot;font-family: courier;&quot;&gt;GeoJSON&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;ISO&lt;/span&gt; 名稱定義，所以需要做適當的轉換，例如：另外建一個對照用的 &lt;span style=&quot;font-family: courier;&quot;&gt;table&lt;/span&gt;。&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-json linenums&quot;&gt;&amp;nbsp;
對照資料表：city_geo
+--------+--------+-------+
|   id   |  英文  |  中文  |
+--------+--------+-------+
| TWKIN  | Kinmen | 金門  | 
+--------+--------+-------+
|  ...   |  ...   |  ...  |
+--------+--------+-------+
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr /&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/03/metabase.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;套用台灣地圖進行分析(二) -- 區、里(村)級行政區&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/3378434408483607009/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/metabase.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3378434408483607009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/3378434408483607009'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2026/01/metabase.html' title='【Metabase】套用台灣地圖進行分析(一) -- 市級行政區'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX0POiJArI01zmOfHQ9SVfAYk48QxgFQZqn_-MIcTMr2bCASsPhpS8cuMTQFe5COjg8gg3dxhJe1XPBKEnNrxW1geet2kI-kzbVYH8o5K0t8dli5vQdj2ZggzzUi_5zUpm59WNY1xI_dt9BIh_8rzvNzWJIWglxpbhG_NNcgne_kgM5RSoxEYumH6Chjc/s72-c/03.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-2243332970075530348</id><published>2025-12-31T22:24:00.011+08:00</published><updated>2026-03-22T22:40:07.757+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><title type='text'>【Metabase】新增一般使用者</title><content type='html'>&lt;p&gt;點擊右上角的&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;齒輪&lt;/span&gt;&lt;/span&gt;圖示&lt;/p&gt;&lt;p&gt;→ &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;管理員設定&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz0CvgdSBvu1hWQ3S-wtKi1kBaL9_oMbhbdQ0DX8RJ_zpuExi4No4okY_EHh3YKHvVBlK4m_pOcwu2JvzsY2HN_TozQ1XE6XmT2jP9r0jjzMCMXWJr_HuOAuz8YWNrl0JZPiNBAXPBjLXb0jOZ5B4b5o5Q9Tf8uLpYqJd7hVZp_fBuyR0kzhhLij7HVnE/s952/01-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;372&quot; data-original-width=&quot;952&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz0CvgdSBvu1hWQ3S-wtKi1kBaL9_oMbhbdQ0DX8RJ_zpuExi4No4okY_EHh3YKHvVBlK4m_pOcwu2JvzsY2HN_TozQ1XE6XmT2jP9r0jjzMCMXWJr_HuOAuz8YWNrl0JZPiNBAXPBjLXb0jOZ5B4b5o5Q9Tf8uLpYqJd7hVZp_fBuyR0kzhhLij7HVnE/w640-h250/01-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;邀請他人&lt;/span&gt;&lt;/span&gt;】&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbahSw9RlPGorLwstv2znmViVrdpcJUano-8tdPTQ7R_dhyXT4tKX69nJXQCOuC2W7z2aHOz7M7VL1pRbPf2D1Cs2Qo7ymEEON0GwPjJkL8rGVTv_k82OLzJAlGFSt4PVWOO3lVvKlqNkr9FO69Gee0-Dte9SKamyVz663O16FDd-6YV3N1Adle5tgcM/s1033/02-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;290&quot; data-original-width=&quot;1033&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbahSw9RlPGorLwstv2znmViVrdpcJUano-8tdPTQ7R_dhyXT4tKX69nJXQCOuC2W7z2aHOz7M7VL1pRbPf2D1Cs2Qo7ymEEON0GwPjJkL8rGVTv_k82OLzJAlGFSt4PVWOO3lVvKlqNkr9FO69Gee0-Dte9SKamyVz663O16FDd-6YV3N1Adle5tgcM/w640-h180/02-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&amp;nbsp;是以 &lt;span style=&quot;font-family: courier;&quot;&gt;e-mail&lt;/span&gt; 做帳號管理，輸入 &lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt; 的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;e-mail&lt;/span&gt;&amp;nbsp;後，若您 或 貴公司有自己的 &lt;span style=&quot;font-family: courier;&quot;&gt;mail server&lt;/span&gt;，&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&amp;nbsp;就會寄送含該 &lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt; 的密碼的信件到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;e-mail&lt;/span&gt;&amp;nbsp;的信箱；在本筆記中，因沒有架設&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;mail server&lt;/span&gt;，所以要手動記下&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&amp;nbsp;自動產生的密碼。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;===== 2026.01.25 =====&lt;/span&gt;&lt;/div&gt;&lt;div&gt;可參考&amp;nbsp;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/01/metabase-gmail.html&quot; target=&quot;_blank&quot;&gt;設定委託&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt;&amp;nbsp;定時發送通知信件&lt;/a&gt; 這篇筆記，設定 &lt;span style=&quot;font-family: courier;&quot;&gt;Gmail&lt;/span&gt; 做為&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;mail server，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;不過要注意：&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;一旦設定了 mail server ，之後新建的 Metabase 一般使用者的帳號就必須是真實的 e-mail，因為 Metabase 會將初始密碼寄到該 email&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLbKDkhzmT8cgTGCy_Hgdqz1vOev_4wPvrdZN-C8oImGAhxdgWuaUigEcPx8782AUz6cD2fdqpjc5KLUGd6F_ZMeqcdm7PK3FopOeVctVlZKrF_ScTQE3P31tn_bfwgk513I4exMoYTTCUgZ71MihgCOxUjLe2-7Py8hiB-z_heHw3NmKDaWSH1i-V8c/s645/03-3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;451&quot; data-original-width=&quot;645&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLbKDkhzmT8cgTGCy_Hgdqz1vOev_4wPvrdZN-C8oImGAhxdgWuaUigEcPx8782AUz6cD2fdqpjc5KLUGd6F_ZMeqcdm7PK3FopOeVctVlZKrF_ScTQE3P31tn_bfwgk513I4exMoYTTCUgZ71MihgCOxUjLe2-7Py8hiB-z_heHw3NmKDaWSH1i-V8c/w640-h448/03-3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMEZ7YrAATVMANeM0s6rttxGRn-SHf-9EIZfmKB468NqsTDK4_Db6q91A-8Jk16mOoR5Ae5HP2C96AlBXMM213BPnKkGCTrMlmiRwFfFsegvAPgcoF5J2y1cIAxIQY6dn3QkDrksWsJm5P-0qF3AIm7V5cNKq8QVKzg_0SgU0NI1MsP0gSiD_1qKcgIvs/s638/04-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;449&quot; data-original-width=&quot;638&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMEZ7YrAATVMANeM0s6rttxGRn-SHf-9EIZfmKB468NqsTDK4_Db6q91A-8Jk16mOoR5Ae5HP2C96AlBXMM213BPnKkGCTrMlmiRwFfFsegvAPgcoF5J2y1cIAxIQY6dn3QkDrksWsJm5P-0qF3AIm7V5cNKq8QVKzg_0SgU0NI1MsP0gSiD_1qKcgIvs/w640-h450/04-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;若有設定 &lt;span style=&quot;font-family: courier;&quot;&gt;mail server&lt;/span&gt;，就看不到上圖的初始密碼，&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 會將密碼直接寄送到 &lt;span style=&quot;font-family: courier;&quot;&gt;e-mail&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;登出管理員，讓剛剛新建的 &lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt; 登入&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj48OdhiZp68Ax6YRI4zRVz7SpMZjtXHkPVIKOQxXL8eU71aMh2myVqbYyoGrK4BUGogN1PCgr4MytdUDVrTjSkY_t0dJVpaK760wjzb431TpK1fsha1a4JVrG6opeycUPyFrCBdvzxRLDCpSJ6cXDthQ7yw5bBjlK61RK3r_mhvrpOV57ztZSK-C_EroU/s487/05-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;379&quot; data-original-width=&quot;487&quot; height=&quot;311&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj48OdhiZp68Ax6YRI4zRVz7SpMZjtXHkPVIKOQxXL8eU71aMh2myVqbYyoGrK4BUGogN1PCgr4MytdUDVrTjSkY_t0dJVpaK760wjzb431TpK1fsha1a4JVrG6opeycUPyFrCBdvzxRLDCpSJ6cXDthQ7yw5bBjlK61RK3r_mhvrpOV57ztZSK-C_EroU/w400-h311/05-2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點擊齒輪圖示&lt;br /&gt;&lt;div&gt;→ &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;帳號設定&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBnfDprdj5RD4HryDuJ9yJjTvs4UA0S09QG3ZZiwmEs4Zfr_9sSDPrTtj1u3fyRYB-u7HWOI11wYPmA07cGcKVdgSfmHyDJHOeBehgoEe-u1KeDOf-KfDy6wG7Txs2xx6d0cLUgEixWhGxX-Em5W7J7I2fmfUF4U7ziYdPedOHQYwnH-ixJs4QHiponKM/s933/06-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;311&quot; data-original-width=&quot;933&quot; height=&quot;214&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBnfDprdj5RD4HryDuJ9yJjTvs4UA0S09QG3ZZiwmEs4Zfr_9sSDPrTtj1u3fyRYB-u7HWOI11wYPmA07cGcKVdgSfmHyDJHOeBehgoEe-u1KeDOf-KfDy6wG7Txs2xx6d0cLUgEixWhGxX-Em5W7J7I2fmfUF4U7ziYdPedOHQYwnH-ixJs4QHiponKM/w640-h214/06-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;輸入剛才 &lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 產生的密碼，再變更為自己希望的密碼，如果不符合&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&amp;nbsp;的密碼規則，就會看到提示。&lt;br /&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnbaJRz1vV5ZMGp7SEIWmSZlwPBYIXgHnflIm6tWiLFn__QL5C6GEG1X-W2c3ERuCGVcXsW7y6oh98xdug2685FlogZxjk6qBM8BDHFwboksv7Am3tTl74pNVgy7yL2HH8mct9U_UX7OHPoI32c8wkOvJI6XwoP_yBU1t-a1bi7fcsZRhL9KCN6Qcj_RI/s559/07-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;559&quot; data-original-width=&quot;530&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnbaJRz1vV5ZMGp7SEIWmSZlwPBYIXgHnflIm6tWiLFn__QL5C6GEG1X-W2c3ERuCGVcXsW7y6oh98xdug2685FlogZxjk6qBM8BDHFwboksv7Am3tTl74pNVgy7yL2HH8mct9U_UX7OHPoI32c8wkOvJI6XwoP_yBU1t-a1bi7fcsZRhL9KCN6Qcj_RI/w606-h640/07-3.jpg&quot; width=&quot;606&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;hr&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2026/01/metabase-gmail.html&quot; target=&quot;_blank&quot;&gt;設定委託 Gmail 定時發送通知信件&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/2243332970075530348/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabase.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/2243332970075530348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/2243332970075530348'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabase.html' title='【Metabase】新增一般使用者'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz0CvgdSBvu1hWQ3S-wtKi1kBaL9_oMbhbdQ0DX8RJ_zpuExi4No4okY_EHh3YKHvVBlK4m_pOcwu2JvzsY2HN_TozQ1XE6XmT2jP9r0jjzMCMXWJr_HuOAuz8YWNrl0JZPiNBAXPBjLXb0jOZ5B4b5o5Q9Tf8uLpYqJd7hVZp_fBuyR0kzhhLij7HVnE/s72-w640-h250-c/01-2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8276432402243970284</id><published>2025-12-28T10:27:00.004+08:00</published><updated>2025-12-28T10:30:29.675+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>【Metabase】LinuxMint22.2，設定為開機即啟動 Metabase 服務</title><content type='html'>參考資料 &lt;span style=&quot;font-family: courier;&quot;&gt;----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-debian&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Running Metabase on Debian as a service with nginx&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://linux.vbird.org/linux_basic/centos7/0210filepermission.php&quot; target=&quot;_blank&quot;&gt;Linux 的檔案權限與目錄配置&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;將 &lt;span style=&quot;font-family: courier;&quot;&gt;metabase.jar&lt;/span&gt; 移至 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/usr/share/metabase/&lt;/span&gt; 目錄&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 原本 metabase.jar 是放在 使用者家目錄下的 metabase 目錄內
[user]~$ cd  metabase
[user]$ sudo  su
[root]# groupadd  -r  metabase
[root]# useradd  -r  -s  /bin/false  -g  metabase  metabase
[root]# mkdir  /usr/share/metabase
[root]# cp metabase.jar  /usr/share/metabase
[root]# chown  -R  metabase:metabase  /usr/share/metabase
[root]# touch  /var/log/metabase.log
[root]# chown  syslog:adm  /var/log/metabase.log
[root]# touch  /etc/default/metabase
[root]# chmod  640  /etc/default/metabase
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;建立 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;metabase.service&lt;/span&gt; 服務檔&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
[root]# cd  /etc/systemd/system/
[root]# vim metabase.service
# 輸入下述內容
[Unit]
Description=Metabase server
After=syslog.target
After=network.target

[Service]
WorkingDirectory=/usr/share/metabase/
ExecStart=/usr/bin/java  -jar  /usr/share/metabase/metabase.jar
EnvironmentFile=/etc/default/metabase
User=metabase
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=metabase
SuccessExitStatus=143
TimeoutStopSec=120
Restart=always

[Install]
WantedBy=multi-user.target

:x 存檔離開
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;建立 syslog conf&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
[root]# vim  /etc/rsyslog.d/metabase.conf
# 輸入下述內容
if $programname == &#39;metabase&#39; then /var/log/metabase.log
&amp;amp; stop

:x 存檔離開

# 重啟 rsyslog.service 以使 metabase.conf 生效
[root]# systemctl  restart  rsyslog.service
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;編輯 &lt;span&gt;Metabase&lt;/span&gt; 的環境變數&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
[root]# vim  /etc/default/metabase
MB_PASSWORD_COMPLEXITY=strong
MB_PASSWORD_LENGTH=8    # 要求最短的密碼字串長度
MB_JETTY_HOST=0.0.0.0
MB_JETTY_PORT=3000
MB_DB_CONNECTION_URI=&quot;jdbc:mysql://localhost:3306/metabase?user=metabase&amp;amp;password=密碼&amp;amp;verifyServerCertificate=false&amp;amp;allowPublicKeyRetrieval=true&quot;

MB_EMOJI_IN_LOGS=true    # log 要不要有顏文字...這還蠻有趣的...若不要就填 false
# any other env vars you want available to Metabase

:x 存檔離開
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;設定 metabase 為開機啟動&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 先手動啟動 metabase.service
[root]# systemctl  daemon-reload
[root]# systemctl  start  metabase.service
[root]# systemctl  status  metabase.service    # 觀察是否已啟動

# 另外再開瀏覽器, 看看是否能登入 metabase
# 確定執行沒問題了, 就改為開機自動啟動
[root]# systemctl  enable  metabase.service
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;hr /&gt;
相關筆記 ----&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2022/02/bilinuxmint203-bi-metabase.html&quot; target=&quot;_blank&quot;&gt;LinuxMint20.3 安裝設定 免費，開源的 BI -- Metabase&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2025/12/metabasecommunity-linuxmint222-mysql8.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;LinuxMint22.2 上，社群版(Community) 將系統資料移至大型資料庫 MySQL8&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8276432402243970284/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabaselinuxmint222-metabase.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8276432402243970284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8276432402243970284'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabaselinuxmint222-metabase.html' title='【Metabase】LinuxMint22.2，設定為開機即啟動 Metabase 服務'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-9175102854205174696</id><published>2025-12-26T01:06:00.007+08:00</published><updated>2026-03-22T22:42:48.450+08:00</updated><title type='text'>【Metabase】LinuxMint22.2 上，社群版(Community) 將系統資料移至大型資料庫 MySQL8</title><content type='html'>參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://www.metabase.com/docs/latest/installation-and-operation/migrating-from-h2&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Migrating to a production application database&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://www.metabase.com/docs/latest/installation-and-operation/configuring-application-database&quot; target=&quot;_blank&quot;&gt;Configuring the Metabase application database&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt; 自帶的系統資料庫為 &lt;span style=&quot;font-family: courier;&quot;&gt;H2&lt;/span&gt;，僅用於測試試用期間，若要轉為正式應用(&lt;span style=&quot;font-family: courier;&quot;&gt;production&lt;/span&gt;)，官方強烈建議將系統資料移至大型資料庫。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;建議版本為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MySQL 5.7.7(含)&lt;/span&gt; 或 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;MariaDB 10.2.2(含)&lt;/span&gt;&amp;nbsp;或&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;PostgreSQL 9.4(含)&lt;/span&gt;&amp;nbsp;以上；本筆記為 &lt;span style=&quot;font-family: courier;&quot;&gt;MySQL 8.0.44&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: red; color: white;&quot;&gt;注意：&lt;/span&gt;避免同時做&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&amp;nbsp;&lt;/span&gt;更新升級 及 資料庫移植&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關閉&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase，目前我的練功主機是開終端機視窗，在家目錄以&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
[user]~$ java  -jar  metabase.jar
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;的指令啟動&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;所以只要在瀏覽器的&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;頁面登出，然後在&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;終端機視窗 &lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Ctrl+C&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt; 中斷&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Metabase&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;即可。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;備份 &lt;span style=&quot;font-family: courier;&quot;&gt;H2&lt;/span&gt;︰複製&lt;span style=&quot;font-family: courier;&quot;&gt; metabase.db.mv.db &lt;/span&gt;到另一個安全的目錄存放。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以 root 登入&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;在 &lt;span style=&quot;font-family: courier;&quot;&gt;MySQL &lt;/span&gt;新增&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;metabase&lt;/span&gt; 帳戶並建立同名資料庫 metabase。&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;注意：&lt;/span&gt;&lt;/span&gt;建議密碼自已設定，而不要由 &lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt; 幫您產生，以免密碼中不知道有哪個字元踩到了雷!!目前已知的有 【&lt;span style=&quot;background-color: red; color: white;&quot;&gt;@&lt;/span&gt;】、【&lt;span style=&quot;background-color: red; color: white;&quot;&gt;:&lt;/span&gt;】、【&lt;span style=&quot;background-color: red; color: white;&quot;&gt;/&lt;/span&gt;】、【&lt;span style=&quot;background-color: red; color: white;&quot;&gt;?&lt;/span&gt;】、【&lt;span style=&quot;background-color: red; color: white;&quot;&gt;#&lt;/span&gt;】，會造成 &lt;span style=&quot;font-family: courier;&quot;&gt;java&lt;/span&gt; 錯誤解析 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;URI&lt;/span&gt; 字串，若是一定要用時，則在組連線字串時，須將上述字元改成 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;URI 編碼&lt;/span&gt;，後面再進一步說明。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9ptBA_lvI8p_YIPUQx4PaWhi6cO33IWpCZRPJnW0A-HT8WtxQfGfwcYhOYQrZwsfkQjxjLBNnm3nxqO8L1w0_31qy6wfzyQBej8BTFHdfo4aAR3q9mN5UivOHYZqht5gfVdnwLyzaQ_OlKA6ozQv6UMJrJZU8APTLrUOSyY0ABMbqLhjHPgB_XuZxHow/s711/01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;387&quot; data-original-width=&quot;711&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9ptBA_lvI8p_YIPUQx4PaWhi6cO33IWpCZRPJnW0A-HT8WtxQfGfwcYhOYQrZwsfkQjxjLBNnm3nxqO8L1w0_31qy6wfzyQBej8BTFHdfo4aAR3q9mN5UivOHYZqht5gfVdnwLyzaQ_OlKA6ozQv6UMJrJZU8APTLrUOSyY0ABMbqLhjHPgB_XuZxHow/w640-h348/01.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxF4N__BSrlZ11JAvkN_B1r2Ab6IDckd5VDAqQmpV_fEHvmXFgJQOa6Esrkho7Q3rjtU_u1Ln7a0oMJTPdYR1LRellhRBWP9021nK_ie3hDCEhSSdJYOWXdXmOog5ofOM1Oiv5spgIUepv-z0mV68u0ZBcwANul2rra3hDPs61TgB9VxwohfM4BfTMGlY/s467/02.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;411&quot; data-original-width=&quot;467&quot; height=&quot;565&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxF4N__BSrlZ11JAvkN_B1r2Ab6IDckd5VDAqQmpV_fEHvmXFgJQOa6Esrkho7Q3rjtU_u1Ln7a0oMJTPdYR1LRellhRBWP9021nK_ie3hDCEhSSdJYOWXdXmOog5ofOM1Oiv5spgIUepv-z0mV68u0ZBcwANul2rra3hDPs61TgB9VxwohfM4BfTMGlY/w640-h565/02.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhON78aINEMjLgpfE69eg0aZmXm_xZqudjzvD6VQP1bxBmZIG7SZkhaEv6GTIhnRTMK1J-rBrnTxwQKt-l5z62GqcNycFGn4emjzL-2wbUM7OuRYk3ISn8OWinLUGNh6gnD_PFrh6HlWaH8Gz-5Btw1Q9xFqri2IMlRQjo0_NZ0N0ZW6J9hbNuNi_clng8/s630/03.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;423&quot; data-original-width=&quot;630&quot; height=&quot;430&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhON78aINEMjLgpfE69eg0aZmXm_xZqudjzvD6VQP1bxBmZIG7SZkhaEv6GTIhnRTMK1J-rBrnTxwQKt-l5z62GqcNycFGn4emjzL-2wbUM7OuRYk3ISn8OWinLUGNh6gnD_PFrh6HlWaH8Gz-5Btw1Q9xFqri2IMlRQjo0_NZ0N0ZW6J9hbNuNi_clng8/w640-h430/03.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-sql linenums&quot;&gt;&amp;nbsp;
-- 重點在最後面的 &quot;with grant option&quot;, phpMyAdmin 圖形界面似乎做不到賦予 grant 權限
GRANT ALL PRIVILEGES ON `metabase`.* TO &#39;metabase&#39;@&#39;localhost&#39; with grant option;
&amp;nbsp;
&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3xYEl-nqXtUa6rUWkXWJ-9zEou4JZbIpmdvpkVkxStTf_-2girPNZpzZoCNGaBLaXuOQoaCc7EPqmSZC7YKkCq4STG10rAJnEsE5fqLwHuCJUktIpV0DYCiQijawqGcnrix8PnyxA2HtOQxwYWSf9xzg81KXpZ9W91W20NwqauytumOqRpgy_pK2-E0/s521/05.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;106&quot; data-original-width=&quot;521&quot; height=&quot;130&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3xYEl-nqXtUa6rUWkXWJ-9zEou4JZbIpmdvpkVkxStTf_-2girPNZpzZoCNGaBLaXuOQoaCc7EPqmSZC7YKkCq4STG10rAJnEsE5fqLwHuCJUktIpV0DYCiQijawqGcnrix8PnyxA2HtOQxwYWSf9xzg81KXpZ9W91W20NwqauytumOqRpgy_pK2-E0/w640-h130/05.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;執行移植指令&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 切換到 metabase.jar 所在目錄, 在本例為 [user]~/metabase/
[user]~/metabase$  export MB_DB_TYPE=mysql
[user]~/metabase$  export MB_DB_CONNECTION_URI=&quot;jdbc:mysql://localhost:3306/metabase?user=metabase&amp;amp;password=密碼&amp;amp;verifyServerCertificate=false&amp;amp;allowPublicKeyRetrieval=true&quot;
[user]~/metabase$ java 　-DMB_DB_TYPE=mysql　 -DMB_DB_CONNECTION_URI=&quot;jdbc:mysql://localhost:3306/metabase?user=metabase&amp;amp;password=密碼&amp;amp;verifyServerCertificate=false&amp;amp;allowPublicKeyRetrieval=true&quot; 　-jar　 metabase.jar 　load-from-h2　 metabase.db    # 注意檔名
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;
前面提到，如果密碼非得要用那幾個特殊字元，則在組 &lt;span style=&quot;font-family: courier;&quot;&gt;java&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;JDBC&lt;/span&gt; 連線字串時，要改成 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;URI 編碼&lt;/span&gt;，如下：&lt;br /&gt;
@ → %40&lt;br /&gt;
: → %3A&lt;br /&gt;
/ → %2F&lt;br /&gt;
? → %3F&lt;br /&gt;
# → %23&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;因為有備份&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;H2&lt;/span&gt;，所以可以放心刪除&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;metabase 所在目錄下的 H2 檔案，以確認 metabase 存取的是 MySQL。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;重新啟動 &lt;span style=&quot;font-family: courier;&quot;&gt;metabase&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
[user]~/metabase$  export MB_DB_TYPE=mysql
[user]~/metabase$  export MB_DB_CONNECTION_URI=&quot;jdbc:mysql://localhost:3306/metabase?user=metabase帳戶&amp;amp;password=密碼&quot;
[user]~/metabase$  java 　-DMB_DB_CONNECTION_URI=&quot;jdbc:mysql://localhost:3306/metabase?user=metabase&amp;amp;password=密碼&amp;amp;verifyServerCertificate=false&amp;amp;allowPublicKeyRetrieval=true&quot;  -jar  metabase.jar
&amp;nbsp;
&lt;/pre&gt;
重登入 &lt;span style=&quot;font-family: courier;&quot;&gt;metabase&lt;/span&gt;，可以看到之前製作的儀表板都在。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;hr&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2025/12/metabaselinuxmint222-metabase.html&quot; style=&quot;font-family: courier;&quot; target=&quot;_blank&quot;&gt;LinuxMint22.2，設定為開機即啟動 Metabase 服務&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2025/12/databaselinuxmint-222-mysql-80.html&quot; target=&quot;_blank&quot;&gt;LinuxMint22.2 安裝設定 MySQL 8.0 + phpMyadmin&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/9175102854205174696/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabasecommunity-linuxmint222-mysql8.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/9175102854205174696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/9175102854205174696'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/metabasecommunity-linuxmint222-mysql8.html' title='【Metabase】LinuxMint22.2 上，社群版(Community) 將系統資料移至大型資料庫 MySQL8'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9ptBA_lvI8p_YIPUQx4PaWhi6cO33IWpCZRPJnW0A-HT8WtxQfGfwcYhOYQrZwsfkQjxjLBNnm3nxqO8L1w0_31qy6wfzyQBej8BTFHdfo4aAR3q9mN5UivOHYZqht5gfVdnwLyzaQ_OlKA6ozQv6UMJrJZU8APTLrUOSyY0ABMbqLhjHPgB_XuZxHow/s72-w640-h348-c/01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-1343579422042792266</id><published>2025-12-21T01:24:00.022+08:00</published><updated>2025-12-25T18:50:06.867+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BI"/><category scheme="http://www.blogger.com/atom/ns#" term="Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>【Database】LinuxMint 22.2 安裝設定 MySQL 8.0 + phpMyadmin</title><content type='html'>&lt;p&gt;參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/alter-user.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;ALTER USER Statement&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;* 這篇筆記是從 &lt;a href=&quot;https://oldgrayduck.blogspot.com/2022/02/databasemint-linux-203-mysql-80.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Mint Linux 20.3 安裝設定 MySQL 8.0 + phpMyadmin&lt;/span&gt;&lt;/a&gt; 那篇更新過來的，所以只要能理解、看得懂，部份截圖就沿用 LinuxMint20 的了。😇&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;VMWare Workstation&lt;/span&gt; 開放個人免費使用了！😄&lt;/p&gt;&lt;p&gt;新建一台&amp;nbsp;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;VMWare Workstation&lt;/span&gt;&lt;/span&gt;&amp;nbsp;虛擬機&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;偷懶，這次仍是安裝&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL，作業系統為 LinuxMint 22.2 MATE, &lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL 8.0&lt;/span&gt;。
&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝完成後，設定 &quot;更新管理員&quot; 的 &quot;軟體來源&quot;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;--&amp;nbsp;&lt;/span&gt;鏡像站改為國內&amp;nbsp;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;國家高速運算中心(https://www.nchc.org.tw/)&lt;/span&gt;&lt;/span&gt;。
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg6UrxX9V8M1MlbUxV8kGUn8eDObWjc8dUzR_zggVA0Qd7QqqGcQQ-jXwDTgohNk53IBkfWATKI6JS4Myp1HeF4hNHBgXmRsUx-g8H0LegJV2eN4hZzO0gJ9iR84afi1DRicLMpDTqnHV2_3DpDO4chzm-TOEhRAJflkuvZgOs1-nRbYEFR5WB5j6CU=s800&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;543&quot; data-original-width=&quot;800&quot; height=&quot;434&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg6UrxX9V8M1MlbUxV8kGUn8eDObWjc8dUzR_zggVA0Qd7QqqGcQQ-jXwDTgohNk53IBkfWATKI6JS4Myp1HeF4hNHBgXmRsUx-g8H0LegJV2eN4hZzO0gJ9iR84afi1DRicLMpDTqnHV2_3DpDO4chzm-TOEhRAJflkuvZgOs1-nRbYEFR5WB5j6CU=w640-h434&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhIRRpenKIi9zKOBAIsRUEJJNRS85M7IO7W_2lsi7FiQZnCfFQmYF4Us6Ljp7HUCcwI9aP5qZhybYEhS_eMsJHi44YxlFupw-D5Jrt62DQ8UBAYc66PCa7_O6ZAkaKW7yKDTp2wCJ2VzxgZmgJmvlv6m9bTgYWdk5gDkccPjeNPAD5Gk34M7aOPaagX=s792&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;574&quot; data-original-width=&quot;792&quot; height=&quot;464&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhIRRpenKIi9zKOBAIsRUEJJNRS85M7IO7W_2lsi7FiQZnCfFQmYF4Us6Ljp7HUCcwI9aP5qZhybYEhS_eMsJHi44YxlFupw-D5Jrt62DQ8UBAYc66PCa7_O6ZAkaKW7yKDTp2wCJ2VzxgZmgJmvlv6m9bTgYWdk5gDkccPjeNPAD5Gk34M7aOPaagX=w640-h464&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg9lOPJvw1F5cRSkr_hyyiD1TPfXeQEgM3LcKhKPLoOBJ4XAmtHIDwVkTmEVdWSWdcz6Fjfd7eMPjCDm7tYSiw1gQfiuMtpbRwIAOSr3A9N2Xq0WlJMzCSGIx_bEvPo352hVmKnrBGw3tZDHxEV16mCDRsbjR21Kq750dj2DKtUdeqJx6-_RljirUn7=s795&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;369&quot; data-original-width=&quot;795&quot; height=&quot;298&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg9lOPJvw1F5cRSkr_hyyiD1TPfXeQEgM3LcKhKPLoOBJ4XAmtHIDwVkTmEVdWSWdcz6Fjfd7eMPjCDm7tYSiw1gQfiuMtpbRwIAOSr3A9N2Xq0WlJMzCSGIx_bEvPo352hVmKnrBGw3tZDHxEV16mCDRsbjR21Kq750dj2DKtUdeqJx6-_RljirUn7=w640-h298&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjq18zfr8JXB4P5fHDZfc3WqP8R94tSyoCEh8x1ucOcbVKFcOHv7HPXr2c8gMT41bzaeCX_Rc_zsUUc62JadMtASZfTPQAprgu1oNLc44En0W0MrTuKkZueN8pGQ4sCoGH_C1ngwAT0NLXdCwsQN_A9iTEO_eYXkmQiySZ0qj_ivNyda8lZHnlsqdOG=s605&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;431&quot; data-original-width=&quot;605&quot; height=&quot;456&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjq18zfr8JXB4P5fHDZfc3WqP8R94tSyoCEh8x1ucOcbVKFcOHv7HPXr2c8gMT41bzaeCX_Rc_zsUUc62JadMtASZfTPQAprgu1oNLc44En0W0MrTuKkZueN8pGQ4sCoGH_C1ngwAT0NLXdCwsQN_A9iTEO_eYXkmQiySZ0qj_ivNyda8lZHnlsqdOG=w640-h456&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgnPowZSz0hyZV-4_larxdXqOM8iXTNI9nONR-XeHT4OjJMayuW7CNL2qLgznd5W8OYawi6gJXYHio9oT7qbNPFXlSeteulFnAC_xRPdDL-OCThEUBO7iOfyMfp0NCJhrg9-YcI61gB6rYLicccV9efhIiRYEVHIxL_Fb1owLX9XxWnZehs2sD1etag=s800&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;
    &lt;img border=&quot;0&quot; data-original-height=&quot;573&quot; data-original-width=&quot;800&quot; height=&quot;458&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgnPowZSz0hyZV-4_larxdXqOM8iXTNI9nONR-XeHT4OjJMayuW7CNL2qLgznd5W8OYawi6gJXYHio9oT7qbNPFXlSeteulFnAC_xRPdDL-OCThEUBO7iOfyMfp0NCJhrg9-YcI61gB6rYLicccV9efhIiRYEVHIxL_Fb1owLX9XxWnZehs2sD1etag=w640-h458&quot; width=&quot;640&quot; /&gt;
&lt;/a&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝 &lt;span style=&quot;font-family: courier;&quot;&gt;vim&lt;/span&gt;(&lt;span style=&quot;font-family: courier;&quot;&gt;Mint&lt;/span&gt; 預設已裝 &lt;span style=&quot;font-family: courier;&quot;&gt;vi&lt;/span&gt;，這個適合 &lt;span style=&quot;font-family: courier;&quot;&gt;80&lt;/span&gt; 鍵鍵盤，老人家用不慣 😓)&lt;/div&gt;
&lt;pre class=&quot;prettyprint ling-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  apt  install  vim
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;暫時關閉防火牆&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  ufw  disable

# 確認防火牆沒有啟動
~$  sudo  ufw  status
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝 MySQL，Mint 會連帶安裝其他相關的套件&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  apt  install  mysql-server
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝完成後，&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL&lt;/span&gt; &lt;span style=&quot;font-family: courier;&quot;&gt;server&lt;/span&gt; 應該會自行啟動執行
&lt;/div&gt;

&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 下述 3 個指令只是順手筆記, 不執行

# 查詢 MySQL 狀態
~$  sudo  systemctl  status  mysql

# 啟動 mysql
~$  sudo  systemctl  start  mysql

# 停止 mysql
~$  sudo  systemctl  stop  mysql
&amp;nbsp;
&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEin5-Rg6DZRDvp6nmClnW9RzAWBr5344FrC8q7y_OHJQxzjr9VW4-S0gluIo4LnBocAN4UfAfm2U2v9b6ToYCgElGlNOIFNUeakE-BXSiCJDUV90MQzY2KOcwwEZUqZ4pDFP0ZpkH_qTRxLwN4x7aiS3666T6wlVNRYuxC_EGJ0R3wgsFr4c-NFRsBR=s644&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;263&quot; data-original-width=&quot;644&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEin5-Rg6DZRDvp6nmClnW9RzAWBr5344FrC8q7y_OHJQxzjr9VW4-S0gluIo4LnBocAN4UfAfm2U2v9b6ToYCgElGlNOIFNUeakE-BXSiCJDUV90MQzY2KOcwwEZUqZ4pDFP0ZpkH_qTRxLwN4x7aiS3666T6wlVNRYuxC_EGJ0R3wgsFr4c-NFRsBR=w640-h262&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝後，進行安全性設定&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  mysql_secure_installation
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;問答式設定，依指示回答，以下是老人家的設定，請依自己需求設定&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;是否要設定密碼強度規則?&lt;/div&gt;


&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFv2bNF5IL5aBFifQQUpEeQ_WQ73SKrZ2a-cCXM8AyTVZ6tB7Z_BzN1ojtefMgw4Zh6OxfY819_N0WYttPtxtqMubejAQHp1MrrQFl4VdwzwE-mfgto3uHh9_Ah2sJUZ1sqMcIwv0mz8PznM3GbTKsq18C4Ylv7mZwblMtjr6mPaHs_Q6Ug0pRcvnz=s487&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
        &lt;img border=&quot;0&quot; data-original-height=&quot;258&quot; data-original-width=&quot;487&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFv2bNF5IL5aBFifQQUpEeQ_WQ73SKrZ2a-cCXM8AyTVZ6tB7Z_BzN1ojtefMgw4Zh6OxfY819_N0WYttPtxtqMubejAQHp1MrrQFl4VdwzwE-mfgto3uHh9_Ah2sJUZ1sqMcIwv0mz8PznM3GbTKsq18C4Ylv7mZwblMtjr6mPaHs_Q6Ug0pRcvnz=w640-h340&quot; width=&quot;640&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;密碼強度選擇&lt;span style=&quot;font-family: courier;&quot;&gt; -- 1&lt;/span&gt;：中等&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;--
    &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;8 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;個字碼以上&lt;/span&gt;&lt;/span&gt;，其中必須 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;至少 1 個大寫英文 + 至少 1 個小寫英文 + 至少 1 個數字 + 至少 1
    個特殊字元&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;補充說明：密碼強度&lt;span style=&quot;font-family: courier;&quot;&gt;２(&lt;/span&gt;最強)&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;--&amp;nbsp;&lt;/span&gt;8 個字碼以上，除了必須滿足中等強度外 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;+ 不能有容易被聯想的字(ex: P@ssw0rd → 可聯想到 password)&lt;/span&gt;，本來我想設最強，但嚐試了好幾次，都被判定不符合強度2 的規定，只好退而求其次，改選強度 1。&lt;div&gt;&lt;br /&gt;&lt;div&gt;
    &lt;div&gt;
        &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEihSnykOatUzf8NwmcOiXDctwpzwnUJHkkgdcXfcnTKQhMD3mvjJKL6kpdE9N6HF0gg72PFpUmNhOq_4nCglOFuDrj0HPIPw1l_vAh4In873uN56AG_FX0b2nYkPcLoTUuOiUbYrs5mJPlEA5fP9T_Bha5q7W3sanItY2d_t_0G7GlAuPak99d8lZ8o=s539&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;163&quot; data-original-width=&quot;539&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEihSnykOatUzf8NwmcOiXDctwpzwnUJHkkgdcXfcnTKQhMD3mvjJKL6kpdE9N6HF0gg72PFpUmNhOq_4nCglOFuDrj0HPIPw1l_vAh4In873uN56AG_FX0b2nYkPcLoTUuOiUbYrs5mJPlEA5fP9T_Bha5q7W3sanItY2d_t_0G7GlAuPak99d8lZ8o=w640-h194&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;是否移除匿名使用者：我選 y&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVaR7N0owjfHXO9qeis3VhWPVV2dtAOvelaINHjKOztBisqR9V7qZcmpk7RZkMwh0jbZWRKGrjVcD8RH5U6s2lgBs_Vyg7sfR1ygqV7vJ9SK7IZh2eGj_hh33M0OLrEdtKbSuLvUeFE7skKNWHYDbFh34ko_aMrmB9Aef3okcQYUvf758AXlTjl2dk_eg/s403/mysql_secure_installation_03.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;134&quot; data-original-width=&quot;403&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVaR7N0owjfHXO9qeis3VhWPVV2dtAOvelaINHjKOztBisqR9V7qZcmpk7RZkMwh0jbZWRKGrjVcD8RH5U6s2lgBs_Vyg7sfR1ygqV7vJ9SK7IZh2eGj_hh33M0OLrEdtKbSuLvUeFE7skKNWHYDbFh34ko_aMrmB9Aef3okcQYUvf758AXlTjl2dk_eg/w640-h213/mysql_secure_installation_03.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;是否 &quot;&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;不允許&lt;/span&gt;&lt;/span&gt;&quot; &lt;span style=&quot;font-family: courier;&quot;&gt;MySQL&lt;/span&gt; 的 &lt;span style=&quot;font-family: courier;&quot;&gt;root&lt;/span&gt; 從遠端登入&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL：我選 y&lt;/span&gt;&lt;br /&gt;
        &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiuLpwKxvHxxV5T0xF991jm3CQNnhvz5gZc1lzkyqHyWWphQrCNFL-iJXB5eOracgqUx39ln88hISDWitmcbPL6hDJHQgQPD52yePhHTmyoVMO_9h7n8eGgHVRKJyazzpg5wyQU2Zs3XL69ojh1oFBlRSGL5lEYDfm0NmNXqOR_7WAA74Q-7FLpX7FP=s540&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;133&quot; data-original-width=&quot;540&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiuLpwKxvHxxV5T0xF991jm3CQNnhvz5gZc1lzkyqHyWWphQrCNFL-iJXB5eOracgqUx39ln88hISDWitmcbPL6hDJHQgQPD52yePhHTmyoVMO_9h7n8eGgHVRKJyazzpg5wyQU2Zs3XL69ojh1oFBlRSGL5lEYDfm0NmNXqOR_7WAA74Q-7FLpX7FP=w640-h158&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
        &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
        &lt;div&gt;是否移除 &lt;span style=&quot;font-family: courier;&quot;&gt;test&lt;/span&gt; 資料庫(因為稍後設定&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL&lt;/span&gt;&amp;nbsp;時要指定 &lt;span style=&quot;font-family: courier;&quot;&gt;phpMyAdmin&lt;/span&gt; 啟動時預設連線的資料庫，所以先留著，不刪)&lt;/div&gt;
        &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgHKYkhjPHMxyy3hKhFsbCrBc2y2FVmO1rPuv_BCyaf2afBkFR9lE3rksqDMiIbdbGc4M_B6MPjQeOk5UrEtv-4c2_Q80y8IAkItbMODW-taEKRtaaE4nDPnLkMApFVwUM2FINZVqpR9Aqoo3w_4K7_LQ6bpS45OA3ejuVRJY61UTpINeLHsfxC2mNw=s633&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;141&quot; data-original-width=&quot;633&quot; height=&quot;142&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgHKYkhjPHMxyy3hKhFsbCrBc2y2FVmO1rPuv_BCyaf2afBkFR9lE3rksqDMiIbdbGc4M_B6MPjQeOk5UrEtv-4c2_Q80y8IAkItbMODW-taEKRtaaE4nDPnLkMApFVwUM2FINZVqpR9Aqoo3w_4K7_LQ6bpS45OA3ejuVRJY61UTpINeLHsfxC2mNw=w640-h142&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
        &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
        &lt;div&gt;重新載入權限資料表：我選 y&lt;/div&gt;
        &lt;div&gt;
            &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi8wsvCFatAwiV-plrKAouDJC3dQ-PunEQh8bxTnLRaX9kguQVEHzXQBpmP-4Dez_UL0VOFvNSmcsIJIat70ClWK61YKImEklu4TsTenaRfm8I8ydpuUkWhYKey__d6ZcMc-1L8odT7E6ICgMefM5IOc0jAWQU3WjRq-ZAswkmB9nD0BlB7FprxiIWB=s537&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;103&quot; data-original-width=&quot;537&quot; height=&quot;122&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi8wsvCFatAwiV-plrKAouDJC3dQ-PunEQh8bxTnLRaX9kguQVEHzXQBpmP-4Dez_UL0VOFvNSmcsIJIat70ClWK61YKImEklu4TsTenaRfm8I8ydpuUkWhYKey__d6ZcMc-1L8odT7E6ICgMefM5IOc0jAWQU3WjRq-ZAswkmB9nD0BlB7FprxiIWB=w640-h122&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div&gt;&lt;br /&gt;&lt;/div&gt;設定完成
    &lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;如果重新執行 &lt;span style=&quot;font-family: courier;&quot;&gt;mysql_secure_installation&lt;/span&gt;，上述的步驟會略過一開始的【設定密碼強度】，若想完整重新執行&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;mysql_secure_installation&lt;/span&gt;，則需要先移除密碼強度套件 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;component_validate_password&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 剛安裝好 MySQL 時，預設的管理者帳號是 root，所以, 第 1 次以命令形式登入 MySQL，也不需要密碼
~$ sudo  mysql

# 進到 MySQL, 提示字元變成 &amp;gt;
-- SQL 指令沒有大/小寫分別，不過慣例上都會以大寫表示
-- (記得要加 分號 做為命令的結束)

-- 查詢已安裝的元件
&amp;gt; SELECT * FROM mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn                      |
+--------------+--------------------+------------------------------------+
|            1 |                  1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.00 sec)

-- 刪除密碼強度套件
&amp;gt; UNINSTALL COMPONENT &#39;file://component_validate_password&#39;;

-- 退出 mysql
&amp;gt; EXIT
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;設定&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL 時區為台北(Taipei)&lt;/span&gt;&lt;/div&gt;
    &lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  vim  /etc/mysql/mysql.conf.d/mysqld.cnf

[mydqld]
...
...
default-time-zone = &#39;+8:00&#39;

:x 存檔離開
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
# 再次登入 MySQL
~$  sudo  mysql


-- 建立資料庫(順手筆記, 不執行)
&amp;gt;  CREATE  資料庫名稱;


-- 列出目前 MySQL 已建立的使用者帳號(順手筆記, 不執行)
&amp;gt;  SELECT user FROM mysql.user;


-- 新建一個使用者 admin, 給後續安裝的 phpMyAdmin
&amp;gt;  CREATE USER &#39;admin&#39;@&#39;localhost&#39; IDENTIFIED  WITH  caching_sha2_password  BY &#39;密碼&#39;;
-- 預設的密碼格式為 caching_sha2_password
-- 其他格式有：mysql_native_password, sha256_password, ...
-- 不過官方還是推薦 caching_sha2_password


-- 賦予 admin 最高權限
&amp;gt;  GRANT  ALL  PRIVILEGES  ON  *.*  TO  &#39;admin&#39;@&#39;localhost&#39; WITH GRANT OPTION;

&amp;gt;  exit
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;注意：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;MySQL&lt;/span&gt; 自&lt;span style=&quot;font-family: courier;&quot;&gt; 8.0 &lt;/span&gt;起&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;預設不再支援&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: white;&quot;&gt; &lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://zh.wikipedia.org/wiki/MyISAM&quot; target=&quot;_blank&quot;&gt;MyISAM&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt; 了&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;安裝 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;phpmyadmin&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  apt  install  phpmyadmin

# 若安裝過程有失誤 或 不滿意, 想重新跑設定步驟, 可執行
~$  sudo dpkg-reconfigure phpmyadmin
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp-Zb9XxcEmfoAWDUQSyotXy5kdyhuPKrCrtRJ5vUGs3IUOZI0JmKR-5kf-VlBu40W_07RXuqDjxPkX53xtawaYl93nIsqVfoZ8HG2ZOBy5szcO0GXRJdAWIey-OaZeYcNyFACl2JdlJujoM-MD8VALjPO0_z_4uCEqh4rghuN8AL9ETtGIjJYb9mr93Q/s295/phpmyadmin-01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;183&quot; data-original-width=&quot;295&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp-Zb9XxcEmfoAWDUQSyotXy5kdyhuPKrCrtRJ5vUGs3IUOZI0JmKR-5kf-VlBu40W_07RXuqDjxPkX53xtawaYl93nIsqVfoZ8HG2ZOBy5szcO0GXRJdAWIey-OaZeYcNyFACl2JdlJujoM-MD8VALjPO0_z_4uCEqh4rghuN8AL9ETtGIjJYb9mr93Q/w400-h248/phpmyadmin-01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因為這版的設定步驟跟之前不同，所以先選&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt; &amp;lt;否&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZX0ju4F78qjuLBWFhk6Ym1Jk8IqG9LlWnt-VrXsHcSmmM6MJf55CoPoHGeQVhgYSKb_slppcPZTz8NUiYsu5cKg7BHkLOWOXhdHUAIK4ipHrG3GWoTJx1NVMwvlNFcIoRCyIhrRby3X2prAmbZVHr5LIKZlCHRguUo_XxrAJ8u7iAphLUQ9N_l_mvPJM/s938/phpmyadmin-04-no.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;208&quot; data-original-width=&quot;938&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZX0ju4F78qjuLBWFhk6Ym1Jk8IqG9LlWnt-VrXsHcSmmM6MJf55CoPoHGeQVhgYSKb_slppcPZTz8NUiYsu5cKg7BHkLOWOXhdHUAIK4ipHrG3GWoTJx1NVMwvlNFcIoRCyIhrRby3X2prAmbZVHr5LIKZlCHRguUo_XxrAJ8u7iAphLUQ9N_l_mvPJM/s16000/phpmyadmin-04-no.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再執行&amp;nbsp;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;&lt;span class=&quot;pln&quot;&gt;dpkg&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;reconfigure phpmyadmin&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;重新設定&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXhyphenhyphenQMtGyIjOzs2oi3JARdArWFOg4WFu1j3PTXnDOonm05oJEtFfFbYs0W_4c5mfVzsUaAD37O7PSP_EI3gSBCRzCKxWPo57noaEg4y9UkkrT05bTcXqPhwMZv7uvFI8XZ18DKpxRERPVlI9MZ-kVlq3uz3WfnQrmJOnbWFmIQJMCAGSwRrCXIRp8jUVg/s930/phpmyadmin-05.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;268&quot; data-original-width=&quot;930&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXhyphenhyphenQMtGyIjOzs2oi3JARdArWFOg4WFu1j3PTXnDOonm05oJEtFfFbYs0W_4c5mfVzsUaAD37O7PSP_EI3gSBCRzCKxWPo57noaEg4y9UkkrT05bTcXqPhwMZv7uvFI8XZ18DKpxRERPVlI9MZ-kVlq3uz3WfnQrmJOnbWFmIQJMCAGSwRrCXIRp8jUVg/s16000/phpmyadmin-05.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMw1ISIvQ7z6lS9tNGrqLVmIE7GEnV1OBD6CLIZEcfwD9f5gDXXa-wb8dPrDbkdp1M27nXNUNIQix6WOkTugtnCNGck1jOL9xsWaddZ1kOA72dvKjyNN82oSybYnfZvo9DWW66defZgZmePyur3zCG69xoN5WK05Twf0L4yZGZnCDJF0cjpuY_zenN3Y4/s943/phpmyadmin-03.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;198&quot; data-original-width=&quot;943&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMw1ISIvQ7z6lS9tNGrqLVmIE7GEnV1OBD6CLIZEcfwD9f5gDXXa-wb8dPrDbkdp1M27nXNUNIQix6WOkTugtnCNGck1jOL9xsWaddZ1kOA72dvKjyNN82oSybYnfZvo9DWW66defZgZmePyur3zCG69xoN5WK05Twf0L4yZGZnCDJF0cjpuY_zenN3Y4/s16000/phpmyadmin-03.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXpSzwi0qiJxKTqRkCHu6lU13mQset-iGwy1LUkxEq11D3kOQXJs6dpiz8M8QsKaTl7VNmoNJMTQtNFHfrN53dNzm-zoCyrha3HrjRq13p83q0nIaCw2bv__cZ_W9wgtmKPrY0pdYjcuzMnwswaH9Y6hB5lIwpLpy2Px5lvFGmEzhA12Ade4xhRKddXyk/s468/phpmyadmin-07.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;180&quot; data-original-width=&quot;468&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXpSzwi0qiJxKTqRkCHu6lU13mQset-iGwy1LUkxEq11D3kOQXJs6dpiz8M8QsKaTl7VNmoNJMTQtNFHfrN53dNzm-zoCyrha3HrjRq13p83q0nIaCw2bv__cZ_W9wgtmKPrY0pdYjcuzMnwswaH9Y6hB5lIwpLpy2Px5lvFGmEzhA12Ade4xhRKddXyk/s16000/phpmyadmin-07.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnyhyuOedmdWXnfx1IXnwyEdiFCl7hM8uFAOO2gsVC0bN6klqTPEsHi2bno-BuwZT4fjOzkUulYKl74yrswJzBo_FeaFIqpS9pvMfnFfQdlmgYWBfde45FGkGalGAlo0YDpp8KhRabih-807Uyu590hrD58a-HX-X7NMbMZ0OTnO4Zt5BFLhcC2MUZtj8/s690/phpmyadmin-08.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;148&quot; data-original-width=&quot;690&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnyhyuOedmdWXnfx1IXnwyEdiFCl7hM8uFAOO2gsVC0bN6klqTPEsHi2bno-BuwZT4fjOzkUulYKl74yrswJzBo_FeaFIqpS9pvMfnFfQdlmgYWBfde45FGkGalGAlo0YDpp8KhRabih-807Uyu590hrD58a-HX-X7NMbMZ0OTnO4Zt5BFLhcC2MUZtj8/s16000/phpmyadmin-08.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU5rRpoT73HiPo05vBNIaAMHUuO24G7RqnURZ8QvCnQIDJKtJsiaVyWLRXuoJre6w78PyHLvLCtRlU_UKGULzMWRS-U3SVvlVSjRxeUNegJ9tItr5iEPLSE2nYsEY6CGuHnh08cRwagRICmqKMw5PW5rXb-hE5Gsm-9RgwKOrWYRpANXVkcjydOt86IMg/s938/phpmyadmin-09.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;347&quot; data-original-width=&quot;938&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU5rRpoT73HiPo05vBNIaAMHUuO24G7RqnURZ8QvCnQIDJKtJsiaVyWLRXuoJre6w78PyHLvLCtRlU_UKGULzMWRS-U3SVvlVSjRxeUNegJ9tItr5iEPLSE2nYsEY6CGuHnh08cRwagRICmqKMw5PW5rXb-hE5Gsm-9RgwKOrWYRpANXVkcjydOt86IMg/s16000/phpmyadmin-09.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaDpQaSsvckxiPFUe8OEGk1kTUt3NAmPKr1XGgsXt2DtAvr-2Ho9ThKok7fy-649EmoVF5cEkEpAV-fEBKXg9VbHcmoy7NbqwjxagH0hVoZlicFYiTiuNhRVb9FYUZWC8lp66uY8Uf3q51lsEcir0Vf-ckTGp8LUSxVNle8T7afLl5BkPSB3F7eJvHOyI/s397/phpmyadmin-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;148&quot; data-original-width=&quot;397&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaDpQaSsvckxiPFUe8OEGk1kTUt3NAmPKr1XGgsXt2DtAvr-2Ho9ThKok7fy-649EmoVF5cEkEpAV-fEBKXg9VbHcmoy7NbqwjxagH0hVoZlicFYiTiuNhRVb9FYUZWC8lp66uY8Uf3q51lsEcir0Vf-ckTGp8LUSxVNle8T7afLl5BkPSB3F7eJvHOyI/s16000/phpmyadmin-10.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;phpmyadmin&lt;/span&gt; 的帳戶改為我們在前面建立的 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;admin@localhost&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_ECgkDpGhlzKHLSpwauqZmWdcI0hrO5RsbC3msUeReXrZC0u7q6_gaG9MUwo-Buj4pyKXQR3xnVs5QAgP2qahxzXYBFzga2fGi9tiEIQW8e7zvLPzeesDQY1VkV4B5gzQtR5RjAFuBKLoqy1JWpkz21hNundR9yFBSRW0BjXEsGUvJtjJIvGbhLSK9nc/s938/phpmyadmin-11.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;271&quot; data-original-width=&quot;938&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_ECgkDpGhlzKHLSpwauqZmWdcI0hrO5RsbC3msUeReXrZC0u7q6_gaG9MUwo-Buj4pyKXQR3xnVs5QAgP2qahxzXYBFzga2fGi9tiEIQW8e7zvLPzeesDQY1VkV4B5gzQtR5RjAFuBKLoqy1JWpkz21hNundR9yFBSRW0BjXEsGUvJtjJIvGbhLSK9nc/s16000/phpmyadmin-11.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR9_8VaxrxOzCC9pcNv1BDc2UsbGhjCvFEGTOUGX3YlPK0PVVg4xMrkwQmFui766JpqsWPhxxELbahZyS3Of0juAqROtU8QfXYe1jvONhxv6Vt5KWsquhIznabIW4FNKjeJQxB_nc4fX3EK_CTOjcAxayQoc3SKO_jq7zWsdgBsNoOSWHh1niOL1xxHHE/s714/phpmyadmin-12.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;714&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR9_8VaxrxOzCC9pcNv1BDc2UsbGhjCvFEGTOUGX3YlPK0PVVg4xMrkwQmFui766JpqsWPhxxELbahZyS3Of0juAqROtU8QfXYe1jvONhxv6Vt5KWsquhIznabIW4FNKjeJQxB_nc4fX3EK_CTOjcAxayQoc3SKO_jq7zWsdgBsNoOSWHh1niOL1xxHHE/s16000/phpmyadmin-12.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfcJFZP2hYhxc0MAogI2Lo1sMA8lhfgpkkggkGFA8XY99cslcwwK4VKOXvvcYSLV_BqcL6YPMrbRTmdhLP_8bJ2sabhjIW8V3326N5GE1_MVVsf1Yv5sXGBznLOtFLHkou_8-5J9ATGcTFL3EeGKkG_zMqkMkQxKtt86kPfQ0pS0C_kR6UfpKHkebdO68/s181/phpmyadmin-13.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;149&quot; data-original-width=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfcJFZP2hYhxc0MAogI2Lo1sMA8lhfgpkkggkGFA8XY99cslcwwK4VKOXvvcYSLV_BqcL6YPMrbRTmdhLP_8bJ2sabhjIW8V3326N5GE1_MVVsf1Yv5sXGBznLOtFLHkou_8-5J9ATGcTFL3EeGKkG_zMqkMkQxKtt86kPfQ0pS0C_kR6UfpKHkebdO68/s16000/phpmyadmin-13.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKu7Pbe358JGLDfKXQmIP2lgKKAjxfiLRUKD3zg_6eaReUBnyPy9VvgTFSv00wQ3FcOSpIpmAcpRdw0u14AgxWjE9SdKYl4e8EV1fCD2z2TGIDv_6NSZVYjtac2_10fYpzoPrMbl0iAr2YOQ7iVMTEtMWbC2ihdM5RuU12nSpakB8Aojmm5xf6BWdxkx8/s912/phpmyadmin-14.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;181&quot; data-original-width=&quot;912&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKu7Pbe358JGLDfKXQmIP2lgKKAjxfiLRUKD3zg_6eaReUBnyPy9VvgTFSv00wQ3FcOSpIpmAcpRdw0u14AgxWjE9SdKYl4e8EV1fCD2z2TGIDv_6NSZVYjtac2_10fYpzoPrMbl0iAr2YOQ7iVMTEtMWbC2ihdM5RuU12nSpakB8Aojmm5xf6BWdxkx8/s16000/phpmyadmin-14.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl3cn3R4ShyphenhyphenFXZxRXGSCMWJ0oYbK3mspOeARHVD5b8U9XEAUl53jPrL5SEQrzMiNmXb5LJOh2y10WFRvad1dEdzKc2VM35Mcr964yltS-itySBhIl7PKsyIFYkTYTeCxqdyRPnFAFYAH4tOOq_NYMYzYM-axkNMNLuPVhO1MyWRc_HYTk4t9xNF_7Whks/s290/phpmyadmin-15.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;181&quot; data-original-width=&quot;290&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl3cn3R4ShyphenhyphenFXZxRXGSCMWJ0oYbK3mspOeARHVD5b8U9XEAUl53jPrL5SEQrzMiNmXb5LJOh2y10WFRvad1dEdzKc2VM35Mcr964yltS-itySBhIl7PKsyIFYkTYTeCxqdyRPnFAFYAH4tOOq_NYMYzYM-axkNMNLuPVhO1MyWRc_HYTk4t9xNF_7Whks/s1600/phpmyadmin-15.jpg&quot; width=&quot;290&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
打開本機的瀏覽器(預設是火狐&lt;span style=&quot;font-family: courier;&quot;&gt;Firefox&lt;/span&gt;)，在網址列輸 入&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;http://localhost/phpmyadmin&lt;/span&gt;&amp;nbsp;，&amp;nbsp;&lt;span style=&quot;background-color: red; color: white; font-family: courier;&quot;&gt;注意：不是 https&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQpdDhWSUlf3PQ8BI-0olCDj7i7fH46zsyS7O9CCEVxFklq3TCS2-hs7oRmzCGB8hKucbYk68Ul4yRoyqNF3rX5Kb3d3f0B0TtIIJ3zZ5i2p4aGhN7BpH7mwmZD-rDcgl70CIYJl5zn1o0D-IQ_At8FozbkZLGZReM48Z4k3N1DdsY2rTba35AT8p9x3Q/s937/phpmyadmin-06.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;195&quot; data-original-width=&quot;937&quot; height=&quot;67&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQpdDhWSUlf3PQ8BI-0olCDj7i7fH46zsyS7O9CCEVxFklq3TCS2-hs7oRmzCGB8hKucbYk68Ul4yRoyqNF3rX5Kb3d3f0B0TtIIJ3zZ5i2p4aGhN7BpH7mwmZD-rDcgl70CIYJl5zn1o0D-IQ_At8FozbkZLGZReM48Z4k3N1DdsY2rTba35AT8p9x3Q/s320/phpmyadmin-06.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;目前，我們還沒有啟用(加密)安全連線，也無法從別的電腦訪問這個內網&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8FOrsuEU5A8vJ9nkxHpTbCBj74vG9OFOHo4cgY-WWPGstZEq8eLbnGbZYVdFGemW70btUp2R39zYTprtygcS1MkR-WAb4D99S5yBuVRsfdHCtGpsxwhSDAyk2JkEYF2HdsbwC52me6yvCEilX96lPNjwkt6vWuF9fHOALqJ5tToe_EUniZF9uNS4FYBA/s433/phpmyadmin-firefox.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;387&quot; data-original-width=&quot;433&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8FOrsuEU5A8vJ9nkxHpTbCBj74vG9OFOHo4cgY-WWPGstZEq8eLbnGbZYVdFGemW70btUp2R39zYTprtygcS1MkR-WAb4D99S5yBuVRsfdHCtGpsxwhSDAyk2JkEYF2HdsbwC52me6yvCEilX96lPNjwkt6vWuF9fHOALqJ5tToe_EUniZF9uNS4FYBA/w400-h358/phpmyadmin-firefox.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;為 MySQL 的 root 帳戶加上密碼&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-sh linenums&quot;&gt;&amp;nbsp;
~$  sudo  mysql

-- SQL 指令沒有大/小寫分別，不過慣例上都會以大寫表示
-- (記得要加 分號 做為命令的結束)
&amp;gt;  ALTER  USER  &#39;root&#39;@&#39;localhost&#39;  IDENTIFIED  WITH  CACHING_SHA2_PASSWORD  BY  &#39;新密碼&#39;;

-- 退出，密碼才能生效
&amp;gt; EXIT


-- 從此之後登入 MySQL 就會要求您輸入密碼
~$  sudo  mysql  -u  root  -p
# 參數 -u 是要登入的使用者帳號
# -p 是稍後要輸入密碼
# 上面的指令按下 ENTER 後, 系統就會提示您要輸入密碼


# 另一種登入指令, 但不建議使用, 因為是將密碼以明碼方式顯示
#　注意: -p 跟密碼間沒有空格
# 但這麼一來, 您的密碼就顯示在命令列中, 旁人一覽無遺了
~$  sudo  mysql  -u  root  -p密碼


# 登入 MySQL 後, 提示字元變成 &amp;gt;
-- 檢視 root 帳戶
&amp;gt; SELECT  user,  host,  plugin,  authentication_string  FROM  mysql.user  WHERE  user=&#39;root&#39;;
+------+-----------+-----------------------+------------------------------------------------------------------------+
| user | host      | plugin                | authentication_string                                                  |
+------+-----------+-----------------------+------------------------------------------------------------------------+
| root | localhost | caching_sha2_password | $A$005$__HLm.}1*#ZzXhae2kc4K7Cvfg7TR0UxCxBKY2y2Ji9qieVGaXzMWL4Fn9 |
+------+-----------+-----------------------+------------------------------------------------------------------------+
1 row in set (0.00 sec)
&amp;nbsp;
&lt;/pre&gt;
      &lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/1343579422042792266/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/databaselinuxmint-222-mysql-80.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1343579422042792266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1343579422042792266'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/12/databaselinuxmint-222-mysql-80.html' title='【Database】LinuxMint 22.2 安裝設定 MySQL 8.0 + phpMyadmin'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg6UrxX9V8M1MlbUxV8kGUn8eDObWjc8dUzR_zggVA0Qd7QqqGcQQ-jXwDTgohNk53IBkfWATKI6JS4Myp1HeF4hNHBgXmRsUx-g8H0LegJV2eN4hZzO0gJ9iR84afi1DRicLMpDTqnHV2_3DpDO4chzm-TOEhRAJflkuvZgOs1-nRbYEFR5WB5j6CU=s72-w640-h434-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8530259333321546701</id><published>2025-10-06T15:38:00.013+08:00</published><updated>2026-03-22T22:44:47.932+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="軟體筆記"/><title type='text'>【軟體筆記】Win10/11 安裝新酷音輸入法 + 倚天 26 鍵</title><content type='html'>到&lt;a href=&quot;https://chewing.im/&quot; target=&quot;_blank&quot;&gt;新酷音&lt;/a&gt;官網下載安裝軟體到電腦指定的位置，例如：&lt;span style=&quot;font-family: courier;&quot;&gt;d:\download\&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/s998/01_%E4%B8%8B%E8%BC%89.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;427&quot; data-original-width=&quot;998&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/w640-h274/01_%E4%B8%8B%E8%BC%89.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;可以看到目前的最新版為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;PIME-1.3.0-stable-setup.exe&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge52ewMu97jbZ1cLEvJ2hkwqN58a0nTxf1d4rw6J8d-el7If-xdwprevOUC_IFEB2FcNFX-U9piWqdN2NLS_NDurAAeRhP7F6eKikv0XEB9P7RIzpMi_MkwEHSoCyNwn1H-sLknIAwlLGoaOteKi_ke9wiZDbH6zJW43GgDRxa1MrmCFKpmrWyEs53L4E/s913/02_%E4%B8%8B%E8%BC%89.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;601&quot; data-original-width=&quot;913&quot; height=&quot;422&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge52ewMu97jbZ1cLEvJ2hkwqN58a0nTxf1d4rw6J8d-el7If-xdwprevOUC_IFEB2FcNFX-U9piWqdN2NLS_NDurAAeRhP7F6eKikv0XEB9P7RIzpMi_MkwEHSoCyNwn1H-sLknIAwlLGoaOteKi_ke9wiZDbH6zJW43GgDRxa1MrmCFKpmrWyEs53L4E/w640-h422/02_%E4%B8%8B%E8%BC%89.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;滑鼠雙擊安裝程式，依指示安裝&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfreg0On2qq3oGL5Z8LjjM72MWCcPJNU0uL9DxWtjXup4W6e-7wutW1lOLvJiqty5cg088U_EnHUdQ4Wp2lROGf9-tpACrM5W9aU1Gkmll6kllsWMiz3cIq2eDPDo2pRvMF4fdme437KtR3D451aOxBp2GEtgoGYjpBgItonX64uUsia0wVM2tzKxUQdw/s290/01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;155&quot; data-original-width=&quot;290&quot; height=&quot;155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfreg0On2qq3oGL5Z8LjjM72MWCcPJNU0uL9DxWtjXup4W6e-7wutW1lOLvJiqty5cg088U_EnHUdQ4Wp2lROGf9-tpACrM5W9aU1Gkmll6kllsWMiz3cIq2eDPDo2pRvMF4fdme437KtR3D451aOxBp2GEtgoGYjpBgItonX64uUsia0wVM2tzKxUQdw/s1600/01.png&quot; width=&quot;290&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQTrCwod-y7t7n2fHktX4q5dir30_yE0JyOfk2Ph9kG-ogHPSCUNzPPUHa4pm8MUOGnwOw9__T_qiB0ZVor81KhSKyh0uaGB3D6sTac9MRoNCJ8rCjTw5TI3RBbMCIaNvq7rAD4epcGCdbAK2o_POtzuAFnQqyMDRG02SW1-CUul64AUVtFx1R_e0xIHg/s499/02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;360&quot; data-original-width=&quot;499&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQTrCwod-y7t7n2fHktX4q5dir30_yE0JyOfk2Ph9kG-ogHPSCUNzPPUHa4pm8MUOGnwOw9__T_qiB0ZVor81KhSKyh0uaGB3D6sTac9MRoNCJ8rCjTw5TI3RBbMCIaNvq7rAD4epcGCdbAK2o_POtzuAFnQqyMDRG02SW1-CUul64AUVtFx1R_e0xIHg/s16000/02.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWVZhm_m5Khkoc5t7gFdkdbUB6eT_3IKCF5DB2CDe1YQ-iQaAIhbsg0BJEN0PusAYgTUBrQ_CKWVEpG4ElE5ZO82xWnJHkR1lQ3xRHejtXBjXulr7B8ff5CKeVpwO3O5Kv57fWHR01N65evlz4ccIEBS1mVmE2NPQKM8TjOfr9cDGVh1I1XwymlVSP7RU/s499/03.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;360&quot; data-original-width=&quot;499&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWVZhm_m5Khkoc5t7gFdkdbUB6eT_3IKCF5DB2CDe1YQ-iQaAIhbsg0BJEN0PusAYgTUBrQ_CKWVEpG4ElE5ZO82xWnJHkR1lQ3xRHejtXBjXulr7B8ff5CKeVpwO3O5Kv57fWHR01N65evlz4ccIEBS1mVmE2NPQKM8TjOfr9cDGVh1I1XwymlVSP7RU/s16000/03.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZvTkGuifHmH_QW3wAE-6X89-Pze_dLlZ4Iqbt_T1C4xpDkf9X-KZfzMOhouAPUrT8pILS8BEE5waoRgcIFrfzOfnV-4TANDKrP7nSmKc8dLyblHqSdP5j8xB0d1CUVrDNkIcvJALSOvIkrZpmkOs2tGUjE47laKn5mXoLa5Hpbgoy8QFJkUCMeX1oQJ4/s499/04.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;360&quot; data-original-width=&quot;499&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZvTkGuifHmH_QW3wAE-6X89-Pze_dLlZ4Iqbt_T1C4xpDkf9X-KZfzMOhouAPUrT8pILS8BEE5waoRgcIFrfzOfnV-4TANDKrP7nSmKc8dLyblHqSdP5j8xB0d1CUVrDNkIcvJALSOvIkrZpmkOs2tGUjE47laKn5mXoLa5Hpbgoy8QFJkUCMeX1oQJ4/s16000/04.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR6a-oiLXWPCy4i3ogk7G-graEV4RNqbg76zIPJVZlXReIk3vJ6uh1p06ZMWu7w8Vheh56vZ4hnfS0SbOuiocYphzAFx-RetZo-K5cl5wDrbWJdtT4vEV4_a-fGH26a2sAt9TcAkmwEfbQstR6JwTv01liDszKhPWtM_3_H8MiYnTBs96ZT7UAgyRw1mI/s499/05.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;360&quot; data-original-width=&quot;499&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR6a-oiLXWPCy4i3ogk7G-graEV4RNqbg76zIPJVZlXReIk3vJ6uh1p06ZMWu7w8Vheh56vZ4hnfS0SbOuiocYphzAFx-RetZo-K5cl5wDrbWJdtT4vEV4_a-fGH26a2sAt9TcAkmwEfbQstR6JwTv01liDszKhPWtM_3_H8MiYnTBs96ZT7UAgyRw1mI/s16000/05.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;此時您的電腦已安裝好新酷音了，您的電腦應該同時有預先安裝的微軟注音 及 新酷音&lt;/div&gt;&lt;div&gt;→ 點擊螢幕右下角的輸入法&lt;/div&gt;&lt;div&gt;→ 選取新酷音&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz-6lSBqpMV7mDZzzZCtD-ktJ0Tp7_UpslaA8NGZAkIJZoFaDSesD-G98cNEFG-eJQJBI58soljS0BVT9O43vgXEelN5JyVNfIdeTvdLbRN5-5IwLHBT8pX_-niHdNN35VdWQO5R9LXh57j8NxDE3L7aYmmiNezYFP_lTOu8ZP6Vv-wWXvbjWCEMKlVyE/s382/08.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;373&quot; data-original-width=&quot;382&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz-6lSBqpMV7mDZzzZCtD-ktJ0Tp7_UpslaA8NGZAkIJZoFaDSesD-G98cNEFG-eJQJBI58soljS0BVT9O43vgXEelN5JyVNfIdeTvdLbRN5-5IwLHBT8pX_-niHdNN35VdWQO5R9LXh57j8NxDE3L7aYmmiNezYFP_lTOu8ZP6Vv-wWXvbjWCEMKlVyE/s16000/08.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;滑鼠右鍵點擊新酷音左邊的【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;中&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div&gt;→ 點選【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;設定新酷音輸入法&lt;/span&gt;&lt;/span&gt;】&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6fxiHR-VJFBeUIHiF4Yn-k3EG1p6-8FSi4LLP8ZRLOzsECAYzfV77jtInd6zRD0TfwFBxEaBKLbv1ynptalVlhQim8N_t712Jauj7ztDj_CJ7mPE-kJzCfMYboTb2RBgwHw4B3mt8gfSBaMG4a8-wkYT4GNsGrKIfEL6ySXI8gg2kORV1RVVPz6LB5c/s274/09.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;253&quot; data-original-width=&quot;274&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6fxiHR-VJFBeUIHiF4Yn-k3EG1p6-8FSi4LLP8ZRLOzsECAYzfV77jtInd6zRD0TfwFBxEaBKLbv1ynptalVlhQim8N_t712Jauj7ztDj_CJ7mPE-kJzCfMYboTb2RBgwHw4B3mt8gfSBaMG4a8-wkYT4GNsGrKIfEL6ySXI8gg2kORV1RVVPz6LB5c/s1600/09.png&quot; width=&quot;274&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;此時，會開啟一個網頁，切換到【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;選字視窗外觀&lt;/span&gt;&lt;/span&gt;】頁籤&lt;/div&gt;&lt;div&gt;→ 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;選字視窗選字鍵&lt;/span&gt;&lt;/span&gt;】改為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier; font-size: medium;&quot;&gt;asdfghjkl;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvgM4vZB5rimWeie1lhhYAuDS5F0meWW-DynHOomJ8o9I1OgPjhwKE8Wbm3fwgx3nhxfGbX3OqJcehRvKAwFmllwqGxn_BSHIDVGUVPAUP6jaCvZvXJF3MAJG8_kTJMPpYZMDj0HGfOBPWWVZsJ3fIZMnx6WmL0uUsaOs1dqZ_hl8ubtbVnfpCgnR2LUc/s1210/04_%E8%A8%AD%E5%AE%9A05.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;530&quot; data-original-width=&quot;1210&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvgM4vZB5rimWeie1lhhYAuDS5F0meWW-DynHOomJ8o9I1OgPjhwKE8Wbm3fwgx3nhxfGbX3OqJcehRvKAwFmllwqGxn_BSHIDVGUVPAUP6jaCvZvXJF3MAJG8_kTJMPpYZMDj0HGfOBPWWVZsJ3fIZMnx6WmL0uUsaOs1dqZ_hl8ubtbVnfpCgnR2LUc/w640-h280/04_%E8%A8%AD%E5%AE%9A05.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;切換到【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;鍵盤配置&lt;/span&gt;&lt;/span&gt;】頁籤&lt;/div&gt;&lt;div&gt;→ 改為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;倚天 26 鍵&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9EubpIk6njh0hbVOSrZf0wmKlQ7vBpjbqKMG7fafUF6tH-cZRjhV6qngP6BqqZo2plI2x2TUinL-4zTDO5SUThFASuWyWNFA4n7QRGwLybaOTUlj0Ah0y3eQE63cLUdObllCb4bZMtOaS6gY0Js7EGi8Rzavpmos7yLqBs_FUNdrIZPeS1EUMzg988tY/s1213/04_%E8%A8%AD%E5%AE%9A06.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;671&quot; data-original-width=&quot;1213&quot; height=&quot;354&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9EubpIk6njh0hbVOSrZf0wmKlQ7vBpjbqKMG7fafUF6tH-cZRjhV6qngP6BqqZo2plI2x2TUinL-4zTDO5SUThFASuWyWNFA4n7QRGwLybaOTUlj0Ah0y3eQE63cLUdObllCb4bZMtOaS6gY0Js7EGi8Rzavpmos7yLqBs_FUNdrIZPeS1EUMzg988tY/w640-h354/04_%E8%A8%AD%E5%AE%9A06.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;順便看看【特殊符號】和【簡易符號輸入】這兩個頁籤的使用說明&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後按下【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;套用設定&lt;/span&gt;&lt;/span&gt;】鈕，就完成了！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;下述的進階設定，對安裝了多種輸入法的電腦尤其好用！😄&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點擊 &lt;span style=&quot;font-family: courier;&quot;&gt;Windows&lt;/span&gt; 的開始圖示&lt;/div&gt;&lt;div&gt;→ 【設定】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHOmOoQi0akmkmrxSwP7Wdm3fnJP6McxK1XXTo9bFHRcSWAZcAW0gREkE3Pz5-bu75beVMi7cpiEfQRrJZ-GC1dYE7JODirccDmdTtvFx4xLLShFUTeB-kH9UF1uqPRGPUSq-uDaCDjkbq8Kn3wo4Me6QQF2vzZ14LdmMhsNMSpkotwVIk21aYkA6GuiU/s625/06.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;329&quot; data-original-width=&quot;625&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHOmOoQi0akmkmrxSwP7Wdm3fnJP6McxK1XXTo9bFHRcSWAZcAW0gREkE3Pz5-bu75beVMi7cpiEfQRrJZ-GC1dYE7JODirccDmdTtvFx4xLLShFUTeB-kH9UF1uqPRGPUSq-uDaCDjkbq8Kn3wo4Me6QQF2vzZ14LdmMhsNMSpkotwVIk21aYkA6GuiU/s16000/06.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;點擊選單【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;時間與語言&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div&gt;→ 【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;輸入&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq_9wCDUM2r1d2qe01pyEvSR-SJdR1paxML2FVZ-h9SwpaYiFK_VTJdlzKpRfepxTe3-kKQGspbGmlPlliJ5ZjRW66jnaGi879Lk0pvPiXIUM-BP52nnEZ3vlHIp9MyaAIhICjA-fwr7_KdNKMVHUCPqIYIoTBgnfe7UOIRKWINb40k3Qiw5TwCWADEeQ/s928/10.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;622&quot; data-original-width=&quot;928&quot; height=&quot;429&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq_9wCDUM2r1d2qe01pyEvSR-SJdR1paxML2FVZ-h9SwpaYiFK_VTJdlzKpRfepxTe3-kKQGspbGmlPlliJ5ZjRW66jnaGi879Lk0pvPiXIUM-BP52nnEZ3vlHIp9MyaAIhICjA-fwr7_KdNKMVHUCPqIYIoTBgnfe7UOIRKWINb40k3Qiw5TwCWADEeQ/w640-h429/10.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;進階鍵盤設定&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsCSf5sTat4TS9pYXiMJIfsJaycmtlTEDPolLxwdTbZPv7nMWnENd8c0YlU5SRhTaqKvpQN1Tnwx7vxB-tow2RtMLl7newLpoRDhjnoVuua4DVpOPgl8lrWJ-cOMYXXvXTpS_WScIeO4Y6-E1LWFeOviUrYoq3gXgk_hIYsFUM91Oh0r81PG5RAHDsYes/s450/13.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;343&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsCSf5sTat4TS9pYXiMJIfsJaycmtlTEDPolLxwdTbZPv7nMWnENd8c0YlU5SRhTaqKvpQN1Tnwx7vxB-tow2RtMLl7newLpoRDhjnoVuua4DVpOPgl8lrWJ-cOMYXXvXTpS_WScIeO4Y6-E1LWFeOviUrYoq3gXgk_hIYsFUM91Oh0r81PG5RAHDsYes/s16000/13.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;覆寫預設輸入法&lt;/span&gt;&lt;/span&gt;】改為【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;新酷音輸入法&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOtD5khWmrKn6YdwTMty3YXFIWYYSs3chys9ZPej2WhrryZZpgxLznBC-j_LKlaUVCLZj5X6LhMLDpQn41d1wdv7-STfqQXT-KkQ-E_9PVKSWymtZAWDCHZyhWgWyGH3nHVH8YjhzcrkfnoIHs9PRf92WfpwcXnvr9n750yCbLizfnNcnZkvAT7ee81o/s504/14.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;482&quot; data-original-width=&quot;504&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOtD5khWmrKn6YdwTMty3YXFIWYYSs3chys9ZPej2WhrryZZpgxLznBC-j_LKlaUVCLZj5X6LhMLDpQn41d1wdv7-STfqQXT-KkQ-E_9PVKSWymtZAWDCHZyhWgWyGH3nHVH8YjhzcrkfnoIHs9PRf92WfpwcXnvr9n750yCbLizfnNcnZkvAT7ee81o/s16000/14.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;輸入語言快速鍵&lt;/span&gt;&lt;/span&gt;】&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8T4HcIbRqAQST16UbhtVJ5Rhyg1TZQLyhXAN-H3R6mjNUuZvcTLflH9FSb7xAAZSHLQl90xBLWGV0GeD6ATDiCxe9_9hBF-77i4GULSPAouJncI9mSUyhocPg5mUrp3vlrQVtcwaA_bck3c7kEVZuYyqgcPHbCK-7dKRyn26mdGimdadkNQbaxjuyLAg/s503/14-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;495&quot; data-original-width=&quot;503&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8T4HcIbRqAQST16UbhtVJ5Rhyg1TZQLyhXAN-H3R6mjNUuZvcTLflH9FSb7xAAZSHLQl90xBLWGV0GeD6ATDiCxe9_9hBF-77i4GULSPAouJncI9mSUyhocPg5mUrp3vlrQVtcwaA_bck3c7kEVZuYyqgcPHbCK-7dKRyn26mdGimdadkNQbaxjuyLAg/s16000/14-2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點選【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;切換到 繁體中文(台灣) - 新酷音輸入(PIME)&lt;/span&gt;&lt;/span&gt;】&lt;br /&gt;&lt;div&gt;→ 點擊【&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;變更按鍵順序&lt;/span&gt;&lt;/span&gt;】&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbVU14CCpn0EFgdfNFXvWCmKvTc3cMdvGMWkMR3ynNXy9dRapl6_C63W8qmiIzSXdqM54OgV_NZQf4YEck8b47O30ouCzYtqxA-9eLC-h3d3lO14ROwdnglRjFJKRF6hDRRj1TIH_HprcTXqhJH3BveIQOJh8XJd5sXms5o4k-qT0TMS5bCkrXPe5aGW4/s552/15.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;552&quot; data-original-width=&quot;484&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbVU14CCpn0EFgdfNFXvWCmKvTc3cMdvGMWkMR3ynNXy9dRapl6_C63W8qmiIzSXdqM54OgV_NZQf4YEck8b47O30ouCzYtqxA-9eLC-h3d3lO14ROwdnglRjFJKRF6hDRRj1TIH_HprcTXqhJH3BveIQOJh8XJd5sXms5o4k-qT0TMS5bCkrXPe5aGW4/s16000/15.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;設定為您偏好的按鍵組合，在本例為&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Ctrl + Shift + 4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;這樣您就可以快速切換輸入法到新酷音&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqyWWLeN9GupnXgggxycPxtKkrzfda1QZ4ZzyqAy2n7yHbLnGLa5iaWIbWlUozNrZJeDKW_JawpQazRelV28ipPEA262tAF8D6g4pc4CLhTqN9XzJkMa62il7uBbWaC7HY5suhKU3Fq45VOFgG8emzB22BEjH1p18-c9NrBZuPk3YlMfgj0si8JZreyZo/s524/16.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;176&quot; data-original-width=&quot;524&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqyWWLeN9GupnXgggxycPxtKkrzfda1QZ4ZzyqAy2n7yHbLnGLa5iaWIbWlUozNrZJeDKW_JawpQazRelV28ipPEA262tAF8D6g4pc4CLhTqN9XzJkMa62il7uBbWaC7HY5suhKU3Fq45VOFgG8emzB22BEjH1p18-c9NrBZuPk3YlMfgj0si8JZreyZo/s16000/16.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;hr&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2008/11/26.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;新酷音雙流劍(新酷音輸入法 + 倚天 26 鍵)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8530259333321546701/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/10/win1011-26.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8530259333321546701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8530259333321546701'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/10/win1011-26.html' title='【軟體筆記】Win10/11 安裝新酷音輸入法 + 倚天 26 鍵'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/s72-w640-h274-c/01_%E4%B8%8B%E8%BC%89.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-5501354071795285522</id><published>2025-09-27T11:11:00.010+08:00</published><updated>2025-09-27T11:19:41.378+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="軟體筆記"/><title type='text'>【軟體筆記】Win7 安裝新酷音輸入法 + 倚天 26 鍵</title><content type='html'>到&lt;a href=&quot;https://chewing.im/&quot; target=&quot;_blank&quot;&gt;新酷音&lt;/a&gt;官網下載安裝軟體到電腦指定的位置，例如：&lt;span style=&quot;font-family: courier;&quot;&gt;d:\download\&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/s998/01_%E4%B8%8B%E8%BC%89.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;427&quot; data-original-width=&quot;998&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/w640-h274/01_%E4%B8%8B%E8%BC%89.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;可以看到目前的最新版為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;PIME-1.3.0-stable-setup.exe&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge52ewMu97jbZ1cLEvJ2hkwqN58a0nTxf1d4rw6J8d-el7If-xdwprevOUC_IFEB2FcNFX-U9piWqdN2NLS_NDurAAeRhP7F6eKikv0XEB9P7RIzpMi_MkwEHSoCyNwn1H-sLknIAwlLGoaOteKi_ke9wiZDbH6zJW43GgDRxa1MrmCFKpmrWyEs53L4E/s913/02_%E4%B8%8B%E8%BC%89.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;601&quot; data-original-width=&quot;913&quot; height=&quot;422&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge52ewMu97jbZ1cLEvJ2hkwqN58a0nTxf1d4rw6J8d-el7If-xdwprevOUC_IFEB2FcNFX-U9piWqdN2NLS_NDurAAeRhP7F6eKikv0XEB9P7RIzpMi_MkwEHSoCyNwn1H-sLknIAwlLGoaOteKi_ke9wiZDbH6zJW43GgDRxa1MrmCFKpmrWyEs53L4E/w640-h422/02_%E4%B8%8B%E8%BC%89.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;滑鼠雙擊安裝程式，依指示安裝&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTARaMXr9VPXkr1J-uaKe1-XedTbRkXNt55B99hQU792lF6IsdzKRCXfiYwYUPsJGECk6UJ8ONPWWMWntobPxndtRpSmN8FlxaKdLnsek53xN8N2rdKde3SI-z4NGqbxkLwQ9qGcvODCAPsfCMuaPaaEnHgUgwx4ECWdA_e8vCMPFlZkXlXiNlm0k5dDc/s292/03_%E5%AE%89%E8%A3%9D01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;156&quot; data-original-width=&quot;292&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTARaMXr9VPXkr1J-uaKe1-XedTbRkXNt55B99hQU792lF6IsdzKRCXfiYwYUPsJGECk6UJ8ONPWWMWntobPxndtRpSmN8FlxaKdLnsek53xN8N2rdKde3SI-z4NGqbxkLwQ9qGcvODCAPsfCMuaPaaEnHgUgwx4ECWdA_e8vCMPFlZkXlXiNlm0k5dDc/s1600/03_%E5%AE%89%E8%A3%9D01.jpg&quot; width=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidyYqVnni689FkCusAbzDF857QkUT2WVEVnCzeqwsvdSLM9VoVgSywSEorXS7k2AzI0PW32FIXjO58aeKWc7aeAJbrtofeXLlQKGzInaxAchqJef8uL1HDFYUnmknhvt_K1F9VZd0HaYdfW1LtYudy_6lRMTYMJw0C9A6YIvQ0ja9nfxHRANBTtsdbB0k/s504/03_%E5%AE%89%E8%A3%9D02.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;361&quot; data-original-width=&quot;504&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidyYqVnni689FkCusAbzDF857QkUT2WVEVnCzeqwsvdSLM9VoVgSywSEorXS7k2AzI0PW32FIXjO58aeKWc7aeAJbrtofeXLlQKGzInaxAchqJef8uL1HDFYUnmknhvt_K1F9VZd0HaYdfW1LtYudy_6lRMTYMJw0C9A6YIvQ0ja9nfxHRANBTtsdbB0k/s16000/03_%E5%AE%89%E8%A3%9D02.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTom8qiJsGbmekraVUa1GDcUtJSupRvdtxyEMsD3oh4vDNyRrOXfldOAW-MZmutAExBpqeRcWQACPkVVqr5Atvp8L5_E1FwdW_ypQjiWSal6ugE9APRtPbXAW6co7zM5phyphenhyphenSWHZBSHxhCSV-hGSnI0tqLYz0ID9JAXZFWnG_sKgqkLIsU9wjlQhzNusD0/s501/03_%E5%AE%89%E8%A3%9D03.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;361&quot; data-original-width=&quot;501&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTom8qiJsGbmekraVUa1GDcUtJSupRvdtxyEMsD3oh4vDNyRrOXfldOAW-MZmutAExBpqeRcWQACPkVVqr5Atvp8L5_E1FwdW_ypQjiWSal6ugE9APRtPbXAW6co7zM5phyphenhyphenSWHZBSHxhCSV-hGSnI0tqLYz0ID9JAXZFWnG_sKgqkLIsU9wjlQhzNusD0/s16000/03_%E5%AE%89%E8%A3%9D03.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQBCG-1AYPS_WsVq0_Hgrf-rezux-dgmFv7dbH5RvqRBqRDy3FHUAGWHfTRjzYdsfI_ceWbDNp3D7xbGh3CyfIAmrFxANkI8mg5BkvPk755DayYwsqJbiQNtMqWjnqyz-fw_al-bKtfmgupLg5MVQPYQ9ZRLdgMPSdkqkgMTH8yiiVuFIy8nnBJ0MED4/s504/03_%E5%AE%89%E8%A3%9D04.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;361&quot; data-original-width=&quot;504&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQBCG-1AYPS_WsVq0_Hgrf-rezux-dgmFv7dbH5RvqRBqRDy3FHUAGWHfTRjzYdsfI_ceWbDNp3D7xbGh3CyfIAmrFxANkI8mg5BkvPk755DayYwsqJbiQNtMqWjnqyz-fw_al-bKtfmgupLg5MVQPYQ9ZRLdgMPSdkqkgMTH8yiiVuFIy8nnBJ0MED4/s16000/03_%E5%AE%89%E8%A3%9D04.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMXHtSJ5OJ2y7hR0ELGyodOF8LvqpfeLpeF1ynf5PuzHQ6Z3rDtM-8xVO7JlubLbvz4ol9RsLRwNnhcnfNBOZNHGbJUdjBtg0eD3ookcKyIIUXCs0j1mS8M6ko6TxKYBG_xOPSGvzka2GcpWjBrNmt-UjhlvRQ1_xq-5BypMnjOiXyO2xgE3eVaQIRU8U/s502/03_%E5%AE%89%E8%A3%9D05.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;361&quot; data-original-width=&quot;502&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMXHtSJ5OJ2y7hR0ELGyodOF8LvqpfeLpeF1ynf5PuzHQ6Z3rDtM-8xVO7JlubLbvz4ol9RsLRwNnhcnfNBOZNHGbJUdjBtg0eD3ookcKyIIUXCs0j1mS8M6ko6TxKYBG_xOPSGvzka2GcpWjBrNmt-UjhlvRQ1_xq-5BypMnjOiXyO2xgE3eVaQIRU8U/s16000/03_%E5%AE%89%E8%A3%9D05.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;設定新酷音術入法&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIkmzU990UGyblEqflvx5IVa3cgivep-8Jt7TL0mwqIyINIXpquwnWDd6k6pS39vOcI_HgPytl4u0RE_O_Xiz1LuxOZfCcqd7U7zA0eu5IBVjMEYzqBdqNMRlYSa_AS4_aO-tpbvaEzipfQA6DJpUx7TYZykYM3RQVeL3yniR-hrjfBGVmsPcE4-nelmk/s551/04_%E8%A8%AD%E5%AE%9A01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;551&quot; data-original-width=&quot;409&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIkmzU990UGyblEqflvx5IVa3cgivep-8Jt7TL0mwqIyINIXpquwnWDd6k6pS39vOcI_HgPytl4u0RE_O_Xiz1LuxOZfCcqd7U7zA0eu5IBVjMEYzqBdqNMRlYSa_AS4_aO-tpbvaEzipfQA6DJpUx7TYZykYM3RQVeL3yniR-hrjfBGVmsPcE4-nelmk/s16000/04_%E8%A8%AD%E5%AE%9A01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIUSzfFBurnl-ahrNWTWQGd4jcdToOroygf2ZBy2ByROvPSF8Xz2iTutbisWhA0UBBZ2XesaBLHPuDdsauajsurgQNyTaCEmrJELZAA1jkwJ8UeCXPsHmRttfLu7BALE6_RSJASb-xIBp1LG_EH-NUW8fkGV8pPMrHSL2YFkxQy16gA2u9sh89yUhVxF8/s1041/04_%E8%A8%AD%E5%AE%9A02.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;783&quot; data-original-width=&quot;1041&quot; height=&quot;481&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIUSzfFBurnl-ahrNWTWQGd4jcdToOroygf2ZBy2ByROvPSF8Xz2iTutbisWhA0UBBZ2XesaBLHPuDdsauajsurgQNyTaCEmrJELZAA1jkwJ8UeCXPsHmRttfLu7BALE6_RSJASb-xIBp1LG_EH-NUW8fkGV8pPMrHSL2YFkxQy16gA2u9sh89yUhVxF8/w640-h481/04_%E8%A8%AD%E5%AE%9A02.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj73iSTQHXvcyzMVzfV6QYwV27W9T66BR7o0IVZvaL5y8p5PX3qh6fzGRdE5QE1z2aoZJMFfAKKdRy-5gdnYIsxdSzwIdf5NPlnXulgAar3uEALD-pBcjLkv7B8vMrVhpwU_EFl_lPoGDxcpq7ME7qPa-lgOIbM92zDcpeVGH3PFrfsufNkhb3A88HvMI/s567/04_%E8%A8%AD%E5%AE%9A03.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;567&quot; data-original-width=&quot;470&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj73iSTQHXvcyzMVzfV6QYwV27W9T66BR7o0IVZvaL5y8p5PX3qh6fzGRdE5QE1z2aoZJMFfAKKdRy-5gdnYIsxdSzwIdf5NPlnXulgAar3uEALD-pBcjLkv7B8vMrVhpwU_EFl_lPoGDxcpq7ME7qPa-lgOIbM92zDcpeVGH3PFrfsufNkhb3A88HvMI/s16000/04_%E8%A8%AD%E5%AE%9A03.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;點選【新酷音輸入法(PIME)】&lt;/div&gt;&lt;div&gt;→&amp;nbsp;按下【內容】鈕&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX3yOpCjgRPlM6-2_e32TP3N2NDrxnaCGYvH46OQRxcShOzVKBmQeceYa_B4hCPwotNa8vuJP58KvY9gloUAwyww0rPKfEJvd5s6JH4SnX6xd9LblFbwORyMCib3zg6BZTkP2Yeqpy0nWNU_Kjvqu9rqiu4OoXkJIFG9Ll9vvi2PvsYN0x1gaGds6yxpw/s450/04_%E8%A8%AD%E5%AE%9A04.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;425&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX3yOpCjgRPlM6-2_e32TP3N2NDrxnaCGYvH46OQRxcShOzVKBmQeceYa_B4hCPwotNa8vuJP58KvY9gloUAwyww0rPKfEJvd5s6JH4SnX6xd9LblFbwORyMCib3zg6BZTkP2Yeqpy0nWNU_Kjvqu9rqiu4OoXkJIFG9Ll9vvi2PvsYN0x1gaGds6yxpw/s16000/04_%E8%A8%AD%E5%AE%9A04.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;此時，會開啟一個網頁，切換到【選字視窗外觀】頁籤&lt;/div&gt;&lt;div&gt;→ 【選字視窗選字鍵】改為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier; font-size: medium;&quot;&gt;asdfghjkl;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvgM4vZB5rimWeie1lhhYAuDS5F0meWW-DynHOomJ8o9I1OgPjhwKE8Wbm3fwgx3nhxfGbX3OqJcehRvKAwFmllwqGxn_BSHIDVGUVPAUP6jaCvZvXJF3MAJG8_kTJMPpYZMDj0HGfOBPWWVZsJ3fIZMnx6WmL0uUsaOs1dqZ_hl8ubtbVnfpCgnR2LUc/s1210/04_%E8%A8%AD%E5%AE%9A05.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;530&quot; data-original-width=&quot;1210&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvgM4vZB5rimWeie1lhhYAuDS5F0meWW-DynHOomJ8o9I1OgPjhwKE8Wbm3fwgx3nhxfGbX3OqJcehRvKAwFmllwqGxn_BSHIDVGUVPAUP6jaCvZvXJF3MAJG8_kTJMPpYZMDj0HGfOBPWWVZsJ3fIZMnx6WmL0uUsaOs1dqZ_hl8ubtbVnfpCgnR2LUc/w640-h280/04_%E8%A8%AD%E5%AE%9A05.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;切換到【鍵盤配置】頁籤&lt;/div&gt;&lt;div&gt;→ 改為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;倚天 26 鍵&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9EubpIk6njh0hbVOSrZf0wmKlQ7vBpjbqKMG7fafUF6tH-cZRjhV6qngP6BqqZo2plI2x2TUinL-4zTDO5SUThFASuWyWNFA4n7QRGwLybaOTUlj0Ah0y3eQE63cLUdObllCb4bZMtOaS6gY0Js7EGi8Rzavpmos7yLqBs_FUNdrIZPeS1EUMzg988tY/s1213/04_%E8%A8%AD%E5%AE%9A06.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;671&quot; data-original-width=&quot;1213&quot; height=&quot;354&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9EubpIk6njh0hbVOSrZf0wmKlQ7vBpjbqKMG7fafUF6tH-cZRjhV6qngP6BqqZo2plI2x2TUinL-4zTDO5SUThFASuWyWNFA4n7QRGwLybaOTUlj0Ah0y3eQE63cLUdObllCb4bZMtOaS6gY0Js7EGi8Rzavpmos7yLqBs_FUNdrIZPeS1EUMzg988tY/w640-h354/04_%E8%A8%AD%E5%AE%9A06.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;順便看看【特殊符號】和【簡易符號輸入】這兩個頁籤的使用說明&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後按下【套用設定】鈕，就完成了！&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2008/11/26.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;新酷音雙流劍(新酷音輸入法 + 倚天 26 鍵)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/5501354071795285522/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/09/win7-26.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5501354071795285522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5501354071795285522'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/09/win7-26.html' title='【軟體筆記】Win7 安裝新酷音輸入法 + 倚天 26 鍵'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlM6UULykH583rTqmSfTScgXbEdK4oj7jl4C56clMZ6A6ZD2uN1koRS9ZyYx5UAKm0VDEVtSYNdDUkpfaIDe2eDA43AbKss-P4AB72DoyM51fa2emKYMX-fe8mBACtdiBzzyZxMaDOpbfFzFP_S53kbbEoJSkz3wJ8c9-SIe9siqzA_7vJtq2A9wwSSI/s72-w640-h274-c/01_%E4%B8%8B%E8%BC%89.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-5163883604537353389</id><published>2025-09-15T21:58:00.001+08:00</published><updated>2025-09-15T22:29:28.133+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="軟體筆記"/><title type='text'>【軟體筆記】MobaXterm 取代 pietty</title><content type='html'>最近買了 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;ASUSTOR AS1102TL&lt;/span&gt;，看到 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;AppCentral&lt;/span&gt; 中可以安裝 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;python3&lt;/span&gt;&lt;/span&gt;，想嚐鮮，但又找不到【終端機】之類的方式能進到命令列文字模式。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;想到 &lt;span style=&quot;font-family: courier;&quot;&gt;AS1102TL&lt;/span&gt; 是屬 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Linux&lt;/span&gt; 系統，就試試看以 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;SSH&lt;/span&gt; 連進去。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;老人家之前慣用的 &lt;span style=&quot;font-family: courier;&quot;&gt;pietty&lt;/span&gt; 在建立連線時出現了錯誤訊息&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjLbHB63Y4d_TSarlyjBLSZOa2FTe59aH4-Boaar56J9-p_Z4bfC-Co5zunBFacIVHlloGC0y2eZ_t5OwqaNM-VAUkrhaYRY5gLWXCs1xAn72R8vZPBHxviHde0PN3ZU5pWAv3UufekXG_EjaJehnuVdhZShz6mJph8KzJYUQnOBHjnvkwhxeXNXNLZE0/s483/pietty_err.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;206&quot; data-original-width=&quot;483&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjLbHB63Y4d_TSarlyjBLSZOa2FTe59aH4-Boaar56J9-p_Z4bfC-Co5zunBFacIVHlloGC0y2eZ_t5OwqaNM-VAUkrhaYRY5gLWXCs1xAn72R8vZPBHxviHde0PN3ZU5pWAv3UufekXG_EjaJehnuVdhZShz6mJph8KzJYUQnOBHjnvkwhxeXNXNLZE0/w640-h272/pietty_err.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;看似是&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;pietty&lt;/span&gt;&amp;nbsp;不支援新的加密協定，上&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;pietty&lt;/span&gt;&amp;nbsp;官網，最新的版本仍停留在 &lt;span style=&quot;font-family: courier;&quot;&gt;0.4.00&lt;/span&gt;，跟現在我手上的版本一樣。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;於是問了 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;DeepSeek&lt;/span&gt; 推薦有什麼替代軟體，試用了覺得&amp;nbsp;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;MobaXterm&lt;/span&gt;&lt;/span&gt; 不錯，可以記錄多台主機連線，好像還能開多個頁籤，可惜沒有中文界面(或是我沒找到？因為 &lt;span style=&quot;font-family: courier;&quot;&gt;DeepSeek&lt;/span&gt; 說有...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;程式畫面左邊會列出它偵測到的同區網內可連線的裝置&lt;/div&gt;&lt;div&gt;→ 在欲連線的裝置按滑鼠右鍵&lt;/div&gt;&lt;div&gt;→ Edit session&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-ol-ic5T4wUPAHVXkpxt4-g0Wp9U3urfOE-K9HsTz3TtmLHqYux8Q5nTz8gEKrl6arEqK75EkfoP5xeXGrmhKaRxpNBJozcjoR6Qv923oLXrph6hgHA2JMKtNSujxQ6hrh-a7wIfrtp7BNhCR-Ab94HxjtfWZgMHGu-0bd5QIczThSSQWWviSOKP0TE4/s487/02-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;478&quot; data-original-width=&quot;487&quot; height=&quot;628&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-ol-ic5T4wUPAHVXkpxt4-g0Wp9U3urfOE-K9HsTz3TtmLHqYux8Q5nTz8gEKrl6arEqK75EkfoP5xeXGrmhKaRxpNBJozcjoR6Qv923oLXrph6hgHA2JMKtNSujxQ6hrh-a7wIfrtp7BNhCR-Ab94HxjtfWZgMHGu-0bd5QIczThSSQWWviSOKP0TE4/w640-h628/02-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;→ 確認是圈選 SSH&lt;div&gt;→ 輸入【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Remote host&lt;/span&gt;】、【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Specify username&lt;/span&gt;】&lt;/div&gt;&lt;div&gt;→ 點擊【OK】鈕&lt;/div&gt;&lt;div&gt;→ 提示要您輸入密碼&lt;/div&gt;&lt;div&gt;→ 第一次登入時，程式還會問您要不要儲存(記住)密碼，然後就登入了&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfUwGBF4EF33Oou_GL1hrKmAIAviZzNNSRaAQbGDQSaUSbZET7gdd588CG4RgP4u7yucU41eySI5Qiv8Ey91_fct6wy3ZAb2oMeALEIHOfJjTrQcbigXXxqfsjGjNVsd9evLRcUVDz59oaNAvytdSBi_scyO8Daen5qMqQpuPTCY0Fv6F10bDSRnERVo/s906/03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;601&quot; data-original-width=&quot;906&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfUwGBF4EF33Oou_GL1hrKmAIAviZzNNSRaAQbGDQSaUSbZET7gdd588CG4RgP4u7yucU41eySI5Qiv8Ey91_fct6wy3ZAb2oMeALEIHOfJjTrQcbigXXxqfsjGjNVsd9evLRcUVDz59oaNAvytdSBi_scyO8Daen5qMqQpuPTCY0Fv6F10bDSRnERVo/w640-h424/03.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/5163883604537353389/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/09/mobaxterm-pietty.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5163883604537353389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/5163883604537353389'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/09/mobaxterm-pietty.html' title='【軟體筆記】MobaXterm 取代 pietty'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjLbHB63Y4d_TSarlyjBLSZOa2FTe59aH4-Boaar56J9-p_Z4bfC-Co5zunBFacIVHlloGC0y2eZ_t5OwqaNM-VAUkrhaYRY5gLWXCs1xAn72R8vZPBHxviHde0PN3ZU5pWAv3UufekXG_EjaJehnuVdhZShz6mJph8KzJYUQnOBHjnvkwhxeXNXNLZE0/s72-w640-h272-c/pietty_err.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-81925228025436845</id><published>2025-06-28T14:06:00.007+08:00</published><updated>2025-08-31T12:10:25.480+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>【Android】Android15 停用無邊框方式顯示內容</title><content type='html'>參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://developer.android.com/develop/ui/views/layout/edge-to-edge?hl=zh-tw#kts&quot; target=&quot;_blank&quot;&gt;在檢視畫面中以無邊框方式顯示內容&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://developer.android.com/about/versions/16/behavior-changes-16?hl=zh-cn#edge-to-edge&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;行为变更：以 Android 16 或更高版本为目标平台的应用 -- 无边框设计停用退出选项&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Android&lt;/span&gt; 自 &lt;span style=&quot;font-family: courier;&quot;&gt;Android10(Quince Tart, API29)&lt;/span&gt; 導入&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;無邊框&lt;/span&gt;&lt;/span&gt;風格樣式，&lt;span style=&quot;font-family: courier;&quot;&gt;Android15(Vanilla Ice Cream, API&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;35)&lt;/span&gt; 開始，新專案預設會是無邊框風格樣式，而自&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Android16(BAKLAVA, API&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;36)&lt;/span&gt;&amp;nbsp;開始 則會強制 &lt;span style=&quot;font-family: courier;&quot;&gt;APP&lt;/span&gt; 預設外觀為無邊框風格樣式。&lt;/div&gt;&lt;div&gt;(題外話...看來 &lt;span style=&quot;font-family: courier;&quot;&gt;Build.VERSION_CODES&lt;/span&gt; 依字母排列只到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;API&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;35 為止了&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;如果您的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;targetSdkVersion&lt;/span&gt; 設為 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;35&lt;/span&gt;&lt;/span&gt;，當&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;APP&lt;/span&gt;&amp;nbsp;安裝在 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;Android15&lt;/span&gt;&lt;/span&gt; 時就會強制啟用無邊框顯示，若&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;APP&lt;/span&gt;&amp;nbsp;還未準備好，調整為無邊框，則可以&amp;nbsp;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;windowOptOutEdgeToEdgeEnforcement&lt;/span&gt;&amp;nbsp;先緩緩。&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;resources
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;&amp;gt;

    &amp;lt;style
        name=&quot;Theme.MyTheme&quot;
        parent=&quot;Theme.Material3.DayNight.NoActionBar&quot;&amp;gt;

        &amp;lt;!-- 關閉 Edge-to-Edge(沈浸式無邊框) 功能 --&amp;gt;
        &amp;lt;item name=&quot;android:windowOptOutEdgeToEdgeEnforcement&quot; tools:targetApi=&quot;35&quot;&amp;gt;true&amp;lt;/item&amp;gt;
		
...
...
&amp;lt;/resources&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;不過 &lt;span style=&quot;font-family: courier;&quot;&gt;Android16(Baklava,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;SDK&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;36)&lt;/span&gt; 起，&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;windowOptOutEdgeToEdgeEnforcement&lt;/span&gt;&lt;/span&gt; 就失效了，該面對的跑不掉，開始調整自己的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;APP&lt;/span&gt;&amp;nbsp;吧。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/81925228025436845/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/81925228025436845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/81925228025436845'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/android.html' title='【Android】Android15 停用無邊框方式顯示內容'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-37567944579444070</id><published>2025-06-21T11:39:00.010+08:00</published><updated>2025-06-27T18:14:47.022+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="Kotlin"/><title type='text'>【Android】設定建構變化版本 -- 分開建立測試、正式版本 app</title><content type='html'>參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://developer.android.com/build/build-variants?hl=zh-tw#groovy&quot; target=&quot;_blank&quot;&gt;設定建構變化版本&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://developer.android.com/google/play/publishing/multiple-apks?hl=zh-tw&quot; target=&quot;_blank&quot;&gt;支援多個 APK&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2018/07/androidadmob.html&quot; target=&quot;_blank&quot;&gt;AdMob 的測試帳號&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;老人家的 &lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt; 有置入 &lt;span style=&quot;font-family: courier;&quot;&gt;AdMob&lt;/span&gt; 播放廣告，但 &lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt; 要求&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;開發、測試期間，&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;內的廣告要採用測試廣告，且抓得頗嚴，所以覺得蠻麻煩的。有時候，&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;上架了才發現沒有換回正式廣告，就得再更正後再重上架...😒&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;偶然間，發現可以【設定建構變化版本】，這功能超好用的！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;AdMob&lt;/span&gt; 的每種類型廣告都有個廣告&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;ID&lt;/span&gt;，在開發、測試期間要使用測試&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;ID&lt;/span&gt;，&lt;span style=&quot;font-family: courier;&quot;&gt;debug&lt;/span&gt; 時播放的廣告就會是測試廣告，要設定廣告，須在 &lt;span style=&quot;font-family: courier;&quot;&gt;/res/values/strings.xml&lt;/span&gt; 指定該類型廣告的 &lt;span style=&quot;font-family: courier;&quot;&gt;ID&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
&amp;lt;resources&amp;gt;
...
...

&amp;lt;!-- 上架前要 mark 起來 --&amp;gt;
&amp;lt;!-- adMob app id 測試 --&amp;gt;
&amp;lt;string name=&quot;admob_app&quot;&amp;gt;ca-app-pub-3940256099942544~3347511713&amp;lt;/string&amp;gt;
&amp;lt;!-- 橫幅 測試 --&amp;gt;
&amp;lt;string name=&quot;admob_banner&quot;&amp;gt;ca-app-pub-3940256099942544/6300978111&amp;lt;/string&amp;gt;
&amp;lt;!-- 插頁 測試 --&amp;gt;
&amp;lt;string name=&quot;admob_interstitial&quot;&amp;gt;ca-app-pub-3940256099942544/8691691433&amp;lt;/string&amp;gt;
&amp;lt;!--  影片 測試 --&amp;gt;
&amp;lt;string name=&quot;admob_video&quot;&amp;gt;ca-app-pub-3940256099942544/5224354917&amp;lt;/string&amp;gt;

&amp;lt;!-- 開發時期先 mark 起來，等要上架前再恢復 --&amp;gt;
&amp;lt;!-- adMob app id 正式 --&amp;gt;
&amp;lt;!-- &amp;lt;string name=&quot;admob_app&quot;&amp;gt;ca-app-pub-blablaXXXXXXXXXX~XXXXXXXXXX&amp;lt;/string&amp;gt; --&amp;gt;
&amp;lt;!-- AdMob 橫幅 正式 --&amp;gt;
&amp;lt;!-- &amp;lt;string name=&quot;admob_banner&quot;&amp;gt;ca-app-pub-blablaXXXXXXXXXX/aaaaaaaaaa&amp;lt;/string&amp;gt; --&amp;gt;
&amp;lt;!-- AdMob 插頁 正式 --&amp;gt;
&amp;lt;!-- &amp;lt;string name=&quot;admob_interstitial&quot;&amp;gt;ca-app-pub-blablaXXXXXXXXXX/bbbbbbbbbb&amp;lt;/string&amp;gt; --&amp;gt;
&amp;lt;!-- AdMob 影片 正式 --&amp;gt;
&amp;lt;!-- &amp;lt;string name=&quot;admob_video&quot;&amp;gt;ca-app-pub-blablaXXXXXXXXXX/cccccccccc&amp;lt;/string&amp;gt; --&amp;gt;

...
...
&amp;lt;/resources&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;現在，改在&amp;nbsp;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;層級&lt;/span&gt;&lt;/span&gt;的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;build.gradle&lt;/span&gt; 設定&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml linenums&quot;&gt;&amp;nbsp;
android {

...
...

    buildTypes {
        debug {
            // 開發、測試期
            applicationIdSuffix &quot;.debug&quot;    // debug 版本的 applicationId 會是 com.example.debug
            
            resValue &#39;string&#39;, &#39;app_name&#39;, &#39;測試版 app&#39;
            
            // adMob app id
            resValue &quot;string&quot;, &quot;admob_app_id&quot;, &quot;ca-app-pub-3940256099942544~3347511713&quot;
            // 橫幅 測試
            resValue &quot;string&quot;, &quot;banner_id&quot;, &quot;ca-app-pub-3940256099942544/6300978111&quot;
            // 插頁 測試
            resValue &quot;string&quot;, &quot;interstitial_id&quot;, &quot;ca-app-pub-3940256099942544/8691691433&quot;
        }

        release {
            // 正式
            resValue &#39;string&#39;, &#39;app_name&#39;, &#39;正式版 app&#39;
            
            minifyEnabled false
            proguardFiles getDefaultProguardFile(&#39;proguard-android-optimize.txt&#39;), &#39;proguard-rules.pro&#39;

            // adMob app id
            resValue &quot;string&quot;, &quot;admob_app_id&quot;, &quot;ca-app-pub-blablaXXXXXXXXXX~XXXXXXXXXX&quot;
            // 橫幅 正式
            resValue &quot;string&quot;, &quot;banner_id&quot;, &quot;ca-app-pub-blablaXXXXXXXXXX/aaaaaaaaaa&quot;
            // 插頁 正式
            resValue &quot;string&quot;, &quot;interstitial_id&quot;, &quot;ca-app-pub-blablaXXXXXXXXXX/bbbbbbbbbb&quot;
        }
    }

...
...
}
&amp;nbsp;
&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;不僅如此，還可以設定 測試版 跟 正式版 不同的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;applicationId&lt;/span&gt;，這麼做，就可以在同一支開發手機同時安裝 測試版 跟 正式版&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;功能表選擇 &lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;Build&lt;/span&gt;&lt;/span&gt;&amp;nbsp;→ &lt;span style=&quot;background-color: black; color: #fcff01;&quot;&gt;Select Build Variant&lt;/span&gt;&lt;/span&gt;，會看到可編譯的版本的選項。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGpgD5jXPrfbcaVtlKR5WCcS-ou3JBIYpRK0BOKCML6oNkDdFmBk0Th4AS7pJpvw1jcF-QWiN4s4oUt-mCJrLS8Wjad64HBKmF3gQezORm2_8pAo3Pml6Wf7WX8f_pmAuzRMxMNYBwx8d-SpCwbdaQBBh0dFJG-mWObxDNPQGmkDcdt9OsbkHzCDq3ysk/s294/build.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;163&quot; data-original-width=&quot;294&quot; height=&quot;163&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGpgD5jXPrfbcaVtlKR5WCcS-ou3JBIYpRK0BOKCML6oNkDdFmBk0Th4AS7pJpvw1jcF-QWiN4s4oUt-mCJrLS8Wjad64HBKmF3gQezORm2_8pAo3Pml6Wf7WX8f_pmAuzRMxMNYBwx8d-SpCwbdaQBBh0dFJG-mWObxDNPQGmkDcdt9OsbkHzCDq3ysk/s1600/build.png&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;而 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;productFlavors&lt;/span&gt; 是 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;BuildTypes&lt;/span&gt; 的進階設定，可以變化出更多的 &lt;span style=&quot;font-family: courier;&quot;&gt;Build Variant&lt;/span&gt;，如下圖：&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq4DW7pASalN7xhf6GtkQxymq2XbrSnUm9ztuA-RSRouXgUfmUBHDwZyv3AtBax9R7-eWx8p1cb_NWqHalpXbzAJ58Io8G6wgIp1VAO60hGLGUwF1cV23XNW2eimWr5c6XV2oZo7VN1IZdEJhfgJMNNchoLByAFzxkjcKuJg3czKTk0gPk7H6etHQvesU/s326/build2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;192&quot; data-original-width=&quot;326&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq4DW7pASalN7xhf6GtkQxymq2XbrSnUm9ztuA-RSRouXgUfmUBHDwZyv3AtBax9R7-eWx8p1cb_NWqHalpXbzAJ58Io8G6wgIp1VAO60hGLGUwF1cV23XNW2eimWr5c6XV2oZo7VN1IZdEJhfgJMNNchoLByAFzxkjcKuJg3czKTk0gPk7H6etHQvesU/s320/build2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另有一個常見的情況：&lt;/div&gt;&lt;div&gt;某個特定的 &lt;span style=&quot;font-family: courier;&quot;&gt;API&lt;/span&gt; 在某版本起被棄用，&lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt;&amp;nbsp;強制規定要改用新的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;API&lt;/span&gt;(&lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt;&amp;nbsp;還蠻常做這事的...所以要配合&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt;，大約每半年要檢視自己的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;是否能在各 &lt;span style=&quot;font-family: courier;&quot;&gt;Android&lt;/span&gt; 版本上正常運行)；例如：&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;原本在&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;API&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;SDK30&lt;/span&gt; 前都可正常運行，但自&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;SDK31&lt;/span&gt;&amp;nbsp;起須改變程式寫法，在 &lt;span style=&quot;font-family: courier;&quot;&gt;build.gradle&lt;/span&gt; 設定 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;minSdkVersion 31&lt;/span&gt;，程式改好後，可將新版的 &lt;span style=&quot;font-family: courier;&quot;&gt;apk&lt;/span&gt; 取不同的檔名，上架到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;PlayStore&lt;/span&gt;，如此，就分出新舊版本了，手機中的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;PlayStore app&lt;/span&gt; 會自動判別，挑選最適合手機的版本 -- 手機版本在 &lt;span style=&quot;font-family: courier;&quot;&gt;SDK30&lt;/span&gt; 前的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt;&amp;nbsp;會下載安裝舊版的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;，而手機版本在&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;SDK31&lt;/span&gt;&amp;nbsp;後的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt;&amp;nbsp;則會下載新版的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;，不會因為&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;app&lt;/span&gt;&amp;nbsp;改版而放棄舊版本手機的 &lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt;。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;


&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/37567944579444070/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/android-app.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/37567944579444070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/37567944579444070'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/android-app.html' title='【Android】設定建構變化版本 -- 分開建立測試、正式版本 app'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGpgD5jXPrfbcaVtlKR5WCcS-ou3JBIYpRK0BOKCML6oNkDdFmBk0Th4AS7pJpvw1jcF-QWiN4s4oUt-mCJrLS8Wjad64HBKmF3gQezORm2_8pAo3Pml6Wf7WX8f_pmAuzRMxMNYBwx8d-SpCwbdaQBBh0dFJG-mWObxDNPQGmkDcdt9OsbkHzCDq3ysk/s72-c/build.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-4628906047820257524</id><published>2025-06-08T17:53:00.001+08:00</published><updated>2025-06-08T17:55:32.752+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><title type='text'>【jQuery】jQuery + CSS 多個 checkbox 勾選</title><content type='html'>&lt;pre class=&quot;prettyprint lang-html linenums&quot;&gt;
&amp;nbsp;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;checkbox lab&amp;lt;/title&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
// chkAll 點擊事件
function checkAll() {
    var isChecked = $(&#39;#chkAll&#39;).prop(&#39;checked&#39;);
    // 更新所有 nameCheckbox 的狀態
    $(&#39;.nameCheckbox&#39;).prop(&#39;checked&#39;, isChecked).trigger(&#39;change&#39;);
}


// 更新 chkAll 狀態
function updateChkAll() {
    var totalCheckboxes = $(&#39;.nameCheckbox&#39;).length;
    var checkedCheckboxes = $(&#39;.nameCheckbox:checked&#39;).length;
    var $chkAll = $(&#39;#chkAll&#39;);
               
    if (checkedCheckboxes === 0) {
        // 全部未選中
        $chkAll.prop(&#39;checked&#39;, false);
        $chkAll.removeClass(&#39;partial&#39;);
    } else if (checkedCheckboxes === totalCheckboxes) {
        // 全部選中
        $chkAll.prop(&#39;checked&#39;, true);
        $chkAll.removeClass(&#39;partial&#39;);
    } else {
        // 部分選中
        $chkAll.prop(&#39;checked&#39;, false);
        // 關鍵修改：部分選中時保持 checked 但變灰色
        $chkAll.prop(&#39;checked&#39;, true).addClass(&#39;partial&#39;);
    }
}
&amp;lt;/script&amp;gt;
&amp;lt;style type=&quot;text/css&quot;&amp;gt;
#chkAll {
    margin-bottom: 10px;
    font-size: 10px;
}
/* 部分選中時的灰色打勾 */
#chkAll.partial {
    accent-color: gray;  /* 現代瀏覽器 */
    filter: grayscale(50%) opacity(80%);  /* 舊瀏覽器備用 */
}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;center&amp;gt;
&amp;lt;form name=&quot;frmInput&quot; id=&quot;frmInput&quot; method=&quot;post&quot; action=&quot;func.php&quot;&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;act&quot; value=&quot;input&quot; /&amp;gt;
&amp;lt;table border=&quot;1&quot;&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;th nowrap=&quot;nowrap&quot;&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;chkAll&quot; onchange=&quot;checkAll()&quot; /&amp;gt;全選&amp;lt;/th&amp;gt;
		&amp;lt;th nowrap=&quot;nowrap&quot;&amp;gt;姓名&amp;lt;/th&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; class=&quot;nameCheckbox&quot; id=&quot;chk1&quot; onchange=&quot;updateChkAll()&quot; /&amp;gt;&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;張三&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; class=&quot;nameCheckbox&quot; id=&quot;chk2&quot; onchange=&quot;updateChkAll()&quot; /&amp;gt;&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;李四&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; class=&quot;nameCheckbox&quot; id=&quot;chk3&quot; onchange=&quot;updateChkAll()&quot; /&amp;gt;&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;王五&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/center&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&amp;nbsp;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/4628906047820257524/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/jquery-checkbox.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/4628906047820257524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/4628906047820257524'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/06/jquery-checkbox.html' title='【jQuery】jQuery + CSS 多個 checkbox 勾選'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8469191937196490799</id><published>2025-02-16T00:27:00.009+08:00</published><updated>2025-02-16T00:52:24.516+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>【PHP】以 Telegram bot 取代 LINE notify</title><content type='html'>&lt;p&gt;* 先準備 2 支手機(在本筆記，2 支手機都是 &lt;span style=&quot;font-family: courier;&quot;&gt;Android&lt;/span&gt;)，&lt;span style=&quot;font-family: courier;&quot;&gt;telegram&lt;/span&gt; 沒法建立一人群組(應該說我沒試成功)&lt;/p&gt;&lt;p&gt;* 2 支手機都安裝 &lt;span style=&quot;font-family: courier;&quot;&gt;telegram&lt;/span&gt;，並建立一個群組&lt;/p&gt;&lt;p&gt;* 在尋找聯絡人輸入 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;@botfather&lt;/span&gt;，找到後，將 &lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt; 加入聯絡人&lt;/p&gt;&lt;p&gt;* 進入 &lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt; 的&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;聊天室&lt;/span&gt;&lt;/span&gt;，會看到&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt;&amp;nbsp;的招呼語【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;What can this bot do?&lt;/span&gt;】&lt;/p&gt;&lt;p&gt;* 輸入【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/start&lt;/span&gt;】，&lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt;&amp;nbsp;會列出一堆跟 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 有關的指令&lt;/p&gt;&lt;p&gt;* 輸入【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/newbot&lt;/span&gt;】&lt;/p&gt;&lt;p&gt;*&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt;&amp;nbsp;會請您為您的 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 取名字，因為後續的互動會是 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;json&lt;/span&gt; 格式，所以建議這次先以英文命名，較容易在 &lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt; 字串中辨識、找到。&lt;/p&gt;&lt;p&gt;* 接下來，&lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt;&amp;nbsp;請您設定您的 bot 的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;id&lt;/span&gt;，bot&amp;nbsp;的 &lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt; 必須以 【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;bot&lt;/span&gt;】結尾，ex：&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;TetrisBot&lt;/span&gt; 或 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;tetris_bot&lt;/span&gt;&lt;/span&gt;，這個 &lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt; 必須是在 &lt;span style=&quot;font-family: courier;&quot;&gt;telegram&lt;/span&gt; 唯一的，所以若您設定的名字已經有別人先用了，&lt;span style=&quot;font-family: courier;&quot;&gt;botfather&lt;/span&gt;&amp;nbsp;會請您改名字。&lt;/p&gt;&lt;p&gt;* 建立您的 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 後，可輸入【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/help&lt;/span&gt;】進一步了解&lt;/p&gt;&lt;p&gt;* 輸入【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/mybots&lt;/span&gt;】，會得到您的 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 的 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;token&lt;/span&gt;，格式是 【一串數字：大小寫英數字混合字串】&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;很重要！請好好保存&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;* 將 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 加入群組&lt;/p&gt;&lt;p&gt;→ 由群組中的任一人發送一個訊息到群組&lt;/p&gt;&lt;p&gt;→ 點擊標題欄，可以看到這個群組的成員，並且下方有個標題為【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Links&lt;/span&gt;】的區塊，點擊第一個連結(最後面以 【&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;/getUpdates&lt;/span&gt;】結尾)，就會看到一段 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;json&lt;/span&gt; 字串，將這段&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt;&amp;nbsp;字串複製出來，並尋找其中&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-json linenums&quot;&gt;&amp;nbsp;
...
...

&quot;chat&quot;:{&quot;id&quot;:-0123456789,
        &quot;title&quot;:&quot;mytest&quot;,
        &quot;type&quot;:&quot;group&quot;,
        &quot;all_members_are_administrators&quot;:false
       }

...
...
&amp;nbsp;
&lt;/pre&gt;
這個就是群組的 &lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt;，通常是&lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;負數&lt;/span&gt;&lt;/span&gt;，&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;type&lt;/span&gt; 是 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;group&lt;/span&gt;&lt;div&gt;如果找不到群組&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt;，請多試幾次(群組某人發送訊息，然後看 &lt;span style=&quot;font-family: courier;&quot;&gt;json&lt;/span&gt; 字串)，甚至將 &lt;span style=&quot;font-family: courier;&quot;&gt;bot&lt;/span&gt; 踢出群組再重加入。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;寫個測試的 &lt;span style=&quot;font-family: courier;&quot;&gt;PHP&lt;/span&gt; 程式&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php
date_default_timezone_set(&#39;Asia/Taipei&#39;);

$sToken = &quot;0123456789:AAG9Sxwv3zc9YblablablaiBBJ3ZOUO4lFY&quot;;    // bot 的 token
$sGroupId = &quot;-9876543210&quot;;	// 群組 id
 
// 訊息內容
$sMsg = &quot;Hello, this is oldgrayduck&#39;s telegram Bot test, &quot;.date(&#39;Y-m-d H:i:s&#39;);
 
$url = &quot;https://api.telegram.org/bot$sToken/sendMessage&quot;;
$data = [
    &#39;chat_id&#39; =&amp;gt; $sGroupId,
    &#39;text&#39; =&amp;gt; $sMsg
];
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
$result = curl_exec($ch);
curl_close($ch);

// 顯示回應
echo $result;
 
?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
群組就會收到訊息了。</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8469191937196490799/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2025/02/php-telegram-bot-line-notify.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8469191937196490799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8469191937196490799'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2025/02/php-telegram-bot-line-notify.html' title='【PHP】以 Telegram bot 取代 LINE notify'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8940815944045112423</id><published>2024-12-30T10:03:00.006+08:00</published><updated>2026-01-24T10:47:22.422+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LINE"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>【LINE Messaging API】主動傳送訊息(推播) 給多位使用者</title><content type='html'>&lt;div&gt;
類似主動傳訊息給 &lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt;，不過在傳訊類型定義為 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;multicast&lt;/span&gt;。要傳訊的目標對象是多位&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;user&lt;/span&gt;，所以 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01; font-family: courier;&quot;&gt;UserId&lt;/span&gt;&lt;/span&gt; 要存在陣列中。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;php?
date_default_timezone_set(&#39;Asia/Taipei&#39;);
$sRootDir = $_SERVER[&#39;DOCUMENT_ROOT&#39;];
$channelAccessToken = &#39;您的 channel Access Token&#39;;
$bodyMsg = file_get_contents(&#39;php://input&#39;);

// LINE 不會幫我們記錄, 所以要自己寫 log
// 這段不是必要, 只是方便自己除錯
$sLogfile = &#39;log_&#39;.date(&#39;Ymd&#39;).&#39;.log&#39;;    // 指定 log 檔名, 一天一個檔, 檔名格式為: log_yyyymmdd.log
$fp = fopen($sLogfile, &quot;a+&quot;);
fwrite($fp , print_r(date(&#39;Y-m-d H:i:s&#39;).&#39;, Recive: &#39;.$bodyMsg.&quot;\n&quot;, true));
fclose($fp);

...
...
// 取得 user id, 管道有很多, 此處不贅述
$arrUserId = [&#39;...&#39;,&#39;...&#39;, ...];    ← 要推播的目標 UserId 存入陣列

$payload = [ &#39;to&#39; =&amp;gt; $arrUserId,
             &#39;messages&#39; =&amp;gt; [
                               [&#39;type&#39; =&amp;gt; &#39;text&#39;,
                                &#39;text&#39; =&amp;gt; &#39;恭喜! 您中了特獎!&#39;,
                               ]
                              ]
           ];
SendMsg($payload);


// 傳送訊息給指定使用者
function SendMsg($payload) {
    $ch = curl_init();
    // curl_setopt($ch, CURLOPT_URL, &#39;https://api.line.me/v2/bot/message/push&#39;);
    ↓ 注意這裡要改成 multicast
    curl_setopt($ch, CURLOPT_URL, &#39;https://api.line.me/v2/bot/message/multicast&#39;);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &#39;POST&#39;);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [  &#39;Content-Type: application/json&#39;,
                                            &#39;Authorization: Bearer &#39; . $GLOBALS[&#39;channelAccessToken&#39;]
                                        ]);
    $result = curl_exec($ch);
    curl_close($ch);
    // 寫 log
    $sLogfile = &#39;log_&#39;.date(&#39;Ymd&#39;).&#39;.log&#39;;
    $fp = fopen($sLogfile, &quot;a+&quot;);
    fwrite($fp , print_r(date(&#39;Y-m-d H:i:s&#39;).&#39;, send message result: &#39;.$result.&quot;\n&quot;, true));
    fclose($fp);
}
?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2023/12/line-messaging-api.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;【LINE Messaging API】主動傳送訊息給指定使用者&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8940815944045112423/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2024/12/line-messaging-api.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8940815944045112423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8940815944045112423'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2024/12/line-messaging-api.html' title='【LINE Messaging API】主動傳送訊息(推播) 給多位使用者'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-1999253124990589052</id><published>2024-08-28T18:47:00.006+08:00</published><updated>2024-08-29T10:40:11.348+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="Kotlin"/><title type='text'>【Kotlin】隨機取出指定筆數的記錄</title><content type='html'>&lt;p&gt;題目：&lt;/p&gt;&lt;p&gt;有一含 &lt;span style=&quot;font-family: courier;&quot;&gt;1000&lt;/span&gt; 筆記錄的資料表 &lt;span style=&quot;font-family: courier;&quot;&gt;table1，&lt;/span&gt;要從中取出任意 &lt;span style=&quot;font-family: courier;&quot;&gt;100&lt;/span&gt; 筆&lt;/p&gt;&lt;p&gt;在詢問 &lt;span style=&quot;font-family: courier;&quot;&gt;Google 的 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;Gemini&lt;/span&gt;&lt;/span&gt;、OpenAI 的 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;ChatGPT&lt;/span&gt;&lt;/span&gt;、Perplexity 的 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;Perplexity&lt;/span&gt;&lt;/span&gt;、微軟的 &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;Copilot&lt;/span&gt;&lt;/span&gt; 後&lt;/span&gt;，多認識了一些類別及技巧，故做此筆記。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;做法一：&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-java linenums&quot;&gt;&amp;nbsp;
val mScope = CoroutineScope(Job() + Dispatchers.IO)
mScope.launch {
    val mDbHelper = SQLite(baseContext)
    var db = mDbHelper.readableDatabase

    // 查詢本機資料庫有幾筆記錄
    var sSql = &quot;SELECT * FROM table1 &quot;
    val rs = db.rawQuery(sSql, null)
    val mRecnt = rs.count    // 本機資料庫記錄筆數
    var mSentence = 100   // 迴圈數, 要取出 100 筆記錄

    val mList = mutableListOf&amp;lt;Int&amp;gt;()
    var xx = 1
    // 這種做法, 有可能亂數取得的 mPos 已存在 mList 中
    while(xx&amp;lt;=mSentence) {
        val mPos = (0 until mRecnt).random()    // 每筆記錄在 table1 的位置
        if(mPos !in mList) {
            mList.add(mPos)
            xx++
        }
    }
    mList.sorted()    // 將 mList 內的元素由小到大排序
    // 如此, 在實際自 table1 取出記錄就會是自資料表首一路向資料表尾依序取出記錄
    
    ...
    ...
}
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;做法二：&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-java linenums&quot;&gt;&amp;nbsp;
val mScope = CoroutineScope(Job() + Dispatchers.IO)
mScope.launch {
    ...
    ...

    val mRaw = mutableSetOf&amp;lt;Int&amp;gt;()    // mutableSet 的特性是存入時就會檢查每個元素的值都是唯一
    val mRandom = Random(System.currentTimeMillis())
    while(mRaw.size&amp;lt;mSentence) {
        mRaw.add(mRandom.nextInt(mRecnt))
    }
    // 但 mutableSet 不具排序功能, 
    // 故將它轉型態成 list 並排序後存入  mList
    val mList = mRaw.toList().sorted()
    
    ...
    ...
}
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;做法三：&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-java linenums&quot;&gt;&amp;nbsp;
val mScope = CoroutineScope(Job() + Dispatchers.IO)
mScope.launch {
    ...
    ...

    // 這個做法最快, 一行指令搞定
    // 以 shuffled() 洗牌後, 再以 take() 取前面幾個元素, 再將元素排序
    // (0 until mRecnt) 是 IntRange
    val mList = (0 until mRecnt).shuffled().take(mSentence).sorted()
    // val mList = (0 until mRecnt).shuffled(Random(System.currentTimeMillis())).take(mSentence).sorted()   // 可以在 shuffled() 內加上時間當做亂數種子, 增強其隨機性
    
    ...
    ...
}
&amp;nbsp;
&lt;/pre&gt;&lt;pre class=&quot;prettyprint lang-java linenums&quot;&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/1999253124990589052/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2024/08/kotlin.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1999253124990589052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/1999253124990589052'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2024/08/kotlin.html' title='【Kotlin】隨機取出指定筆數的記錄'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6067556553711858174.post-8906249120430107938</id><published>2024-07-13T11:55:00.012+08:00</published><updated>2025-03-01T14:53:45.735+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML5"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>【網頁程式】土砲打造 -- 依數個地點距離由近至遠規劃行程導航</title><content type='html'>&lt;div&gt;參考資料&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://developers.google.com/maps/documentation/directions/overview?hl=zh-tw&quot; target=&quot;_blank&quot;&gt;Directions API 總覽&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;當我們要前往數個地點，想依距離由近至遠排序，規劃開車行程，可以請 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Google Cloud&lt;/span&gt; 服務，不過這是要收費的。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;行程含目的地的停靠點在&lt;span style=&quot;font-family: courier;&quot;&gt; 10 &lt;/span&gt;個點以下，是一種費率，&lt;span style=&quot;font-family: courier;&quot;&gt;11&lt;/span&gt;(含)個點以上則會收較高的費用。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本筆記是自行計算及排序停靠點(注意，還是要收費的)。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://developers.google.com/maps/documentation/geocoding/get-api-key?hl=zh-tw&quot; target=&quot;_blank&quot;&gt;申請服務憑證 及 API 金鑰&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;您可以服務全開，不過我只使用其中 2 項 -- 取得&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;地理位置(經緯度)&lt;/span&gt;&lt;/span&gt;、&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #fcff01;&quot;&gt;導航&lt;/span&gt;&lt;/span&gt;。&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8B6B3BugXaJYd9B7MJobOKTEhOutXThoGcvVHV8jLVg2XSoWqsVlzeSGiXoYK8A4SRVr70Z8PdbkRJrvh5IgStYDuuh2Zc_V6fP6NGI3LuZIX2OW7mUrFytRtAh9whhENLNxzNa4OXlFTPi0RbqX4dZl7FRyuigJcOnVRj8rL7GVAzHAdJsA4PaU7A8/s312/%E9%87%91%E9%91%B0%E9%99%90%E5%88%B6_01.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;303&quot; data-original-width=&quot;312&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8B6B3BugXaJYd9B7MJobOKTEhOutXThoGcvVHV8jLVg2XSoWqsVlzeSGiXoYK8A4SRVr70Z8PdbkRJrvh5IgStYDuuh2Zc_V6fP6NGI3LuZIX2OW7mUrFytRtAh9whhENLNxzNa4OXlFTPi0RbqX4dZl7FRyuigJcOnVRj8rL7GVAzHAdJsA4PaU7A8/s1600/%E9%87%91%E9%91%B0%E9%99%90%E5%88%B6_01.jpg&quot; width=&quot;312&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;  
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqeCf5FYOikVkslHqp6tdcIhreaNNHh61Lx_66zDNK_oOmcnHjvm2vS0KxNaLww6s_20HTqaIxRGpfmtQ-mvc1n10p7fk26bw7kkaUlQN7ngxbI4UBPELOmzgEpVsKD17-fTAB34Dwute1h4tWMWgn55EvbDpIq4G6R3MJDT2TSxNUJvFgmWi1jRXp86Q/s235/%E9%87%91%E9%91%B0%E9%99%90%E5%88%B6_02.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;235&quot; data-original-width=&quot;209&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqeCf5FYOikVkslHqp6tdcIhreaNNHh61Lx_66zDNK_oOmcnHjvm2vS0KxNaLww6s_20HTqaIxRGpfmtQ-mvc1n10p7fk26bw7kkaUlQN7ngxbI4UBPELOmzgEpVsKD17-fTAB34Dwute1h4tWMWgn55EvbDpIq4G6R3MJDT2TSxNUJvFgmWi1jRXp86Q/s1600/%E9%87%91%E9%91%B0%E9%99%90%E5%88%B6_02.jpg&quot; width=&quot;209&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
&lt;div&gt;建立 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;GMap&lt;/span&gt; 類別&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php 
date_default_timezone_set(&#39;Asia/Taipei&#39;);
  
// 用來查詢地址的經、緯度
class GMap {
    function getPageData($url) { 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);  
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(&#39;Expect: &#39;));
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_setopt($ch, CURLOPT_FILETIME, true);
        curl_setopt($ch, CURLOPT_REFERER, $url); 
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 4);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_USERAGENT, &quot;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&quot;);
        $result[&#39;data&#39;] = curl_exec($ch);
        curl_close($ch);
          
        return $result;
    }
    
    // 初始化 apikey 金鑰 
    function __construct() {
        $this-&amp;gt;apikey = &#39;向 Google map 申請 apikey&#39;;
    } 


    // 從 google map 取得地址經緯度
    public function getLngLat($addr=&#39;&#39;,$sDebug=&#39;&#39;) {
        $apikey = $this-&amp;gt;apikey;
        $url = &quot;https://maps.googleapis.com/maps/api/geocode/json?address=$addr&amp;amp;key=$apikey&quot;;
        $geocode = $this-&amp;gt;getPageData($url);
        if($sDebug==&#39;debug&#39;)
            var_dump($geocode);

        if(isset($geocode[&#39;data&#39;])) {
            if(!$geocode[&quot;data&quot;])
                // 當 Google map 解析不了時，回應 經/緯度值都是 -1 的虛擬經緯度
                $geocode = &#39;{&quot;results&quot;:[{&quot;geometry&quot;:{&quot;location&quot;:{&quot;lat&quot;:-1,&quot;lng&quot;:-1}}}]}&#39;;
            else
                $geocode = $geocode[&#39;data&#39;];
        } else
            // 當 Google map 解析不了時，回應 經/緯度值都是 -1 的虛擬經緯度
            $geocode = &#39;{&quot;results&quot;:[{&quot;geometry&quot;:{&quot;location&quot;:{&quot;lat&quot;:-1,&quot;lng&quot;:-1}}}]}&#39;;

        $output = json_decode($geocode); 
        $latitude = $output-&amp;gt;results[0]-&amp;gt;geometry-&amp;gt;location-&amp;gt;lat;
        $longitude = $output-&amp;gt;results[0]-&amp;gt;geometry-&amp;gt;location-&amp;gt;lng; 
     
        return array(&#39;lat&#39;=&amp;gt;$latitude,&#39;lng&#39;=&amp;gt;$longitude);
    }
}
?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;getroute.php&lt;/span&gt;，用來依次計算起點至每個目的地的距離，取最近的地址做為下個停靠點，並再以這地址做為下次計算的起點&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php
// 切換至 https
if (empty($_SERVER[&#39;HTTPS&#39;]) || $_SERVER[&#39;HTTPS&#39;] === &quot;off&quot;) 
{
    $location = &#39;https://&#39; . $_SERVER[&#39;HTTP_HOST&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
    header(&#39;HTTP/1.1 301 Moved Permanently&#39;);
    header(&#39;Location: &#39; . $location);
    exit;
}

include(&#39;gmap.php&#39;);

class MyDest {
    public $addr;
    public $len = 0;
    public $lng = -1;
    public $lat = -1;
  
    function __construct($aa) {
        $this-&amp;gt;addr = $aa;
    }
}


if(isset($_GET[&#39;lat&#39;])) {
    // 接收到起點 經/緯 度
    // $sLat = 22.612058525444247;    // 測試用
    // $sLng = 120.3142669919977;   // 測試用
    $sLat = $_GET[&#39;lat&#39;];
    $sLng = $_GET[&#39;lng&#39;];
    

    $aDest = array();    // 存放上傳的目的地
    $aSort = array();    // 排序後的目的地

    $gmap = new GMap();
    
    if(isset($_GET[&#39;dest1&#39;])) {
        $obj = new MyDest($_GET[&#39;dest1&#39;]);
        $fLngLat = $gmap-&amp;gt;getLngLat($obj-&amp;gt;addr);    // 上車地點經緯度
        $obj-&amp;gt;lat = $fLngLat[&quot;lat&quot;];    // 緯度
        $obj-&amp;gt;lng = $fLngLat[&quot;lng&quot;];    // 經度
        array_push($aDest, $obj);
    }
    if(isset($_GET[&#39;dest2&#39;])) {
        $obj = new MyDest($_GET[&#39;dest2&#39;]);
        $fLngLat = $gmap-&amp;gt;getLngLat($obj-&amp;gt;addr);    // 上車地點經緯度
        $obj-&amp;gt;lat = $fLngLat[&quot;lat&quot;];    // 緯度
        $obj-&amp;gt;lng = $fLngLat[&quot;lng&quot;];    // 經度
        array_push($aDest, $obj);
    }
    if(isset($_GET[&#39;dest3&#39;])) {
        $obj = new MyDest($_GET[&#39;dest3&#39;]);
        $fLngLat = $gmap-&amp;gt;getLngLat($obj-&amp;gt;addr);    // 上車地點經緯度
        $obj-&amp;gt;lat = $fLngLat[&quot;lat&quot;];    // 緯度
        $obj-&amp;gt;lng = $fLngLat[&quot;lng&quot;];    // 經度
        array_push($aDest, $obj);
    }
    if(isset($_GET[&#39;dest4&#39;])) {
        $obj = new MyDest($_GET[&#39;dest4&#39;]);
        $fLngLat = $gmap-&amp;gt;getLngLat($obj-&amp;gt;addr);    // 上車地點經緯度
        $obj-&amp;gt;lat = $fLngLat[&quot;lat&quot;];    // 緯度
        $obj-&amp;gt;lng = $fLngLat[&quot;lng&quot;];    // 經度
        array_push($aDest, $obj);
    }
    if(isset($_GET[&#39;dest5&#39;])) {
        $obj = new MyDest($_GET[&#39;dest5&#39;]);
        $fLngLat = $gmap-&amp;gt;getLngLat($obj-&amp;gt;addr);    // 上車地點經緯度
        $obj-&amp;gt;lat = $fLngLat[&quot;lat&quot;];    // 緯度
        $obj-&amp;gt;lng = $fLngLat[&quot;lng&quot;];    // 經度
        array_push($aDest, $obj);
    }

    while(count($aDest)&amp;gt;0) {
        foreach($aDest as &amp;amp;$val) {    // 注意：$val 前面有 &amp;amp;
            // 計算【各目的地】距離【起點】的長度
            $url = &quot;https://maps.googleapis.com/maps/api/directions/json?origin=$sLat,$sLng&amp;amp;destination=&quot;.urlencode($val-&amp;gt;addr).&quot;&amp;amp;key=$apiKey&quot;;
            
            // 目的地 destination 參數也可以是經緯度
            $url = &quot;https://maps.googleapis.com/maps/api/directions/json?origin=$sLat,$sLng&amp;amp;destination=&quot;.urlencode($val-&amp;gt;lat).&quot;,&quot;.urlencode($val-&amp;gt;lng).&quot;&amp;amp;key=$apiKey&quot;;
            
            // 若希望路線避開上高速公路, 則可加 avoid=highways 參數
            $url = &quot;https://maps.googleapis.com/maps/api/directions/json?origin=$sLat,$sLng&amp;amp;destination=&quot;.urlencode($val-&amp;gt;addr).&quot;&amp;amp;avoid=highways&amp;amp;key=$apiKey&quot;;
            // 此外, 還可避開 ----
            // tolls：避開收費路段
            // highways：避開高速公路
            // ferries：避開渡輪
            // indoor：避開室內路線（主要用於步行路線）
            
            // 初始化 cURL
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $response = curl_exec($ch);
            curl_close($ch);
    
            // 解析 json 響應
            $data = json_decode($response, true);
            if ($data[&#39;status&#39;]==&#39;OK&#39;) {
                $val-&amp;gt;len = $data[&#39;routes&#39;][0][&#39;legs&#39;][0][&#39;distance&#39;][&#39;value&#39;];
            } else {
                $val-&amp;gt;len = -1;
            }
            unset($val);
        }

        // 使用 usort 函數排序陣列，根據 $a 屬性值從小到大排序
        usort($aDest, function($a, $b) {
            return $a-&amp;gt;len &amp;lt;=&amp;gt; $b-&amp;gt;len;
        });
        // 排序後的第一個物件就是 距離最短的地址
        $minObj = $aDest[0];
        // print_r($aDest);
        array_push($aSort, [&#39;addr&#39; =&amp;gt; ($minObj-&amp;gt;addr)]);
        
        // 這個地址做為起點
        $sLat = $minObj-&amp;gt;lat;
        $sLng = $minObj-&amp;gt;lng;
        array_splice($aDest, 0, 1);
    }
    echo json_encode($aSort);   // 回傳依距離排序後的停靠點及目的地
}

?&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;navi.php&lt;/span&gt;，將排好的順序丟給 &lt;span style=&quot;font-family: courier;&quot;&gt;GoogleMap&lt;/span&gt; 導航。&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-php linenums&quot;&gt;&amp;nbsp;
&amp;lt;?php
// 切換至 https
if(empty($_SERVER[&#39;HTTPS&#39;]) || $_SERVER[&#39;HTTPS&#39;] === &quot;off&quot;) 
{
    $location = &#39;https://&#39; . $_SERVER[&#39;HTTP_HOST&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
    header(&#39;HTTP/1.1 301 Moved Permanently&#39;);
    header(&#39;Location: &#39; . $location);
    exit;
}
?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&amp;gt;
&amp;lt;html style=&quot;height:100%;&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
    &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;button onclick=&quot;startNavigation()&quot; style=&quot;font-size:40pt;&quot;&amp;gt;巡航&amp;lt;/button&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;span  style=&quot;font-size:40pt;&quot;&amp;gt;提醒：在 Android Chrome 開啟本網頁&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;script&amp;gt;
function startNavigation() {
    var aRoute = [
        &quot;高雄市苓雅區四維三路2號&quot;,
        &quot;高雄市前鎮區中華五路789號&quot;,
        &quot;高雄市鼓山區濱海二路1號&quot;,
        &quot;高雄市左營區博愛二路777號&quot;,
        &quot;高雄市左營區高鐵路107號&quot;
    ];

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            var latitude = position.coords.latitude;    // 緯度
            var longitude = position.coords.longitude;  // 經度
            var str = &quot;https://您自己的網址/getroute.php?lat=&quot;+latitude+&quot;&amp;amp;lng=&quot;+longitude+&quot;&amp;amp;dest1=&quot;+aRoute[0]+&quot;&amp;amp;dest2=&quot;+aRoute[1]+&quot;&amp;amp;dest3=&quot;+aRoute[2]+&quot;&amp;amp;dest4=&quot;+aRoute[3]+&quot;&amp;amp;dest5=&quot;+aRoute[4];
            // alert(&#39;str = &#39;+str);
            // return;

            var destinations = new Array();
            $.getJSON(str, function(res) {
                // alert(&quot;res = &quot;+res);
                // 這段是從 client 端向 server 請求查詢
                // server 回傳 json 型態的陣列
                // 陣列內的元素是 addr
                res.forEach(function(element) {
                    destinations.push(element.addr);
                });
                var waypoints = destinations.map(function(destination) {
                    // Google map 規定停靠點以【|】字元分隔
                    // 將 5 個地點以【|】字元分隔
                    return encodeURIComponent(destination);
                }).join(&quot;|&quot;);
                destination = waypoints.split(&#39;|&#39;).pop();   // 取得最後【|】右邊的字串做為目的地
                waypoints = waypoints.slice(0, waypoints.lastIndexOf(&#39;|&#39;)); // 取得最後【|】的左邊字串做為停靠點

                // 構建導航 URL
                var mapsURL = &quot;https://www.google.com/maps/dir/?api=1&amp;amp;origin=&quot; + latitude + &quot;,&quot; + longitude + &quot;&amp;amp;destination=&quot; + destination + &quot;&amp;amp;waypoints=&quot; + waypoints + &quot;&amp;amp;travelmode=driving&quot;;
                // alert(mapsURL);
                // return;

                // 跳轉到 Google Maps
                window.location.href = mapsURL;
            });
            // return;
            

            
        }, function(error) {
                alert(&quot;無法取得地理位置: &quot; + error.message);
            }
        );
    } else {
        alert(&quot;瀏覽器不支援地理定位功能。&quot;);
    }
}
&amp;lt;/script&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&amp;nbsp;
&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;排序後，程式呼叫 &lt;span style=&quot;font-family: courier;&quot;&gt;Android&lt;/span&gt; 手機上的&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map app&lt;/span&gt;&amp;nbsp;進行導航。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第一次執行這個網頁程式時，會詢問是否同意瀏覽器存取你的地理位置，選擇同意且記住您的選擇，之後執行就不會再跳出詢問視窗了。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;測試 &lt;span style=&quot;font-family: courier;&quot;&gt;Google Chrome、Firefox、Microsoft Edge&lt;/span&gt; 這幾個主流瀏覽器&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Chrome&lt;/span&gt; 效果最佳，直接啟動 &lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;，畢竟都是自家的產品；&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Edge&lt;/span&gt; 雖可呼叫&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;，但詢問視窗一直開著，不會自動關閉&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Firefox&lt;/span&gt; 最差，啟動了&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;，但要導航的地址全不見了!!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另一個有趣的發現：&lt;/div&gt;&lt;div&gt;如果只單純導航前往一個地點，&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;&amp;nbsp;並不管目的地是否與您的行車方向順向，只要抵達目的地附近，&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;&amp;nbsp;就認為任務完成了。&lt;span style=&quot;font-family: courier;&quot;&gt;ex：&lt;/span&gt;出發點是高雄市中山大學，目的地是高雄女中(雄女)，雄女的對面是國軍英雄館，&lt;span style=&quot;font-family: courier;&quot;&gt;Google&lt;/span&gt;&amp;nbsp;導航只要帶您到國軍英雄館，導航就結束了。&lt;/div&gt;&lt;div&gt;但當設了多個停靠點時，&lt;span style=&quot;font-family: courier;&quot;&gt;Google Map&lt;/span&gt;&amp;nbsp;就會使命必達，規劃的路線即使繞一圈也會帶您順向抵達雄女。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後...老人家又好奇了...這個網頁程式在 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;iPhone&lt;/span&gt; 上打開會是什麼結果?&lt;/div&gt;&lt;div&gt;答案是：在 &lt;span style=&quot;background-color: black; color: #fcff01; font-family: courier;&quot;&gt;Safari&lt;/span&gt; 直接 &lt;span style=&quot;background-color: red;&quot;&gt;&lt;span style=&quot;color: white; font-family: courier;&quot;&gt;Deny!!&lt;/span&gt;&lt;/span&gt; 不給開&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2025&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;相關筆記&lt;span style=&quot;font-family: courier;&quot;&gt; ----&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://oldgrayduck.blogspot.com/2022/11/webgoogle-maps-api.html&quot; target=&quot;_blank&quot;&gt;【PHP】Google Maps API -- 將地址轉換成經緯度座標&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;




&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldgrayduck.blogspot.com/feeds/8906249120430107938/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://oldgrayduck.blogspot.com/2024/07/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8906249120430107938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6067556553711858174/posts/default/8906249120430107938'/><link rel='alternate' type='text/html' href='http://oldgrayduck.blogspot.com/2024/07/blog-post.html' title='【網頁程式】土砲打造 -- 依數個地點距離由近至遠規劃行程導航'/><author><name>老灰鴨</name><uri>http://www.blogger.com/profile/07842107154192311741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8B6B3BugXaJYd9B7MJobOKTEhOutXThoGcvVHV8jLVg2XSoWqsVlzeSGiXoYK8A4SRVr70Z8PdbkRJrvh5IgStYDuuh2Zc_V6fP6NGI3LuZIX2OW7mUrFytRtAh9whhENLNxzNa4OXlFTPi0RbqX4dZl7FRyuigJcOnVRj8rL7GVAzHAdJsA4PaU7A8/s72-c/%E9%87%91%E9%91%B0%E9%99%90%E5%88%B6_01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>