WFU

[ 精選文章 ]

自行車 入門 Escape 3 , Snap 21 , Revel

最近周末想運動 , 平日想通勤 , 想買台自行車 , 把自己找的資料跟大家分享 , 如果你是玩家級的 就不用看了 這是給跟我一樣的新新新手 參考的 騎車半年後的補充: 如果你有把握你是真的有時間有興趣會一直騎,建議還是存點錢買好一點的彎把公路車, 或是可以考慮買2手的自...

2026年3月9日 星期一

Taiwan Data eXchange (TDX) 平台 的 API 整合範例 [soruce code]

使用 TDX API  得到 火車時刻表 設定起訖站 於到站前提醒

適合火車通勤工作者 下班使用

程式下載[含 原始碼]  注意需自行申請 TDX API 帳密 填入 [免費]

預覽畫面


設定畫面


TDX_Simple004.py — 程式文件


一、程式簡介

台鐵簡易時刻懸浮視窗,以半透明置頂小視窗即時顯示指定起訖站之間未來最近 N 班列車(預設 3 班),包含車種、車次、出發/抵達時間及即時誤點分鐘數。首次執行時透過對話框設定起訖站與偏好,設定值存入 tdx_simple.ini,往後啟動直接讀取,無需重複輸入。


二、概念

概念說明
懸浮視窗無邊框(overrideredirect)、常駐置頂(-topmost)、可調透明度(-alpha),不干擾其他視窗操作
OD 路線篩選OD(Origin-Destination)指定起站代碼與訖站代碼,從當日完整班表中只取中間停靠順序正確的班次
班表快取每日班表僅下載一次,以 JSON 存入 tdx_simple_cache.json,用日期字串判斷是否失效
Token 快取OAuth 2.0 Access Token 存入 tdx_token_cache.json,未過期直接複用,過期才重新取得
即時誤點另以獨立排程定期呼叫 LiveBoard API,疊加至班表顯示,與班表刷新週期分離
發車提醒計算距離發車剩餘分鐘,首次進入提醒門檻時以 Toast 視窗通知,同日同車次只提醒一次

三、執行邏輯

程式啟動
  │
  ├─ [首次] 隱藏 Tk Root → 開啟 _SetupDialog → 使用者選擇起訖站、偏好 → 寫入 .ini
  │
  └─ [已設定] 讀取 .ini → 建立 SimpleApp (主視窗)
                │
                ├─ _build_ui()   建立 Header + 車次列 × N + Status Bar
                ├─ _load_config() 讀入 OD、透明度、車種過濾、誤點刷新間隔等設定
                │
                └─ _start_fetch()  觸發資料更新
                        │
                        ├── Thread: _worker()
                        │     └─ _get_all_trains()  (快取 or API DailyTrainTimetable)
                        │     └─ _next_local_trains()  篩選 → 排序 → 取前 N 班
                        │     └─ 回主執行緒 _on_done()
                        │           └─ _render()     更新 Label 文字
                        │           └─ _check_reminder()  必要時彈出 Toast
                        │           └─ after(60s) 再次觸發 _start_fetch()
                        │
                        └── Thread: _delay_worker()
                              └─ _fetch_live_delays()  (LiveBoard API)
                              └─ 回主執行緒 _on_delays_done()
                                    └─ _render()  疊加 "+X分" 誤點顯示
                                    └─ after(delay_interval 分鐘) 再次觸發

車次篩選關鍵條件(_next_local_trains):

  1. 車種符合使用者設定(區間 / 對號)
  2. _runs_today() 解析備考欄位(「逢週X行駛/停駛」)確認今日實際行駛
  3. 起站 StopSequence < 訖站 StopSequence(方向正確)
  4. 起站發車時間 ≥ 當前時間

四、應用

  • 通勤族 — 開機常駐,不需開啟瀏覽器即可確認下一班區間車或自強號
  • 多站路線 — 支援全台主要幹線約 50 個站點,可任意設定起訖站
  • 車程追蹤 — 顯示抵達時間與即時誤點,方便規劃接駁
  • 可打包為 .exe — 配合 PyInstaller spec,可部署給無 Python 環境的使用者

五、資料來源

