2025年2月20日 星期四

Hiking : 春崎產業道路+樟湖+樟山寺

2025年2月20日 星期四

現在給自己的功課,每週都要走兩次有坡的路,每次至少一個小時以上。上週走過三次的樟山寺,今天把距離稍拉遠一點點,由春崎產業道路上到騰龍御櫻,往優人神鼓後接樟湖步道,瓦厝支線再往樟山寺,走飛龍步道下山。全程大概兩個小時,有鍛鍊到了。

雖然前段都在踢馬路,老泉街26巷這一邊的好處就是車少,

[圖1] 14:44 老泉街26巷遠眺騰龍御櫻

站在 [圖1] 即可看到遠處的騰龍御櫻,櫻花應該落得差不多了,不然會紅紅一大片。繼續往前挑戰春崎產業道路的陡坡,這一段以前都是騎自行車上來,第一次全程用走的,喘的程度和騎自行車差不多,但是前進的速度也和以前騎車上來半斤八兩。

[圖2] 15:02 騰龍御櫻底叉路

[圖3] 騰龍御櫻的櫻花

[圖4] 騰龍御櫻的櫻花

[圖5] 15:08 騰龍御櫻門口

櫻花稀稀落落,所以只匆匆拍幾張照,沒有多停留,就往優人神鼓而去。

[圖5] 15:15 優人神鼓旁的樟湖步道

上一回路過優人神鼓應該是去年三月及五月(參「Hiking :  樟湖山+待老坑山+員潭子坑山環形路線」、「Hiking:新店秘境+大香山~貓空」)。

在樟湖步道的瓦厝支線上也可以遠眺杏花林,只見黃黃的土坡,沒有多少花,但是人還不少。

在樟山寺稍微喘一會兒就直接下山了,連照片都懶得拍。市府大地工程處效率果然高,之前因颱風吹倒的樹今天派人來鋸掉,壓壞的扶手也修好了。不過,滿好笑的,在剛下山時,遇到一個年輕人扛著電鋸往上走,之後又遇到一位來施工的女士往上走,但是最後在快到下到政大登山口,卻看到有五個人施工的人坐在路邊滑手機,這對上頭那兩位情何以堪啊!


2025年2月16日 星期日

HTML5 FUN 筆順練習容錯修正

2025年2月16日 星期日

HTML5 FUN 筆順練習的某些字在練習時較難過關,主要是用來檢查對錯的參考點其實是教育部筆順網用來畫筆順動畫的座標,所以有一些點的位置怪怪的,甚至根本不在字的輪廓裡。當初在設計 HTML5 FUN 筆順練習程式時,雖然用了一些方法提高容錯,讓檢查點可以「正常一點」,但有時還是讓人覺得好難寫!一直被喊「加油~」。

▋ 提高相近點的容錯

前幾天看到有人示範「小」的寫法,第一筆畫的豎鈎,如 [圖1] ,起筆要刻意由稍左上開始,再拉到中央往下,所以如果起筆是中央偏右的,肯定是過不了關,很簡單的字變成有一點複雜,哈!我之前怎麼都沒有注意到?

[圖1] 「小」的起筆略偏左

所以我將程式稍微改了一下,檢查點如果和下一點的距離很近,就將容錯提高,才不致容易被判定寫錯。

▋ 檢查點在字輪廓外的修正

HTML5 FUN 筆順練習原本就會修正檢查點在筆畫輪廓外的座標,但是不夠細膩,會有遺漏而未處理的情形,去年在設計 Partdle 時就有發現,但筆順練習的部份一直沒有處理,有些字就會有大問題,像「凡」這個字,第二筆畫有四個檢查點在字外,原本的演算法只會修正 [圖2] 紅色箭頭那一個:

[圖2] 「凡」有四個檢查點在字外

現在紅色箭頭的點會修正回字的輪廓內([圖3] 綠色箭頭為修正過的),而類似藍色箭頭的三處,無法修正位置,但會提高容錯,就不會老是卡在這個筆畫了。

[圖3] 「凡」修正過的檢查點

▋ 臭蟲通報

經過這一版的修正,理論上 HTML5 FUN 筆順練習在習寫時,應該會較容易過關了,如果遇到什麼難寫的字,歡迎在底下留言,告訴我是哪一個字、那一個筆畫卡住了,有空我再來看看該怎麼調整。

▋ 相關連結


2025年2月13日 星期四

Apps Script : 解析出 YT 影片字幕設定

2025年2月13日 星期四

 HTML5 FUN 的 Audio Player 可以用來播放 YouTube 的影片,並加上兩種語言的字幕。它的字幕來源可以是自製的字幕檔案,當然也能直接由 YouTube 的影片擷取。官方的建議當然是直接呼叫 YouTube 的 API 來取得字幕內容,不過, Audio Player 是下載 YouTube 影片的頁面,然後由網頁原始碼來「挖金」。利用 JavaScript 能下載網頁內容,主要是透過 CORS proxy,最近我愛用的 CORS proxy 開始收費了,免費版有時會抓不到影片頁面,所以我幫 Audio Player 加上了備援的方案,使用 Google Apps Script 幫忙擷取內容;本以為天衣無縫了,誰知道,原來 B 計畫根本就沒成功過!

明明就是一個簡單的流程:

▶️▶️ 給網址 ▶️▶️  抓文字內容 ▶️▶️ 回傳文字內容

為什麼使用  Google Apps Script 抓回來的 YouTube 影片網頁內容和利用其它方式抓回來的會不一樣?

