2025年12月19日 星期五

修正 iOS 10.3.4 CSS repeat function 的問題

2025年12月19日 星期五

前兩天在測試新遊戲 HTML5 FUN Make 10 時,發現在 iPad 4 的 iOS 10.3.4 居然不能玩!研究半天,找到讓程式卡住的地方是監聽畫面動態的「ResizeObserver」,iOS 10.3.4 不支援,只好多加幾行,讓它改用傳統監聽「resize」事件的方法。以為從此就可以過著幸福快樂的日子了嗎?

來看看 Make 10 正常的畫面應該像 [圖1] 這樣:

[圖1] 正常排列的 Make 10 按鈕

結果在 iOS 10.3.4 中是 [圖2] 這樣,全部疊成一排:

[圖2] iOS 10.3.4 中全部疊在一起

Make 10 中的數字方塊使用了 grid 來配置按鈕棋盤:

.board-grid {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  grid-template-rows: repeat(6, 1fr);
  gap: 1%;
  width: 100%;
  height: 100%;
}

設計的是 8 x 6 的棋盤,在 iOS 10.3.4 中,8欄有正常分配了,6 排卻疊成一排。本來以為 iOS 10.3.4 不支援 repeat function,但實際用 getComputedStyle 取得 grid-template-rows 的值,它有執行 repeat(6, 1fr) ,只是回傳的值是「0px 0px 0px 0px 0px 0px」,分成六份了,但每一份都是 0px。

原來關鍵在 iOS 10.3.4 的 repeat 在計算寬度時,有正確解讀「width: 100%」,而在計算高度時,「height: 100%」使用了百分比,並沒有被正確解讀。如果換成別的單位,例如「height: 100vh」,就不會疊成一排了。

找到原因了,在 resize 的監聽程序中,加入程式計算高度即可,取得棋盤容器的總高,扣掉不能使用的空間,再將「height: 100%」最後用 px 的單位來設定。

不過,怎麼知道哪一個人用了像 iOS 10.3.4 這樣, repeat 有缺陷的瀏覽器呢?

本來是用前面提到的「0px 0px 0px 0px 0px 0px」,以按鈕的高度為 0 來判斷,但是這樣的方法只能在一進入遊戲時用,如果使用者旋轉了裝置或是讓視窗尺寸有所改變時,就無法再重新自動設定格子大小了。後來發現「gap: 1%;」這個也是個線索,因為 iOS 10.3.4 並不支援「gap」,所以用 getComputedStyle 取得的 gap 會是 undefined ,這個特性剛好可以用判斷是否為 iOS 10.3.4。

來看一下修改過後的畫面:

[圖3] 不使用 % 設定高度後的棋盤