來源說明
TDX 平台(交通部運輸資料流通服務)https://tdx.transportdata.tw
DailyTrainTimetable API(v3)台鐵當日實際行駛班表,含所有停靠站時刻與備考
LiveBoard/Station/{id} API(v3)指定車站之列車即時進出站與誤點分鐘
OAuth 2.0 Token EndpointKeycloak Client Credentials 流程,token 有效期約 30 分鐘

六、技術分析

架構

採用單一模組 + 類別封裝結構,無框架依賴:

  • 全域函式負責 API 存取、快取讀寫、設定檔管理(純工具層)
  • _SetupDialog(tk.Toplevel) — 設定對話框,獨立生命週期
  • SimpleApp(tk.Tk) — 主視窗,持有所有狀態與排程

GUI 技術

技術用途
overrideredirect(True)去除標題列與邊框
wm_attributes("-topmost")視窗始終在最前方
wm_attributes("-alpha")半透明,可由設定調整(10%–100%)
tkfont.Font.measure()依實際字型像素寬度動態計算視窗寬度,避免各環境字型大小差異造成排版跑位
tk.Label 拖曳綁定Header 綁定 <ButtonPress-1> / <B1-Motion> 實現無邊框視窗拖曳

資料流與執行緒安全

  • 所有 I/O(API、檔案讀寫)都在 daemon=True 的背景執行緒中執行
  • 結果透過 self.after(0, callback, ...) 排回 Tk 主執行緒更新 UI,符合 tkinter 單執行緒模型要求
  • 班表刷新(60 秒)與誤點刷新(可設 1–10 分鐘)使用獨立 after 排程互不干擾

快取策略

快取檔案失效條件
OAuth Tokentdx_token_cache.jsonexpires_at - 30 秒
當日班表tdx_simple_cache.jsonCachedDate 不等於今日日期

設定持久化

使用 Python 標準函式庫 configparser(INI 格式),section [TDX_Simple] 儲存:起訖站代碼與名稱、視窗座標、透明度、顯示筆數、車種過濾、提醒分鐘數、誤點刷新間隔,共 10 個欄位,讀寫均有容錯處理。