試了兩天,終於找到兩個關鍵:

  • YouTube 的頁面有分桌機版與行動版。
  • YouTube 的頁面會依請求端的語言設定,給不同的內容。

▋ 強制使用桌機版

前面提到 Audio Player 是由 YT 影片的網頁原始碼來「挖金」,什麼是「金」呢?

在 YT 影片的網頁原始碼中,會帶有字幕內容在哪一個網址的資訊,只要找到關鍵字「captionTracks」,就會看到一堆網址,Audio Player 就是將些資訊擷取出來用的,假設抓回來的網頁內容是 html,使用這樣的 regular expression 語法:

html.match(/"captionTracks":(\[.*?\])/)

但是 Google Apps Script 抓回來的,都是不完整的原始碼,今天發現原來它抓回來的內容,跟 YouTube 行動版的內容是一樣的(所以「都是不完整的原始碼」應該只是抓錯版本了);從另一個角度來說,那我們只要強迫它抓桌機版的頁面,問題不就可以解決了?經過實證,還真的可以!

怎麼強制 Google Apps Script 去抓 YouTube 影片的桌機版內容呢?

其實很簡單,如果強制用桌機版,就在 YT 影片的網址加上這個參數:

  • app=desktop

所以像這個 TED 的影片網址:

https://www.youtube.com/watch?v=yVq8r9w29DI

就改為:

https://www.youtube.com/watch?v=yVq8r9w29DI&app=desktop

利用 Google Apps Script 來抓 YT 的頁面,只要使用有加上 app=desktop 的網址,就能在抓回來的原始碼中,抓到正確的 「captionTracks」內容了。

那反過來說,想強制使用行動版的話,在影片的網址要加上什麼參數?

  • app=m

▋ 強制使用中文頁面

前面利用在 YT 影片網址加上 app=desktop 解決挖不到「金」的問題,後來又發現頁面不是使用中文的問題。沒關係,「大魔王」都解決了,語言的問題,以前在玩 Google 的其它服務也遇過,直接在網址中指定就好了,加上:

  • hl=zh-TW

利用 hl 的參數可以指定頁面中要使用哪一種語言,而 zh-TW 是繁體中文的代碼,所以我只要將前面的網址繼續接龍,變成:

https://www.youtube.com/watch?v=yVq8r9w29DI&app=desktop&hl=zh-TW

好了,大功告成!

研究兩天,中間一直摸不著頭緒,沒想到下午去爬個樟山寺,吸收完大自然的能量以後,就通了。這關過了,應該可以讓 Audio Player 繼續演進,讓它直接抓 YT 自動翻譯的字幕內容,以翻譯為中文來說,其實只要在字幕的網址後面再加上「tlang=zh-TW」的參數就可以了,想起來應該不會太難(done)。

▋ 相關連結


2025年1月28日 星期二

Life : 2025 三江生色::四海呈祥

2025年1月28日 星期二

「年」來了~看我派出小龍鎮你!

[圖1] 2025 年春聯上的「小龍」

去年底時,社群平台推了一部「小龍」手做的短影音:

簡單又可愛,就趕緊收到網頁書籤中,等著迎接「年」來。

早上將春聯寫好了,把「小龍」也加上去:

[圖2] 2025 年春聯

照片的春聯上,不知道有沒有看到「亮點」?哈!字寫歪了,只好讓它變成「生『財』」。

祝福有看到此文的朋友都能身心健康,萬事如意,財源滾滾來。 ^_^

▋春聯紙定價

之前買的春聯紙用完了,在文具店看到的春聯紙定價記錄一下:

  • 鳳尾紋紙全開:16元。(會員打折後 12元購入,照片中用的紙)。
  • 灑金的全開:45元。
  • 四字春聯(三組):20元。

2025年1月27日 星期一

Google 試算表 + JSZip 製作 2P 題庫

2025年1月27日 星期一

▋ 在瀏覽器中玩 2P 遊戲

前幾天試著利用 Google 試算表當題庫來源,搭配我的「SWF 遊戲啟動器」,然後在 Ruflle Flash Player 模擬器中執行噗友瘋狂布蘭達的 2P 遊戲,在網頁瀏覽器中的順暢度還是沒有單機版來得好,尤其題目帶有圖片時更能體會出差異性。畢竟 Ruffle 是模擬器,耗掉的資源可能還是比較多。

▋ 偶遇 JSZip

整合 Google 試算表與 2P 遊戲時,讓我想到十幾年前以 Excel VBA 寫的工具 new-converter.xls (詳見「雄:Teaching : 以 Excel VBA 將題庫轉為 2P 遊戲格式」),new-converter.xls 只能處理純文字的題目,圖片題得自己按照遊戲題庫的要求改檔名;而「SWF 遊戲啟動器」的題庫是讀取 Google 試算表,其實只要寫幾行格式轉換,再將題庫輸出到檔案,就可以供單機版的 2P 遊戲載入使用。要解決的問題只剩下如何利用 JavaScript 讓瀏覽器可以將多個待輸出的檔案內容打包,再回傳給使用者。哈!剛好又看到了一直沒有測試的 JSZip,它可以在瀏覽器中,以 JavaScript 將指定的內容加入 zip 壓縮檔內,內容可以是文字,也可以是圖片,更能建立目錄,完全符合我的需求;那就來試著應用看看吧!

▋ 2P 題庫製作流程