套上修正方法後的 [圖3] ,和原始設計的 [圖1] 比較,可以看到 [圖3] 格子與格子沒有間隔,所以格線看不出來;不過修正過後,至少在 iOS 10.3.4 中可以玩 Make 10 了!

    ▋ 完美修正

    還是不能接受「gap: 1%;」沒被 iOS 10.3.4 處理到,那怎麼辦?

    把 1%  到底是多少算出來,然後將所有格子找出來設定它們的 width 和 height 為 calc(100% - gap) 就可以有 1% 的間隔了,底下是實作的程序:

    function gridRepeatFix() {
      const boardGrid = document.querySelector('.board-grid');
      if (boardGrid) {
        if (typeof getComputedStyle(boardGrid)['gap'] == 'undefined') {
          const style = getComputedStyle(boardGrid.parentElement);
          let height = parseFloat(style.height);
          height -= parseFloat(style.paddingTop);
          height -= parseFloat(style.paddingBottom);
          const gap = Math.floor(height * 0.01);
          boardGrid.style.height = Math.floor(height) + 'px';
          Array.from(boardGrid.children).forEach(cell => {
            cell.style.width = `calc(100% - ${gap}px)`;
            cell.style.height = `calc(100% - ${gap}px)`;
          });
        }
      }
    }

    ▋ 補記 DD Car Map Editor 中用的方法

    DD Car Map Editor 中用了另一個方法,當 CSS 遇到不支援的 gap 時, 利用 margin-left 來補救,例如:

    .main-content {
    display: flex;
    flex: 1;
    overflow: hidden;
    gap: 0.5rem;
    }

    就在後面多加判斷及補救

    @supports not (gap: 0.5rem) {
      .main-content > * + * {
        margin-left: 0.5rem; /* LTR 預設 */
      }
    }

    之前花了好多時間在程式裡除錯,原來只是 CSS 的問題,有了這個經驗,以後應該可以縮短卡關的時間了。

    ▋ 相關連結


    2025年12月18日 星期四

    HTML5 FUN: Make 10 : 湊 10 小遊戲

    2025年12月18日 星期四

    以前在 iPad 上很喜歡挑戰一個 Make 10 的數學遊戲,玩法很簡單,就是由畫面下方的一堆數字方塊中,找到能和畫面上方的數字湊成 10 ,如果答對,方塊會消掉,答錯的話,方塊會往上堆;另外,在還沒過關之前,間隔一段時間,底部也會被插入一排新的方塊,如果方塊被推到頂部,或是計時器終了,遊戲就結束。除了湊成 10,遊戲也提供自訂要挑戰湊成其它數字。

    這麼好玩的遊戲,當然也要寫一個可以跨平台玩的,現在 HTML5 FUN 中新增了 Make 10 湊10 的小遊戲。

    ▋ 啟動 Make 10

    按一下底下的圖示,或是紅色的按鈕,就可以玩 Make 10:


    ▋ Q&A

    • Q : 挑戰湊成 10 的,但是在下方的數字中,找不到可以湊成 10 的,怎麼辦?
      • A : 暫時無法湊成 10,就選一個較理想的按一下,雖然會造成某一個堆高一層,但至少能搶時間繼續玩,不然,等被再追加一整層方塊,就更難過關了。(其實讓哪一層堆高也是有差別的哦~所以思考一下是值的。)
    • Q : 玩到一半,想重頭玩,或是換別的遊戲模式,怎麼辦?
      • A : 如果想放棄現有進度及分數重玩,按一下畫面左上角的「三條線」,展開側欄以後,裡面有一個「結束重來」的紅色按鈕。

    ▋ 相關連結

    ▋ 更新記錄

    • 2025.12.19 v.1.2 修正棋盤格子在 iOS 10.3.4 顯示不正常的問題。
    • 2025.12.18 v1.1 縮短動畫延遲的時間,不會有出題太慢的錯覺。
    • 2025.12.17 v1.0 初版。


    2025年12月16日 星期二

    HTML5 FUN : 花朵產生器

    2025年12月16日 星期二

    前兩天重寫了 HTML5 FUN Doodle Petals 花瓣字的花朵模組,完成後,順手弄了個「花朵產生器」,使用者可以自訂控制參數,產生自己的花朵圖案,並匯出為 SVG 或是 PNG 圖形檔。

    ▋ 啟動花朵產生器

    按一下底下的圖示,或是紅色的按鈕,就可以開啟花朵產生器:


    ▋ 功能簡介

    HTML5 FUN 花朵產生器截圖

    上圖是 HTML5 FUN 花朵產生器的截圖。在夠寬的螢幕中,左側是參數設定區,參數改變,右側預覽的花朵也會立即更新;改到滿意了,設定區的最下方有「匯出 SVG」和「匯出 PNG」兩個按鈕,可以將花朵儲存到檔案中。

    參數設定的部份,基本上是在設定區中,由上而下,一項項去設定,玩玩看,應該就可以上手了。幾個特別在此簡單說明:

    • 樣版:每一個樣版會帶入花瓣的基本設定或是層數,而顏色或是其它參數請自行調整。
    • 控制點半徑:改變花瓣的邊緣是圓、是尖,還是平的;是凸、是凹的。
    • 花瓣層數:產生器支援多層花瓣,像上面截圖中的花朵,中央黃色的花心以外,還有兩層的花瓣;可以應用在國語課的「部件」→「字」→「語詞」。
    • 層間擴展距離:控制多不同層花瓣間,外緣的距離,愈大離愈開。
    • 多色:花瓣色彩模式設為「多色」時,會依不同設定,而有不同的效果
      • 「一筆畫」模式時,只有設定為多層的花瓣時,才看得出「多色」的效果,一層用一個顏色,顏色依色盤順序使用。
      • 不是「一筆畫」模式時,不同花瓣會依序套用色盤中的顏色,顏色數不足時,會從頭重覆使用。
    • 全部填白色:如果只想留花朵的輪廓線,就勾選這一個參數,將整朵塗上白色。
    • 一筆畫:這個選項啟用時,畫出的花瓣,無論設定為幾個花瓣,會以一筆畫的方式畫完,所以同層的花瓣無法用多色。未勾選時,則是以一個花瓣為單位輸出,所以每一個花瓣可以有自己的顏色。
    • 連接到花心:當不是「一筆畫」時,花瓣靠中心端,可以選擇只到花心的邊緣,或是到花朵的正中心。由於差異是出現在花心內,所以這個選項要在沒有勾選「顯示中心圓」時,才看得出差異。

    ▋ 相關連結

    ▋ 更新記錄

    • 2025.12.15 v1.0 初版。


    2025年12月11日 星期四

    HTML5 : 提升 Google 試算表查詢效率

    2025年12月11日 星期四

    教育部國語辭典可以在《教育部國語辭典公眾授權網》中下載匯出的文字資料,而且有提供試算表格式,只要上載到 Google 雲端硬碟,另存為 Google 試算格式,就可以使用 JSONP 的方式,將試算表當資料庫查詢。

    在 HTML5 FUN 中,筆順練習、Partdle 和花瓣字均有使用到查詢字典的功能,《國語小字典》和《國語辭典簡編本》1140925版有 45194筆資料, 因為資料筆數較少,查詢的等待時間算可以接受,但是《重編國語辭典修訂本》1140923版有 163907筆資料,從十幾萬筆資料中撈出要用的,會明顯的感受到「等」!如果想將《重編本》的工作表複製到別的試算表,甚至會出現錯誤訊息而無法完成。

    ▋ 輕鬆建立小而美的工作表

    昨天做了一個小實驗,原本在《重編本》的檔案中只有一個名稱為「1140923辭典匯出」的工作表,新增一個工作表,命名為「short」,並利用參照工作表「1140923辭典匯出」的方式來建立資料,把我想查詢的「字詞名」(A 欄)和「注音一式」(I 欄),用以下程序建立:

    • 游標移至「short」的儲存格 A1 
    • 輸入公式:='1140923辭典匯出'!A1
    • 游標移至「short」的儲存格 B1
    • 輸入公式:='1140923辭典匯出'!I1

    公式如果正確,顯示的內容應該就跟「1140923辭典匯出」A1 與 I1 中的一樣了。

    [圖1] Google 試算表表的參照與自動填滿

    因為 Google 試算表的新工作表預設只會有 1000 列,而「1140923辭典匯出」中有的資料遠遠超過 1000 列,所以要先查一下要參照的工作表「1140923辭典匯出」有多少列資料,如前面提過的,這個版本有163907筆資料,所以 163907 - 1000 = 162907,需要在工作表「short」的最底部再新增 16290 列,努力的捲到底部,就可以看到輸入框了 [圖2],在裡面填入需要新增的列數。

    [圖2] Google 試看表在底部新增多列

    新增完所需要的列數,接下來可以準備使用魔法的快速按鍵「Ctrl + Enter」,幫我們自動填入資料了:

    • 游標移至「short」的儲存格 A1
    • 按一下上方的欄名「A」,可以選取整欄。
    • 按鍵盤「Ctrl + Enter」

    成功的話,等一下下,A欄中應該就會將資料都自動填入空格了。

    繼續「自動填滿」B 欄:

    • 游標移至「short」的儲存格 B1
    • 按一下上方的欄名「B」,可以選取整欄。
    • 按鍵盤「Ctrl + Enter」

    成功的話,B 欄的所有空格應該也自動填入資料了。

    ▋ 比比看誰快

    新建立的工作表「short」只有兩個欄位,來和完整版的工作表比較一下查詢所花費的時間,底下在四個不同帳號,分別在兩個工作表查詢 A 欄帶有「山」這個字的,並回傳國字、注音兩欄所花的時間(單位為千分之一秒):

    ✅ 工作表「short」(共2欄, 回傳 2欄, 找到 1038筆)

    時間:  1691 , 筆數:  1038
    時間:  1436 , 筆數:  1038
    時間:  1264 , 筆數:  1038
    時間:  1398 , 筆數:  1038

    ✅ 工作表「1140923辭典匯出」(共18欄, 回傳 2欄, 找到 1038筆)

    時間:  4993 , 筆數:  1038
    時間:  5137 , 筆數:  1038
    時間:  4522 , 筆數:  1038
    時間:  3584 , 筆數:  1038

    只有兩欄的「short」很明顯地快多了。

    來看看資料量較少的《簡編本》如何呢?

    ✅ 工作表「short」(共2欄, 回傳 2欄, 找到 137筆)

    時間:  473 , 筆數:  137
    時間:  624 , 筆數:  137
    時間:  750 , 筆數:  137
    時間:  525 , 筆數:  137

    ✅ 工作表「辭典匯出_1140925」(共15欄, 回傳 2欄, 找到 137筆)

    時間:  1071 , 筆數:  137
    時間:  1297 , 筆數:  137
    時間:  1371 , 筆數:  137
    時間:  1367 , 筆數:  137

    《簡編本》如果查詢只有兩個欄位的「short」工作表,也可以比原來快很多。

    實際應用在 HTML5 FUN 筆順練習和花瓣字中,可以讓程式更靈活了。哈!雖然使用者原來不見得感覺有在等待,畢竟程式在背景載入資料時,大伙兒都忙著操作別的呢!

    ▋ 相關連結


    2025年12月9日 星期二

    DD Petals 花瓣造詞注音手寫

    2025年12月9日 星期二

    HTML5 FUN 的 DD Petals 花瓣字,可以拿來玩造詞、玩部件,或是玩數學 ,但是都要用手寫的方式來輸入答案。原本限制只辨識中文字與數字,注音符號則未完全支援;這幾天認真地研究如何克服注音符號手寫辨的問題,詳見「雄:注音符號手寫輸入提升辨識率」,有了大進展。看一下底下這張截圖 [圖1]:

    [圖1] 花瓣字國字注音混合手寫

    現在花瓣造詞如果是「低年級」課本生字的題目,就會自動啟用手寫注音的辨識功能(中、高年級要乖乖寫國字,不會就查字典啦!)。而且可以國字、注音混合使用哦!不過,寫字時要注意一些小技巧才會用得順手。

    ▋ 手寫注音小祕訣

    花瓣造詞可以由 HTML5 FUN 筆順練習中直接啟動。為了提高注音符號的辨識度,以下幾點供手寫時參考:

    • ✅ 注音符號之間,保持距離,不能黏在同一個框。參考 [圖2]。
    • ✅ 調號寫大一點比較好辨識。
    • ✅ 寫完,如果一秒沒動作,會自動辨識,出現紅色虛線框,可用來檢視注音符號或是國字是不重疊了,重疊就只能按復原鈕,或是「長按一秒」擦掉重寫。
    • ✅ 「ㄥ」、「ㄐ」比較容易誤判,寫完要特別注意是否正確。
    • ✅ 國字、注音混用時,「國字」的各部件要「同框」;注音符號「不能同框」。
    注意 [圖1] 中「山高水長」的「水」,和「山頂洞人」的「頂」,如果「水」和「頂」的各部件沒有同框,國字就可能被誤判。(我有秘招:在「丁」「頁」之間按一、兩個點,就會「縫合」為「頂」了)

    [圖2] 注音符號不可以黏在同一個框框內

    ▋ 相關連結


    2025年12月6日 星期六

    注音符號手寫輸入提升辨識率

    2025年12月6日 星期六

    Google 輸入工具的手寫輸入,中文的辨識率滿高的,當然也包括注音符號。但是如果將多個注音符號寫在一起,例如「ㄒㄩㄥˊ」,那大概就會失望了;直寫會被辨識為國字,橫寫可能變別的文字。一次一個注音符號可以正確辨識,多個就亂掉。山不轉路轉,路不轉人轉,轉個念,就可以讓 Google 輸入工具應用在手寫注音辨識了!

    關鍵就在「一次一個」注音符號,所以如果在傳送筆跡座標時,一次只送出一個注音符號的,這樣就能發揮它的高辨識率了,底下可以測試一下成果。

    ▋ 手寫注音測試

    小秘訣:

    • ✅ 手寫時會有虛線框,一個框一個符號。
    • ✅ 聲調符號不要寫太小。
    • ✅ 寫完,如果一秒沒動作,會自動辨識。


    ▋增強了什麼

    為了提升手寫注符號的辨識率,利用程序做了一些調整:

    • ✅ 以手寫字跡佔最大矩形是否有重疊,將重疊的視為同一符號來辨識。
    • ✅ ㄥ容易被辨識為ㄑ,但是ㄑ正確率很高,所以辨識結果兩者都有,而且ㄥ順序在較低時,視為是ㄥ。
    • ✅ 調號較不容易辨識正確,所以用最常被認錯的符號來修正為正確的。
    • ✅ 以虛線框為單位,一次辨識一個虛線框的筆跡;所有筆跡都辨識完以後,分析出注音符號與非注音符號,再依注音符的拼音原則,將字的注音切割。

    ▋已知問題

    先列出一些待解決的問題:

    • 「ㄗㄨㄟˋ」 目前解析為「ㄗㄨㄟˋ」,但它也可能是「ㄗ」「ㄨㄟˋ」;「ㄗ」「ㄨ」到底是不是屬同一個字的注音,可能還需要參考筆跡的位置才行。
    • 提升調號的辨識率。

    ▋應用發展

    HTML5 FUN 花瓣字目前的版本有開放低年級的生字造詞,寫一個注音符號啟用虛擬鍵盤,接下來可以將本篇的技術應用在全注音手寫的方式輸入答案(註: 已於2025.12.09 整合完成)。另外,或許可以開發一個看圖、看國字,或是聽語音,手寫注音的注音高手。

    ▋ 相關連結


    2025年11月10日 星期一

    Ruffle : 選取最適用的版本

    2025年11月10日 星期一
    之前在測試「ㄅㄆㄇ西遊記」時,主要是在 Windows 7 的 Chrome 跟 Firefox 測試,Android 手機中的 Chrome 也沒問題,但是在 iPad Air 2 (iOS 15.8.5) 的 Safari 中則是會快速載入兩次後 Ruffle 以後就出現錯誤訊息。記得幾個月前不會有這樣狀況的,手上沒有更新的 iOS 裝置可測了,不確定是不是 Safari 版本太舊的問題。

    不過,回想了一下,可能是之前為了解決無法載入任意字型的問題,將 Ruffle 更新為 2025.09.21 的版本,才讓 iPad Air 2 無法正常使用 Ruffle。畢竟 Ruffle 還在快速發展中,問題可能會被解決,也可能會產生新的問題。

    怎麼解決我的 iPad 無法使用 Ruffle 的問題呢?只好一個個版本去試,找到最佳可用的版本。

    往回推,先改用 2024.12 的 Ruffle ,確定運作正常,再利用這兩個時間點,以二分搜尋法來測試。運氣不錯,總共試了五個版本,最後確定我的 iPad Air 2 (iOS 15.8.5) 只能用到「Nightly 2025-02-22」這個版本。

    Ruffle Nightly 2025-02-22 的截圖

    雖然這個版本無法載入所有字型檔,但是使用檔案大小相對小的芫荽字體是沒問題的,所以並無影響。

    軟體與工具用得順手比較重要,真的沒有必要一直追最新的版本,最新的版本,玩玩就好。所以我將網站中的 Ruffle 降級為「Nightly 2025-02-22」了。這樣子,新載具、舊載具都能玩,皆大歡喜!

    ▋ 相關連結


    2025年11月9日 星期日

    幫「ㄅㄆㄇ西遊記」加上 Ruffle 虛擬按鍵外掛

    2025年11月9日 星期日

    幾年前,桃園縣政府教育局 (是的,沒看錯,看到「縣」,就知道有一些時日了) 有一個「ㄅㄆㄇ西遊記」的教育光碟,在瀏覽器還支援 Flash 時,可以在線上玩。

    • 原始網址: https://www.tyc.edu.tw/files/west/index.htm (已失效)。

    「ㄅㄆㄇ西遊記」可以用 Ruffle 載入後,在網頁瀏覽器,甚至行動載具中玩嗎?

    可不可以玩?按一下紅色按鈕,就能知道結果!

    ▋ 載具中如何使用方向鍵

    測試過了,只要使用 Ruffle 載入,就能在電腦或是行動載具的瀏覽器中玩「ㄅㄆㄇ西遊記」。「ㄅㄆㄇ西遊記」中有教學,也有遊戲,但是遊戲主要用鍵盤的方向鍵來操作,電腦上操作沒什麼問題,行動載具沒有實體鍵盤,要怎麼操作呢?這倒是一個大問題!

    Ruffle 有內建虛擬鍵盤嗎?在只能使用觸控方式輸入的環境下,如果是在可輸入文字的元件中,Ruffle 會幫我們叫出系統的虛擬鍵盤,但是在玩遊戲需要使用鍵盤操作時,因為並非操作輸入文字的元件,目前就得自立救濟了!

    ㄅㄆㄇ西遊記在 Ruffle 中的截圖

    為了能在 iPad / Android 中玩「ㄅㄆㄇ西遊記」中的遊戲,我幫 SWF 遊戲啟動器加上了虛擬按鍵,需要按方向鍵時,可以按右下角半透明的虛擬按鍵即可送出相關的指令給 Ruffle ,效果和按實體按鍵一樣。

    ▋ 版權聲明

    • 「ㄅㄆㄇ西遊記」下載自桃園縣政府教育局網站,版權屬桃園市政府教育局所有。

    ▋ 相關連結


    2025年11月1日 星期六

    漢字說故事 YouTube 影片播放器

    2025年11月1日 星期六

    《漢字說故事》是《中華文化總會》放在《中華語文知識庫 YouTube 頻道》中,有關中文字的動畫影片,兩期總共有180個字的精美動畫,每一部兩分鐘的影片中,除了介紹主題的字,還會有幾個衍生的字,應用在國字的學習相當不錯。影片在 YouTube 頻道中都可以找到,也有兩個相關的播放清單:

    為了方便使用,我設計了一個「漢字說故事 YouTube 影片播放器」,有以下的功能:

    • ✅ 可以一次搜尋多個字的影片,並變成一個自訂的播放清單。
    • ✅ 可以產生自訂播放清單 QR code 或是網址,方便重覆使用。
    • ✅ 解決「漢字說故事」動畫 Ⅰ  的影片片長加倍,後段卻無聲的問題 (跳過無聲的部份)。

    ▋ 開始使用

    想立即試試看,就按一下紅色按鈕啟動:


    ▋ QA

    • Q : 查完的字,播放清單如何保存?
      • A : 在漢字說故事影片播放器的輸入區右側有一個 QR Code 的圖示,按下去會出現 QR code 及網址,按一下網址即可將影片播放清單的網址複製到剪貼簿。
    • Q : 為什麼在輸入區打了很多字,都沒有出現影片?
      • A : 漢字說故事只有 180 個字有影片,可能剛好輸入的字都不在清單內。
    • Q : 到底有哪 180 個字有影片呢?
      • A : 請按右邊這個 [ 🔍查詢清單 ] ,稍候就會列出現有的影片是哪個字為主題。
    • Q : 如何讓影片是全螢幕的?
      • A : 播放影片以後,影片的操作就像一般 YouTube 影片一樣,在右下角控制區中有全螢幕或離開全螢幕的小圖示按鈕。
    • Q : 如何暫停或繼續播放?
      • A : 播放影片以後,影片的操作就像一般 YouTube 影片一樣,在影片下方的有各種的播放控制鈕可以使用。
    • Q : 播放影片後,如何重新找其它影片?
      • A : 在影片下方和縮圖選單之間的訊息欄右側,有一個紅色的  [重新搜尋] 鈕,按一下即可出現搜尋輸入區。
    • Q : 還有其它影片嗎?

    ▋ 版權聲明

    本工具「漢字說故事 YouTube 影片播放器」只是一個自訂的 YouTube 影片播放器,僅用來搜尋及載入《中華語文知識庫 YouTube 頻道》中的公開影片的影片及其縮圖。版權均屬《中華語文知識庫》及《中華文化總會》。

    ▋ 相關連結

    ▋ 更新記錄

    •  2025.10.31 v1.0


    2025年10月29日 星期三

    HTML5 FUN 筆順練習注音顯示及多音播放鈕

    2025年10月29日 星期三

    教育部筆順網收錄的國字有六千多個字,裡面有多少個多音字呢?

    底下 516 個字都是(按一下可以在教育百科查該字):

    上不且中乘乾了予些亟亡亨什仇仔任佛估伽伺作伯供便俟倆倒們倔倡個倘倭偺假傍傀傳僮兒六共其冒冠分切刨削剌副創劃勒勞勝勦勾化匙匹區午卒南卡占卷參可召叨只句吐合吃吭否吧告呀呵呱和呢咎咳哇咽哄哈咯咱咻哩員哪哦啦啞啊喝喪喔單嗎嗾嘛嘔嘩噴噱噢嚇嚼囉囪囤圈圳地坊埋埤培塞壘夏大夫奇奄契女好妻委姊姥娜娩婁嫖子孫宛家宿寧射尉將少尺屏屬屯嵌差帖并幹幾底度弄弟強彈彷待得從徵怔思恫悖惡悶應戲扁扇扎扒扛把折抓拂抹拓拈拗括拾挑捎掖掃掄掙排提搶撇摟撈撕撒擔擰放教敦散數文斜於施旁旋晃景暈暖暴曲更曾會有期朝朴枕枝查枸柞校桔柴棹棲棋楞榜樂橫檻歙正歪歸殷殺比氏氓汗沒泌泥法泄沮泡洞洗涼混湛渦湯渴渾溺滑溜漂漲漯漿澄潦澎澹濟濺瀾為炸炮烙無煞熨燉燕燥爪父率王甚畜番當疋百的盛監省相看瞑瞭瞿矇矜知石磅磨祇祕禁禪秤稟種稱稽空答簸粥紅累結絡給綸繆繃縫縱繁繫署罷羊羋翟翹聽肚胖背脈脯膀臭與興舍般艮色艾茄若苔茲莎莞莘莫荷荼華菴著菲葷落葉葛蓋蔓蕃薄藏藉蘋虎處號虫蛇蚵蛤蛾蝦螞蠡行衝衣衰被裳裨褶要覃見親覺觀角解語說請調論識讀谷豁貉賁賈質趣足跑躂身車軋載輾轂轉轍辟逢逮過遠遲遺還邪那都酊重量釐釘鈷鋪鋼鏑鐺鑽長間閤阿降陸陶雋難雨露青靡靦革頓頡頸頭風食飲養馮馱骨鬲魄鮮鱖鵠麗麼齊龜乜亢俛偈勺喁囝圜垛宓峒崗彊徠徼忪慊摽撣攢杓栖榦欸洒洩漚澠瀧畬秘繳臊芾菟蓼薺藷虺蜚裼謾趿踉踦蹌邋酢鎬鏹閼闕頦駘鶻

    ▋ HTML5 FUN 筆順練習新功能

    花了兩天的時間,用程式分析了【教育部國語辭典簡編本】蒐集的字,找出多音者後,再將五百多個字,以我印象中常用的讀音,好好地檢視了一番,調整了 HTML5 FUN 筆順練習部份的預設語音檔,資料庫中加入了注音清單的欄位,也新增了一項功能:

    HTML5 FUN 筆順練習可自選多音字要播放的語音

    現在使用 HTML5 FUN 筆順練習時,在「筆順示範」的功能頁面中,右側會出現注音的按鈕,想聽哪一個音的語音解說,就按下吧!

    不過美中不足的是仍有部份讀音似乎沒有錄製解說的語音,像「們」這個字就只有「ㄇㄣˊ」的語音檔,「ㄇㄣ˙」就只能自己心中默念了。

    ▋ 相關連結



    2025年10月24日 星期五

    YouTube channel id 或 RSS 網址如何找?

    2025年10月24日 星期五

    文總有一個《中華語文知識庫》,其中漢字影音有《漢字說故事動畫》,影片放在 YouTube 中,頻道的網址如下:

    註:文末有一個小工具可以輸入國字列出找到的影片。🔍🔍

    原本想利用 RSS 來解析出影片的清單,頁面上找不到 RSS 的連結,網路上有人說,由頻道網址找到 channel id 再加到「https://www.youtube.com/feeds/videos.xml?channel_id=」後面就可以了。可是現在的網址是用小老鼠(@)的好記格式了,無法直接複製貼上了,怎麼辦?

    如果知道怎麼看頻道頁面的原始碼,那就在原始碼中搜尋:

     "canonical" 

    找到後,再往後看 href 裡的網址,就是該頻道的標準網址,最尾巴的就是 channel id。

    而想找 RSS 的連結,就在原始碼中搜尋:

    title="RSS"

    找到後,一樣的,取 href 中的網址,就是該頻道的 RSS 網址。會使用 Console 就下這樣的指令:

    document.querySelector('link[rel="alternate"][type="application/rss+xml"]')?.href

    哈!總是會想,有沒有更簡單的方法?可不可以我貼上 YouTube 頻道的網址,就直接出現 channel id 跟 RSS 網址,按個複製鈕就好了!

    小工具的製作原理很簡單:

    • 下載 YouTube 頻道頁面原始碼。
    • 解析原始碼,找到關鍵的標籤並擷取網址。
    • 輸出資料。

    但是利用 JavaScript 實作時遇到了一個大問題,YouTube 伺服器會進行「機器人驗證」,然後就抓不到頻道頁面的原始碼了!

    幸好之前在解決 HTML5 FUN Audio Player 抓不到 YT 字幕時,也遇過類似的問題 (詳見「利用 iframe 解決因為 CORS 而抓不到YT字幕的問題」),可以利用在「iframe」進行下載與解析的步驟來避免被要求「機器人驗證」的問題。

    ▋ YouTube 頻道 channel id , RSS 網址解析小工具

    以下是一個簡單的 YouTube 頁面解析小工具,只要輸入 YouTube 的網址,可試著抓出一些資料,試試看吧!


    ▋ 所有影片的播放清單網址

    上面的小工具最後提供了一個「所有影片的播放清單」的連結是什麼?一般頻道主會提供他自定的播放清單,那有沒有沒可以播放該頻道所有影片的播放清單呢?看到有高手提到,只要能找到頻道的 channel id,將它的前兩個字母 UC (User Channel) 置換為 UU (User Uploaded),變成一個新的播放清單 id, 再加到底下這個播放清單用的網址後面:

    https://www.youtube.com/playlist?list=

    就可以用來播放該頻道所有公開的影片了。

    ▋ 播放清單 JSON 格式資料

    本以為有了前面的網址,這下子可以抓到自己要的影片資料了吧?想得美!YouTube 的 RSS 只能抓到最新的 15 部影片資料;播放清單的頁面沒有特別處理,只能由原始碼中找到 100 部影片的資料 ...... ,要花很多時間再研究。

    有一個工具根本可以輕鬆拿到所有影片或播放清單中的所有影片資料,而且可以直接輸出為 JSON 格式,「yd-dlp」這個開源的超級小幫手還是最強的!

    如果電腦中有 yt-dlp,只要這樣的指令:

    yt-dlp --flat-playlist --dump-single-json  "想抓網址" > playlist.json

    就可以將該網址的影片資訊輸出到名為 playlist.json 的檔案中。

    不過,裡面如果有非英數的文字與符號,都會以 \u???? 的 Unicode 碼呈現。以下的小工具可以將被編碼過的文字還原。

    🔮 將編碼過的內容貼進來解碼:


    透過 yt-dlp 的助力,我將中華語文知識庫 YouTube 的《漢字說故事動畫 Ⅰ》和《漢字說故事動畫Ⅱ》兩個播放清單資料彙整了一下,95 + 80 = 175 部影片的資料,哈!發現一件有意思的事,「中華語文知識庫」網站有自己的資料動態生成選單,裡面的記錄是 151 筆,和 YouTube 清單加起來的 175 部有一點點差異;另外,在漢字說故事動畫Ⅱ 中的影片標題有兩個「不乖」,「18萬」的數字用的是全形數字,跟其它的不同,還有一部影片沒有標題,看起來應該是「27我」;在漢字說故事動畫Ⅰ 最後一集是100,但是影片播放清單卻只有95部,比對了一下,少了「5口, 19文, 33犬, 42生, 81」,81到底是哪一個字?在影片清單中沒有這一集。為了找出少了什麼影片,花了點時間,但功力又增加了不少 ^_^ 。

    ▋ 漢字說故事動畫搜尋小工具


    建議再試試底下更新的方式,用這個小工具來搜尋、播放:

    🔮 漢字說故事 YouTube 影片播放器


    ▋ 相關連結


    2025年10月22日 星期三

    HTML5 FUN : 國字基本筆畫練習小工具

    2025年10月22日 星期三

    上一則文「HTML5 FUN 筆順部件及 CNS 部件校正」中提到花了不少時間校對了 HTML5 FUN 的部件,也建立好筆畫清單,第一個應用的小工具「國字基本筆畫練習」來囉!

    國字基本筆順練習小工具參考教育部《國字標準字體教師手冊》中的「國字筆畫名稱表」,提供28個基本筆畫及其例字的筆順示範與練習。

    ✅ 加碼製作28個基本筆畫的筆順資料及筆畫語音。

    ✅ 有六個筆畫示範時,會隨機出現動畫加強印象。

    ✅ 示範及練習會念出筆畫名稱。

    ▋ 開始使用

    想立即玩玩看,就按一下紅色按鈕啟動:


    在 HTML5 FUN 筆順練習中已加上啟動基本筆畫練習小工具的按鈕,按下去即可切換 :

    筆順練習中啟動基本筆畫練習小工具

    ▋ Q&A

    • Q : 筆畫的例字可以自訂嗎?
      • A : 範例選單字可以透過設定來控制,但目前尚未開放自訂。
    • Q : 筆畫的語音可以自訂嗎?
      • A : 筆畫語音是由一個音檔、分段設定檔及程式所控制,目前是使用我自己錄製的語音,其實尚有製作人工合成的語音(TTS),但目前未開放自訂使用。
    • Q : 字的筆晝參考來源為何?
    • Q : 筆畫的動畫是哪裡來的?
    • Q : 為什麼沒有幫 28 個筆畫都加上動畫?
      • A : 哈!啊~就找不到其它合用的嘛!很多東西都是要緣份的。有緣再慢慢補上。

    ▋ 錯誤回報

    ❕❔ 資料初建立,難免有誤,如果發現任何問題或是錯誤,可以在底下留言區告訴我;有時間,一定會盡快處理。感恩~~

    ▋ 版權聲明

    ▋ 相關連結

    ▋ 更新記錄

    • 2025.10.21 v1 發布。


    2025年10月15日 星期三

    HTML5 FUN 筆順部件及 CNS 部件校正

    2025年10月15日 星期三

    最近想製作國字的筆畫序資料庫,基於 2024年五月已經把 HTML5 FUN 的部件改使用 CNS 的部件定義,所以先幫 CNS 517個部件一個個建立了完整的筆順序。原本的計畫是接下來就可以輕鬆用 517 個部件的基礎,推算出任何字的筆順序;果然是想得太簡單了,國字有很多「例外」啊!參考教育部的《常用國字標準字體筆順手冊》:

    裡面有筆順基本法則,以「國」這個字來說,它的部件是「囗戈口一」,第一個部件「囗」最後一筆的橫畫,要留在其它筆畫寫完才能加上;「國」算單純的,像「鄙」,到底什麼時候要加上橫畫,得好好的計算與判斷了。在「挖掘」的過程中,發現 HTML5 FUN 筆順練習的部件設定有諸多錯誤,而 CNS 的部件設定也有很多沒有按照《常用國字標準字體筆順手冊》中的原則來設定,修正的記錄附在本文的後段。此外,新發現教育部筆順網有兩個字寫正確了反而會過不了關的:

    • 「寓」12畫,卻有13筆資料,第6畫要重寫一次才能過關。
    • 「製」14畫,卻有15筆資料,最後面多了一筆第13畫的。

    筆順網其它可能會過不了關的字,請參考「雄:教育部筆順學習網這些字的過關秘訣」這一則舊文中的說明。

    ▋ 整合 HTML5 FUN 部件設定與 CNS 部件筆順序

    HTML5 FUN 部件設定及對應的CNS部件設定有誤的地方修正好了,乾脆偷懶,將對應的主客互換,先產生 CNS 部件的筆順序,再以部件對應到 HTML5 FUN 的筆畫序,這樣子就可以知道部件中每一個筆畫的名稱,重新按筆畫序列出,完全不用複雜的判斷就是我要的結果了。但是由產生出的結果交互比對,找出了更多的錯誤 XDDD

    經過將近一週的努力,至少教育部筆順網的六千多個字,都能有完整的筆順序了。花了大半天,把國小國語課本三個版本中最近兩學期使用到的生字(二千九百多個字),以一個小工具,人工檢查的方式再次確認,並以程式調整了以下的字:

    • 寫法與部件有異:竊(vs禸)、虜(vs毌)、亟極殛(筆畫要多1)、歿沒別捌(vs方)。
    • 筆順與部件有異:升昇陞呏、臧藏臟贓。
    • 一字不二捺,捺改頓點或長頓點:潑返閣額雒擱篷縫蓬逢逄皴逡蹩釐犛邀遨瓤還遠退腿褪螁隧毅豬櫫瀦燹豢遯逐遂燧遽邃劇裹歉。

    筆順校對與測試小工具截圖

    目前校對部件、筆順清單已大致完成,也測試了念出筆順的功能,測試的過程還解決了一個在 iOS / Android 播放指定區段聲音一直存在的臭蟲,一個星期的研究沒有白費。接下來應該可以先弄一個「🚀 國字基本筆畫練習」的小工具(註:2025.10.21上線了),測試一下資料庫與語音的功能。

    ▋  CNS 部件調整記錄

    依據教育部《常用國字標準字體筆順手冊》筆順基本法則,調整 CNS 部件順序

    ✅ 「凡字的上半或下方,左右包中,且兩邊相稱或相同的結構,通常先寫中間,再寫左右。」

    54,54,395,72,162

    36,4,395,1,49,62,45

    41,1,21,395,72,185,185,105,250

    54,54,185,185,105,291

    54,54,185,185,105,218

    54,54,185,185,106

    442,250,250,84

    276,394,305

    36,4,395,1,49

    36,4,395,1,48,97

    121,36,4,395,1,49

    41,1,119,395,1,49

    54,54,395,72,432

    220,54,54,395,72,432

    36,4,395,1,48,442

    41,1,21,395,72,425,48,81

    輿 419,395,1,49

    185,36,4,395,1,48,97

    384,185,185,72,399,80,25,128

    353,185,185,257

    250,331,169,169,186

    331,65,73,55

    67,15,119,155,382,137

    277,67,15,119,155,382,137

    67,15,119,406,382,137

    67,15,119,434,382,137 (除順序,原「238『月』」修正為 382)

    ✅ 「凡以筆順基本原則-廴部筆形、筆順基本原則-辶部筆形為偏旁結體之字,通常筆順基本原則-廴部筆形、筆順基本原則-辶部筆形最後寫。」

    辶(253)廴(157)後寫:

    96,253

    154,253

    13,20,253

    42,8,253

    170,253

    65,75,253

    22,84,253

    232,253

    5,99,157

    ✅ 「卂」相關的字

    20,13,253 (第一筆在十20的豎畫, 調整為 20,13)

    277,20,13

    250,250,72,20,13

    ✅ 「鄉」相關的字部件由左而右

    167,6,413,166,339,209

    167,6,413,166,483

    204,167,6,413,166

    ✅ 沱跎陀 「它」的下方應該是 27

    277,139,27

    119,208,139,27

    166,139,27

    208,24,19 「此」右為 24, 「些」應相同

    ✅ 統一「可」的組合全部改用「32,119」,以下修正:

    119,32,119

    100,32,119

    ✅ 其它

    70,425,106,166

    3,205,95

    252,45,382

    338,252,45,382

    119,208,252,45,382

    252,47,382,438,251

    277,121,230,230,1,119,141,99,88,305 (修正第二碼為山121)

    220,47,47,99

    70,3

    81,6,257

    45,1,119,119,47,47

    391,45,1,119,119,47,47

    46,45,1,119,119,47,47

    47,1,119,119,47,47,82

    220,45,1,119,119,47,47

    47,1,119,119,47,47,221

    185,45,1,119,119,47,47

    195,45,1,119,119,47,47

    382,45,1,119,119,47,47

    166,45,1,119,119,47,47

    489,45,1,119,119,47,47

    38,120,399,45,1,119,119,47,47

    277,47,1,119,119,47,47,221

    470,47,47,99

    17,278,80

    277,17,278,80

    204,17,278,80

    417,369,131

    46,3,221,63,301,251

    248,1,114,208

    314,49,123,49

    220,423,70 (這個字的柬和其它的順序不同, 修正為423,70)

    277,295,1,250 (火改用 250 末筆才是長頓點)

    28,42,106,58,85,425 又應該要用長頓點第二畫的 85,而不是 84。

    22,209,382,193,483 一字不二捺, 犬改用 193 的。

    ✅ 部件與寫法有異者

    372, 273,83  原第2部件為 213 應該是錯的, 應為273「毌」ㄍㄨㄢˋ (4畫),但寫法不同「豎,橫折,豎,橫,橫」(5畫)。參「異體字字典-虜」。

    竊的右下其實為「禸」,只是寫法有異,最後一個部件像 厶88 (2畫),但寫法應為3畫「豎,挑,點」。參「異體字字典-竊」。

    「臧藏臟贓」應修正以戈優先,然後 266 爿 的筆順需調整為豎撇,豎橫折,橫,豎撇。

    ▋ 相關連結


    2025年9月23日 星期二

    你變我也變:解析雲端硬碟圖片縮圖網址更新

    2025年9月23日 星期二

    有人反應無法用「以雲端硬碟資料夾的圖片製作注音高手」影片中的方法出題;研究了半天,終於抓到問題點,看起來是 Google Drive 共用資料夾頁面的內容有異動,導致用來找出圖片縮圖網址的程序失效了。這麼一來,就影響了以下幾篇中的小工具:

    哈!有問題才有好玩的。「你變我也變」,只要找到關鍵的片段,去掉工程師故意加入的「雜質」,再加上看似被遺漏的符號,就能以 JSON.parse 將變數還原,最後擷取要的欄位,問題就可以解決了。簡單記錄幾個關鍵:

    • 有用的資訊: data-p
    • 雜質: %.@.
    • 需還原: "
    • 最前面少了一個 [

    當初花了不少時間研究還是有差,現在愈來愈會拆彈了。

    總之,壞掉的地方修好了,如果是使用試算表的,只要重新建立範例試算表的副本,就又能開心使用了。


    2025年9月20日 星期六

    Life:百香果醃蘿蔔

    2025年9月20日 星期六

    前幾天買了條白蘿蔔煮排骨湯,看到家裡的百香果,就留了一點中段的,試做百香果醃蘿蔔,第一次做,但想馬上嘗鮮,沒放過夜就吃光光了,想當然爾,一定不夠入味,所以昨天買菜又買了一條專做醃蘿蔔的。

    簡單的流程記錄一下:

    • 蘿蔔削皮洗淨後切薄片。
    • 加入鹽巴拌勻後靜置15分鐘脫水殺青。
    • 擠水後再用白開水沖洗一次。
    • 加入少許的冰糖及百香果汁。
    • 冰箱靜置一晚。

    哈!看起來怎麼那麼白~~但是有百香果就給讚!冰冰涼涼又香氣撲鼻,中午吃鍋貼,這百香果醃蘿蔔解膩又爽口,真是絕配。


     
    雄::gsyan © 2009. Design by Pocket