備考解析(_runs_today

以正規表示式解析如「逢週一至五行駛」、「逢週六、日停駛」等備考字串,判斷列車今日是否實際運行,避免顯示停駛班次。

2025年12月25日 星期四

立院法制局報告「憲法判決無遵從必要」

立法院長韓國瑜上任後任命法制局長 郭明政

2025/8/4  立院法制局報告「憲法判決無遵從必要」

法治局主張  憲法判決對於立法院的約束效力,「立法機關僅有尊重義務,尚無遵從之必要」

2025/8/8
司法院也針對立法院法制局專題報告發出聲明,指司法院大法官依據《憲法》第78條規定解釋憲法,並依法組成憲法法庭行使職權,其所為之解釋與裁判,「有拘束全國各機關及人民之效力,各機關處理相關事項,應依解釋意旨為之,並有實現判決內容之義務」。

司法院指出,釋字第662號解釋意旨揭示,立法院基於民主正當性之立法責任,為符合社會變遷實際需求,得制定或修正法律,乃立法形成之範圍及其固有權限,「惟基於權力分立與立法權受憲法拘束之原理,自不得逾越憲法規定及司法院大法官所為之憲法解釋」,司法院也重申,大法官釋憲或裁判,具有相當於憲法位階之效力。

2025年11月28日 星期五

馬英九對台灣的看法

 2011.10.15

https://tinyurl.com/2d4m75uz

當我們說到台灣時,就是指中華民國,但不要忘記,我們國家的「正式名稱」叫中華民國。


2011.12.03 [2012總統大選首場電視辯論會]

https://newtalk.tw/news/view/2011-12-03/20028

馬英九:台灣就是中華民國 是一種通稱


2017.10.18

https://www.storm.mg/article/346037
「台灣是主權獨立國家」馬英九:何時宣布的?


2021.10.7

https://www.cna.com.tw/news/aipl/202110070369.aspx

總統投書署名台灣總統 馬英九:中華民國不見了


2024.3.27

https://www.cna.com.tw/news/aipl/202403270322.aspx

馬辦稱台灣不是國家


==================================================

台灣 就是 中華民國 最後的尊嚴了 放棄大中國思想 才能浴火重生

==================================================

世界上沒有一個國家 國名為中國

中華民國1912年成立 簡稱中國

1949 中華人民共和國成立

1971年 聯合國2758決議 將聯合國的中華民國席次 交給 中華人民共和國 在1971年前 中華民國在聯合國就是簡稱中國

1979年 中華人民共和國與美國建交 在此之前 跟美國有邦交的是中華民國 而非中華人民共和國

在蔣中正及其子蔣經國在台灣執政時 有其自身的中國情懷

依然將自己視為中國正統 採取漢賊不兩立的政治立場

國民黨延續中國正統的思維在 海峽兩岸關係協會與海峽交流基金會,於1992年經由九二香港會談後 創造了 92共識 一個承認兩邊都沒有共識的共識 台灣方面使用 一中各表 來避談 一個中國的問題 國民黨在台灣內部高喊自己是正統中國的自欺欺人方式,讓很多人越來越堅定的拒絕認同自己是中國人 自我認同開始走向台灣人(民調趨勢可見)

經由 開放黨禁 開放報禁 總統民選 後 在 2000 年的總統選舉 陳水扁完成了政黨輪替 民進黨正式執政 證明堅持主權不會有戰爭 站直腰桿人家才會尊重你

2003年世界衛生大會期間 中國反對台灣加入世界衛生組織

台灣媒體記者對中華人民共和國的外交官員喊:「你們聽到台灣2,300萬人民的需要嗎?」

中國代表沙祖康當場表示:「早就給拒絕了!沒聽到大會做的決定嗎?誰理你們!」

漸漸的由於越來越多中國對台灣在國際上的不友好行為 讓台灣越來越不願意跟中國扯上關係

2012總統大選首場電視辯論會 馬英九表示 "台灣指的就是中華民國,台灣是通稱,就像一般人也不會用正式名稱叫荷蘭和英國一樣。他還在記者會中重申「台灣是我們的家園,也是我們的國家」。"

而到了 2016 蔡英文再度的完成政黨輪替,到了2020年甚至拿到歷史高票,越來越多的台灣人認同  中華民國簡稱台灣 而中華人民共和國簡稱中國 特殊的國與國關係 一邊一國 的認知水漲船高 我們不爭 中國的正統 畢竟我們已然不是中國 雖講中文 雖有傳統中華文化 但我們是台灣人


國家跟語言無關,國家跟文化無關,國家跟血統無關,重點是領土,主權,人民,我們的存在就是中華民國仍然存在的最大證據,聯合國的創始會員國,但大家早就拋開那過去的大中國思想,拋開了中國兩字的窠臼,擁抱自由民主的台灣。中華民國就是我們的國家名稱,而我們簡稱是台灣

2025年11月14日 星期五

在 Shell 下 使用 BCFG 顯示 更改 boot option


To check if a boot option has been created or to view existing boot options within the EDK2 UEFI Shell, you can use the bcfg command.
The bcfg command allows you to manage boot options, including displaying, adding, removing, and reordering them.

2025年11月6日 星期四

7Z 對每個壓縮檔 個別壓縮成一個檔案

Use 7-Zip to Create Multiple Compressed Files for Each Folder

一般版本 

save the following script in the batch file

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a  "%%X.7z" "%%X\"


針對以壓縮過的照片或影音檔 僅儲存

JPG Mp3 Mp4 這類的檔案 大多不適合再壓縮  適合用 7z 儲存加密備份 通常用 -mx0 即可

有些直出的影像檔壓縮率不高 可用 mx1-3 可明顯感覺有效

壓縮率 -mx0  [0 不壓縮 僅儲存 -9 最大壓縮]

不壓縮的檔案或資料夾  \build .git*

加密碼 -p -mhe [mhe 對檔名也加密]

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -mx0 -xr!build -xr!.cache -xr!*.git* -p"password" -mhe "%%X.7z" "%%X\"


2025年9月1日 星期一

Steam Metal Slug Defense ccan't start

Steam Metal Slug Defense can't start in Win11

it lack of msvcr100.dll in (Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package)

https://www.microsoft.com/en-us/download/details.aspx?id=26999

some old game might have thje same issue