這則中的方法是利用 Google 試算表來當設定及題目的來源,所以最重要的程序將試算表範例中的內容換掉,剩下的就是共用試算表及複製試算表工作表的網址了。整個程序如下:

  • 開啟試算表範例:
    • ▶️ 題庫樣板 2p-Txt  ▶️ 題庫樣板 2p圖文 (同一個檔案)
    • 第一次使用要建立副本(檔案 => 建立副本)。
    • 設定共用為「知道連結的任何人」「檢視者」。
  • 打開 2P 的工作表(2p-Txt 或 2p圖文)。
  • 修改設定。
  • 修改題庫。題目主要可以分為三大類
    • 只有文字。
    • 題幹有圖片,但是選項是文字:題幹如果想加圖片,在文字的最後面加一個分號「;」,再貼上圖片的網址。
      (例) ▶️我是文字;https://a.b.c.d/test.png
    • 題幹只有文字,選項用圖片。
  • 複製工作表的網址:在瀏覽器上方的網址列中,將網址複製起來。
  • 貼到下一步驟「參數設定」的試算表網址輸入區,並送出。
▋ Ready ~ Go ~~

▶️ 想先用自製遊戲啟動器試玩一下,就按底下的連結:

▶️ 確認已將試算表共用給「知道連結的任何人」,並複製好工作表的網址,就貼到底下:

參數設定

Google 試算表2P工作表共用連結網址
【送出並下載2P題庫】
× 處理中,請稍候。

▋ Q & A

  • Q: 下載的壓縮檔案為什麼有些圖片沒有加進去?
    • A: 會自動加到壓縮檔案的圖片必須來自網路的,如果碓認圖片的網址沒有問題,由於瀏覽器對於圖片會檢查來源是否有允許「跨域使用」,可能是放圖片的網站不開放跨域使用。建議可以改用 pixabay 的圖片試試。
  • Q: 可以使用放在 Google Drive 中的圖片嗎?
  • Q: 題目需要指定 Type 參數嗎?
    • A: 題庫轉換程式會自動用題庫題幹及選項中是否帶有圖片的關鍵字來設定 Type 為 0、1 還是 2。 

▋ 相關連結


    2025年1月26日 星期日

    GitHub Pages 檔名底線開頭的檔案消失

    2025年1月26日 星期日

    自從學校空間無法使用以後,作品幾乎都是放在 GitHub 中。不過今天遇到一件很奇怪的事情,檔名只要是底線 (underscores) 開頭的,就會出現找不到檔案的錯誤訊息。哈!這對已經用 GitHub 很久的 GitHub 菜鳥的來說,可真的是丈二金鋼摸不著頭腦啊!

    這讓我想起這一陣子只要更新 HTML5 FUN 的檔案,信箱就會收到類似底下的訊息:

    看到沒有,有個紅色叉叉!哈!好學生就是受不了有叉叉 XD

    不過,因為更新的檔案都有看到,所以一直都沒去研究到底怎麼一回事。今天不一樣了,才剛上載的檔案,有的看得到,有的看不著。幸好有歸納出檔名的共同特徵都是底線開頭的。

    找了半天,找到了 GitHub 的前任 CEO Tom Preston-Werner 的這一篇文:

    關鍵在 GitHub Pages 預設會使用 Jekyll 去產出靜態的頁面,而檔名底線開頭的檔案會被 Jekyll 當成特殊檔名,最後不會輸出到網頁空間中。

    我上載的檔案其實都不需要被編譯啊!怎麼辦?

    照  Tom Preston-Werner 的建議,就到空間的根目錄中,放一個名為「.nojekyll」的檔案,裡面不用放內容,這樣子 Jekyll 就會將那些底線開頭的檔案視為一般檔案來處理了。儲存好以後,等一會兒,那些檔名底線開頭的檔案就出現了。哈!就這麼簡單。


    2025年1月25日 星期六

    CSS Nesting 的相容性

    2025年1月25日 星期六

    教育部的「國字標準字體筆順學習網」在2025年1月發布了第五版,網站說明中的版次有註記了「與行動版網結合,改為響應式網頁設計」。不過,我的舊電腦跟舊 iPad 都因為瀏覽器太舊被嫌棄了!

    ▋不支援舊瀏覽器

    我桌機的 Chrome 因為是在 Windows 7 上,最後只能更新到版本 109.0.5414.120,而 iPad Air 2 的 iOS 版次為 15.8,3 ,它們看到的筆順學習網長這樣:

    [圖1] 在舊瀏覽器中的筆順網第五版

    右側工具欄的圖示走位,筆順的區塊現出原形(播放跟練習的區塊本應疊在一起),而且如果螢幕解析度較小,筆順練習的區塊(白色的吉)就會擠到下方去,最下方的功能鈕也變得很陽春。

    網頁版面亂掉,多半是網站的樣式表,瀏覽器不支援,有方法讓新舊版本都能正常使用嗎?

    ▋CSS Nesting 適用的版本

    看了一下筆順網的樣式表,出錯的地方看起來都是因為裡面使用了巢狀的語法,而我的電腦和載具都不支援。

    到底 Chrome 和 Safari 什麼時候開始支援巢狀 CSS 的?

    在 Chrome 的文件中找到了這一篇:

    裡面的這一句有答案:

    Nesting is available from Chrome 112 and also available to try in Safari Technical Preview 162.

    哈!我的 Chrome 109 < 112,所以版面就 NG 了!

    ▋修正測試

    要有實驗精神,將筆順網有問題的 CSS 語法改為傳統的語法試試看吧!

    [圖2] 加入測試的 CSS

    ▋測試結果

    底下的 [圖3] 是加過測試語法後的畫面

    [圖3] 加過測試語法後的畫面

    看來是找到問題了,不過大概也只能玩一玩而已,改變不了不支援舊瀏覽器的現實。是否支援舊版本有時是需要決擇,畢竟用新的語法,開發起來會較有效率;如果是我,還是會選擇自己費事但較符合「平權」的方式,畢竟不是每個人都使用最新的系統或是載具。

    ▋相關連結


    2025年1月24日 星期五

    教育百科生字與中研院大腦與語言實驗室資料庫比對

    2025年1月24日 星期五

    前幾天因為看到了一隻利用 CSS 設計,會眨眼的小熊 (作者:Anastasia Goodwin),它實在太可愛了,於是利用中研院語言學研究所大腦與語言實驗室「生字表字詞資料庫檔案」的資料,弄了一個國小課本生字筆順練習的選單,讓小熊的鼻子當成選項開關,可以用來自行選取要顯示教育部「國字標準字體筆順學習網」,或是 HTML5 FUN 筆順練習第三版的網址與 QR Code:

    生字筆順練習的選單截圖

    ▲ 國語課本雙用生字筆順選單 ▲

    因為手上無所有國語教科書可供比對生字到底有沒有缺漏,只能等教育部「教育百科」的「生字詞彙表」更新到 113學年度下學期的資料。

    等了幾天,終於來囉~先將「HTML5 FUN : PARTDLE 兜一兜」113學度下學期的生詞題庫加上,再寫了個工具來比對「教育百科」與「大腦與語言實驗室」的生字內容。

    以下為比對的結果(以教育百科的視角來看)。

    標示的格式:

    出版社名稱#年級#課別

    ▋異體字

    在教育百科的生字使用的是異體字,「國語小字典」沒有收錄,「國字標準字體筆順學習網」沒有收錄該字:

    • 南一#02#L01:「抛」,可能是「拋」。
    • 翰林#05#L07:「秃」,可能是「禿」。

    ▋生字但語詞中用別的字

    • 南一#02#L05:「晴」,語詞中有「眼睛」,可能是「睛」。
    • 康軒#05#L05:「仿」,語詞中有「彷彿」,可能是「彷」。
    • 康軒#05#L06:「賭」,語詞中有「先睹為快」,可能是「睹」。
    • 翰林#06#L06:「仰」,語詞中有「抑或」,可能是「抑」。

    ▋生字重覆出現

    • 翰林#02#L12:「招」。
    • 翰林#02#L12:「招」。

    ▋目前無線索

    底下三個生字需要確認,再補充或修正生字筆順練習選單。

    • 翰林#06#L01:「擊」,大腦與語言實驗室有「繫」。
    • 南一#05#L01:「壼」(ㄎㄨㄣˇ筆順網無此字),大腦與語言實驗室有「壺」(ㄏㄨˊ)。
    • 翰林#04#L06:「沖」,本生字只在教育百科中出現。
    目前「國語課本雙用生字筆順選單」中是以「大腦與語言實驗室」的生字清單為主,如果有問題,歡迎在底下留言,有空我再修正。

    相關連結


    2025年1月14日 星期二

    Ruffle 中文字型的處理

    2025年1月14日 星期二

     Ruffle 是一個開源且積極發展中的 Adobe Flash Player 模擬器,詳情可以參考官網 https://ruffle.rs/。最近我透過它,讓十幾年前分享的互動式 Flash 教具及學具,重新在網頁瀏覽現蹤;甚至利用新發展的「Flash:SWF 遊戲啟動器」幫一些尚未改版為 HTML5 的工具,可以搭配 Google 試算表,來客製化自己的 Flash 遊戲 (詳見「雄:Flash:SWF 遊戲啟動器」)。

    Ruffle 目前有一個問題,無法讓載入的 Flash 程式使用系統的字型,像我的互動式 Flash 教具及學具,最大的特色是可以讓使用者自訂文字內容,所以文字大部份都會使用到系統字型;所以在 Ruffle 的環境中,大部份的中文字都看不到了。

    那「SWF 遊戲啟動器」是怎麼讓中文能正常顯示的?

    在 Ruffle GitHub Wiki 的 FAQ 中有參考資料:

    簡單的整理一下重點:

    1. Ruffle 可以自行指定要載入的字型檔案(支援 TTF、OTF、TTC、OTC 字型檔,和內嵌在 .swf 中的字型),並讓系統字型名稱去對應載入的字型名稱。
    2. 使用 window.RufflePlayer.config.fontSources 來指定要載入的字型檔案
    3. 使用 window.RufflePlayer.config.defaultFonts 來指定系統字型 sans 對應到前面那個字型檔的字型名稱。

    1. 使用 TTF 字型

    例如我使用「芫荽」字型,將「芫荽」字型的檔案放到網站中,讓 sans 去對應「芫荽」字型的名稱 "Iansui Regular" :

    window.RufflePlayer.config.fontSources = ["https://gsyan888.github.io/fonts/Iansui-Regular.ttf"];
    window.RufflePlayer.config.defaultFonts = {
        sans: ["Iansui Regular"]
    };

    因為「芫荽」字型的名稱為 "Iansui Regular" ,所以我們指定系統預設字型可以用它

    sans: ["Iansui Regular"]

    除了使用 「芫荽」字型也可以試試 Google 的思源黑體字型( "Noto Sans TC Regular")。

    會卡關的地方是,所有的字型檔都能使用嗎?

    哈!會這樣說,肯定不是所有字型檔都能拿來使用!(我拿教育部的楷書、隸書......玩了好久,玩不出所以然來)。雖然 Ruffle FAQ 中說到它支援 TTF、OTF、TTC 和 OTC 字型,但是我試半天,卡很久,最後選擇了「芫荽」字型,主要是它的檔案大小最適中(不知道以後支援的字數變多以後,是不是也會長大)。

    2. 使用內嵌字型的 .swf

    另外有一個方法一定會成功的,就是製作一個 Flash 字型檔,必須是 AS3 格式(ActionScript 3),並將想使用的字型嵌入後,儲存為 .swf 檔案。

    但是像我的電腦中只有舊舊的 Flash 8,它根本不支援 AS3 啊!

    真的想自己玩一下,有個開源的好工具 JPEXS Free Flash Decompiler (FFDec):

    雖然不如 Adobe 的 Flash 工具華麗,但是夠強悍,可以編輯 Flash 的檔案,也支援 AS3。

    底下來記錄一下,如果利用 JPEXS Free Flash Decompiler 來將電腦中的 TTF 字型,包在 .swf 中,讓 Ruffle 可以載入它,解決中文顯示的問題。不過,可別拿有版權問題的字型放到網路了!

    2-1 新增空白檔案

    啟動 JPEXS Free Flash Decompiler 以後

    • 主選單 [File] 裡按 [New empty]
    • [Compression] 選 [LZMA] (個人觀察這種壓縮方式好像可以讓檔案小一點)。
    • [Script type] 選 [ActionScript 3]。
    • 按 [OK]
    [圖1] 開新檔案

    2-2 新增 DefineFont3 Tag

    • 展開 [frames],對準 [frame1] 按右鍵。
    • 選 [add tag inside] , [others], [fonts], [DefineFont3]

    [圖2] 新增 tag

    2-3 確認新增 tag

    • 按 [OK]
    [圖3] 確認新增 tag

    2-4 修改 Font name in tag

    • 在右側欄的 [Parameters] 按 [Edit]
    • 在 [Font name in tag] 的輸人區中,輸入這個字型的名稱(可以自訂,但在 Ruffle 中要用這個名稱,截圖中是改為「全字庫說文解字」)。
    • 改好了就可以按 [Save] 鈕。
    [圖4] 更改字型名稱

    2-5 嵌入字型

    • 按 [Embed]
    [圖5] 準備內嵌字型

    2-6 選擇字型

    • 出現檔案開啟的對話框,按右上角的資料夾圖示來選擇未安裝過的字型檔案,或是從 [installed] 的清單中選擇已安裝在系統中的字型(請自行斟酌版權的問題)。
    • 如果是選擇檔案的,就按 [open] 鈕。
    [圖6] 選擇要內嵌的字型

    2-7 選擇要嵌入的字集

    • 在字集清單中選擇要嵌入的字有哪些,最懶的方式是選 [All characters] ,這樣就全選了,但是字愈多,檔案愈大哦!當然也可以在 [Idividual characters] 的輸入區中,輸入想選的字有哪些。
    • [重要] 千萬記得一定要勾選 [Set ascent descent and leading],不然會像我卡關好久,swf 使用時字有出現,但是整個偏上,只能看到下半部。因為 ascent、descent 和 leading 三個參數的值會影響字顯示的位置,想自己設定嗎?太累了,讓程式自己設定就好了。
    • 都設定好了,就按 [OK] 鈕。

    [圖7] 選擇要使用的字集或字

    2-8 儲存檔案

    • 按 [File] 中的 [Save]
    • 檔案不建議使用中文的,以英文及數字來命名。截圖中是使用字型檔原來的檔名,變成「font-ebas927.swf」,這樣子比較好對應。
    [圖8] 儲存檔案

    製作好內嵌字型的 .swf 字型檔以後,只要修改一下 RufflePlayer 的設定,搭配前面製作時的「swf 檔名」(步驟 2-8) 及「Font name in tag」(步驟 2-4),變成這樣:

    window.RufflePlayer.config.fontSources = ["https://gsyan888.github.io/fonts/font-ebas927.swf"];
    window.RufflePlayer.config.defaultFonts = {
        sans: ["全字庫說文解字"]
    };

    來看一下使用「全字庫說文解字」字型以後,我的 Flash 唐詩三百首作品中,七言古詩裡的長恨歌變成這樣:

    [圖9] 使用全字庫說文解字字型的長恨歌

    [圖9] 紅色方框的地方就是說文解字中沒有的字。用芫荽字型的版本對照一下(圖10):

    [圖10] 使用莞荽字型的長恨歌

    不同字型的唐詩三百首

    哈!古字要認得可能要花一點力氣才行。想玩玩看,認認古字,可以按底下的連結

    相關連結




    2025年1月9日 星期四

    Flash : SWF 遊戲啟動器

    2025年1月9日 星期四
    我第一個自製的Flash 抽號碼機是 2005 年的事,時光飛逝,今年已是 2025年。2009年前後密集創作的其它 Flash 工具及遊戲,原本放在力行國小的檔案,可能學校網頁伺服器已不再對外提供服務,舊的網址都讀取不到,請參考本文後面的小節「雄的家 Flash 作品集」,裡面有最新的載點及線上玩的連結。

    兩週前在逛一個以前很喜歡的英國網站,明明應該很小的工具,居然載入半天,好奇心驅使我研究了一番。原來那個工具並不是新的程式,而是 Flash 以 Ruffle (https://ruffle.rs/) 這個開源的 Flash Player 模擬器來載入的。關於 Ruffle ,以前曾經在另一個知名的網站 Wayback Machine  (http://web.archive.org/) 中,有使用 Ruffle 載入遊戲玩的經驗,印象中就是偏慢,然後中文字是出不來的。

    研究了一個多星期,不但我的那些互動式 Flash 教具、學具可以重新在瀏覽器中出現,中文也都順利顯示!更進一步,幫它們寫了一個「SWF 自製遊戲啟動器」:

    「SWF 自製遊戲啟動器」可以載入 Google 試算表中的遊戲設定及題庫,透過 Ruffle Player 來載入 SWF 檔案並執行 Flash 的程式。

    它的使用方法和「HTML5 FUN:自製遊戲啟動器」類似。

    編修自己的遊戲題庫

    • 建立 Google 試算表題庫範例的「副本」:
      • 按 [範例試算表] 開啟。
      • 按試算表左上方選單的 [檔案]  中找 [建立副本]。
    • 將試算表副本「共用」,設定為「知道連結的任何人」「檢視者」。
    • 在自己的試算表副本中,先在畫面下方的工作表名稱中,按一下想製作的遊戲。
    • 修改題庫內容。
    • 複製瀏覽器最上方網址列中的網址。

    製作遊戲網址及 QR Code

    • 開啟「SWF 自製遊戲啟動器」:
    • 在啟動器的頁面中找到「參數設定」
    • 在「 Google 試算表共用連結網址」的輸入區中,貼上前面複製好的試算表網址。
    • 按【送出參數並製作網址】按鈕。
    製作好的遊戲網址,按一下,會複製到剪貼簿,即可以將網貼到別處保存或分享。想立即玩,可以按一下 QR Code 的圖片;或是用載具掃描 QR Code。

    操作示範影片

    Q&A

    • 「SWF 自製遊戲啟動器」支援哪些 Flash 遊戲?
    • 如何製作遊戲選單?
    • 載入時為什麼很慢?
      • 因為我們使用的是 Ruffle Flash Player 的模擬器,加上有中文必須等它下載一個 8MB 的「芫荽」字型檔,所以要稍等一下下。
    • 遊戲可以下載到本機玩嗎?
      • 只要下載了 Flash Player 程式,就可以用來開啟本機中的 .swf 檔案播放,所以關鍵在去哪裡下載 Flash Player。Adobe 已經找不到,可以在 Wayback Machine 找到他們備份的 Adobe Flash Player 32 , 按這裡前往查看下載
    • 字體可以更換嗎?
      • 目前「SWF 自製遊戲啟動器」預設使用「芫荽」字體,另外測試過,也可以使用 Google 的思源黑體;不過目前不提供更換字體。
    • 可以多個遊戲放到同一個 Google 試算表嗎?
      • 一個 Google 試算表可以有很多個工作表,所以放很多個不同遊戲,想新增工作表,在試算表的畫面最左下角有個加號,「+」按一下,就可以新增工作表,複製已有的遊戲題庫貼上,再修改設定或題目內容即可。

    雄的家 Flash 作品集

    相關連結

    更新記錄

    • 2025.01.15 支援陳榮坤老師的「2P遊戲式題庫」,Ruffle 中的線上版建議拿來測試就好,因為在 Ruffle 模擬器中,有時會卡卡,甚至不明原因不動;如果想玩得盡興,建議至陳老師的網站下載後使用離線版。
    • 2025.01.11 支援 「Game迷世紀」的「百萬富翁」題庫。
    • 2025.01.10 支援 Flashcard 快閃字(圖)卡題庫 (參考:「雄:Flash : flashcard 快閃字卡小教具」)。
    • 2025.01.09 公開


    2025年1月2日 星期四

    國字標準字體筆順學習網改版的影響

    2025年1月2日 星期四

    教育部的「國字標準字體筆順學習網」在今天 (2025/01/02) 進行改版,還滿期待看看它有什麼新風貌、新功能的。哈~不過因為 HTML5 FUN 的筆順練習、PARTDLE、填字遊戲......等有使用到「國字標準字體筆順學習網」的筆順資料,怕會因為抓不到筆順資料,導致 HTML5 FUN 的工具無法正常運作,真的是既期待又怕受傷害。

    昨天半夜突然想到,如果為了避免筆順資料來源「斷頭」,最好還是先備份一下好了。於是利用 Google Colab 寫了一個簡單的 Python 程序,趁半夜機器還沒有異動,將現有六千多個國字的筆順資料儲存到 Google Drive 中。就這樣子弄到早上四點多才去睡。

    果不其然,早上就發現用原有的方法抓不到教育部的筆順資料了!試了一下,HTML5 FUN 的筆順練習還能使用,因為幾年前就幫它設計了備援的程序,如果抓不到教育部的,就改抓 GitHub g0v 筆順專案備份的筆順資料,雖然不完整,但至少大部份的字是能抓得到資料的。至於 PARTDLE,記得昨晚有快速掃描程式碼,應該是跟筆順練習有備援程序的;結果早上測試,抓不到筆順資料,PARTDLE 就廢掉了。

    有一點後悔昨晚怎麼沒有仔細的查程式,早上11點以前,可能讓不少小朋友要玩 PARTDLE,卻失望了。幸好有舊程式碼可以參考,沒多少工夫就讓加上備援程序的PARTDLE 可以上線。

    仔細研究了一下「國字標準字體筆順學習網」今天的版本,它將筆順資料直接嵌在網頁中了,以一個變數的方式在運作。另外在頁面中多了「產生快速碼」、「產生QR碼」......等功能鈕。不過,今天的頁面看起來,真的還滿像「工地」的,改天再來觀察看看。

    花了一個早上,順便以 Google Apps Script 將 Google Drive 中的六千多個筆順資料檔案,通通儲存到一個 Google 試算表中,大部份字的資料,都沒有超過每一個儲存格只能置入 50000個字元的限制,超過的就將資料分兩個儲存格;哈!第一次把 Google 試算表餵到 19.5MB 大。接下來就可以改由 Google 試算表來當資料來源,再不行,只好用 GitHub 了。

    ▋相關連結


    2024年12月29日 星期日

    Dead Blue:電源供應器除塵與驅動程式更新

    2024年12月29日 星期日

    平常在使用的桌機(Intel(R) Core(TM) i5 CPU  760  @ 2.80GHz) 源自於別人汰換不要的主機,查了一下,我應該是 2016年買了電源供應器、加了 RAM ,並且換上 SSD 以後,安裝 Windows 7 跑到現在。半年前它開始不乖,經常當機或是工作到一半,自己重新啟動。CPU、顯示卡重新上過散膏,記憶體、顯示卡金手指清除過氧化物,所有風扇除塵過 ...... 甚至用新的磁碟重新安裝 Windows 10 ,它還是經常當機重開,而且頻率有愈來愈高的狀況。哈!我都已經威脅這部老機器,準備將它換掉了,還是當個不停。

    前幾天打開主機,再重新審視了一下自己是否遺漏了什麼項目沒做的。整部機器乾乾淨淨的,只有一個地方,一直認為它應該不會出狀況:「電源供應器」。

    以前電腦常因為電源供應器品質不良而掛掉的,所以這一個 2016年買的電源供應器有特別挑過的,所以一直覺得問題不會在它。為了確定 PSU 沒問題,拆了螺絲及外殼。哇!嚇死人了!外面光光亮亮,裡面滿滿的灰塵!

    仔細的觀察了一下,確認每一顆電解電容都完好。接著徹底地將它內部清理一番後,重新裝回主機測試。測試了三天,模擬以前會當機的各種環境,故意讓它的負載盡量大。就這樣安全地度過。問題都解決了嗎?

    早上想說,還是再用 Windows 10 測試一下,如果都沒問題,要開始來搬資料換系統了。哈!當初用 Windows 7 ,也是百般不願意,撐到 Windows 7 快被微軟終止服務,才因為很多工具無法在 Windows XP 上使用才更換系統;這一回又遇到類似的情形,Windows 10 在 2025年10月也將終止支援。但換個系統並不是說換就換啊!我有不少工具及設定得備份,得確定能在新系統中使用。

    半年左右沒用的系統,一開機,當然就是更新囉!好不容易檔案下載到 100% 了,當!又當了!滑鼠、鍵盤都不動了。

    重新開機後,果不其然,用沒多久,又當了,不過這回好一點點,看到了 dead blue 的畫面,至少看到了關鍵的訊息:

    BUGCODE_USB_DRIVER

    不死心的冒險,重新關機後,讓它將系統更新完成。驅動程式有兩個項目,音效相關的安裝進行到一半,啪!dead blue 的畫面又來了:

    BUGCODE_USB_DRIVER

    只好認真面對這個問題了,重新關機以後,到裝置管理員中,找「通用序列匯流排控制器」,哈!中文這麼長,英文 Universal Serial Bus controllers 也沒短多少;將裡面的裝置一個個移除。幸好我的鍵盤還是 PS2 的,USB 的滑鼠因為騙動程式被移除而不能動了,還有 PS2 的鍵盤可以操作。USB 的驅動程式通通移完完畢以後,重新開機。

    答答~~開機以後,所有 USB 的驅動程式都自動重新安裝以後,Windows 10 就穩穩地用了。這讓我想起之前在和 DELL 筆電上的 INTEL 顯卡 + NVIDIA 顯卡奮戰時,也有類似的狀況,在 Windows 10 更新完,要將顯卡的驅動程式移除,讓它自己重新偵測並安裝以後,才能正常的使用;另一部 Acer 的舊筆電也有類似的問題。實在不知道為什麼還要手動移除,但這三部機器都得經過這樣的程序以後,才能正常使用。

    好了!希望我這一陣子的「機瘟」結束了!機器動不動就當機,讓人實在沒有心情做研究,哈!我並不想把時間花在研究硬體的除錯上,不點都不好玩。


    2024年12月24日 星期二

    筆電軟排線氧化

    2024年12月24日 星期二

    這兩天的心得,十幾年的老筆電整理時,別忘了檢查並清理軟排線(FFC, Flexible Flat Cable)接腳上的氧化物。之前接手朋友汰換的筆電時,鍵盤某些按鍵鈍鈍的,後來甚至會按下後沒反應。原本以為是按鍵的問題,有時拆開來清一清(哈!未見清出什麼啊!),敲一敲,好像正常一點;但是過一陣子,那些按鍵又開始罷工;另一部更舊的筆電,也有類似的情形。

    最近跟三部舊筆電成天和在一起,哈!好像打通任督二脈一般,鍵盤的問題也解決了!看一下底下這張照片:


    這是筆電鍵盤和主機板連接的 FFC ,金屬腳表面有很明顯的氧化物。就是這些氧化物讓金屬接腳不再光亮,甚至影響了按鍵訊號的傳遞。

    我用 2B 鉛筆,將每一個金屬腳上的氧化物盡量磨掉,將排線接回主機板的插槽。開機後測試鍵盤上的每一個按鍵,果然都可以答答答答~~反應靈敏,像新的一樣了!


    2024年12月22日 星期日

    Python: codecs read UnicodeDecodeError

    2024年12月22日 星期日

     HTML5 FUN 的遊戲與工具大多是使用 LimeJS 開發的,LimeJS 其實已經停更快十年,連它依存的 Google Closure Library 也在 2024年8月封存。LimeJS 使用的 Closure Library 、Closure Compiler ...... 其實都是很舊的版本;像 compiler 最後是停在  20130411 的版本,這個舊版本,很多 JavaScript 新的語法它都不認得,當然,應該也存在不少臭蟲。

    這幾天在測試,到底 LimeJS 在動得最少的狀況,Closure Library 和 Closure Compiler 可以使用到哪個較新一點的版本?都測試完以後,想讓 LimeJS 至少可以「活過來」,它目前下載原始專案的檔案,連安裝都會失敗。

    以 Closure Library 來說,20170816 的版本是可以用的,但是它 build 工具 source.py (closure/bin/build/source.py) 遇到某些檔案會出現錯誤而卡住:

    [圖1] Python codecs 讀取檔案失敗

    上面最重要的訊息是:

    UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 3457: invalid start byte

    查了一下,後來版本 Closure Library 的 source.py 中,用 codecs 來讀取檔案內容,而且指定使用「utf-8-sig」的編碼:

      fileobj = None
      try:
        fileobj = codecs.open(path, encoding='utf-8-sig')
        return fileobj.read()
      except IOError as error:
        err = True
        raise IOError('An error occurred opening or reading the file: %s. %s'
                      % (path, error))
      finally:
        if fileobj is not None:
          fileobj.close()

    反覆地測試,查了半天,總算知道卡住的原因了。哈!就那麼巧,我的檔案中居然有好幾個是使用 big5 中文編碼的。Python 的 codecs ,一執行到 read 就出現錯誤,這個情形在舊版使用內建的 open 再 read ,並不會發生的。

    解決這個錯誤的方法很簡單,就是先在程式中,先顯示檔名,然後就可以知道卡在哪一個檔案,將有問題的檔案以文字編輯器以 UTF-8 編碼來儲存即可。

    有時思考真的不能太僵化,一開始我都懷疑是 Python 環境的問題,但是這一次是各種版本及系統都會發生,完全找錯方向了。

    等都弄好以後,再將 LimeJS fork 一份並更新,實在怕哪一天什麼都沒有了,然後 HTML5 FUN 也跟著動不了了。

    相關文章

    2024年12月17日 星期二

    Intel 顯卡自訂解析度

    2024年12月17日 星期二

    打從用自己的薪水去中華商場扛回的第一部 80386 DX 20 開始,就一路這樣不知道花了多少新臺幣追新的規格。最近一次買新的電腦應該十幾年前的事了。家裡淨是一些別人汰換下來的桌機跟筆電,原本都用得好好的,最近是狀況一堆。說實話,自從工作上不用維護別人的電腦以後,硬體、作業系統方面的新知接觸的也少了,刀劍不磨,果然會變鈍。不過電腦跟人一樣,相處久了,就會多熟悉一點,甚至連底都可以摸清了。小孩兩年多前閒置的筆電,一直有大大小的狀況,不能開機,原來是因為 CMOS 沒電了;進 Windows 10 很不穩定,動不動就當機,連 dead blue 都看不到,應該是 NVIDIA NVS 5200M 顯示卡在作怪,索性將它停用了 [圖1]。

    [圖1] NVIDIA NVS 5200M 停用

    NVIDIA 顯卡停用後,剩下的 Intel 顯卡,解析度只剩下三種可以選了 [圖2]

    [圖2] Intel 內顯的解析度清單

    我想用 OBS 直接錄 720P 的教學影片,就變成還要重新編碼,Intel 顯卡可以自訂解析度,工具在哪裡?底下是實作的記錄。

    先把 Intel 顯卡自訂解析度的工具程式找出來,如果已經安裝好,可以在 Windows\System32 的資料夾中,用「custom」的關鍵字來找:

    [圖3] CustomModeApp.exe

    如 [圖3] 自訂解析度的工具檔名為「CustomModeApp.exe」。找到以後,就可以開啟它,應該會出現如 [圖4] 的警告對話框:

    [圖4] 自訂解析度工具使用前的警訊

    當然要按「是」的按鈕才能繼續。

    進入「Intel HD Graphics 控制台 / 顯示器自訂解析度」後,就如 [圖5] 依序輸入相關的設定值:

    [圖5] 自訂解析度

    輸入完,只要按了畫面右下角的加號 (+) 鈕,並按完「是」,就新增完一筆。

    [圖6] 確認新增自訂的解析度

    Windows 顯示器的設定裡,顯示器解析度清單也多了一個選項了:


    那到底會不會發生如一執行自訂工具警語中的那些負面的影響呢?哈!我也是第一次這樣玩,所以不負任何擔保責任哦!

    [註] 後來發現也可以利用Windows 顯示器的設定裡的「進階顯示器設定」,找「顯示器 1 的顯示卡內容」,開啟後,在「介面卡」的分頁中,按「列出所有模式」來找想用的。


     
    雄::gsyan © 2009. Design by Pocket