tag:blogger.com,1999:blog-7574584464843532632024-03-19T08:04:27.202+08:00雄::gsyanHTML5 FUN 站長 顏國雄 之生活、教學、電腦、啦哩啦雜...Unknownnoreply@blogger.comBlogger1297125tag:blogger.com,1999:blog-757458446484353263.post-50163714329990501312024-03-18T14:50:00.002+08:002024-03-18T18:19:53.604+08:00Python: googletrans 與 bilingual_book_maker<p>2023年3月應朋友的要求,將開源的專案「bilingual_book_maker」可以在 Colab 中使用(參見:<a href="https://gsyan888.blogspot.com/2023/03/openai-chatgpt-bilingual-book-maker.html" target="_blank">雄:OpenAI : ChatGPT 應用 : 製作雙語電子書</a>),利用它可以把 EPUB 格式的電子書變成「雙語」的內容。前一陣子陸續有人反應有問題,不過,因為我根本沒在使用,加上有時問題會在一陣子後又消息了,所以沒有積極地去查原因。前天換有在使用的朋友跟我說了,哈!開始認真地找解方。</p><div style="text-align: left;">底下記錄一下排除問題的關鍵。</div><h3 style="text-align: left;">httpx 版本的問題</h3><p><a href="https://github.com/ssut/py-googletrans" target="_blank">googletrans</a> 已經滿久沒更新了,而 openai 持續地在更新,但是兩者都有用到 httpx,一個要舊版的,一個要新版的,因此安裝完 googletrans 以後,出現了「dependency conflicts」的錯誤訊息:</p><p></p><blockquote> Building wheel for googletrans (setup.py) ... done<br />ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.<br />openai 1.14.1 requires httpx<1,>=0.23.0, but you have httpx 0.13.3 which is incompatible.</blockquote><p></p><p>httpx 版本的衝突,由訊息看來,因為 googletrans 是後安裝的,所以最後 httpx 用的版本是 0.13.3 ,而不是 openai 要的版本( >=0.23.0 )。這也導致開始翻譯時,出現了這些訊息:</p><p></p><blockquote>Traceback (most recent call last):<br /> File "/usr/local/bin/bbook_maker", line 5, in <module><br /> from book_maker.cli import main<br /> File "/usr/local/lib/python3.10/dist-packages/book_maker/cli.py", line 7, in <module><br /> from book_maker.translator import MODEL_DICT<br /> File "/usr/local/lib/python3.10/dist-packages/book_maker/translator/__init__.py", line 2, in <module><br /> from book_maker.translator.chatgptapi_translator import ChatGPTAPI<br /> File "/usr/local/lib/python3.10/dist-packages/book_maker/translator/chatgptapi_translator.py", line 7, in <module><br /> from openai import AzureOpenAI, OpenAI, RateLimitError<br /> File "/usr/local/lib/python3.10/dist-packages/openai/__init__.py", line 8, in <module><br /> from . import types<br /> File "/usr/local/lib/python3.10/dist-packages/openai/types/__init__.py", line 5, in <module><br /> from .image import Image as Image<br /> File "/usr/local/lib/python3.10/dist-packages/openai/types/image.py", line 5, in <module><br /> from .._models import BaseModel<br /> File "/usr/local/lib/python3.10/dist-packages/openai/_models.py", line 23, in <module><br /> from ._types import (<br /> File "/usr/local/lib/python3.10/dist-packages/openai/_types.py", line 23, in <module><br /> from httpx import URL, Proxy, Timeout, Response, BaseTransport, AsyncBaseTransport<br />ImportError: cannot import name 'BaseTransport' from 'httpx' (/usr/local/lib/python3.10/dist-packages/httpx/__init__.py)</blockquote><p></p><p>openai 比較重要,試著以它為主,讓 googletrans 使用較新版本的 httpx 看看,也就是安裝 googletrans 時,不要檢查 dependency,將原本的安裝指令:</p><blockquote><p>!pip -q install googletrans==4.0.0-rc1</p></blockquote><p>多加「--no-dependencies」改為:</p><blockquote><p>!pip -q install --no-dependencies googletrans==4.0.0-rc1</p></blockquote><h3 style="text-align: left;">httpcore 的問題</h3><p>前面雖然解決了 googletrans 安裝時的問題,執行時,換 httpcore 有問題,出現了這樣的錯誤訊息:</p><blockquote><p>AttributeError: module 'httpcore' has no attribute 'SyncHTTPTransport'</p></blockquote><p>查了一下,可以在使用 googletrans 前,先執行:</p><p></p><blockquote>import httpcore<br />setattr(httpcore, 'SyncHTTPTransport', 'AsyncHTTPProxy')</blockquote><p></p><p>利用這兩行來 patch,只要比 googletrans 先執行,就不會出現 AtributeError。</p><h3 style="text-align: left;">httpx[http2]</h3><p>本以為可以順利執行 google 翻譯了吧!結果又出現這樣的訊息:</p><p>Using http2=True, but the 'h2' package is not installed. Make sure to install httpx using `pip <br />install httpx[http2]`.</p><p>不過,這看起來比較好解決,就照提示,安裝 httpx[https] 就好,所以在安裝 googletrans 之前,先執行:</p><blockquote><p>!pip -q install httpx[http2]</p></blockquote><p>經過以上的修正,終於可以讓 googletrans 順利地和 bilingual_book_maker 搭配,以 google 翻譯來進行翻譯。</p><p>不過,為了讓使用更有彈性來選擇是否以 googletrans 幫 bilingual_book_maker 執行 google 翻譯的功能,我加上了「install_googletrans」的設定參數,如果勾選了,就使用 googletrans ,否則使用 bilingual_book_maker 專案內建的功能。這樣子,必要的時候,可以選擇關閉我亂改的部份,直接執行 bilingual_book_maker,也方便除錯。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPmeprkPOQ3eOjU4sSWVUI-aEd0aItgoFwap-ZPdl7QzTOSY7vdUkzNiMeWZuKPa5Uhf9zohrowoVb9EOq_fMJt-x55TSAP_AbFucd9nb_juuJu9rcYLxLWbX-owyvGQA30HhipghebNEXskjeTKcEKnV2lCAImWbIuEyxFi7uEeqDWfeOhwGJ364aLs/s1366/googletrans-bilingual-book-maker.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1366" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPmeprkPOQ3eOjU4sSWVUI-aEd0aItgoFwap-ZPdl7QzTOSY7vdUkzNiMeWZuKPa5Uhf9zohrowoVb9EOq_fMJt-x55TSAP_AbFucd9nb_juuJu9rcYLxLWbX-owyvGQA30HhipghebNEXskjeTKcEKnV2lCAImWbIuEyxFi7uEeqDWfeOhwGJ364aLs/s320/googletrans-bilingual-book-maker.png" width="320" /></a></div><p>這個雖然是自己沒在使用的工具,累積了除錯及解決問題的能力,時間沒有白花,收穫還挺多的,相信它是一個善的循環。</p><h3 style="text-align: left;">相關文章</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/03/openai-chatgpt-bilingual-book-maker.html" target="_blank">雄:OpenAI : ChatGPT 應用 : 製作雙語電子書</a></li></ul><p></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-1989188079275296882024-03-03T22:35:00.000+08:002024-03-03T22:35:23.408+08:003DP : Delta 校正尺寸大小<p>第二部 3D printer 是 Delta 型的,當初滑塊、效應器都是自己用 PLA 印的,PLA 的缺點就是久了會脆化,所以都忘記已經重印過幾次了。年前在檢修、測試時,效應器又部份零件斷了,加上熱敏電阻 NTC 也斷了,索性一次下單,通通換成金屬件。</p><p>這幾次很認真的調校,重新復習靭體的各參數,忘了什麼時候改用 Marlin 1.1.9.1 的,暫時不換版本。Marlin 有支援 M665 可以讓我們先以 G-code 來邊改邊測試,調校時,可以用:</p><blockquote><p>M665 H289.9</p></blockquote><p>H289.9 將 Z 的最大高度設為 289.9 mm。</p><p>可以用:</p><blockquote><p>M665 L217</p></blockquote><p>L217 將懸臂的長度設為 217mm。</p><p>這部機器三軸及調度調校完以後,列印完 20x20x20 的測試方塊後, Z 的調度沒問題,但是 X / Y 的尺寸卻是略小,只有 19.84mm:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTL16VnWmWTD5cU_RdFKbvjXUoqnGorYN98MzzWeAGG2YbB-hGjQr4BTwh3x6symRWtI-HG6mWrwR1nYgcmSV-rcopXZr9fTFYdc9sy8qTh48iPenOfx76Xmvf-dc89CQaUYI-LsY3ARnFS55DLibQwuLExJx0HxSbi2-_pu0CUOLw2k9JIYopleD795s/s1024/3dp-delta-calibration.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTL16VnWmWTD5cU_RdFKbvjXUoqnGorYN98MzzWeAGG2YbB-hGjQr4BTwh3x6symRWtI-HG6mWrwR1nYgcmSV-rcopXZr9fTFYdc9sy8qTh48iPenOfx76Xmvf-dc89CQaUYI-LsY3ARnFS55DLibQwuLExJx0HxSbi2-_pu0CUOLw2k9JIYopleD795s/s320/3dp-delta-calibration.jpg" width="320" /></a></div><br /><p>Marlin 中,跟 X / Y 尺寸大小相關的參數是 DELTA_DIAGONAL_ROD,我目前 Configuration.h 中的的設定是:</p><blockquote><p>#define DELTA_DIAGONAL_ROD 217</p></blockquote><p>要將 217 調整為多少呢?應該是 20mm 的大小,卻印出 19.84mm ,所以依比例計算一下:</p><blockquote><p>217 * 19.84 / 217 = 215.264</p></blockquote><p>可以先用 G-code 來暫時改一下 DELTA_DIAGONAL_ROD,下這樣的指令:</p><blockquote><p>M665 L215.264</p></blockquote><p>重新再印一次 20x20x20 的方塊,確定尺寸正確了,再修改 Marlin 的參數:</p><blockquote><p>#define DELTA_DIAGONAL_ROD 215.264</p></blockquote><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrTGDfelGnfbxXm5mMwaUABulC6rCysJ4ULXCpbJXNC_Hpn6w1aSkXaNmWHqILEtOBfHOdpHTSWFiIhP5bvPPvL9YkCRoIl1YSVh-FhV38BlTgNx2TtfOnoDmoy1qvAlZ5YoMHX2lTQMPOpH5k21m0ODcGGSpdxnyP-oHxBtPXa2XrVRA-D1Ze_M4baU/s1024/3dp-delta-calibration-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrTGDfelGnfbxXm5mMwaUABulC6rCysJ4ULXCpbJXNC_Hpn6w1aSkXaNmWHqILEtOBfHOdpHTSWFiIhP5bvPPvL9YkCRoIl1YSVh-FhV38BlTgNx2TtfOnoDmoy1qvAlZ5YoMHX2lTQMPOpH5k21m0ODcGGSpdxnyP-oHxBtPXa2XrVRA-D1Ze_M4baU/s320/3dp-delta-calibration-2.jpg" width="320" /></a></div><p>久沒摸了,不少東西忘了,不過,稍加複習一下,好像又喚醒了沉睡的能力。比較頭痛的是線材吸了不少水份,還沒進到料管就斷了,要來試試看有什麼方法救。</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-25965328990095900902024-02-29T16:47:00.000+08:002024-02-29T16:47:03.139+08:00Biking : 春崎產業道路<p>天氣狀況 : 陰</p>TRIP DIST : 7.03<br />TRIP TIME : 0:33:52<br />AVG. SPEED : 12.4<br />MAX. SPEED : 42.4<br /><p>今年居然在櫻花開得最茂盛時,忘了騰龍御櫻。雖然花不多了,還是要補一下功課,騎一趟春崎產業道路。不過,看來今天我的體力不行,自行車的碼錶也不給力,只記錄到一半的行程。</p><p>在東山高中上來的叉路口喝水,遠遠就看得到騰龍御櫻的櫻花。兩位女士正在路口猶豫要如何回到汽車停放的杏花林。她們由樟湖步道走下來的,要再由老泉街45巷走上杏花林,有一點距離,幸好下午太陽不見了,不然一定曬到哀哀叫。</p><p>氣喘噓噓地過了春崎的第一個大彎道,不到菜園前的第二個大彎就累到下車「高尚」一下了。幸好走一小段後,又能繼續踩踏,菜園後的第三個大彎,節奏對了,踩起來就輕鬆許多。</p><p>過了菜園沒多遠的這個路口:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibFdF7XtFn3ijBEOixJwaUVd7DYMac87xE3U9gxNqEpMIa2cmw8tug3iIQnaExBl2oTxFp5N-6JgME2mNxHDEmzyRORZnEzFMYcGFy2epPiQA12NdkuinFUxqdrBhz99u2Iw1DGSKdcInNYUl2z89fmA3Ufcb0oSY2R-BVcbBM1DbU8sllLUiHLNWxIGY/s1024/20240229_153258.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibFdF7XtFn3ijBEOixJwaUVd7DYMac87xE3U9gxNqEpMIa2cmw8tug3iIQnaExBl2oTxFp5N-6JgME2mNxHDEmzyRORZnEzFMYcGFy2epPiQA12NdkuinFUxqdrBhz99u2Iw1DGSKdcInNYUl2z89fmA3Ufcb0oSY2R-BVcbBM1DbU8sllLUiHLNWxIGY/s320/20240229_153258.jpg" width="320" /></a></div><p>電線桿補一張特寫:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3i3gPqog-1x2kkf5hetku44L7WD1XrOw0hpDa_H9FLeG7dl9wZRh7O5XGpd80S2GBqQyBMuQVPtYCzRW67NWa7HDgb6KeONuCyNkNYnk-hbds2N6Bdn0W1OYnPoJJe7_ZJHid_G692Hwj0YiKd2QBLovDHBHsD9bG4Uu9ZWyWwKUZ-ZBAH1yDiB3lTBw/s1024/20240229_153216.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3i3gPqog-1x2kkf5hetku44L7WD1XrOw0hpDa_H9FLeG7dl9wZRh7O5XGpd80S2GBqQyBMuQVPtYCzRW67NWa7HDgb6KeONuCyNkNYnk-hbds2N6Bdn0W1OYnPoJJe7_ZJHid_G692Hwj0YiKd2QBLovDHBHsD9bG4Uu9ZWyWwKUZ-ZBAH1yDiB3lTBw/s320/20240229_153216.jpg" width="320" /></a></div><p>好奇心驅使下,就將車牽向小路去了。看到了櫻花,也看到了小木屋,那是以前去騰龍御櫻賞花時,走到最低處可見的小木屋。原來石階小路走三小段就進到騰龍御櫻了。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVS9HfjYZ4N4IvcADIMMacia7u7QHfRKLMFmwfsoPkN5LSyihCvckBiVXCTZ_xwYJsRJHW8d1wOFh3WKd__4WHYY-CzaLjo-Z6ozF19X84Aj2FAjaVvP-6mwTyI5njbSn8RWLjoPo4sCa9CEMX52bzn7uJYO5qXkAOjc5upD_hx9X1LR1zZi7lH-vidJ8/s1024/20240229_150948.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVS9HfjYZ4N4IvcADIMMacia7u7QHfRKLMFmwfsoPkN5LSyihCvckBiVXCTZ_xwYJsRJHW8d1wOFh3WKd__4WHYY-CzaLjo-Z6ozF19X84Aj2FAjaVvP-6mwTyI5njbSn8RWLjoPo4sCa9CEMX52bzn7uJYO5qXkAOjc5upD_hx9X1LR1zZi7lH-vidJ8/s320/20240229_150948.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxKkBv6Q00YgcecJrHJjo47y-KXOLFm_3y_BishkyxbtzfY8_4nRw7wW-mSa4oCI8i-GewTu-R34hmGBrLkQxvdbCq9mcG14PUS20Kmn40b6NFtTrLTA9Yf03L9NhPkMOspVyhUHzHeByVihkYLCTDLI3abscvmJ0xSzQIKwyCF-hyqEGu-nUO6eioEFs/s1024/20240229_151258.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxKkBv6Q00YgcecJrHJjo47y-KXOLFm_3y_BishkyxbtzfY8_4nRw7wW-mSa4oCI8i-GewTu-R34hmGBrLkQxvdbCq9mcG14PUS20Kmn40b6NFtTrLTA9Yf03L9NhPkMOspVyhUHzHeByVihkYLCTDLI3abscvmJ0xSzQIKwyCF-hyqEGu-nUO6eioEFs/s320/20240229_151258.jpg" width="320" /></a></div><br /><p>哈!這樣子少騎一個陡陡的大彎,直接就闖進櫻花林了。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN9x7fV0iS5ZYWJDCzR7XNcJhmxY1Mot2LJ-6rPQNy1HHeNnbWQ2NnL0iB_SqeBrM2_pkiioDEtQhxrt5fA-ub7fwgvJuO3vFjgtMu-OG-qgf0-sqlc_0YuX6cJrWn-foQKw7PH7_l2FAfKd9iDYiW5rJQCOJknpRw9C3m4xTF0Bd44jOhLwXTKAiHlyg/s1024/20240229_152133.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN9x7fV0iS5ZYWJDCzR7XNcJhmxY1Mot2LJ-6rPQNy1HHeNnbWQ2NnL0iB_SqeBrM2_pkiioDEtQhxrt5fA-ub7fwgvJuO3vFjgtMu-OG-qgf0-sqlc_0YuX6cJrWn-foQKw7PH7_l2FAfKd9iDYiW5rJQCOJknpRw9C3m4xTF0Bd44jOhLwXTKAiHlyg/s320/20240229_152133.jpg" width="320" /></a></div><p>在坡頂遇到一位年輕人騎 Gogoro 上來賞花,小聊了一下。他在家當奶爸,照顧一歲多的小孩,下午小孩的阿嬤幫忙照顧半天,他則「不勤快」地接單跑外送;只能說,選擇在家當奶爸,勇氣可嘉。</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-48495946182236129272024-02-21T18:45:00.000+08:002024-02-21T18:45:40.634+08:00Colab : 讓 OpenSCAD 可以輸出圖片<p> 在一般的電腦中,OpenSCAD 可以利用 -o xxx.png ,來輸出模型的預覽圖片,但是相同的指令在 Google Colab 中卻會出現類似這樣的錯誤訊息:</p><p></p><blockquote>Compiling design (CSG Products normalization)...<br />Normalized CSG tree has 102 elements<br />Unable to open a connection to the X server.<br />DISPLAY=<br />Can't create OpenGL OffscreenView. Code: -1.</blockquote><p></p><p>然後圖片並沒有輸出任何內容。</p><p>主要的原因是 OpenSCAD 輸出圖片時,需要有一個「顯示器」,但它在 Colab 這種遠端的虛擬機環境中並找不到,就出現錯誤訊息了。</p><p>沒關係,既然是虛擬機,那就安裝 Xvfb 和 pyvirtualdisplay,來一個虛擬的顯示器吧!</p><p>在安裝完 OpenSCAD 後,順便加上這樣的指令,來安裝 Xvfb 和 pyvirtualdisplay:</p><p></p><blockquote>if not os.path.exists('/usr/bin/Xvfb') :<br /> print('安裝 xvfb ...')<br /> !apt-get -qq install xvfb 2>/dev/null >/dev/null<br />try: from pyvirtualdisplay import Display<br />except:<br /> print('安裝 pyvirtualdisplay ...')<br /> !pip -q install pyvirtualdisplay</blockquote><p></p><p>要啟用虛擬顯示器就加上這兩行:</p><p></p><blockquote><p>from pyvirtualdisplay import Display<br />Display().start()</p><div></div></blockquote><p style="text-align: left;">有了 Xvfb + pyvirtualdisplay 助攻,就可以在 Colab 中,順利地讓 OpenSCAD 輸出圖片了。</p><h3 style="text-align: left;">相關文章</h3><div><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2024/02/openscad-preview-viewport.html" target="_blank">雄:OpenSCAD : 輸出 PNG 圖片快速預覽</a></li></ul></div><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-68804877101880494892024-02-21T08:55:00.006+08:002024-02-21T20:52:39.566+08:00OpenSCAD : 輸出 PNG 圖片快速預覽<p> 最近試著將 OpenSCAD 產生 3D 模型檔案的程序在 Google Colab 中完成,所以得研究一下如何在命令列中下指令。OpenSCAD 可以使用的的參數在官網中有說明文件:</p><p></p><ul style="text-align: left;"><li><a href="https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_OpenSCAD_in_a_command_line_environment" target="_blank">OpenSCAD User Manual/Using OpenSCAD in a command line environment</a></li></ul><p></p><p>OpenSCAD 在輸出檔案時,除了輸出成 3D 模型,也可以輸出 PNG 圖檔;輸出成 PNG 圖有什麼作用?輸出圖片所需花費的時間很少,可以讓我們快速的預覽模型長什麼樣,確定沒問題了,再開始製作 3D 模型。而且我們可以利用「--camera」的參數,自訂要從哪一個視角來看模型。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0pIuqQ2rwmo_r92In94pucpgQ3U4qndVQIhMqlJn5fUw6HVejIEDET9jsXt1qkABPAm03MY5bRkB8O5Va0zWB9SpFeDtHkMm1drTPchwAZUkvr0E31ZDoTJ-FfXy1IaI1U3SmI0TBHije3iQHKCyq77bH8mwTEHdIYlzrynPCgi9XAFYUSjoTZNfaDrE/s1366/openscad-preview-viewport-1.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1366" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0pIuqQ2rwmo_r92In94pucpgQ3U4qndVQIhMqlJn5fUw6HVejIEDET9jsXt1qkABPAm03MY5bRkB8O5Va0zWB9SpFeDtHkMm1drTPchwAZUkvr0E31ZDoTJ-FfXy1IaI1U3SmI0TBHije3iQHKCyq77bH8mwTEHdIYlzrynPCgi9XAFYUSjoTZNfaDrE/s320/openscad-preview-viewport-1.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 由圖形界面取得 viewport 的數值</td></tr></tbody></table><br /><p>「--camera」參數是由七個數字所組成的,七數字包括:</p><p></p><ul style="text-align: left;"><li>translate 三個,分別是 x, y, z 的位移大小。</li><li>rotate 三個,分別是 x, y, z 的旋轉角度。</li><li>distance 一個,是由多遠來觀察模型。</li></ul><p></p><p>每一個數字間用逗號分隔即可。如果不知道數字要用多少,可以先在圖形模式中調整,然後如 [圖1] ,觀察視窗左下角的數字後記下來。</p><p>假設我的 OpenSCAD 的程式檔名為 lenticular-card-new.scad,然後想輸出的第一張預覽圖片檔名為 test-1.png,用這樣的指令:</p><blockquote><p>openscad -o test-1.png --camera=0,0,0,60,0,75,140 lenticular-card-new.scad</p></blockquote><p>注意「--camera=0,0,0,60,0,75,140」,拆解一下:</p><p></p><ul style="text-align: left;"><li>translate : 0,0,0</li><li>rotate: 60,0,75</li><li>distance: 140</li></ul><p></p><p>模型放正中央,然後 X 為中心,旋轉 60 度;Z 軸為中心,旋轉 75 度的結果:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij5d0j6F86r6YSI15OTPlvIsFHI5wle9UnAgdwnoJ0MOG1LpZFN0a5BZbOZycbYVW4ITTb3qNlQzobBoqD8aniPXyvasymzZVfd4pXoG77otWIfDT0D10IE3t8m25rtEXo4DvsVYs5hBuRZldw0LOr7QgORnsm-dnXYJRAwbnv1-DbyLHGhU6YscGqgt4/s512/openscad-preview-viewport-2.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij5d0j6F86r6YSI15OTPlvIsFHI5wle9UnAgdwnoJ0MOG1LpZFN0a5BZbOZycbYVW4ITTb3qNlQzobBoqD8aniPXyvasymzZVfd4pXoG77otWIfDT0D10IE3t8m25rtEXo4DvsVYs5hBuRZldw0LOr7QgORnsm-dnXYJRAwbnv1-DbyLHGhU6YscGqgt4/s320/openscad-preview-viewport-2.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] --camera=0,0,0,60,0,75,140</td></tr></tbody></table><p>想看另一面,就執行以下指令:</p><blockquote><p>openscad -o test-2.png --camera=0,0,0,60,0,270,140 lenticular-card-new.scad</p></blockquote><p>模型放正中央,然後 X 為中心,旋轉 60 度;Z 軸為中心,旋轉 270 度的結果:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3mCt1plsghk9UenQGkiHGDpZ8hZ1d9OYhWuPbueumZJPnO-UTo7For1WG3MdgWj7C9UN_k8tQVQUrZhEPoICGED9BJeYfrq9l7SBLJ5DDanFGH3pSIt44pACJzOpdSyHPWBfcYoFnggDlh4sYgYO0QpzwbdLzyNfvNSrfamjcyGR-ghfr1gAbcfGZT1I/s512/openscad-preview-viewport-3.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3mCt1plsghk9UenQGkiHGDpZ8hZ1d9OYhWuPbueumZJPnO-UTo7For1WG3MdgWj7C9UN_k8tQVQUrZhEPoICGED9BJeYfrq9l7SBLJ5DDanFGH3pSIt44pACJzOpdSyHPWBfcYoFnggDlh4sYgYO0QpzwbdLzyNfvNSrfamjcyGR-ghfr1gAbcfGZT1I/s320/openscad-preview-viewport-3.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖3] --camera=0,0,0,60,0,270,140</td></tr></tbody></table><p>Google Colab 中可以直接顯示圖片,而 OpenSCAD 有輸出為 PNG 圖片的功能,這樣子可以在調整完模型的參數後,快速預覽可能結果,再進一步將參數最佳,確認沒問題後再製作模型,應該可減少一些無謂的等待。</p><h3 style="text-align: left;">相關文章</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2024/02/colab-xvfb-pyvirtualdisplay.html" target="_blank">雄:Colab : 讓 OpenSCAD 可以輸出圖片</a></li></ul><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-54838650408349478312024-02-09T17:26:00.000+08:002024-02-09T17:26:23.546+08:00Life : 2024 門迎百福::戶納千祥<p>中午在門口將去年的春聯「拿下」時,聽到樓上也在撕春聯,啪啪啪~處理滿久的樣子。哈!這幾年我都是將春聯貼磁鐵條上,就直接吸在鐵門上,不但貼的時候好調整,取下時更簡單。</p><p>今年決定換一下內容,想想,幹嘛那麼在意別人的眼光,認真寫就對了;再說,這幾個月,我也花了不少時間磨了一下,雖比不上高手,自己看了開心就好。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_zKWnkj-lxvuJTOcFCRH6b3B6Sch_nIiqi3unmFIIcl_wUN_ACuNHdI50K4vChNN46BYpQ7twhyZs7hGs3WuvSdRMYwJLxII73yYikEXIgzxHBnSvfHKvEkcYTv5io4UutVPPY7iE40Jv2mDRlB3V9qcmCGfY_LU_CFlUai8eLz5FEQ4czJwf1Xd4Lp8/s1024/spring-couplets-20240209_165415.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_zKWnkj-lxvuJTOcFCRH6b3B6Sch_nIiqi3unmFIIcl_wUN_ACuNHdI50K4vChNN46BYpQ7twhyZs7hGs3WuvSdRMYwJLxII73yYikEXIgzxHBnSvfHKvEkcYTv5io4UutVPPY7iE40Jv2mDRlB3V9qcmCGfY_LU_CFlUai8eLz5FEQ4czJwf1Xd4Lp8/s320/spring-couplets-20240209_165415.jpg" width="320" /></a></div><br /><p>小孩則負責摺紙生肖的部份,這一回沒有提供樣本,讓她用去年拆下的兔子喚起記憶後,再行改裝,反正作者說是龍,它就是龍。</p><p>新年快樂!祝福看到此文的人,都能平安健康,財源滾滾來。 ^_^</p><h3 style="text-align: left;">相關文章</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/01/2023-spring-couplets.html" target="_blank">雄:Life : 2023 恭賀新禧::萬事如意</a></li></ul><p></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-73236861484386056942024-02-09T11:21:00.000+08:002024-02-09T11:21:12.016+08:003DP : 電源供應器故障大概是人家說的「樂極生悲」,常常當我們正覺得對現狀很滿意時,總會殺出個意外,然後歡樂就瞬間結束。第一部 3D printer 是 2015年1月跟著別人的的教學,一步步組裝的,它命運乖舛,一開始就被懵懂的我弄得東修西補的 (<a href="3DP : 新手上路多坎坷" target="_blank">雄:3DP : 新手上路多坎坷</a>)。大概兩年前, X 軸動作不正常,才發現步進馬達的端子融掉了(<a href="https://gsyan888.blogspot.com/2022/02/3dp-stepper-motor-wire-terminals-melt.html" target="_blank">雄:3DP : 步進馬達杜邦端子融化</a>),後來將端子重做,換了另一片控制板,又印了不少東西,那一陣子其實也是這部 3D printer 運作最好的時候。之後先是發現 LCD 無法在不插 USB 時時看到畫面,最後是連動也動不了了,就這樣停機兩年左右。最近因為要測試,家裡三部 3D printer 一部部搬出來維修,其中 Delta 型的 3D printer 溫度感測器斷了,為了買很便宜的熱敏電阻,就順便加買了鋁件,及第一部 3D printer 的控制板(這是第三片了)。領貨時付了一千七百多元,結果主角熱敏電阻居然被店家給漏放了。<p style="text-align: left;">終於輪到維修第一部 3D printer 了,先拍張照,不然怎麼配置早忘得差不多了:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwULbOSfG9Mqo6_InkMjKTR60DB7vzirZtcokDeRHVVh-ENaMxEy7BzmojZcjfY1tMNAAfuaph3ngIIXW6g4WduunMfXFKX49901dyyYOyESEJdkfZefJh0TSORaLHYW05fOtvTSxLGGjqeiX6EWacEgDYUFjkv2fmD_Foa5CIR0U3yGC5hTQNIt_1XZk/s1024/3dp-psu-broken-20240203_113240.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwULbOSfG9Mqo6_InkMjKTR60DB7vzirZtcokDeRHVVh-ENaMxEy7BzmojZcjfY1tMNAAfuaph3ngIIXW6g4WduunMfXFKX49901dyyYOyESEJdkfZefJh0TSORaLHYW05fOtvTSxLGGjqeiX6EWacEgDYUFjkv2fmD_Foa5CIR0U3yGC5hTQNIt_1XZk/s320/3dp-psu-broken-20240203_113240.jpg" width="320" /></a></div><p style="text-align: left;">這片 RAMPS 和另一片都不能讓機器動起來,不插 USB 時,看起來 Arduino 有電,但是 LCD 沒畫面,插上 USB ,電腦送指令,但不會動作。換上新買的 RAMPS 1.6 的控制板呢?該正常運作了吧!</p><p style="text-align: left;">想得美!這麼順利的話,這一篇就不用記錄了。</p><p>解決不了問題,只好開始一步步除錯了,在一堆線裡找問題點不容易,換上新的控制板接的線那麼少,還是沒動作,於是往 firmware 的方向去試了(其實也不合理,以前明明都好好的)。試了大半天,耳朵突然聽到沙沙沙,像有人在噴水的聲音,找了一下,應該機器上的電源供應器發出來的。什麼都試了,就是沒有懷疑過電源供應器。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ2l0XbhJ35tQ0j1h0raP0ILlNEje59Dz7ldSDY_PD7lQrJGeQ4j9y8USlweTF5VpZx1J2X2gfD6SLC9FIYvcjeiz-bnRH2C3c4b3HCBJ0XqIe30F273V9o2RaGrwx2sEf5rEuNY3VBSAz3-rq8TlVrJl-EAECUMRskjj7tflJtENLBfB1db7-mcxO28g/s1024/3dp-psu-broken-20240208_214646.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ2l0XbhJ35tQ0j1h0raP0ILlNEje59Dz7ldSDY_PD7lQrJGeQ4j9y8USlweTF5VpZx1J2X2gfD6SLC9FIYvcjeiz-bnRH2C3c4b3HCBJ0XqIe30F273V9o2RaGrwx2sEf5rEuNY3VBSAz3-rq8TlVrJl-EAECUMRskjj7tflJtENLBfB1db7-mcxO28g/s320/3dp-psu-broken-20240208_214646.jpg" width="320" /></a></div><p>換!將原來 Delta 3D printer 12V 6A 的變壓器先加兩根電線後接上去試。果然~果然是 PSU 的問題,三片 RAMPS 控制板都能讓 LCD 單機操作,都能讓馬達正常動作了。這下子變成 RAMPS 小富翁了!</p><p>後來順便將步進馬達的控制晶片一片片測試,找出一片 A4988 會讓馬達亂跑,趕緊將它做記號。看來還得再備幾片 A4988 才行了。</p><h3 style="text-align: left;">相關連結</h3><p></p><ul style="text-align: left;"><li><a href="3DP : 新手上路多坎坷" target="_blank">雄:3DP : 新手上路多坎坷</a></li><li><a href="https://gsyan888.blogspot.com/2022/02/3dp-stepper-motor-wire-terminals-melt.html" target="_blank">雄:3DP : 步進馬達杜邦端子融化</a></li></ul><div><br /></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-34784636099505158552024-02-02T23:26:00.017+08:002024-02-03T09:41:50.323+08:00Hiking : 太平山步道<p>去年底,同事打電話來約二月上太平山,哈!離開學校都第五年了,同事還記得約我,二話不說,馬上答應。原來還擔心自己的雙腳會不會山路走一走, ITBS 又犯,今天走完見晴懷古步道,跟需要上上下下的翠峰湖環山步道,居然安全無恙;看來,這兩週的刻意鍛鍊可能發揮了作用。</p><p>上一次到太平山是 2007年七月初跟另一批同事的三日遊,久到我只記得開同事的車,手煞車未全放開,一路聞到燒焦味的糗事。這一回換一批人,八個人都不開車,租小巴士,可以放輕鬆地看山看水就好。</p><p>運氣不錯,天氣並沒有如氣象預報的糟,上午11點多的太平山雖然不時有霧氣飄來,但也有藍天白雲。當然要抓緊這麼好的機會,走一下步道。由於約定的午餐是12點半,所以只能先選擇路程較短、所需花費時間較少的見晴懷古步道。</p><p>當大家都在排隊等著拍長滿青苔的鐵軌,我選擇一旁林間的這個景:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNOPjzUgZP0YhAFLNbhxmJBrddiHlnkDu5Q2GTwIw96AKw_9ZzSPM9W_rSMS2AqCOUN4yRCFTzHp4vrt638w_bLC_D6v99CpebF8m7sVMhwhJp-wJKTPYPQJ4VZD8PlAcvvD-c8tlzwVIrlxdU3Hc3fmV-Jf3obAXcopt7BNa95NYzswZoTAYVVLMg6Pw/s4032/20240202_110628.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNOPjzUgZP0YhAFLNbhxmJBrddiHlnkDu5Q2GTwIw96AKw_9ZzSPM9W_rSMS2AqCOUN4yRCFTzHp4vrt638w_bLC_D6v99CpebF8m7sVMhwhJp-wJKTPYPQJ4VZD8PlAcvvD-c8tlzwVIrlxdU3Hc3fmV-Jf3obAXcopt7BNa95NYzswZoTAYVVLMg6Pw/s320/20240202_110628.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSM3D7vSRJFv0li0Y8lFS9JXBGUPVKgf2FJ9T0J-KdnOfco840mb7zBwmVv0fTecMCyKjbSU5bdqH2CsDd5tec0BlFJb0Y6N5l_xiXhg_ZxSMl14HWifPUokydo1_WyjR9bmF5jaU5ov13phldEmp3rnkwYGWb9WJ2Q7J2wUJsgIfQUaMubXyQcM3vHX8/s4032/20240202_110643.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSM3D7vSRJFv0li0Y8lFS9JXBGUPVKgf2FJ9T0J-KdnOfco840mb7zBwmVv0fTecMCyKjbSU5bdqH2CsDd5tec0BlFJb0Y6N5l_xiXhg_ZxSMl14HWifPUokydo1_WyjR9bmF5jaU5ov13phldEmp3rnkwYGWb9WJ2Q7J2wUJsgIfQUaMubXyQcM3vHX8/s320/20240202_110643.jpg" width="320" /></a></div><p>雲霧飄進林間,陽光穿透進來,仙境般的景緻,真真實實的在眼前,居然沒有吸引到大家的目光。</p><p>拍完雖然很興奮地提醒同事快去搶拍,結果大家選擇繼續排隊拍經典的鐵軌。人生就是這樣,無論人、事、物,稍縱即逝,當你錯過了,就錯過了!煙消霧散時,難得一見的美景亦隨之消逝。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHCuAw0MDpJUhDzFty9ecjvrLijAn7w06prRl7_bSTpx2R0jYQ4cy_CD058Ly3toxBd25SaVw3rb3ElJ8HiOCiCxysBhWsEbU_t_XgFCc8z-JhzExMswrmrMicJQ_vasbpVchE-WU11LjXwoT1Mi6fcdLNhdwqrnryKgVxDCNHLhzJjTq00e-U0vXCFkE/s1024/20240202_111045.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHCuAw0MDpJUhDzFty9ecjvrLijAn7w06prRl7_bSTpx2R0jYQ4cy_CD058Ly3toxBd25SaVw3rb3ElJ8HiOCiCxysBhWsEbU_t_XgFCc8z-JhzExMswrmrMicJQ_vasbpVchE-WU11LjXwoT1Mi6fcdLNhdwqrnryKgVxDCNHLhzJjTq00e-U0vXCFkE/s320/20240202_111045.jpg" width="320" /></a></div><p>我喜歡大自然,見晴懷古步道雖短,卻值得細細品味;缺點就是太熱門,人太多,當你想駐足,腳步聲卻催促著,當你想聆聽,嘻鬧聲蓋過了一切。</p><p>在太平山莊用完午餐,由於蹦蹦車去程是「半點」發車,回程是「整點」發車,算一算時間應該不夠再去翠峰湖,所以大家決定捨蹦蹦車,去走步道。這樣也好,可以補上回未去的景點。</p><p>從太平山莊到翠峰湖有16公里,在山裡繞來繞去的,終於可以下車。感謝同事知道我容易暈車,讓我坐在副駕駛座,不然,肯定像走完見晴懷古步道的繩索橋後,暈頭轉向的。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4tAmbBKZlzOzic32Hs1kqu5ZNRRo_N0rTqDOWlNqfHm21ZI0_mUl7ALMdotDGjYhFJOgLQRcFQSWZHs1PB842sz2FN80SXlZRrOQg5MRs8wdHdzZqmbV74Pqyw1cGwPBS0CVSbOZevPXW-Dj87AsY-knG1jdtJqQF8p0joTX7z3TJb254XSHaeyPChyphenhyphenE/s2048/20240202_140007.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1537" data-original-width="2048" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4tAmbBKZlzOzic32Hs1kqu5ZNRRo_N0rTqDOWlNqfHm21ZI0_mUl7ALMdotDGjYhFJOgLQRcFQSWZHs1PB842sz2FN80SXlZRrOQg5MRs8wdHdzZqmbV74Pqyw1cGwPBS0CVSbOZevPXW-Dj87AsY-knG1jdtJqQF8p0joTX7z3TJb254XSHaeyPChyphenhyphenE/s320/20240202_140007.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOAPJhrFXneBipIfI_rt3J2Risral9r0amVN1sQkpXPLEniDUmAhgCgQP7VZsN8avZYJ3-3qPeX0U-nqsAqRpBQfFLzRY2dXQx-C-HYIMllvhnDWqO9ogm2hWJ89-wKzpLHY-LHmbr7gezL3SbN6Sr7gZTq2idmvYMvvbqninO3W_Cav4kCDwM2OoFnx8/s1024/20240202_141125.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOAPJhrFXneBipIfI_rt3J2Risral9r0amVN1sQkpXPLEniDUmAhgCgQP7VZsN8avZYJ3-3qPeX0U-nqsAqRpBQfFLzRY2dXQx-C-HYIMllvhnDWqO9ogm2hWJ89-wKzpLHY-LHmbr7gezL3SbN6Sr7gZTq2idmvYMvvbqninO3W_Cav4kCDwM2OoFnx8/s320/20240202_141125.jpg" width="320" /></a></div><p>沒有事先做功課,到了環山步道東口才知道翠峰湖環山步道是經過認證的全球首條「寧靜步道」(Quiet Trail)。不過,今天一路都沒聽到蟲嗚鳥叫,也完全沒有遇到其它遊客,哈!有夠寧靜的。大概正是因為少人有走,讓人有踏入原始森林的感覺,樹林和苔蘚類構成了各式各樣的綠色動物在一旁窺視著我們。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBmOmdpA00sKwLxz3eRyJERkRPH0hnpiCM1G62-UloKIQCEwG5WYwKyMlQ7YM5zEf6OKVqluRl6S2F9uBUBPii0y7JQWYs9YrtzJDCJtBIqg5-Yeb-TBRudBmc_vAJX_j9Ivwg0KlpactSu_PZw2hSoW3ej5FWetq4CecpDVwHvRC23qxkT4opNnpZdm4/s1024/20240202_144257.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBmOmdpA00sKwLxz3eRyJERkRPH0hnpiCM1G62-UloKIQCEwG5WYwKyMlQ7YM5zEf6OKVqluRl6S2F9uBUBPii0y7JQWYs9YrtzJDCJtBIqg5-Yeb-TBRudBmc_vAJX_j9Ivwg0KlpactSu_PZw2hSoW3ej5FWetq4CecpDVwHvRC23qxkT4opNnpZdm4/s320/20240202_144257.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbEtUBBGxSXDdrcttorl6Cd8rHUxFDnRNFZAsHSm9VK9s_C0RP0eOTlK1Gu2VMQ7bTfZKP9GIxOHU7Lz2bUfEZKXLJa5JbF9noGArPFXDEGVIE5JTSGf3yAHgZSmUb3iuJhlUVxpgbG5dIISWUWMf-xxoZars59aU69j95p2wLQjBPOO6C3O_74VDGkU/s1024/20240202_151743.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbEtUBBGxSXDdrcttorl6Cd8rHUxFDnRNFZAsHSm9VK9s_C0RP0eOTlK1Gu2VMQ7bTfZKP9GIxOHU7Lz2bUfEZKXLJa5JbF9noGArPFXDEGVIE5JTSGf3yAHgZSmUb3iuJhlUVxpgbG5dIISWUWMf-xxoZars59aU69j95p2wLQjBPOO6C3O_74VDGkU/s320/20240202_151743.jpg" width="320" /></a></div><p>步道有一點滿特別的,在木頭上釘了鋼筋止滑,讓人可以避免踩在布滿青苔的木頭、石頭,或是溼滑的泥土中,我是覺得這個設計有發揮作用,同事則覺得這樣更滑,所以寧可踩在土上。最後花了兩個小時十分鐘走完 3.95公里的步道,所有的人鞋子,我的最乾淨。鞋子髒了沒關係,環山步道的東口有廁所,也有洗鞋子的水糟,水槽邊還有各式的刷子,這設計真是貼心啊!辛苦的是今天的司機劉大哥,不介意大家的髒鞋,由步道西口載大家去上廁所兼刷鞋子。</p><p>能再度和老同事一起出遊是件樂事,更開心的是今天一雙腳都乖乖的,沒找麻煩,希望可以繼續保持下去。</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-75997732436459083982024-02-01T15:10:00.002+08:002024-02-01T20:28:47.858+08:00Biking : 恆光 - 樟樹步道<p> 天氣狀況 : 晴</p><p>TRIP DIST : 12.19<br />TRIP TIME : 1:02:04<br />AVG. SPEED : 11.7<br />MAX. SPEED : 43.0</p><p>前幾天和朋友聊到我的 ITBS ,如果太久沒去運動,會犯,所以我盡量每天去快走個四公里左右的河堤;但是上週居然連走政大環山路一個上坡,加一個下坡而已就犯。他問了一個問題:「這樣到底是要走,還是不要走?」。再更早之前,遇到水果行的店員在河堤跑步,聊到 ITBS,她則是說不要理它,痛~繼續走!哈!當時我心想,痛是我在痛耶!而且那種痛讓人一跛一跛的,根本也走不了多遠就痛到不敢了。</p><p>不過,仔細地思考了一下,現在不像以前經常在教室、辦公室......之間移動,少了每天爬樓梯的上上下下,的確會造成有些肌肉愈來愈少用,所以應該要再多增加一些戶外活動的時間,讓自己的肌肉訓練一下。像昨天早上騎車,下午又跟小孩去走政大環山路一整圈,雙腳都乖乖的,或許跟有刻意訓練上下坡有關。</p><p>今天原本設定的目標是上貓空,到草湳折返,結果因為要趕回家煮午餐給小孩吃,只到貓纜站,牽車走完樟樹步道後就下山。</p><p>在老泉路上路過一處大彎,幾棵伏倒的竹子,空氣中滿滿的竹葉香:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGFPiHWr6RC2tsE22LogGZCXAwMRh0O_ajqcy_02bdzd_H95PKoQGbj8y38uy-yfuPX2Vp63eXwuvbe5ZAUcC8g8xUcy6DgOvBCRxpH_8zTdMy3S8Y6kCqoU6IREAjs5Tv7DplFcKaQsJg6wPUX3ScjyYhNntF78Txv2Bwo0Ixylmb_6aqWnrCKv7Bu8A/s1024/biking-20240201_110703.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGFPiHWr6RC2tsE22LogGZCXAwMRh0O_ajqcy_02bdzd_H95PKoQGbj8y38uy-yfuPX2Vp63eXwuvbe5ZAUcC8g8xUcy6DgOvBCRxpH_8zTdMy3S8Y6kCqoU6IREAjs5Tv7DplFcKaQsJg6wPUX3ScjyYhNntF78Txv2Bwo0Ixylmb_6aqWnrCKv7Bu8A/s320/biking-20240201_110703.jpg" width="320" /></a></div><p>這味道讓我又想起母親跟阿嬤包的粽子了,人總是在失去後,才會愈加想念。</p><p>在準備轉入老泉路26巷的叉路口,先在東山高中的方向看到一隻老鷹滑向樹梢,看來牠的巢可能就在那裡。後來在另一個方向又看到兩隻在天上盤旋著:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Pp33IEwUDOOMxEdKLznqZWH0SQhN2iPSn3g0pkxSnn3bfCXs5obYeHmltCWorwF6HCi6QJl4cfihGvtwPPXfR-9KetHubBIkh057NEE3iw7-c09bfyTFKIv5PXNpeF8t-M7TdJ1UJ_UeA-iJimhA3SbVkvKlS-Ol5cVieR-sbaXRu061wSf9HxumKD0/s1024/biking-20240201_111634.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Pp33IEwUDOOMxEdKLznqZWH0SQhN2iPSn3g0pkxSnn3bfCXs5obYeHmltCWorwF6HCi6QJl4cfihGvtwPPXfR-9KetHubBIkh057NEE3iw7-c09bfyTFKIv5PXNpeF8t-M7TdJ1UJ_UeA-iJimhA3SbVkvKlS-Ol5cVieR-sbaXRu061wSf9HxumKD0/s320/biking-20240201_111634.jpg" width="320" /></a></div><p>一個騎著公路車的車友由前方而來,邊騎邊跟他攀談了一下,他整車都是碳纖維的,據說,光將兩個輪框換成碳纖維的,就少了一公斤。不過,這車可不便宜,車架就六萬元了。</p><p>路過杏花林,路邊的山櫻花開了,杏花則是枝條上空盪盪的。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiinf5_uXaARw2D-oUam6OSBgX7KzJ78vjzfL5bxfCHFnQcpBXfHV78WHXP2f0E3n7YTuXCAc-R0TS5BuOK82tHcph1WC8Dlzl1Bd-itWsR_MCkkGx9hVCRXwE3R47chnrN2zMFIbmaQRy_yDggfI-9ybTCW-Ja3sK6Yle-lSdIwljJejw0P-HZx9c1Cvw/s1024/biking-20240201_114553.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiinf5_uXaARw2D-oUam6OSBgX7KzJ78vjzfL5bxfCHFnQcpBXfHV78WHXP2f0E3n7YTuXCAc-R0TS5BuOK82tHcph1WC8Dlzl1Bd-itWsR_MCkkGx9hVCRXwE3R47chnrN2zMFIbmaQRy_yDggfI-9ybTCW-Ja3sK6Yle-lSdIwljJejw0P-HZx9c1Cvw/s320/biking-20240201_114553.jpg" width="320" /></a></div><p>樟樹步道的魯冰花看來剛開沒多久,過年應該會更精彩。不過來看花的遊客可能也是滿滿的,走起來就不輕鬆了。</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-32868252975221917032024-01-31T14:25:00.000+08:002024-01-31T14:25:04.031+08:00Biking : 河濱自行車道看花趣<p>天氣狀況 : 晴</p><p>TRIP DIST : 22.13<br />TRIP TIME : 1:04:51<br />AVG. SPEED : 20.4<br />MAX. SPEED : 32.8</p><p>前兩天走河堤,政大靠抽水站的櫻花也有幾棵開花了,跟小孩預測,這週天氣回溫,花兒多半會忍不住綻放;昨天看到某則報導說陽光公園的櫻花盛開了,鏡頭中拍到的是滿熱鬧、滿美的,於是今天的目標就是去驗證一下,鏡頭裡跟鏡頭外是否有落差。</p><p>週間騎車的好處就是一路人少、車少,藍天綠水的碧潭也是遊客不多。溪洲路河濱的櫻花部份開了:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbJXyzqbdsPHZkJUHeAwI1KoOJmBdE8FZ8nSUOZ7b8n5nBjpeSdgTWFE45bBTHPG2we1KvAEuLhcaDXZynskFPJqfG6bI4GogAkLajMdxfQDEvp1-FHzdPjxvikdHhZRYU1X66Kg17SyzavQh3y2sVZnN9-kzWNXjs7QtNrZrZ2Wu87AKCpf9JjTMKT38/s1024/20240131_111349.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbJXyzqbdsPHZkJUHeAwI1KoOJmBdE8FZ8nSUOZ7b8n5nBjpeSdgTWFE45bBTHPG2we1KvAEuLhcaDXZynskFPJqfG6bI4GogAkLajMdxfQDEvp1-FHzdPjxvikdHhZRYU1X66Kg17SyzavQh3y2sVZnN9-kzWNXjs7QtNrZrZ2Wu87AKCpf9JjTMKT38/s320/20240131_111349.jpg" width="320" /></a></div><p>陽光公園的花呢?其實主要是集中在停車場旁的步道。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWBpTrkWEINI-PuoazvvIoCDLNl_F32OYnXZaryq63sALqbfUO0VYq_3WtmHanlVqZ8ElasU0LdKaFKqaO5UYSMyyBWJEkf7i2YnlLu4k-MsU4YrfKRa0jKECoW9kC0IhtsovhWpqNjZuat_KWVZNumF2YBIAyhkviqyW2FGH4QcaKeKULgfj7w1RvqM/s1024/20240131_112542.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWBpTrkWEINI-PuoazvvIoCDLNl_F32OYnXZaryq63sALqbfUO0VYq_3WtmHanlVqZ8ElasU0LdKaFKqaO5UYSMyyBWJEkf7i2YnlLu4k-MsU4YrfKRa0jKECoW9kC0IhtsovhWpqNjZuat_KWVZNumF2YBIAyhkviqyW2FGH4QcaKeKULgfj7w1RvqM/s320/20240131_112542.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNW8HALH9MAdkmcK5Ot7_LK624vqCBZ9pcGhL4cWNf64lZ8DXfleHU0_BS0FU9zNa93gRPiXr-3Prkou4aYhcjJI-7tLkSc_DzUcSNxgImyHronP7ZN3NaGgEJjSAwPNvSPqg3BEMdvP-EoQo6Z5QUYIeajAosao83PDw5mMe5LeXauasw5y75n65A45g/s1024/20240131_112851.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNW8HALH9MAdkmcK5Ot7_LK624vqCBZ9pcGhL4cWNf64lZ8DXfleHU0_BS0FU9zNa93gRPiXr-3Prkou4aYhcjJI-7tLkSc_DzUcSNxgImyHronP7ZN3NaGgEJjSAwPNvSPqg3BEMdvP-EoQo6Z5QUYIeajAosao83PDw5mMe5LeXauasw5y75n65A45g/s320/20240131_112851.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7YyHBI7Iv_Rj1K4BC8q-QULeNloH7DhVR-Ovptqcd1rIlQ2RcZONYQmrp7xwPsG5uBWajP7NA4HG-E3YrFg9vAvOAuwK67uEiN0Crig1Se9LGXBmwRqwawVuO-8N_QMM6QWVxtI1MLXaiopL8YDBHbttV9AC2_qfhgwbkHq9ZuGstvSUSF6WkFgzvmWk/s1024/20240131_112953.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7YyHBI7Iv_Rj1K4BC8q-QULeNloH7DhVR-Ovptqcd1rIlQ2RcZONYQmrp7xwPsG5uBWajP7NA4HG-E3YrFg9vAvOAuwK67uEiN0Crig1Se9LGXBmwRqwawVuO-8N_QMM6QWVxtI1MLXaiopL8YDBHbttV9AC2_qfhgwbkHq9ZuGstvSUSF6WkFgzvmWk/s320/20240131_112953.jpg" width="320" /></a></div><p>幾棵櫻花開得比較多一些,近看就如上面的照片一樣,拉遠就稱不上壯觀了。百聞不如一見,很多事物還是得自己去看、去體驗才是真的。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTohD6ol3cPzdLWi08-Km4E7_f0yKAwIrWUcpViA-9YCtLT9zsT_CvhQcm_tHOaRZFXwuanwyaYBoNNDysHC1bDIeB-B5Pg3teWFr-rfL807v3TMPLXtaOTEgHPwIn3PBWYILUlUeobHtzbnq9-wxdB7alBQEzv-1hnKdNI1iLO5Bfr-Rfd8qM8hcUe_8/s1365/biking-map-2024-01-31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1365" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTohD6ol3cPzdLWi08-Km4E7_f0yKAwIrWUcpViA-9YCtLT9zsT_CvhQcm_tHOaRZFXwuanwyaYBoNNDysHC1bDIeB-B5Pg3teWFr-rfL807v3TMPLXtaOTEgHPwIn3PBWYILUlUeobHtzbnq9-wxdB7alBQEzv-1hnKdNI1iLO5Bfr-Rfd8qM8hcUe_8/s320/biking-map-2024-01-31.png" width="320" /></a></div><p>測試一下 Google Maps 的定位記錄,還是得手動對齊道路,及修正部份記錄點才行,或許是自己的手機 GPS 不準確的關係,下回再用 GPS 手錶的記錄來比較一下。</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-70076335950739153602024-01-30T22:06:00.002+08:002024-01-31T07:25:19.471+08:00Life : 薄麵餅<p>晚上搶救了一團據說想做麵包,但是發酵失敗,要被放生的麵團。本想試試將軟趴趴的麵團多加一些麵粉,將它桿成薄薄的,煎成蛋餅皮後放冰箱;但是試完一片後,並不好操作,要和更多麵粉,只好改試第二種方式。</p><p>第二次是在平底鍋先放少許油,將軟趴趴的麵團直接下鍋,等幾秒鐘再翻面後,再以鍋鏟反覆壓扁,因為有油的關係,既不沾鍋,也不黏鏟子,變成這樣:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZgzcA4VEOBLLi0PyGmCwTHH7VoGNz2CyOpFgNKI8mNxxBJaZSpQz2yJ8HnQxFInsD_LW9MuNLh9HUO8DyUGa8Hy7WfHnX1XMQnLXBZX2JxEsWJlWp_IYyjqQOJ2Za-JgPSoJ5nWSrt7yjH1QX5XnzqrRiXk5s74Ws_L0C4IDFm_7zRoj0cukEXbmYxE/s1024/flatbread-20240130_210022.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZgzcA4VEOBLLi0PyGmCwTHH7VoGNz2CyOpFgNKI8mNxxBJaZSpQz2yJ8HnQxFInsD_LW9MuNLh9HUO8DyUGa8Hy7WfHnX1XMQnLXBZX2JxEsWJlWp_IYyjqQOJ2Za-JgPSoJ5nWSrt7yjH1QX5XnzqrRiXk5s74Ws_L0C4IDFm_7zRoj0cukEXbmYxE/s320/flatbread-20240130_210022.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 底面沾油後翻面</td></tr></tbody></table><p>塑形幾次後,蓋上鍋蓋燜烤至稍有金黃色:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOeWEgD9AAuE74DKHZu3vOXUdwFJfKbC86lDsoQY7bgdJi6MRSbOInk_dtCeVMNpxQcVMtZfIkqGr6dQajA_16JRXLQYxelQeJZMUBTANFaMEQ3RPGrfN-NYnUq8T_IjN-tdl1Hk9M-ZsvDZI_akzjO2l-6oqBNXKJVvd1EYv4e3qw7w0jwk4Dz6ZAr6k/s1024/flatbread-20240130_210054.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOeWEgD9AAuE74DKHZu3vOXUdwFJfKbC86lDsoQY7bgdJi6MRSbOInk_dtCeVMNpxQcVMtZfIkqGr6dQajA_16JRXLQYxelQeJZMUBTANFaMEQ3RPGrfN-NYnUq8T_IjN-tdl1Hk9M-ZsvDZI_akzjO2l-6oqBNXKJVvd1EYv4e3qw7w0jwk4Dz6ZAr6k/s320/flatbread-20240130_210054.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 起鍋前的薄麵餅</td></tr></tbody></table><p>這薄麵餅口感如何?哈!單吃就是被壓扁的麵包。後來才知道,原來麵團裡有加蜂蜜,難怪吃起來甜甜的,沒有麵香(因為微發酵過了),倒是有蜂蜜味。總共煎了三大片,我接下來三天的早餐就吃煎蛋麵餅了。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNm5wAr3EuJvBBoSu3D9A6BKoV895vMCnN8pqGwHCQp2Ax3MdQlZ0Ev7kB37x7N-3QHqnS6jn6yHGxex09iQLq05r_drPinDsJTEwQGkXTS5xfayTV_TTEUKQZ5jWT-nZlCbtdGbpgSe6Fi0a19yUI314N0w5kpxYJ7WyJNPQFa-9DnCZEyx9UDK2K54/s1024/flatbread-20240131_071943.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNm5wAr3EuJvBBoSu3D9A6BKoV895vMCnN8pqGwHCQp2Ax3MdQlZ0Ev7kB37x7N-3QHqnS6jn6yHGxex09iQLq05r_drPinDsJTEwQGkXTS5xfayTV_TTEUKQZ5jWT-nZlCbtdGbpgSe6Fi0a19yUI314N0w5kpxYJ7WyJNPQFa-9DnCZEyx9UDK2K54/s320/flatbread-20240131_071943.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖3] 煎蛋麵餅</td></tr></tbody></table><br /><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-31909057905767479552024-01-28T18:51:00.001+08:002024-01-28T18:51:36.511+08:003DP : 火烤鴨嘴獸<p> 家中的三部 3D printer 各有各的毛病,閒置已久,最近因為想要驗證利用 OpenSCAD 程式製作的模型效果如何,先將問題看起來較小的CoreXY 的 Smar Trap Core 搬出來修,將 X/Y 軸一個斷的皮帶夾改用束帶及螺絲固定;本以為只有這個小問題,後來發現 Z 軸的固定座,列印件上有一側也裂開了,只好先拿大衣夾夾住,簡單處理後,只能說可印而已,那品質滿差的,還需要找問題點。</p><p>檢修了好幾天,目前三部 3D printer 的問題簡略的記錄如下:</p><p></p><ul style="text-align: left;"><li>Prusa i3 :完全開不了機,可能是控制板的問題,等新的控制板到貨。</li><li>Delta 的 Micromake :列印件斷裂、 NTC 熱敏電阻斷在加熱塊裡面;等待金屬件及熱敏電阻更換。</li><li>Smart Trap Core :XY軸左側列印件及 Z 軸列印件以打火機補強,看能撐多久,等另外兩部能列印以後,再重印零件替換。</li></ul><p style="text-align: left;">真的是禍不單行,不順利時,怎麼玩,怎麼壞!</p><p style="text-align: left;">在測試 Smar Trap Core 時,找了一隻小鴨嘴獸來印:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li><a href="https://www.thingiverse.com/thing:6416190" target="_blank">https://www.thingiverse.com/thing:6416190</a></li></ul><p></p><p style="text-align: left;">尺寸是對的,可能因為 PLA 塑料放太久受潮,或是擠出機、熱端的問題,表面實在難看。倒是用打火機烤了一下,滿漂亮的:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgleoDflYpgAVcyiaLJTOljbX2OnQd_Ruw8daVo-epsc3A9Icb5uIq2FpYDG1nz0DZY6s1etS8hIv3P8yc40vBglL4k650UIACvwkdqYZoBPXoCdSP0VF0RkgFh_KIN2w2vytBFP2z4vgzUaLaaOvoQUDwWcJFbN36BTtqhx83dQVFQFwrgn6Ev4tFKaas/s1024/3dp-platypus-and-lighter-1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgleoDflYpgAVcyiaLJTOljbX2OnQd_Ruw8daVo-epsc3A9Icb5uIq2FpYDG1nz0DZY6s1etS8hIv3P8yc40vBglL4k650UIACvwkdqYZoBPXoCdSP0VF0RkgFh_KIN2w2vytBFP2z4vgzUaLaaOvoQUDwWcJFbN36BTtqhx83dQVFQFwrgn6Ev4tFKaas/s320/3dp-platypus-and-lighter-1.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 有用火烤過與沒烤過比較圖</td></tr></tbody></table><p style="text-align: left;">[國1] 中間那隻鴨嘴獸是用打火機烤過的,表面變得光亮許多。</p><p style="text-align: left;">家裡這個打火機靠近熱源的地方是金屬的,比較耐高溫,而且火焰細小、溫高,當 PLA 塑料被烤到後,沒一會兒就「液化」,因為彼此的吸引地,將縫給填滿,表面就變得光光亮亮了。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRCoiLpVPnAr8X-9Na3JZG9xTqpoYC0GvE8QtVwOOl_O-_dsWIeKJg9RtoBQ5k7me8c4lf_92Wul-ACSwoKzsuVKoldk_PNC0H0T8FP9VrgSO1cpUQ3E3_5_2dX_w_CnlHRL-g6jx0IQhjWEA3d-yUwg-Krk-e8X-p6Tu1aTs_JqDR31K_XhRWjrFx0tY/s1024/3dp-platypus-and-lighter-2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRCoiLpVPnAr8X-9Na3JZG9xTqpoYC0GvE8QtVwOOl_O-_dsWIeKJg9RtoBQ5k7me8c4lf_92Wul-ACSwoKzsuVKoldk_PNC0H0T8FP9VrgSO1cpUQ3E3_5_2dX_w_CnlHRL-g6jx0IQhjWEA3d-yUwg-Krk-e8X-p6Tu1aTs_JqDR31K_XhRWjrFx0tY/s320/3dp-platypus-and-lighter-2.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 火烤過的鴨嘴獸</td></tr></tbody></table>以火烤操作的經驗是,不要貪心,一次烤一小部份,也不要烤太久,不然可能塌陷或是起泡;再來就是要利用重力來塑形,遆時地轉動物件,讓「液化」的塑料流向想流的地方。紅色的料比較沒有色差的問題,以前黃色的的物件被烤過以後,是看得出的,這一支紅色的料,倒是愈烤愈漂亮。這種方式玩,費時費工,但能燒出不同的風格,滿適合公仔的。<p></p><p></p><p style="text-align: left;"><br /></p><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-60585987653142522872024-01-26T21:44:00.003+08:002024-01-27T00:25:35.254+08:00Life : 懇親會<p>好久沒搭火車,久到都忘了上一次搭火車是什麼時候;今天應小孩的要求去參加下部隊後的懇親會。為了他的福利,又溼又冷的天,一大早就出門。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikW_6sfC-Obvtbm_sgusdA5FhI1M83DDv5wne_xj914ppRWUwJFW9sSQBt7HEsSXljyepsi3_jBBFqj-glTehgYgVTZvg_IUIi6PWmibEUUc8AUdNVLbz4xNk-30Mp1OGoQ1aYe5DaoqLpQB6AQSj84SpCjIddZ_bDOOyLISv9UosfChD1gizJBtvep58/s1024/train-ticket-2024-01-26_08-12.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikW_6sfC-Obvtbm_sgusdA5FhI1M83DDv5wne_xj914ppRWUwJFW9sSQBt7HEsSXljyepsi3_jBBFqj-glTehgYgVTZvg_IUIi6PWmibEUUc8AUdNVLbz4xNk-30Mp1OGoQ1aYe5DaoqLpQB6AQSj84SpCjIddZ_bDOOyLISv9UosfChD1gizJBtvep58/s320/train-ticket-2024-01-26_08-12.jpg" width="320" /></a></div><p>臺北火車站的「地下迷宮」總令人生畏,今天倒是第一次體驗到無縫接軌,出了捷運淡水線的閘門,看到別人在用自動購票機,沒什麼人在排隊,就跟著投銅板買了票,順著走就進到月臺,跟我原來的沙盤推演完全不同。</p><p>還記得民國83年因為在中央大學資訊種子班受訓,每週會搭火車來回中壢跟臺北,人擠人,幾乎都是站回臺北;大概是因為今天非尖峰時間搭的,車廂內沒什麼人,輕鬆沒有壓力情境下,突然覺得搭火車滿不錯。</p><p>這應該是第一次走在內壢的街道上,火車站附近好熱鬧,一路經過了學校、市場,到處都是人。下回或許可以騎自行車搭火車,再騎回臺北;之前都能沿著河濱到大溪折返了,內壢應該更近些。</p><p>懇親會什麼感覺?哈!我跟小孩開玩笑,跟以前在學校的母姐會、班親會差不多。</p><p>小孩手氣好,抽了個好單位,別的不說,光是單純就算是賺到。</p><p>人嘛~圖什麼?能健康、平安,比什麼都來得重要。</p><p><br /></p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-43572431575843498872024-01-18T21:40:00.018+08:002024-01-18T22:20:47.250+08:00Biking : 北47+北47-1<p> 天氣狀況 : 晴</p><p>TRIP DIST : 51.80<br />TRIP TIME : 3:10:37<br />AVG. SPEED : 16.3<br />MAX. SPEED : 40.9</p><p>青春不能留白,歲月會留痕跡,騎自行當然也要留記錄,好久沒騎車了,今天是 2024年的第一騎。原本打算由石碇淡蘭橋一路順著淡蘭古道走到石碇老街的,結果淡蘭橋到虎爺廟路口那段居然施工封閉,只好由虎爺廟那端開始走。</p><p>在入口不遠處的平臺前面多了三座新的不鏽鋼長條椅,公所總算想通了,在這種日照不足、陰暗潮溼的地方,木頭椅真的不實用。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJc603FBDG9sjPH0iSHxWiZwijRqiN6jYsVJPxHC_pN4Rd-tIXmuMn1YW75yF8dfHlDTQ8ZBG0uNjhpBTGbMrEtW14sD8KqX2W7lARiuD1MHBTasZzRCmw6bRvcVbqi_ePGJuzPYE3NeMkYqzri_uIKvEPnX9VUnsXl7PZzz3f6UdbrCSnCwmX8QXbhKc/s1024/biking-20240118_133943.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJc603FBDG9sjPH0iSHxWiZwijRqiN6jYsVJPxHC_pN4Rd-tIXmuMn1YW75yF8dfHlDTQ8ZBG0uNjhpBTGbMrEtW14sD8KqX2W7lARiuD1MHBTasZzRCmw6bRvcVbqi_ePGJuzPYE3NeMkYqzri_uIKvEPnX9VUnsXl7PZzz3f6UdbrCSnCwmX8QXbhKc/s320/biking-20240118_133943.jpg" width="320" /></a></div><p>到了石碇老街,本來想看看還有沒有豆漿可買,王家豆腐居然從一月15日開始休息到農曆初二,在猜,可能是越南媳婦回娘家去了。沒豆漿可買,只好繼續往北47前進了。</p><p>當我正「大粒汗,小粒汗」努力的踩踏上坡時,突然覺得左大腿有東西啪~的停在上面,定睛一看,居然是一隻蚱蜢。我停下來,小心的拿出手機,先快速地拍兩張,準備對焦近拍時,咻~小傢伙就這樣無情地跳走了。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm7pNUmjdw4hjZzxMKQnYAN9h1yxJLay_LEtBOANkKMmkT6nTy6WCT2DsmGG2qUIdZtAA4a0om5NummuP670e7-7qZc96eaYcNQ4oEtDjfG_ViyaxolzY-6Fgl9ZCB9UfzCSaz_B0DCyAXupZrq5hO40N-iyMqlChTkpCwN-jmOj92rs4vyxX3Yt6Qo6Q/s1024/biking-20240118_141632.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm7pNUmjdw4hjZzxMKQnYAN9h1yxJLay_LEtBOANkKMmkT6nTy6WCT2DsmGG2qUIdZtAA4a0om5NummuP670e7-7qZc96eaYcNQ4oEtDjfG_ViyaxolzY-6Fgl9ZCB9UfzCSaz_B0DCyAXupZrq5hO40N-iyMqlChTkpCwN-jmOj92rs4vyxX3Yt6Qo6Q/s320/biking-20240118_141632.jpg" width="320" /></a></div><p>來到北47指標五公里處,不禁又想起之前用手比六,讓畫面變成「4567」的老梗。哈!拍照是讓屁股離開椅墊的最佳理由,當然又來一張:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB04ZwRJfvHDKYLlY3V0k-CrHmKb4QmSc1WwRXhpZyrv5SXVa5jUZRxWTIla4si82lO5ogwoZ1PGV7AZOKbiqmaY_yuQE-IkWiAP6zfS_LbBwbuz_cuaDvE-0aFF8eY3cF4F0Lk4F3RjnbuA1dxqfe6phvzxBOluKfmtihi_SSw3oQoxNyogBiVIMzYuU/s1024/biking-20240118_142802.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB04ZwRJfvHDKYLlY3V0k-CrHmKb4QmSc1WwRXhpZyrv5SXVa5jUZRxWTIla4si82lO5ogwoZ1PGV7AZOKbiqmaY_yuQE-IkWiAP6zfS_LbBwbuz_cuaDvE-0aFF8eY3cF4F0Lk4F3RjnbuA1dxqfe6phvzxBOluKfmtihi_SSw3oQoxNyogBiVIMzYuU/s320/biking-20240118_142802.jpg" width="320" /></a></div><p>離開「4567」就是彎來彎去的陡坡,辛苦是有代價的,眼前一叢叢的山櫻花。拿起手機拍照時,才想著,這應該是這一路來的第一棵山櫻花;拍完回頭一看,哈!原來這是第二棵才對,那~剛剛眼睛是在看什麼路!</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1UKbbQP0lsJ-ZxbgDkebXC5P23dF2Kqi63VfhY3TI1Xt05tuqYERCIZNOKjCz8vsTsIn49dM-rvdyfRb5nSUs3Acb6DQqROGVSfRbkEEps9WWLB61-msSfICLv_s1FBBXkeV6-6EBSl0wmjypkmPrmdM6T9F66T3vCAQAexapYJuJoUXJxRd-xeAmCA/s1024/biking-20240118_143650.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1UKbbQP0lsJ-ZxbgDkebXC5P23dF2Kqi63VfhY3TI1Xt05tuqYERCIZNOKjCz8vsTsIn49dM-rvdyfRb5nSUs3Acb6DQqROGVSfRbkEEps9WWLB61-msSfICLv_s1FBBXkeV6-6EBSl0wmjypkmPrmdM6T9F66T3vCAQAexapYJuJoUXJxRd-xeAmCA/s320/biking-20240118_143650.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd1XzM3zgffV1XgQSgMh505dF_7enKN4JNHOLDh7u0XTMkhJe5-SCPNvgaWBwyd0lBV5enEs8KUh0VlF-mrIlGZI4zTNnpbCMwTDJBiPz8nRG6MZNWWwecVxXLNxXe4e8ZZ50316gwQvKX67fkveoqgchOIRqo_1I8rML2CMQYNPrAwEexZ5PYYFLuMpo/s1024/biking-20240118_143854.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd1XzM3zgffV1XgQSgMh505dF_7enKN4JNHOLDh7u0XTMkhJe5-SCPNvgaWBwyd0lBV5enEs8KUh0VlF-mrIlGZI4zTNnpbCMwTDJBiPz8nRG6MZNWWwecVxXLNxXe4e8ZZ50316gwQvKX67fkveoqgchOIRqo_1I8rML2CMQYNPrAwEexZ5PYYFLuMpo/s320/biking-20240118_143854.jpg" width="320" /></a></div><p>在北47指標六公里前,多了一支「常有獼猴出沒,請減速慢行」的標誌;站在它旁邊拍照,就多一隻猴子了!</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0zvD4kASShx8_mgch5YrwXVfV91SMdDvFFLNSDW4jqTDOCqeGeyY8RQznxwLQW58hETwZiKIzGnCK1w0Xt-0h7S73JuaGIN6eIVbA8vJkjgPNvts6eaABHlzpY-d84LP8AZlIs_8CeDV-BQJ-KvBNUYHBtQthV961ZCAmV5YW6x0-x2XOcHGZ8z1c42w/s1024/biking-20240118_144808.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0zvD4kASShx8_mgch5YrwXVfV91SMdDvFFLNSDW4jqTDOCqeGeyY8RQznxwLQW58hETwZiKIzGnCK1w0Xt-0h7S73JuaGIN6eIVbA8vJkjgPNvts6eaABHlzpY-d84LP8AZlIs_8CeDV-BQJ-KvBNUYHBtQthV961ZCAmV5YW6x0-x2XOcHGZ8z1c42w/s320/biking-20240118_144808.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirmS1Bv5JibJi1L9vz9q5gCWQ3m9wtIdJtFpiOmyWZ8UwMOFviEkfqrhoV1wRkSe3BvYBEQJDKvMzEBD0fziqu735_bm4Mkzj9tW0gvBCE-YUmHkOSvfzhUIcnOS8E2MBelaJhaiUJB3fD-xGzXM9JRYv3EjENydsyUiHS1QonIGsVFeOD9b8WBpg32Cw/s1024/biking-20240118_145006.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirmS1Bv5JibJi1L9vz9q5gCWQ3m9wtIdJtFpiOmyWZ8UwMOFviEkfqrhoV1wRkSe3BvYBEQJDKvMzEBD0fziqu735_bm4Mkzj9tW0gvBCE-YUmHkOSvfzhUIcnOS8E2MBelaJhaiUJB3fD-xGzXM9JRYv3EjENydsyUiHS1QonIGsVFeOD9b8WBpg32Cw/s320/biking-20240118_145006.jpg" width="320" /></a></div><p>山路其實不難騎,放輕齒慢慢踩,不心急就對了;人生其實也是同樣的道理。來到二格山自然中心,北47也快到最高點,看來店家應該沒在營業了,但是門口的山櫻花還是盛開著,以前來這邊吃他們自製的厚片吐司,花生的香味和紫蘇梅綠茶的味道都還記得呢!可惜了,少了一處可以邊補充熱量,邊欣賞美景的休息點。</p><p>既然都騎完北47了,決定繼續騎往北宜公路,再由海倫咖啡轉進北47-1,順便去買許家麵線。</p><p>進入北47-1後,氣溫降了,熱鬧的聲音也沒了。正在想,今天怎麼連鳥叫聲都沒聽到時,左側馬路邊突然出現一隻體型不小的藍腹鷴。牠嚇一跳,我也嚇了一跳。我立即停下來,小心地拿出手機,看看能不能捕捉到難得一見的身影。此時的牠也沒閒著,快步地由我的前方走到另一邊:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTS4IL18TbTQGnIOm3g5SdR098iGQ5hD_Uk0VfWeJs63rIqDzE09a6aWzmcoeVz7AwcyhdqP70ztYpnZsZWclZ3JEZ6eYvzhxa6HmzVSgoRXm9L8FCuEftSGxqq6SWa9KydnnvpZO-oUeGUswRo_LJZrz8UAJrIT63wU_nFqDTc_7zYJEN6OdGST4oMiw/s1024/biking-20240118_152601.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTS4IL18TbTQGnIOm3g5SdR098iGQ5hD_Uk0VfWeJs63rIqDzE09a6aWzmcoeVz7AwcyhdqP70ztYpnZsZWclZ3JEZ6eYvzhxa6HmzVSgoRXm9L8FCuEftSGxqq6SWa9KydnnvpZO-oUeGUswRo_LJZrz8UAJrIT63wU_nFqDTc_7zYJEN6OdGST4oMiw/s320/biking-20240118_152601.jpg" width="320" /></a></div><p>我匆匆拍到兩張模糊的影像,來不及拍第三張,牠就一溜煙鑽進邊坡的樹林裡了。</p><p>正邊騎邊回想剛剛的巧遇時,右側邊坡樹林裡又瞥見一個較小的身影,但牠很機警地迅速藏身林中,不再現身。在短短不到五分鐘內,撞見了兩隻藍腹鷴,是不是該去買張彩券!</p><p>由北47接北47-1,這一段除了前面稍有緩坡,幾乎都是一路陡下,車子極少,空氣比北47或是北宜公路好太多了。下滑到許家麵線,買了傳統麵線,一包兩束,兩包共180元,老闆說冷藏可以放三、四個月,其實真要吃,哪會放到那麼久。</p><p>下到烏塗窟後,接著就是加速踩踏,結束 2024年的第一騎。</p><p><br /></p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-30543218733238980792024-01-17T18:26:00.001+08:002024-01-17T18:30:39.431+08:00HTML5 FUN : 找出成績記錄中錯的題目<p> 在「<a href="https://gsyan888.blogspot.com/2023/12/html5-fun-google-form-save-score.html" target="_blank">雄:HTML5 FUN : 利用 Google Form 登錄遊戲成績</a>」中說到,目前 HTML5 FUN 的部份遊戲可以利用 Google 表單將遊戲的成績和作答歷程寫入 Google 試算表中。如果是照範例建立的表單及試算表,在試算表的 H 欄中,應該是:</p><p></p><ul style="text-align: left;"><li>作答歷程(題目,使用秒數,錯的次數,回答內容)</li></ul><p></p><p>這些記錄是一人一格,做過的題目全部記錄在一個儲存格中,如果解析出錯的哪些題目呢?</p><p>先來看看 H 欄中的內容特徵是什麼:</p><p></p><ul style="text-align: left;"><li>全部是一個字串。</li><li>每一題最後會有換行字元。</li><li>每一題都有四項記錄,記錄跟記錄間有半形逗號:</li><ul><li>題目</li><li>使用秒數</li><li>錯的次數</li><li>回答內容</li></ul></ul><p></p><p>如果答對的,「錯的次數」應該就會是 0,例如:</p><p></p><blockquote><p>[Z],3,1,c<br />[V],9,1,T<br />[K],3,0,K<br />[P],8,0,P</p><p></p></blockquote><p>這個人的第一題作答歷程是「[Z],3,1,c」,分解一下:</p><p></p><ul style="text-align: left;"><li>題目: [Z] </li><li>使用秒數: 3 </li><li>錯的次數: 1</li><li>回答內容: c </li></ul><p></p><p>所以如果將答對的題目(「錯的次數」是「0」)的通通去掉,剩下的就是錯的,進一步再解析出「題目」的內容,這樣就知道錯了哪些了。</p><p>底下的試算表是已經在 J 欄中加入解析公式的,可以參考:</p><p></p><ul style="text-align: left;"><li><a href="https://docs.google.com/spreadsheets/d/16iJmgcRNlyyoKO166P_t_XHFhchsDXIxHE_y_WOZ6Z0/edit?usp=sharing" target="_blank">https://docs.google.com/spreadsheets/d/16iJmgcRNlyyoKO166P_t_XHFhchsDXIxHE_y_WOZ6Z0/edit?usp=sharing</a></li></ul><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq0cNeUesoN1eybRs1gUp86Rj-BdmThL2hb2RxZeGMH6PEhI-a-WtoblLNLa9e50ltJin7bw-B65wDzjHEBAbpC1K-IMLFNbW1L0kNnrRZV2eD4La-hSJPryV2IJTCjRal7x1TnREqkDLfcsh7Xgid8CSI4zGxZXjtJi8Hq2BAGVOmvr3t7wUgBAj8dCc/s1024/html5-fun-google-form-logger-fault-parsing.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq0cNeUesoN1eybRs1gUp86Rj-BdmThL2hb2RxZeGMH6PEhI-a-WtoblLNLa9e50ltJin7bw-B65wDzjHEBAbpC1K-IMLFNbW1L0kNnrRZV2eD4La-hSJPryV2IJTCjRal7x1TnREqkDLfcsh7Xgid8CSI4zGxZXjtJi8Hq2BAGVOmvr3t7wUgBAj8dCc/s320/html5-fun-google-form-logger-fault-parsing.png" width="320" /></a></div><br /><p>以 H2 的資料來說,用的公式是 (請參考J欄):</p><p></p><blockquote><p>=REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(H2, "([^,]+,\d+,0,[^\n]+\n*)", "♥"), "(^[\n♥]+)", ""), "([^,]+),\d+,\d+,[^\n♥]*[\n♥]+", "$1")</p><p></p></blockquote><p>主要都是利用 Google 試算表的「REGEXREPLACE」:</p><p></p><ul style="text-align: left;"><li>將對的題目那行置換為「♥」。使用的規則:</li><ul><li>([^,]+,\d+,0,[^\n]+\n*)</li></ul><li>將開頭的換行及「♥」全部去掉(空字串)。使用的規則:</li><ul><li>(^[\n♥]+)</li></ul><li>將錯的記錄行解析,並置換為題目內容就好,其它的資訊不保留。使用的規則:</li><ul><li>([^,]+),\d+,\d+,[^\n♥]*[\n♥]+</li></ul></ul><p></p><p>這個例子是因為題庫的題目是考字母,然後都用中括號括住了,所以將所有錯的題目合起來,就變成:</p><p></p><ul style="text-align: left;"><li>[Z][V][O][R][S][M][F]</li></ul><p></p><p style="text-align: left;">一題一題很清楚,如果是單字的話,可能要再加個逗號、空格,或是其它符號來分開,如果想在每一個錯的題目後面加一個逗號和一個空格,公式可以改為 (請參考K欄):</p><blockquote><p style="text-align: left;">=REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(H2, "([^,]+,\d+,0,[^\n]+\n*)", "♥"), "(^[\n♥]+)", ""), "([^,]+),\d+,\d+,[^\n♥]*[\n♥]+", "$1, ")</p></blockquote><p style="text-align: left;">在最後面的「"$1"」中加料即可。(註:$1 就是找到的題目內容)。</p><p style="text-align: left;">關於記錄的解析公式如果有什麼問題,或是需求,歡迎在底下留言區留言討論哦!</p><h3 style="text-align: left;">相關連結</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/12/html5-fun-google-form-save-score.html" target="_blank">雄:HTML5 FUN : 利用 Google Form 登錄遊戲成績</a></li></ul><p></p><ul><li><a href="https://gsyan888.blogspot.com/2023/12/html5-fun-score-logger-gas-2023.html" target="_blank">雄: HTML5 FUN 利用 Google Apps Script 登錄成績</a></li></ul><p></p><ul><li><a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">雄:HTML5 FUN 精選集</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.github.io/html5_fun/">HTML5 FUN</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2023/05/html5-fun-homepage.html" target="_blank">雄 : 打造自己的遊戲 : HTML5 FUN 烘焙機大彙整</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2014/08/html5-spelling.html" target="_blank">雄:HTML5 : 單字高手</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2014/02/html5-phoneticsquiz.html" target="_blank">雄:HTML5 : phonetics_quiz 聽字詞拼注音</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2022/11/html5-listening.html" target="_blank">雄:HTML5 : Listening 聽音辨字六選一</a></li></ul><p style="text-align: left;"><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-6338155924729845492024-01-12T23:50:00.275+08:002024-01-13T22:15:12.405+08:00Life : 河堤<p> 昨天趁著白天有太陽,加碼多走了一點路,多吸收一點太陽能。快到一壽橋施工處時,看到兩位正妹一人一腳,正要跨上引道的圍牆,多半是看到前方沒路了,回頭打算就這樣跳進堤內的引道;哈!我遠遠瞄到了,心想,翻牆應該會將漂亮的衣服弄髒吧!但也不好意思一直盯著人家看。不過,她們應該也有注意到我,想了想,又將腳放下。小時候我們家曾經在道南橋的河堤邊租屋好一陣子,基本上,我也是在河堤爬上爬下,來去自如的人,所以有沒有階梯可走,對我來說,根本不是問題。和兩個女孩錯身而過後,我是直接由堤頂走斜坡下去。她們看我那麼輕鬆,之後也回頭,循著我的路徑下河堤。哈!接著會發生什麼事,應該很好想像!聽到兩個人接連的尖叫聲,我也不意思回頭看那慘狀了。</p><p>為了再度享受那溫暖的陽光,今天刻意走反方向,除了可以再去看看小時候待過的河堤,也能繞更大圈一點,多流一點汗。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTkP5wxD9W3-VfPw7PpYDT-Z1B82ujq0H6qpVlCSewlORlU_i02L3Qjg0aexhzI8IINmp6d3W1pbdj7nkuzgF9pBOYU762K8G4kWikylofPk1E4AJWSAwiJMW-PkNC8zinnTCyPaWMO1VC4QdQIEGOMvpua7bxwIwVOSJmjR6gAs9gdgVsB8wckYrW6kI/s1024/life-2024-01-12-1420.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTkP5wxD9W3-VfPw7PpYDT-Z1B82ujq0H6qpVlCSewlORlU_i02L3Qjg0aexhzI8IINmp6d3W1pbdj7nkuzgF9pBOYU762K8G4kWikylofPk1E4AJWSAwiJMW-PkNC8zinnTCyPaWMO1VC4QdQIEGOMvpua7bxwIwVOSJmjR6gAs9gdgVsB8wckYrW6kI/s320/life-2024-01-12-1420.jpg" width="320" /></a></div><br /><p>這段河堤已經因為道路拓寬,大部份拆掉重建,以前住過的平房早就拆掉,馬路變寬了,而過去的時光也僅剩片段。會搬到這邊,記得是父親剛從牢裡出來;會搬離這裡,則是因為他又入獄。記得小小的平房後面有圍一小塊地種一點菜,印象最深刻的是玉黍黍爬滿了毛毛蟲,還養了一隻猴子,哪裡來的?我不記了,也問不著了。</p><p>這河堤的另一個片段是大學重考的那年,因為沒錢去補習班補習,每天早上市立圖書館開了,就去自習室複習,中午回家吃完飯,回到圖書館念書念累了,會爬到河堤上吹風發呆。每天就這樣在圖書館八個小時,人家放學了,圖書館人變多了,我就回家。苦嗎?其實早已忘卻。</p><p>過了萬壽橋,走了較少走的彼岸,進了政大校區後,想測試一下腳的 ITBS 會不會再犯,於是繼續走堤頂,由渡賢橋上環山一道,沿途滿地的落葉,一陣風來,樹上的也一片片落下。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDcNCRnsgGPGK6LhymsVc4LogS-rEUpDgRpoECwq-32oyjACKFwQuonvweCHuTlr24xg0LWKFDm9Dl-juaKavKly6P1qleSdArZjZxs6f2_KBHbkQqCJBOL675ce_C8yC8siX4oAKjMpzaAyMcK-nbHTeghThsUvP3dtWOjYvQ3qnDDcf0zKOEYBxBP0/s1024/life-2024-01-12-1445.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="769" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDcNCRnsgGPGK6LhymsVc4LogS-rEUpDgRpoECwq-32oyjACKFwQuonvweCHuTlr24xg0LWKFDm9Dl-juaKavKly6P1qleSdArZjZxs6f2_KBHbkQqCJBOL675ce_C8yC8siX4oAKjMpzaAyMcK-nbHTeghThsUvP3dtWOjYvQ3qnDDcf0zKOEYBxBP0/s320/life-2024-01-12-1445.jpg" width="320" /></a></div><p>本來以為雙腳測試通過了,其實是因為還沒下坡,挑戰還沒來。果不其然,離開政大,由堤外進入河堤內,再度爬回堤頂時,左腳又微微的有感覺了,只好放慢腳步,中間停了幾次做伸展。快到力行時,仔細瞧了一下昨天有人拍照拍好久的那棵樹。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-l5r4_wTOzdpC_DDihOgB74NoJ92f56q3AS3iiIP_cytZxcZWNTGxcKHJEJ-5vpLZUzwg0ZdSWB618HohBw4bOxG8eGp5QPYhDwg4Jv3zvb4yrWPQW8dUHouiMKycA_MgiJFWCvm_WY38VAROp3it8CNpr5y1kvM37FWFt60XGmfKeGgaCmYIaNfHrU/s1024/life-2024-01-12-1522.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-l5r4_wTOzdpC_DDihOgB74NoJ92f56q3AS3iiIP_cytZxcZWNTGxcKHJEJ-5vpLZUzwg0ZdSWB618HohBw4bOxG8eGp5QPYhDwg4Jv3zvb4yrWPQW8dUHouiMKycA_MgiJFWCvm_WY38VAROp3it8CNpr5y1kvM37FWFt60XGmfKeGgaCmYIaNfHrU/s320/life-2024-01-12-1522.jpg" width="320" /></a></div><p>看來是梅花,花朵小小的,大概就我小指指甲的大小。有藍天襯底,果然美,難怪大家都駐足許久。</p><p>今天貪走的結果是得休息個幾天,勤做伸展了。應該要乖一點,乖乖地每天做功課,乖乖地量力而為。</p><p><br /></p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-83779864214279104332024-01-11T09:50:00.002+08:002024-01-11T12:18:21.450+08:00Life : 以魔布拖把碾壓蚊子<p>天氣冷冷熱熱的,生物的時序應該都被打亂了吧!前幾天稍微暖和一點,惱人的蚊子又出來作怪,主臥室本就有多裝了紗簾,實在不知道這些小傢伙哪裡來的。前兩天有個可憐的小孩一覺起來,被叮了五包,後來看到了兇手,但卻在高高的天花板。</p><p>以前總是仗著自己有 180cm 的優勢,踩在床上或是椅子上,踮著腳,以扇子打蚊子;最近右手五十肩還沒好,為了打蚊子,風險實在太高了。那天靈光一閃,去拿了放在角落的魔布拖把(聽說是很貴的 3M ),就這麼「桿起桿落」,那小小的身軀瞬間壓得扁扁的。大概是因為人沒靠近,少了牠能感知的訊息,當拖把靠近時,蚊子不知死期將近,一動也不動。</p><p>為了清理「戰場」,去找了兩條橡皮筋,將一張衛生紙固定在拖把上,就像 [圖1] 這樣:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbX8reL_tvZhiUkgpqt7_Iro8BrWAAKHX4DP2vKXt6Sf6vnU35rROFAcOhuGkhGqG95yaj_fswSml4S3R7IT3H_SAJcl6KA0DFTHfUAyFZU0b9RwKlxNKXlblZWQvR_I6h_4A6hsjhyphenhyphenu4B_WccpVMM4cCs86XaQua5Phy9-joLvYMqXQkV8ceo1woNzTg/s1024/flap-mop-mosquito-killer-1.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbX8reL_tvZhiUkgpqt7_Iro8BrWAAKHX4DP2vKXt6Sf6vnU35rROFAcOhuGkhGqG95yaj_fswSml4S3R7IT3H_SAJcl6KA0DFTHfUAyFZU0b9RwKlxNKXlblZWQvR_I6h_4A6hsjhyphenhyphenu4B_WccpVMM4cCs86XaQua5Phy9-joLvYMqXQkV8ceo1woNzTg/s320/flap-mop-mosquito-killer-1.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 在拖把上固定一張衛生紙</td></tr></tbody></table><p>乾的衛生紙肯定是無法將天花板的血跡擦乾淨,所以要在衛生紙中央先滴少許的水,再去抹血跡。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDbMTtgeLkqKksBCoIxV9rbhiWdN0WNG64M5CUcwBs95cjSmuVSStx5evZTzUlvw0CB0-_KtbaBjHOdFGBbWpKXUwp40tvCBU-kcDwJyIuOcYDHXUa5wT92rcErYK57txOXzBpGrbwBde39m1J_VUOhj4XdDEQ8jlsFsxBh4Gmuvlf0BL2_ZbK9CQZNu8/s1024/flap-mop-mosquito-killer-2.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDbMTtgeLkqKksBCoIxV9rbhiWdN0WNG64M5CUcwBs95cjSmuVSStx5evZTzUlvw0CB0-_KtbaBjHOdFGBbWpKXUwp40tvCBU-kcDwJyIuOcYDHXUa5wT92rcErYK57txOXzBpGrbwBde39m1J_VUOhj4XdDEQ8jlsFsxBh4Gmuvlf0BL2_ZbK9CQZNu8/s320/flap-mop-mosquito-killer-2.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 拖把變殺蚊利器</td></tr></tbody></table><p>有了第一次的經驗,確認了以下的殺蚊迎戰程序:</p><p></p><ul style="text-align: left;"><li>以兩條橡皮筋在魔布拖把上固定一張衛生紙(全乾的)。</li><li>碾壓「小吸血鬼」。</li><li>在衛生紙滴少許水,清理戰場。</li><li>垃圾丟掉~~得意的笑 ^_^</li></ul><div>用了這個新神器,一天內就消滅了六隻吸得飽飽,在高處休息的小傢伙。這神器以後就放房間,讓牠們看了就不敢進門(哈!想太多!)。 </div><p></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-89531176047659479492024-01-03T22:47:00.002+08:002024-01-08T22:10:07.510+08:00Colab : The secret HF_TOKEN does not exist in your Colab secrets<p> 有人留言反應「<a href="https://gsyan888.blogspot.com/2023/11/faster-whisper.html" target="_blank">雄 : 以 Faster Whisper 將影音辨識為文字檔案(字幕或逐字稿)</a>」的 Colab 筆記本執行完有錯誤訊息,前幾週還有用過,試了一下,會出現類似這樣的訊息:</p><p></p><blockquote><p>/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_token.py:72: UserWarning:<br />The secret `HF_TOKEN` does not exist in your Colab secrets.<br />To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.<br />You will be able to reuse this secret in all of your notebooks.<br />Please note that authentication is recommended but still optional to access public models or datasets.<br />warnings.warn(</p><p></p></blockquote><p>追了一下<a href="https://github.com/SYSTRAN/faster-whisper" target="_blank"> Faster Whisper</a> 的原始碼,應該卡在「<a href="https://github.com/SYSTRAN/faster-whisper/blob/master/faster_whisper/utils.py" target="_blank">faster_whisper /utils.py</a>」中的「download_model」,用來下載語音辨識模型資料的程序。它使用了「<a href="https://github.com/huggingface/huggingface_hub" target="_blank">huggingface_hub</a>」來下載相關檔案,而 huggingface_hub 兩週前的 v0.20.0 起,支援讀取 Colab 的 Secret 中設定的 HF_TOKEN 參數內容:</p><p></p><blockquote>Authentication has been greatly improved in Google Colab. The best way to authenticate in a Colab notebook is to define a HF_TOKEN secret in your personal secrets. When a notebook tries to reach the Hub, a pop-up will ask you if you want to share the HF_TOKEN secret with this notebook -as an opt-in mechanism. </blockquote><p></p><p>也不知道哪裡出了問題,它說不認證也可以讀到 HugginFace Hub 專案中的檔案,卻卡住了。</p><p>試了半天,沒辦法解決 Colab 中已內建的較新版 huggingface_hub, 好吧!反正 Faster Whisper 目前只要 0.13 版以上就能運作,就先安裝舊版的 huggingface_hub,在筆記本安裝 Faster Whipser 的程序前,加上了:</p><blockquote><p>!pip -q install huggingface_hub==0.19.4</p></blockquote><p>哈!先求能動,等不行時再來想別的辦法。</p><p>後記:(2024.01.08)</p><p>huggingface_hub 已經有最新版 (<a href="https://github.com/huggingface/huggingface_hub/releases/tag/v0.20.2" target="_blank">0.20.2</a>)可以解決 Colab 卡住的問題,所以安裝最新版的 huggingface_hub 也能解決問題,用這道指令來安裝最新版的 huggingface_hub:</p><p></p><blockquote>!pip install -q -U huggingface_hub</blockquote><p></p><p><br /></p><h3 style="text-align: left;">相關文章</h3><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/11/faster-whisper.html" target="_blank">雄:以 Faster Whisper 將影音辨識為文字檔案(字幕或逐字稿)</a></li></ul><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/02/openai-whisper-ipynb.html" target="_blank">雄:使用 OpenAI Whisper 製作影音的字幕或逐字稿</a></li></ul><p></p><ul style="text-align: left;"><p></p><li><a href="https://gsyan888.blogspot.com/2023/03/otranscibe-enhanced-edition.html" target="_blank">編修字幕或逐字稿的工具 oTranscribe</a> <br /><a href="https://gsyan888.blogspot.com/2023/03/otranscibe-enhanced-edition.html" target="_blank">雄:oTranscribe 線上聽打逐字稿改良版</a></li><p></p><p></p><p></p><div><br /></div></ul><p></p><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-56908293383051162862024-01-01T23:11:00.001+08:002024-01-01T23:11:12.133+08:00利用 Google 試算表分解題庫題幹及選項<p>製作 HTML5 FUN 遊戲時,如果能利用現有的題庫當基礎,應該會快很多。以前我會使用教科書商提供的命題光,將題庫輸出成 CSV 格式;如果是自己出的考卷文件檔案,則必須多一道工去解析出題幹、選項、答案,早期都是用 perl、PHP,主要是它們都可以在找出題目字串的規則以後,使用 Regular Expression (regex) ,將規則套進去,進行字串的解析、分解、置換。只要規則設對了,簡單而有效率。在 Google 試算表的主選單 [資料] 中,有一個 [將文字分隔成不同欄] ,如果是簡單的將字串分欄,可以玩玩,但是複雜一點的,就得用別的方法了。Google 試算表也有提供 Regular Expression 相關的公式可供運用,底下的試算表中,記錄幾個由網路中找到的試卷,試著將其中的題目解析出題庫及選項。</p><p></p><ul style="text-align: left;"><li><a href="https://docs.google.com/spreadsheets/d/1p-YOPBJeHbobA83eC3SZPmMCqQu9-V1pYwH9Hy0t8lE/edit?usp=sharing" target="_blank">https://docs.google.com/spreadsheets/d/1p-YOPBJeHbobA83eC3SZPmMCqQu9-V1pYwH9Hy0t8lE/edit?usp=sharing</a></li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdRpnVKK9cK6tXRaf2dd6VAduAA3XIVB6Ly-Kd4piiHFSSIO1nOPQgiYlXi8no0Hm8IIG-iHuyYaPQRBM81PYauTdIUgaxHt50fCbqvFD_5ltnLtgOIF_sfLXlAiWoFoW0ktkLBJwXUu9NnxkJqDaq5NXwW02gbpTD5fKaPQXYaykfWHCyEjieSdUeL8/s1360/google-spreadsheet-quiz-parsing-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1360" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdRpnVKK9cK6tXRaf2dd6VAduAA3XIVB6Ly-Kd4piiHFSSIO1nOPQgiYlXi8no0Hm8IIG-iHuyYaPQRBM81PYauTdIUgaxHt50fCbqvFD_5ltnLtgOIF_sfLXlAiWoFoW0ktkLBJwXUu9NnxkJqDaq5NXwW02gbpTD5fKaPQXYaykfWHCyEjieSdUeL8/s320/google-spreadsheet-quiz-parsing-1.png" width="320" /></a></div><p>先來看看使用了哪些 Google 試算表的公式:</p><p></p><div><ul style="text-align: left;"><li>CONCATENATE :將指定的範圍的多個內容合成一個字串。當我們將考卷中的題目貼到試算中,如果一題被分成多行時,就需要使用這個公式來將全部的題目先合成單行,再找出分離各題的規則,使用 REGEXREPLACE 和 SPLIT 來重新分開各題。</li><li>REGEXREPLACE: 將符合規則的字串,置換為新字串。在本篇中,主是用來將題目的開頭(題號、括號...)或是選項的符號,置換為一個題目中不太會使用到的特殊符號(<span face=""docs-Google Sans Mono"" style="background-color: white; font-size: 12px; white-space: pre-wrap;">♥</span>),方便之後以這個特殊符號來分離題目,或是題目的各個選項。</li><li>SPLIT:以指定的字,將字串分解後,往右填入各儲存格。主要是用來分離題目,及題目中的各個選項。</li><li>TRANSPOSE:將由左往右的結果,變成由上往下。主要應用在將題庫分離時,因為使用 SPLIT 處理後是由左往右(橫向)的結果,而我們需要的是由上往下填入各行,所以利用 TRANSPOSE 來轉換填入儲存格的方向。</li><li>ARRAYFORMULA:公式套到多行或陣列。這個公式可以讓我們不用去設區塊選取,不用一直按 Ctrl + Enter。</li><li>REGEXEXTRACT:以規則找出指定的內容。主要應用在找出正確答案。</li></ul></div><p></p><p>考卷的題目的文字基本上有規則可循,所以我們可以利用 Regular Expression 來解析,底下介紹一些簡單的規則語法:</p><p></p><ul style="text-align: left;"><li>保留字,因為 Regular Expression 會使用一些符號,如果題目中有這些符號,我們就必須在前面多加一個反斜線,例如括號和點:</li><ul><li>\(</li><li>\)</li><li>\.</li></ul><li>數字:</li><ul><li>\d</li><li>\d+</li><li>\d*</li><li>[0-9]</li><li>[1-4]</li></ul><li>英文字母</li><ul><li>[a-z]</li><li>[A-Z]</li><li>[A-D]</li></ul><li>空白字元(包括空格、跳格、換行......)</li><ul><li>\s</li><li>\s+</li><li>\s*</li></ul><li>代表數量的符號</li><ul><li>+ : 一次以上</li><li>* : 零次以上</li><li>{1} : 一次</li><li>{3} : 三次</li></ul><li>或</li><ul><li>|</li></ul></ul><p></p><p>像選擇題的開頭,一般會用「( )1.」、「( )2.」、「( )3.」這種括號中有空格供填答,再加題號的格式,Regular Expression 規則就這樣設:</p><p></p><ul style="text-align: left;"><li>\(\s+\)\s*\d+\.</li></ul><p style="text-align: left;">解譯一下:「左括號」「空格一個以上」「右括號」「空格零個以上」「數字一個以上」「一個點」。</p><p></p><p>如果題號、點是放在前面,就改成:</p><p></p><ul><li>\d+\.\s*\(\s+\)</li></ul><p></p><p></p><p></p><p style="text-align: left;">解譯一下:「數字一個以上」「一個點」「空格零個以上」「左括號」「空格一個以上」「右括號」。</p><p style="text-align: left;">如果多題題目已合為單行字串時,我們要找出所有符合的,就將前面的規則用括號包起來,變成:</p><ul><li>(\(\s+\)\s*\d+\.)</li><li>(\d+\.\s*\(\s+\))</li></ul><p style="text-align: left;">同樣的原理,要找出選擇題的各個選項的話,假設選項是用 (A)...(B)...(C)...(D),那就用這樣的規則:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>\([A-D]\)</li></ul><p style="text-align: left;">這裡用了 [A-D] 表示 ABCD 都符合規則。</p><p style="text-align: left;">因為選項不會只有一個,所以記得要用括號包起來,才能找出所有一樣規則的選項:</p><ul><li>(\([A-D]\))</li></ul><p style="text-align: left;">不過似乎有的人會使用全形的字母,那只好改為:</p><ul><li>(\([ABCD]\))</li></ul><div>有的人選項在考卷上看到的是圈圈中加上數字,但是貼到試算表中可能變成:</div><div><ul style="text-align: left;"><li>○1...○2...○3...○4</li></ul></div><p style="text-align: left;">數字的部份一定要看清楚,如果是半形的,可以用「\d」,但如果是全形字,就得一個個列出來了,像前例中的數字即是全形的,可以用這樣的規則:</p><p></p><ul><li>(○[1234])</li></ul><p style="text-align: left;">如果是半形的數字,就可以用:</p><ul><li>(○\d) 或是 (○[1-4])</li></ul><p>先留個記錄,有空再補充。實際的應用都在本文最前面的試算表中了,按一下儲存格即可看到用了什麼公式組合。</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-29212873794549247472023-12-25T01:39:00.003+08:002024-01-17T18:27:24.420+08:00HTML5 FUN : 利用 Google Form 登錄遊戲成績<p><a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">HTML5 FUN</a> 網站中,以下幾個遊戲原本就可以利用參數,指定在遊戲結束時,將分數及作答歷程傳送給指定的網址處理、儲存:</p><p></p><ul style="text-align: left;"><li>單字高手</li><li>聽音辨字</li><li>注音高手</li></ul><p></p><p>它們會傳送以下的資料:</p><p></p><ul style="text-align: left;"><li>遊戲標題</li><li>設定檔檔名</li><li>使用者代號</li><li>總秒數</li><li>答錯次數</li><li>得分</li><li>作答歷程(題目,使用秒數,錯的次數,回答內容)</li></ul><p></p><p>用什麼工具來接收這些資料呢?進階使用者可以考慮利用 Goolge 試算表 + Google Apps Script (之前有設計一個 <a href="https://gsyan888.blogspot.com/2023/12/html5-fun-score-logger-gas-2023.html" target="_blank">scoreLogger Google Apps Script</a>)來接收並儲存資料,好處是資料的呈現較清楚有彈性;現在多了一個選擇,可以使用 Google 表單來接收並儲存資料。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXhlwlz1WcnZg8Z-oo5UfSOo33ZadPvWo2hZGuaxfMgCDqMfySlcZ0ySZuuE9waRi1b57BcyHN0trKoKK15nbOZaDxh1Zpr9nj067EnQTFir8lm6yk35pkoUVMNM0fGSePV-1AWylxEKJVnL-UN7ygZLZmidSW_vR9cxjlWV9LkX7aJlteHdJVfoDE_o/s1024/google-form-send-score-11.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXhlwlz1WcnZg8Z-oo5UfSOo33ZadPvWo2hZGuaxfMgCDqMfySlcZ0ySZuuE9waRi1b57BcyHN0trKoKK15nbOZaDxh1Zpr9nj067EnQTFir8lm6yk35pkoUVMNM0fGSePV-1AWylxEKJVnL-UN7ygZLZmidSW_vR9cxjlWV9LkX7aJlteHdJVfoDE_o/s320/google-form-send-score-11.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 利用 Google 表單接收到的遊戲成績</td></tr></tbody></table><h3 style="text-align: left;">建立 Google 表單</h3><p>想要以 Google 表單來接收學生的遊戲成績,表單可以自行設計,或是利用我已製作好的表單範本來建立「副本」。想要自行設計表單,只要注意兩個要點即可:</p><p></p><ul style="text-align: left;"><li>必須建立七個文字欄位,前六個用「簡答文字」,最後一個用「詳答文字」。</li><li>必須開放不登入 Google 帳號也能填寫表單。</li></ul><p></p><p>如果想利用我製作的表單範本,就開啟底下的連結,並按下「建立副本」的按鈕即可:</p><p></p><ul style="text-align: left;"><li><a href="https://docs.google.com/forms/d/1oK93PytE06aleNTBzEzgXL4NYKLwylOmTCboO1_jrg8/copy" target="_blank">https://docs.google.com/forms/d/1oK93PytE06aleNTBzEzgXL4NYKLwylOmTCboO1_jrg8/copy</a></li></ul><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiICWN3JNUB6ZStn6qawiF0cn6SECofcPrpKwDzKPvcpqtRRPRc0glaj0JdRSZrP1nmt82OwlkvJmO_VW23KKPe36s7i7XRRrYYKyXcKtQIyxuuOMT6EiG33cFlbI1wxok0SdulOEMzQiX9kpy8WjhRYla35eUm8az22hz0azSde0fRIWLO9D2NpHZZlZ0/s1024/google-form-send-score-01.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiICWN3JNUB6ZStn6qawiF0cn6SECofcPrpKwDzKPvcpqtRRPRc0glaj0JdRSZrP1nmt82OwlkvJmO_VW23KKPe36s7i7XRRrYYKyXcKtQIyxuuOMT6EiG33cFlbI1wxok0SdulOEMzQiX9kpy8WjhRYla35eUm8az22hz0azSde0fRIWLO9D2NpHZZlZ0/s320/google-form-send-score-01.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 以範本建立表單</td></tr></tbody></table><h3 style="text-align: left;">連結至試算表</h3><p>建立好 Google 表單以後,將它和試算表連結,這樣子在查詢及後續的處理會較方便,方法很簡單,如 [圖3] 按表單設計畫面上方的「回覆」分頁:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuV42zahYGQnNqsQAUIoiVcQMr4-UuSj7J02LAK8tTM8Y2RG9Lvnp3_FoiBooNZDsaPiL-Y2hoBxlFPu57sbUERUeLn20uFLG1Q6Z-q6-ZvBHbhjfty1Z0k6KvpNke4bkwT3IlMUaLD4uwFcM_A3Q90L0W8Np5ECY3zu-turm232Hy9ffc0pHz7ewHeXE/s1024/google-form-send-score-02.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuV42zahYGQnNqsQAUIoiVcQMr4-UuSj7J02LAK8tTM8Y2RG9Lvnp3_FoiBooNZDsaPiL-Y2hoBxlFPu57sbUERUeLn20uFLG1Q6Z-q6-ZvBHbhjfty1Z0k6KvpNke4bkwT3IlMUaLD4uwFcM_A3Q90L0W8Np5ECY3zu-turm232Hy9ffc0pHz7ewHeXE/s320/google-form-send-score-02.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖3] 按「回覆」去連結試算表</td></tr></tbody></table><p>再跟著 [圖4] 和 [圖5] 建立新的試算表來連結即可:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSOayyRRcFSOiH9nDJrNweW73Fc-2EikFPB8rmkLoqZaysG5cXrhnDijV1N29mQqJUveE9icgHIrHCBYSgubLNcV9LCowXLT3gQPFNk8KkP0NCcUEB894-XwI2Kp8C7VrxYrDtJljqdR6HZMrQjy4WHlYq9m0IPXukoxCnslNYS88GB4t6QjuQUja_Nz4/s1024/google-form-send-score-03.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSOayyRRcFSOiH9nDJrNweW73Fc-2EikFPB8rmkLoqZaysG5cXrhnDijV1N29mQqJUveE9icgHIrHCBYSgubLNcV9LCowXLT3gQPFNk8KkP0NCcUEB894-XwI2Kp8C7VrxYrDtJljqdR6HZMrQjy4WHlYq9m0IPXukoxCnslNYS88GB4t6QjuQUja_Nz4/s320/google-form-send-score-03.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖4] 按連結至試算表</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LKLBZhVKwTXM3PoZnoOtekCdZTXCgsbBn_bPs-Y6HfJhgMBQ5BYZQo_Q2i8RM9MO0JrGBxWqUC9icUPUEHn0FYDwGEVKQgE1GWMOpGg9SKPUTLiiroNL6Ym6cm2uy9GrbwMZAh7byXsXglbyhYeku1ELO8_g_7YmORFzM1LiKYrykDoiUmMww2tyoI8/s1024/google-form-send-score-04.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LKLBZhVKwTXM3PoZnoOtekCdZTXCgsbBn_bPs-Y6HfJhgMBQ5BYZQo_Q2i8RM9MO0JrGBxWqUC9icUPUEHn0FYDwGEVKQgE1GWMOpGg9SKPUTLiiroNL6Ym6cm2uy9GrbwMZAh7byXsXglbyhYeku1ELO8_g_7YmORFzM1LiKYrykDoiUmMww2tyoI8/s320/google-form-send-score-04.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖5] 選擇建立新試算表</td></tr></tbody></table><p>最後按「建立」即可完成連結至試算表的功能,以後資料都會儲存到該試算表中。</p><h3 style="text-align: left;">開放沒登入 Google 帳號者可以填表單</h3><p>因為 HTML5 FUN 登錄遊戲成績時,是以匿名的方式(沒有登入 Google)去存取 Google 表單,所以表單必須檢查一下「設定」中的「需要登入」這一個選項,將它設定為不需要登入的模式。</p><p>如 [圖6] 在表單設計的畫面上方找到「設定」,進行設定畫面以後,展開「回覆」的設定內容</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7RbNsNzBInnc73NfhGgZXEKmDGg5F23dslIXvj8GcMMbZ8yHDuG1IN-t2Ip5E8m7oE3mNryukeah7lgulbhDFl1t5diouKoxpbjIFvSqHQiT9TXqARmEceaC7xzepG-dFMYpoCcwcxHgbbxM1MN9E3ohyphenhyphen7wCaqOe5tGKzZA1J-_O9CwLIpM0BzPIbjQA/s1024/google-form-send-score-05.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7RbNsNzBInnc73NfhGgZXEKmDGg5F23dslIXvj8GcMMbZ8yHDuG1IN-t2Ip5E8m7oE3mNryukeah7lgulbhDFl1t5diouKoxpbjIFvSqHQiT9TXqARmEceaC7xzepG-dFMYpoCcwcxHgbbxM1MN9E3ohyphenhyphen7wCaqOe5tGKzZA1J-_O9CwLIpM0BzPIbjQA/s320/google-form-send-score-05.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖6] 設定不需要登入</td></tr></tbody></table><p>檢查一下「需要登入」的設定是不是如 [圖6] 的樣子,變成不需要登入即可填寫表單。如果沒有問題,就完成表單的設計囉!</p><h3 style="text-align: left;">複製表單的作答連結</h3><p>建立好表單,接著只要將表單作答的連結,複製好,就可以準備貼到 HTML5 FUN 的遊戲設定中了。表單作答的網址複製可以用兩種方法之一。</p><h4 style="text-align: left;">方法1</h4><p>由表單設計頁面按「預覽」([圖7] 眼睛的圖示)</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8AaJBblKc0CsdMkIMEexKrGshGONRbiCqrbAKexfh2OZqiPxVRHSr5lWcUZMiy3OFWQ5tYSFuAdUmUyNusBM6_iu47QMRnWpPgt_YINjxVTHsIxkT9rQqQ423DTdxmjh2tquW5RnKoaWy63xb2Ri7QGxCJfWvl54jIaG5WKFya6frTTy_k0H8AFf8qmU/s1024/google-form-send-score-06.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8AaJBblKc0CsdMkIMEexKrGshGONRbiCqrbAKexfh2OZqiPxVRHSr5lWcUZMiy3OFWQ5tYSFuAdUmUyNusBM6_iu47QMRnWpPgt_YINjxVTHsIxkT9rQqQ423DTdxmjh2tquW5RnKoaWy63xb2Ri7QGxCJfWvl54jIaG5WKFya6frTTy_k0H8AFf8qmU/s320/google-form-send-score-06.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖7] 按「預覽」開啟表單作答的頁面<br /></td></tr></tbody></table><p>按「預覽」應該會類似 [圖8],出現表單作答的頁面,將瀏覽器上方「網址列」中的網址複製起來:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirJiZ3ZhG2A5Ykk9ftFmSC5apQ2E-SANRmRPwzTIrwoqoQRaxuoIUeXjRcMXmbvi2S6miskzR4_rgFNIo3y2dp3ke8tRvaN-dF0byAajJzUnG6BH8Ks3wW_X8O7_YEwxaNMhqUmSwBBs8VpWg6cQBGC3aTp4tqVPVK5roIXpp0qZ17qo0XHyEqzV-ma3Q/s1024/google-form-send-score-07.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirJiZ3ZhG2A5Ykk9ftFmSC5apQ2E-SANRmRPwzTIrwoqoQRaxuoIUeXjRcMXmbvi2S6miskzR4_rgFNIo3y2dp3ke8tRvaN-dF0byAajJzUnG6BH8Ks3wW_X8O7_YEwxaNMhqUmSwBBs8VpWg6cQBGC3aTp4tqVPVK5roIXpp0qZ17qo0XHyEqzV-ma3Q/s320/google-form-send-score-07.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖8] 複製表單作答的網址</td></tr></tbody></table><h4 style="text-align: left;">方法2</h4><p>如果是在雲端硬碟中,可以由表單的「共用」選單中 [圖9],複製表單作答的網址</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCMjdstYE5iMc8K8GjdML60TAzdlcJKHWhiN-J60K-F6r-lNWAPTMv-q7FY7iTkUg-J6AyV5GJWZqVeHcUQlM3aAhMMfdWHKuxxd_hJny7nb1-hj1PjItId0AW8JP7SMV8W0bGSh_c6SGzr6Dfuj3VQsfl6h4XCTh2QcNiZUkhLynf9u8nZpYsArPDXEE/s1024/google-form-send-score-08.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCMjdstYE5iMc8K8GjdML60TAzdlcJKHWhiN-J60K-F6r-lNWAPTMv-q7FY7iTkUg-J6AyV5GJWZqVeHcUQlM3aAhMMfdWHKuxxd_hJny7nb1-hj1PjItId0AW8JP7SMV8W0bGSh_c6SGzr6Dfuj3VQsfl6h4XCTh2QcNiZUkhLynf9u8nZpYsArPDXEE/s320/google-form-send-score-08.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖9] 由共用中來複製表單作答的網址</td></tr></tbody></table><p>如 [圖9] 所示,按一下左下角的「複製作答者網址」,即可將表單的作答網址複製到剪貼簿中。</p><h3 style="text-align: left;">HTML5 FUN 遊戲設定</h3><p>有了 Google 表單的作答網址,如果是有支援利用表單接收成績的遊戲,但不是使用<a href="https://gsyan888.blogspot.com/2023/05/html5-fun-homepage.html" target="_blank"> HTML5 FUN 烘焙機</a>製作的,建議先下載最近的遊戲壓縮檔,並將該遊戲的主程式更新(例如:spelling.js、listening.js、phonetics_quiz.js )。確認是最新版本以後(烘焙機製作的不用,它一定是最新版),在遊戲的設定檔中找到這個參數:</p><p></p><ul style="text-align: left;"><li>logger_url</li></ul><p></p><p>將前面的兩個斜線刪掉(如果有斜線的話),並將 Google 表單作答網址,貼到引號中,變成類似這樣:</p><p></p><ul style="text-align: left;"><li>logger_url = 'https://docs.google.com/forms/d/e/.........../viewform?usp=sharing';</li></ul><p></p><p>如果是在 HTML5 FUN 烘焙機中,則在「第2步驟」中,展開「其它選項」,然後找到像 [圖10] 的「上載成績記錄用的網址」:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0dUaZyYxpJ_o1zPjuAvpFLn8RG2DEo9QdquP8hq04Hfn_hYKED4c4by8LwPBZmJiEVMtad5K2v83Z_fabcR0vaRwuZa0V3UMKjDgjAyULvQXqjLli2Z4w0Sm5T9sn-0hsOa3-J9uYCT51dXjU0QMg3L6BOqyxWba6kWeMb8F6ewrPNhsnS1EQSxWb2Nw/s1024/google-form-send-score-09.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0dUaZyYxpJ_o1zPjuAvpFLn8RG2DEo9QdquP8hq04Hfn_hYKED4c4by8LwPBZmJiEVMtad5K2v83Z_fabcR0vaRwuZa0V3UMKjDgjAyULvQXqjLli2Z4w0Sm5T9sn-0hsOa3-J9uYCT51dXjU0QMg3L6BOqyxWba6kWeMb8F6ewrPNhsnS1EQSxWb2Nw/s320/google-form-send-score-09.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖10] 烘焙機中貼上表單的作答網址</td></tr></tbody></table><p>將表單的作答網址貼上後,即可玩玩遊戲,測試成績的功能是否有運作囉!</p><h3 style="text-align: left;">成績記錄測試</h3><p>如果遊戲設定了表單作答網址,一進入遊戲,便會要求玩的人輸入使用者代號,可以請學生輸入名牌號碼,或是約定好的代號:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6Zsz9RiQQua4JrEdeYsmFdoSzUXp67s6hE-08pq1UgVikfxV_hadXJkTfzrOwotVnJTBesuo9wVQJ4toqSR7Fh5thSlqUsaidNM1w5zO0V4CJcBVuMIBIyFTK-r9xlNltZXr1A-Wo2Aj2P70XPFeUR5DA26cLXmhRMMpoV6hlRju978_xowCUhu4r20/s1024/google-form-send-score-10.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6Zsz9RiQQua4JrEdeYsmFdoSzUXp67s6hE-08pq1UgVikfxV_hadXJkTfzrOwotVnJTBesuo9wVQJ4toqSR7Fh5thSlqUsaidNM1w5zO0V4CJcBVuMIBIyFTK-r9xlNltZXr1A-Wo2Aj2P70XPFeUR5DA26cLXmhRMMpoV6hlRju978_xowCUhu4r20/s320/google-form-send-score-10.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖11] 遊戲輸入使用者代號的對話框</td></tr></tbody></table><br /><p>遊戲結束時,程式會自動將成績送給指定的 Google 表單,有沒有成功記錄呢?</p><p>很簡單,開啟和該表單建立連結的試算表來查看,便知有沒有:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA4HVvUf73IlOJ9WIUlpGjSq-ZqYOEFcTJRYRbpUzYXFl2yeSpNj2SwmTUwsCxImhmgywur816cUz_domvaKIvtTvFqRfJ84wzrM5gYRLoHXRQkbw-v9Xua0mPuYf8rkNwaGb8V6YALzo5p7l9CWyN9Yvgt3Xa51kOMSa7T-T_GM5wPae1aJ2T5zOilOI/s1024/google-form-send-score-11.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA4HVvUf73IlOJ9WIUlpGjSq-ZqYOEFcTJRYRbpUzYXFl2yeSpNj2SwmTUwsCxImhmgywur816cUz_domvaKIvtTvFqRfJ84wzrM5gYRLoHXRQkbw-v9Xua0mPuYf8rkNwaGb8V6YALzo5p7l9CWyN9Yvgt3Xa51kOMSa7T-T_GM5wPae1aJ2T5zOilOI/s320/google-form-send-score-11.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖11] 試算表中的成績記錄</td></tr></tbody></table><p>由 [圖11] 的記錄表中看來,「Happy雄」錯了一次,在「作答歷程」的欄位中,看到了這一行:</p><p></p><ul style="text-align: left;"><li>angry,5,1,antry</li></ul><p></p><p>題目是「angry」,他用了5秒,將答案輸入成「antry」了。</p><p>以上是 HTML5 FUN 遊戲如何和 Google Form 搭配,記錄學生遊戲成績及歷程的方法。</p><h3 style="text-align: left;">相關連結</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2024/01/html5-fun-google-form-logger-fault-parsing.html" target="_blank">雄: HTML5 FUN : 找出成績記錄中錯的題目</a></li></ul><p></p><ul><li><a href="https://gsyan888.blogspot.com/2023/12/html5-fun-score-logger-gas-2023.html" target="_blank">雄: HTML5 FUN 利用 Google Apps Script 登錄成績</a></li></ul><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">雄:HTML5 FUN 精選集</a></li></ul><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.github.io/html5_fun/">HTML5 FUN</a></li></ul><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2023/05/html5-fun-homepage.html" target="_blank">雄 : 打造自己的遊戲 : HTML5 FUN 烘焙機大彙整</a></li></ul><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2014/08/html5-spelling.html" target="_blank">雄:HTML5 : 單字高手</a></li></ul><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2014/02/html5-phoneticsquiz.html" target="_blank">雄:HTML5 : phonetics_quiz 聽字詞拼注音</a></li></ul><p></p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2022/11/html5-listening.html" target="_blank">雄:HTML5 : Listening 聽音辨字六選一</a></li></ul><p></p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-63605019998700478592023-12-25T01:39:00.000+08:002023-12-25T01:39:42.218+08:00HTML5 FUN 利用 Google Apps Script 登錄成績<p> 2014年曾經使用 Google Apps Script (GAS) 寫了一個 <a href="https://gsyan888.blogspot.com/2014/02/apps-script-scorelogger.html" target="_blank">scoreLogger</a> ,用來接收 HTML5 FUN 部份遊戲傳文來的成績,可以將結果儲存在 Google 試算表中。這幾天將程式再稍修改一下,並讓 GAS 直接放在試算表中,簡化了建立的程序,也限縮程式的權限只及於這個試算表。為了跟 2014 年的版本區別一下,就將這個 Apps Script 的專案名稱取名為「HTML5 FUN scoreLogger 2023」。</p><p>目前 scoreLogger 2023 可以接收 HTML5 FUN 「單字高手」、「聽音辨字」和「注音高手」送來的遊戲成績及作答歷程資料,資料是以 JSON 格式來傳送,有固定的格式,此部份先略過不討論,直接來看看如何利用已製好的「HTML5-FUN-成績記錄-scoreLogger-範本」試算表,來建立自己的 HTML5 FUN 成績登錄工具。</p><h3 style="text-align: left;">以範本建立 scoreLogger</h3><p>底下的網址中的試算表已經內建記錄成績用的程式碼,只要按一下網址,並按類似 [圖1] 頁面中的「建立副本」按鈕,即可新增試算表:</p><p></p><ul style="text-align: left;"><li><a href="https://docs.google.com/spreadsheets/d/1FbQ2Zr8LzoPy0q9gB4JbtZNu2eQ7z1gtqxLeSqbaC1o/copy" target="_blank">https://docs.google.com/spreadsheets/d/1FbQ2Zr8LzoPy0q9gB4JbtZNu2eQ7z1gtqxLeSqbaC1o/copy</a></li></ul><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRIc8ptLAW4oGbZVDRl4A8kqtNAIiDDjWJ0T-XVnOK53t66D33mPMz9L7U0BzfV6bqebpFKTiFhyxtej_o6otDEF8lcW5Ebj81ySfzGKkimdAU60j25xSLFgiUk-4IJEot1UC3mfGdCLzBGWCWkXHWCOHHwLdoWjmNyh5VfSc87yKBBmlxSY3DmsIVXBA/s1024/score-logger-send-score-01.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRIc8ptLAW4oGbZVDRl4A8kqtNAIiDDjWJ0T-XVnOK53t66D33mPMz9L7U0BzfV6bqebpFKTiFhyxtej_o6otDEF8lcW5Ebj81ySfzGKkimdAU60j25xSLFgiUk-4IJEot1UC3mfGdCLzBGWCWkXHWCOHHwLdoWjmNyh5VfSc87yKBBmlxSY3DmsIVXBA/s320/score-logger-send-score-01.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 建立 scoeLogger 試算表副本</td></tr></tbody></table><p>剛建立好的試算表還無法讓 HTML5 FUN 的遊戲呼叫,請繼續進行接下來的「部署」程序。</p><h3 style="text-align: left;">部署網頁應用程式</h3><p>前面建立好的試算表中有程式,我們必須將它變成「網頁應用程式」並授權程式可以將由 HTML5 FUN 送來資料寫入試算表中。</p><p>請先在試算表的主選單中找到「擴充功能」,按一下裡面的「Apps Script」</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJMnk03FRpnqYzh1Tpt78ttgiblRGQ4KVgmgGV6t0qhko3pZyTgSAHq-LC1wjbbVmQcqrwBdriD1tfN7fftTjwqb5I3UMEe0aFOPoIisWxLSMtiKOt46MxDlJ2J8r19p-ro5qSnS9U6H_BuvDV0w8D7FXQMk6SdbI9GXP-OaqRNROvnSq_QsAvWa6AwrQ/s1024/score-logger-send-score-02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJMnk03FRpnqYzh1Tpt78ttgiblRGQ4KVgmgGV6t0qhko3pZyTgSAHq-LC1wjbbVmQcqrwBdriD1tfN7fftTjwqb5I3UMEe0aFOPoIisWxLSMtiKOt46MxDlJ2J8r19p-ro5qSnS9U6H_BuvDV0w8D7FXQMk6SdbI9GXP-OaqRNROvnSq_QsAvWa6AwrQ/s320/score-logger-send-score-02.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 打開 Apps Script</td></tr></tbody></table><p>然後在「HTML5 FUN scoreLogger 2003」的中,按一下「部署」的按鈕,再按一下「新增部署作業」</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGJ-GHKm0J_PR6orcTdsDnZx3syaRQY-zXZUNyJwpayuWxDPkzPXP4RzhBrnRu-lEr5LT73QQ3Sn39lJ8ejfzlnrRvi2_MkKTd_1u1Hcvin0gLT39Os-aHG5FLJUGDRIOfiYMWfCZnaXN-jwCzqpi8yYS7DQHtDeTtobMtHHKZptXatnUJx8Mhl2Ux4ag/s1024/score-logger-send-score-03.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGJ-GHKm0J_PR6orcTdsDnZx3syaRQY-zXZUNyJwpayuWxDPkzPXP4RzhBrnRu-lEr5LT73QQ3Sn39lJ8ejfzlnrRvi2_MkKTd_1u1Hcvin0gLT39Os-aHG5FLJUGDRIOfiYMWfCZnaXN-jwCzqpi8yYS7DQHtDeTtobMtHHKZptXatnUJx8Mhl2Ux4ag/s320/score-logger-send-score-03.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖3] 新增的部署作業</td></tr></tbody></table><p>按「選擇類型」的圖示,並點選「網頁應用程式」</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr8GNmIB2_u6JE3lobZoi5yluJZOlZGF0raSGVPXDbc3wxXMimsDPYDF_0xd2mcK0lguWs7W3hmgYFRgY3Cq_6uIIxCZc7-jvZAEj6KEVyFr5EvfR-EWsaIZvKqoLW5KuxbAV-HjM9TXUQ5jTQ1AdgIYwIbyK-9e4I1cSaEaBB37ap6e0_i_3inF2Ixrs/s1024/score-logger-send-score-04.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr8GNmIB2_u6JE3lobZoi5yluJZOlZGF0raSGVPXDbc3wxXMimsDPYDF_0xd2mcK0lguWs7W3hmgYFRgY3Cq_6uIIxCZc7-jvZAEj6KEVyFr5EvfR-EWsaIZvKqoLW5KuxbAV-HjM9TXUQ5jTQ1AdgIYwIbyK-9e4I1cSaEaBB37ap6e0_i_3inF2Ixrs/s320/score-logger-send-score-04.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖4] 選擇網頁應用程式的類型</td></tr></tbody></table><p>在「設定」中,依 [圖5] 的設定,這樣設定:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcpoEV5LFrOfr4kPd5HMAln1q84phr6NUjClQcktiDRWyckULRgM1X6GoGbQVHSb0cJhRlWUYmR4TFlsAnbnPME1LxFgOLFsIPfgEnUaeYOCqSfhZ7dwaRsDLXqc5JxRrjJFxGork_WBB3bqcgn7Xd5Sb0BDsbHFI_7YOmAlPhjGT2FFTJoGX7JX3HOyE/s1024/score-logger-send-score-05.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcpoEV5LFrOfr4kPd5HMAln1q84phr6NUjClQcktiDRWyckULRgM1X6GoGbQVHSb0cJhRlWUYmR4TFlsAnbnPME1LxFgOLFsIPfgEnUaeYOCqSfhZ7dwaRsDLXqc5JxRrjJFxGork_WBB3bqcgn7Xd5Sb0BDsbHFI_7YOmAlPhjGT2FFTJoGX7JX3HOyE/s320/score-logger-send-score-05.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖5] 網頁應用程式的設定</td></tr></tbody></table><p></p><ul style="text-align: left;"><li>新增說明:自行輸入文字。</li><li>執行身分:一定要選「我 (.....)」,才能將資料寫入試算表中。</li><li>誰可以存取:一定要選「所有人」,這樣 HTML5 FUN 遊戲才能使用。</li></ul><p></p><p>都設定好了,就可以按「部署」的按鈕。</p><h3 style="text-align: left;">授予存取權</h3><p>因為這個 scoreLogger 「網頁應用程式」需要寫入資料到試算表中,所以緊接著我們要讓程式有存取試算表的權限,請按 [圖6] 畫面中「授予存取權」的按鈕</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4QwwOlSbBajc1TmWZPyf31RfSEuNM_s3SG05pGt86u8GNV4PeNcnBRtWucFZsAZp7Ll8IZ6tBIpjzhZ12R_Jfr_8-M5m1J4rTQtG4oEvyw2qfZaoykm77KdvGz8wBvrgxR03GdopXXbTfbyraubXE1zRLKVDC_87-zw_KPyREX3ZbRInzePcptvW7m9w/s1024/score-logger-send-score-06.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4QwwOlSbBajc1TmWZPyf31RfSEuNM_s3SG05pGt86u8GNV4PeNcnBRtWucFZsAZp7Ll8IZ6tBIpjzhZ12R_Jfr_8-M5m1J4rTQtG4oEvyw2qfZaoykm77KdvGz8wBvrgxR03GdopXXbTfbyraubXE1zRLKVDC_87-zw_KPyREX3ZbRInzePcptvW7m9w/s320/score-logger-send-score-06.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖6] 授予存取權</td></tr></tbody></table><p>出現授權的對話框,先按一下擁有這個試算表的 Google 帳號</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7VvIw7xpud9OrAllsx6BjOSOzMJEod99JrVBQZ7a63mXQGl7DXDp_R0PKxoIDMmnIpxn9LxyL53rbWog30qOvaagC_X-2rZ8D_lP9a7MD7mYK2CUs2qZ4rniqCoTEApI4-madIfTL977mvUdyPC1N_jnqIMsXJ7wQ-sH-knitSBG8NFx6ime1w6HhMVk/s1024/score-logger-send-score-07.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7VvIw7xpud9OrAllsx6BjOSOzMJEod99JrVBQZ7a63mXQGl7DXDp_R0PKxoIDMmnIpxn9LxyL53rbWog30qOvaagC_X-2rZ8D_lP9a7MD7mYK2CUs2qZ4rniqCoTEApI4-madIfTL977mvUdyPC1N_jnqIMsXJ7wQ-sH-knitSBG8NFx6ime1w6HhMVk/s320/score-logger-send-score-07.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖7] 選擇試算表擁有者的帳號</td></tr></tbody></table><p>接著按 [圖8] 中「Allow」的按鈕,允許網頁應用程式擁有存取試算表的權限。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCykAotpWw1uUrTgSqPEPv-u3sTuS9I-alX7izdS5yc2s146ozZ2EVwZQ0aAY03PrlaR8dLZHmuvNYbNfZViE3rDv7OIMt2qDfRRi0ygn_tZy2h1w77Ssp_GQ2dskyEb7AHIkvZHdm2QFf3hAIJy9PND8Qh2xEBM-gmyRAsTGbxl7rDJ6etTSC7F1jOsc/s1024/score-logger-send-score-08.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCykAotpWw1uUrTgSqPEPv-u3sTuS9I-alX7izdS5yc2s146ozZ2EVwZQ0aAY03PrlaR8dLZHmuvNYbNfZViE3rDv7OIMt2qDfRRi0ygn_tZy2h1w77Ssp_GQ2dskyEb7AHIkvZHdm2QFf3hAIJy9PND8Qh2xEBM-gmyRAsTGbxl7rDJ6etTSC7F1jOsc/s320/score-logger-send-score-08.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖8] 按 Allow 鈕允許授權</td></tr></tbody></table><p>這樣子就完成網頁應用程式的部署與授權程序了。可以像 [圖9] 按一下網頁應用程式網址下方的「複製」鈕,將 HTML5 FUN 遊戲記錄成績時所需要的網址複製到剪貼簿中。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSftno-huPMCwEYpWYN60_QcY4dI-Mm2FkGr0GjJbrAOhv4c4MuJFYgOZ-vPoG2rS1j-Y_obcmggHeU3O_ON1Ub6ZA365nYJjVBH9f4xb743WkLy8CTq9aGVFNnvOwBSbxrda3bTapUIsC6UfVKEJn6ugLAX6DJ4hL73k2djOItZGnRgAYh3zsWaYPq4U/s1024/score-logger-send-score-09.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSftno-huPMCwEYpWYN60_QcY4dI-Mm2FkGr0GjJbrAOhv4c4MuJFYgOZ-vPoG2rS1j-Y_obcmggHeU3O_ON1Ub6ZA365nYJjVBH9f4xb743WkLy8CTq9aGVFNnvOwBSbxrda3bTapUIsC6UfVKEJn6ugLAX6DJ4hL73k2djOItZGnRgAYh3zsWaYPq4U/s320/score-logger-send-score-09.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖9] 完成部署作業</td></tr></tbody></table><p>複製完網頁應用程式的網址再按「完成」鈕,離開部署的對話框。</p><h3 style="text-align: left;">複製網頁應用程式的網址</h3><p>前面提到我們可以在部署程序的最後一個畫面中,按「複製」鈕來複製網頁應用程式的網址,如果手按太快,對話框已經關閉了,如何再重新複製網址?</p><p>沒關係!按一下「HTML5 FUN scoreLogger 2023」頁面上方的「部署」,再點選「管理部署作業」:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWo3_NTIh589hB96Jm6xEu_aob8NC8TrEXgbCO7F4MN95xgdkjoaOkZCicSTpSa1JkeSvrh_l8A7aQBB1yS-j0-pnPc9KQd-ea9CZcLbSXRyU5KkFNIJheuoQwnv7kunk52QJJkd4wngZezOJI8HHdLpXEzBmtJd_LPK0SLUSJOF79Yp02TYKhF6w99c8/s1024/score-logger-send-score-10.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWo3_NTIh589hB96Jm6xEu_aob8NC8TrEXgbCO7F4MN95xgdkjoaOkZCicSTpSa1JkeSvrh_l8A7aQBB1yS-j0-pnPc9KQd-ea9CZcLbSXRyU5KkFNIJheuoQwnv7kunk52QJJkd4wngZezOJI8HHdLpXEzBmtJd_LPK0SLUSJOF79Yp02TYKhF6w99c8/s320/score-logger-send-score-10.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖11] 管理部署作業</td></tr></tbody></table><p>就可以再度看到「複製」的按鈕囉!</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv4C6nFz68JWO6iTTpTSeql4d5FTtg_-qkLVDMuyiYnyvdO5Tzjlg0veHX5jwmsnDgv8f38dUn-bGsZ9UdosRHb6UQFuY_0HqpJ0sr-qul2msbUanwCR3rVULqYzxq1QHeNSywIVdx3f6NhbHBJY_mslUPoIPsIRQB4GHRaEuJ2ZoFfI7UYtf9GWgd75c/s1024/score-logger-send-score-11.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv4C6nFz68JWO6iTTpTSeql4d5FTtg_-qkLVDMuyiYnyvdO5Tzjlg0veHX5jwmsnDgv8f38dUn-bGsZ9UdosRHb6UQFuY_0HqpJ0sr-qul2msbUanwCR3rVULqYzxq1QHeNSywIVdx3f6NhbHBJY_mslUPoIPsIRQB4GHRaEuJ2ZoFfI7UYtf9GWgd75c/s320/score-logger-send-score-11.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖12] 由管理部署作業中複製網址</td></tr></tbody></table><h3 style="text-align: left;">設定 HTML5 FUN 遊戲</h3><p>剪貼簿中已經有了 scoreLogger 網頁應用程式的網址了,只要將網址貼到 HTML5 FUN 有支援成績登錄功能的遊戲設定中,就能進行測試。</p><p>開啟遊戲設定,找到這個參數:</p><p></p><ul><li>logger_url</li></ul><p></p><p>將前面的兩個斜線刪掉(如果有斜線的話),並將 scoreLogger 網頁應用程式的網址,貼到引號中,變成類似這樣:</p><p></p><ul><li>logger_url = 'https://script.google.com/macros/s/.........../exec';</li></ul><p></p><p>如果是在 HTML5 FUN 烘焙機中,則在「第2步驟」中,展開「其它選項」,然後找到像 [圖] 的「上載成績記錄用的網址」</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJwy7Wr9EMPXVoeNfAQY5m6oaLcGkWexXBycRk24lu6z3uAvH1Lj1IcqHnFbuBjtAJpYJ8oDPPQUS_KdTpki7v0EEuoWkW9vNH1bSMY1ZjP6wb9jFmRnRSs1T3ir_hcCyuwGa7p3zylh5G6_czNXORDGBuDw2G3aJizUhhPKCDXt5o4N9VUFaaYJVfKPM/s1024/score-logger-send-score-12.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJwy7Wr9EMPXVoeNfAQY5m6oaLcGkWexXBycRk24lu6z3uAvH1Lj1IcqHnFbuBjtAJpYJ8oDPPQUS_KdTpki7v0EEuoWkW9vNH1bSMY1ZjP6wb9jFmRnRSs1T3ir_hcCyuwGa7p3zylh5G6_czNXORDGBuDw2G3aJizUhhPKCDXt5o4N9VUFaaYJVfKPM/s320/score-logger-send-score-12.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖13] 在烘焙機中貼上 scoreLogger 網路應用程式的網址</td></tr></tbody></table><p>將 scoreLogger 的網址貼上後,即可玩玩遊戲,測試成績的功能是否有運作囉!</p><h3 style="text-align: left;">成績登錄測試</h3><p>在 HTML5 FUN 遊戲中設定好成績登錄的網址以後,重新開啟遊戲時,應該會先詢問使用者代號,可以建議學生使用較好輸入並識別的代號(例如: 名牌號碼)。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOgN8Kq5LqsizwBQDD4qmuG66ti14Twghdc7Ir43I6GyoVaH0SI3Q2Lsoy8d_LB-NmhiqHIG9PmZWUZ7G8FRYC0CMYZ0PAJ381RyhCV6nIQAzoVPXuo0MLdjzy98hUJGHsLFSKr9fKzAAyvZPDf_08r8NO_oBokU7wcxSkRqG1xQ1OogktKMk2FVpIE3g/s1024/score-logger-send-score-13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOgN8Kq5LqsizwBQDD4qmuG66ti14Twghdc7Ir43I6GyoVaH0SI3Q2Lsoy8d_LB-NmhiqHIG9PmZWUZ7G8FRYC0CMYZ0PAJ381RyhCV6nIQAzoVPXuo0MLdjzy98hUJGHsLFSKr9fKzAAyvZPDf_08r8NO_oBokU7wcxSkRqG1xQ1OogktKMk2FVpIE3g/s320/score-logger-send-score-13.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖14] 在遊戲中輸入使用者代號</td></tr></tbody></table><p>底下來觀察一下成績到底記錄了些什麼,以 HTML5 FUN 的聽音辨字為例,第一題故意選錯的選項三次,第四次才按對的答案:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikyFUoHY71vXoAZti56tHQGm-4ecdoi62FLOEqbIezqm3qRi7rZmkrVqcm3rz2NW1xpfnaJh5XOm7QCFx4rxyClbBh2f3z2MbJLg9Q6ATNb8sZZPARhlUqFujFxgZv356S-Cf4EbLGBb9x0AH4W1ZUvvu6zn2BZkF0d0MASh02c_soWaG8hEyL0Ubu9Sc/s1024/score-logger-send-score-14.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikyFUoHY71vXoAZti56tHQGm-4ecdoi62FLOEqbIezqm3qRi7rZmkrVqcm3rz2NW1xpfnaJh5XOm7QCFx4rxyClbBh2f3z2MbJLg9Q6ATNb8sZZPARhlUqFujFxgZv356S-Cf4EbLGBb9x0AH4W1ZUvvu6zn2BZkF0d0MASh02c_soWaG8hEyL0Ubu9Sc/s320/score-logger-send-score-14.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖15] 試玩聽音辨字第一題</td></tr></tbody></table><p>參考 [圖15] ,最後遊戲的成績是:</p><p></p><ul style="text-align: left;"><li>失誤次數:3次。</li><li>作答時間:40秒。</li></ul><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgODOXwo71ZX6bD2qlGdXG4Fc-YsTxDK2CUbYYyimz8_0gu6xE5lfsuRddgU8zJx5A2wBbiYHHDtUQ0_kv2B3bc020A-wAmQK7uksvTyrVS2gRoY6KjUfZgPQKSrkT4yWDgLT-l9O1Vbdx0DHk0nrKet-LsNt3V_TmhwSA92SekjAWRSKAKZQpOjCWWmKM/s1024/score-logger-send-score-15.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgODOXwo71ZX6bD2qlGdXG4Fc-YsTxDK2CUbYYyimz8_0gu6xE5lfsuRddgU8zJx5A2wBbiYHHDtUQ0_kv2B3bc020A-wAmQK7uksvTyrVS2gRoY6KjUfZgPQKSrkT4yWDgLT-l9O1Vbdx0DHk0nrKet-LsNt3V_TmhwSA92SekjAWRSKAKZQpOjCWWmKM/s320/score-logger-send-score-15.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖16] 遊戲的成績報告</td></tr></tbody></table><p>對照一下 [圖17] ,在成績記錄的試算表的「總表」中是這樣:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8HU3t6R6_z8eAQ1QiyPUDDyyiR6lKP4It5IW_W2Gdy584IxTYCMqmwb4L5ho_wcsPL4AjM6MTJpeVNfNlNPJGqEAhshaWxkkyJRtzMxIOmI0yVXgYuJEov6ysoFmNfgrvoc08uTtknowIng0z17rxINcRLr-l3t5gkuanCg2XvX6DyoplbCydOpdbVc/s1024/score-logger-send-score-16.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8HU3t6R6_z8eAQ1QiyPUDDyyiR6lKP4It5IW_W2Gdy584IxTYCMqmwb4L5ho_wcsPL4AjM6MTJpeVNfNlNPJGqEAhshaWxkkyJRtzMxIOmI0yVXgYuJEov6ysoFmNfgrvoc08uTtknowIng0z17rxINcRLr-l3t5gkuanCg2XvX6DyoplbCydOpdbVc/s320/score-logger-send-score-16.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖17] 試算表的「總表」記錄內容</td></tr></tbody></table><p>試算表中,作答歷程則是在另一個工作表中,記錄的內容是這樣:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMOh8ePudXSx_wvsNl0Bt49wwC3mRpqBMeJTEicyYTo772D6F_eXQZclT2-xNiDdTg_j293tdcMURayfVfE_3uSTaDVFaWtAH3Ga9K1Pks7KWF-tCvZeUEp6RY-Shaoi8odbvv2WLRKDFdKNM8YVeDdS1qVnHnIa53tYIZZgbtkxWfhmJzC5jT6eAbok/s1024/score-logger-send-score-17.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMOh8ePudXSx_wvsNl0Bt49wwC3mRpqBMeJTEicyYTo772D6F_eXQZclT2-xNiDdTg_j293tdcMURayfVfE_3uSTaDVFaWtAH3Ga9K1Pks7KWF-tCvZeUEp6RY-Shaoi8odbvv2WLRKDFdKNM8YVeDdS1qVnHnIa53tYIZZgbtkxWfhmJzC5jT6eAbok/s320/score-logger-send-score-17.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖18] 試算表中作答歷程的記錄</td></tr></tbody></table><p>注意 [圖18] 中,第一題,「回答1」、「回答2」、「回答3」三個欄位(紅色箭頭)都是錯誤的選擇,到「回答4」的欄位(綠色箭頭)才是對的答案。</p><p>此部份可以和另一個以 <a href="https://gsyan888.blogspot.com/2023/12/html5-fun-google-form-save-score.html" target="_blank">Google Form 來記錄 HTML5 FUN 遊戲成績</a>的試算表來比較一下,看哪一種方式較清楚。</p><h3 style="text-align: left;">相關連結</h3><ul><li><a href="https://gsyan888.blogspot.com/2023/12/html5-fun-google-form-save-score.html" target="_blank">雄: HTML5 FUN : 利用 Google Form 登錄遊戲成績</a></li></ul><p></p><ul><li><a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">雄:HTML5 FUN 精選集</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.github.io/html5_fun/">HTML5 FUN</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2023/05/html5-fun-homepage.html" target="_blank">雄 : 打造自己的遊戲 : HTML5 FUN 烘焙機大彙整</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2014/08/html5-spelling.html" target="_blank">雄:HTML5 : 單字高手</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2014/02/html5-phoneticsquiz.html" target="_blank">雄:HTML5 : phonetics_quiz 聽字詞拼注音</a></li></ul><p></p><p></p><ul><li><a href="https://gsyan888.blogspot.com/2022/11/html5-listening.html" target="_blank">雄:HTML5 : Listening 聽音辨字六選一</a></li></ul><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2014/02/apps-script-scorelogger.html" target="_blank">雄:Apps Script : 用 scoreLogger 來接收遊戲作答記錄</a> (2014年舊版)</li></ul><p></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-88703626647823917792023-12-22T15:03:00.002+08:002023-12-22T15:03:34.970+08:00Google Form:讓程式抓得到參數的第一步<p>Google Form 可以用程式抓表單的參數,也可以用程式自動填寫表單,但為了簡單化,要先將表單改為可以不用登入填寫,哈! 好一陣子沒用就會忘東忘西,所以還是記錄一下如何設定。</p><p>開啟表單以後,按「設定」的分頁,並展開「回覆」:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDytNAqtjEgFCl69pxrlEwKSACGCwhl5EDZiT5p7uMTQ-Zw9Uco8xcYQprsCWiU98fHpDp7-AR8-TyiQaSNQhZKDZk8TK3MN2QaHNO09Np1WLpNg82DD36qwEdmKzKlASml4ttUE7PRgbJqcIUQ0CIjh_9eXZbytQGAgpNJxTvBJ0v-BCFZRnpVIQBK0/s1024/google-form-anonymous-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDytNAqtjEgFCl69pxrlEwKSACGCwhl5EDZiT5p7uMTQ-Zw9Uco8xcYQprsCWiU98fHpDp7-AR8-TyiQaSNQhZKDZk8TK3MN2QaHNO09Np1WLpNg82DD36qwEdmKzKlASml4ttUE7PRgbJqcIUQ0CIjh_9eXZbytQGAgpNJxTvBJ0v-BCFZRnpVIQBK0/s320/google-form-anonymous-1.png" width="320" /></a></div><p>將「需要登入」「僅限 ... 中的使用者」的選項關閉,變成:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGSYs0ZvuljxZKXnkTZXUa3HqXp9f5K-FXWLncfGlvtpK50k0s0HPfol3R7Gpo4L-4psnzrvQ0ILWnjCW2UDj7101YLKqyTf7r03WjZlhrpoiDLaL7TrrjPCupRdOHfChakSZzWKElFp1wLp1JpmcUeqjk5UsVbx5TbBKotxeJZ9J0cdECuqNLiKG9OrQ/s1024/google-form-anonymous-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGSYs0ZvuljxZKXnkTZXUa3HqXp9f5K-FXWLncfGlvtpK50k0s0HPfol3R7Gpo4L-4psnzrvQ0ILWnjCW2UDj7101YLKqyTf7r03WjZlhrpoiDLaL7TrrjPCupRdOHfChakSZzWKElFp1wLp1JpmcUeqjk5UsVbx5TbBKotxeJZ9J0cdECuqNLiKG9OrQ/s320/google-form-anonymous-2.png" width="320" /></a></div><p>好了!這麼簡單就踏出成功的第一步,剩下的,就交給程式來辦吧!</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-58510911483767090772023-12-21T12:50:00.002+08:002023-12-21T12:50:33.645+08:00DIY : 吉他弦當時鐘指針<p>繼2020年11月左手五十肩犯,右手也來找麻煩了,因此吉他一個多禮拜沒碰。昨晚氣溫驟降,吉他的第五弦不知什麼時候就這麼斷了。本來在換新弦的,突然想到之前電視遙控器的按鈕不靈光,我用細銅線「穿刺」後,當按鈕的導體(參見「<a href="https://gsyan888.blogspot.com/2021/12/diy-fixing-remote-controller-button-4.html" target="_blank">雄:DIY : 遙控器按鈕回春術之四</a>」),好用,但是久了因為潮溼(仔細看,按鈕下方居然積水),銅線氧化變黑,就有不靈光了。哈!找到之前換下來的吉他第四弦,還亮晶晶的!雖不知道是什合金的,將原來包覆在絲線的金屬絲展開來,再度施展「穿刺之術」,當遙控器按鍵下方的導體,他日再來看看這回能撐多久。</p><p>一個不小心,撞倒了放在電腦主機上方的時鐘機芯,這個機芯是上週房間時鐘換新機芯後拆下來的,想說好玩,只將它以橡皮筋固定在一個小瓶子上擉著;這麼一摔到地上,單薄的鋁製指針,當然是撞歪了。哈!剛玩完「吉他弦按鈕」,繼續拿斷掉的吉他弦來玩。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqhe9lk5WrBOwn00zq7eIdpkRbZeTf3sBV70ktt31HBUADc7WCWy_AP-lC9EEOzoN5WkSv1nas-CtTGznwfnCO6m-MJ95z7vtGjcqH5FYKhL3h2rVToglGB8_bP_Iw6dc0yKKomflFfkjLWSElEsh6pDTq3WHweA9s9mLq91FgKsqm_baIviY631wqda0/s1024/diy-guitar-sting-clock-hands-1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqhe9lk5WrBOwn00zq7eIdpkRbZeTf3sBV70ktt31HBUADc7WCWy_AP-lC9EEOzoN5WkSv1nas-CtTGznwfnCO6m-MJ95z7vtGjcqH5FYKhL3h2rVToglGB8_bP_Iw6dc0yKKomflFfkjLWSElEsh6pDTq3WHweA9s9mLq91FgKsqm_baIviY631wqda0/s320/diy-guitar-sting-clock-hands-1.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] 吉他弦做的時鐘指針</td></tr></tbody></table><p>[圖1] 中用的是古典吉他的第六弦,金屬線好塑型,又有彈性,拿來當時鐘的指針,bling~bling~ 的。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYbFBldSrAJeO2J40vWYFO2RW_Bc57EHx0ThAIOa7oGN-ijXk0IElWAkFeSRdok4cWIHd89p6yG5d1MkXXkzjHSjEbdV2tSKdTeYfObIV3rMIbAqT_SOO3CRS56UgUoN9SMi8Szj4dn2ml1m-UCE3ilb0-ll8ckm5FdpKbxvBXuIAtYuMrLpBs6Rjm95Q/s1024/diy-guitar-sting-clock-hands-4.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYbFBldSrAJeO2J40vWYFO2RW_Bc57EHx0ThAIOa7oGN-ijXk0IElWAkFeSRdok4cWIHd89p6yG5d1MkXXkzjHSjEbdV2tSKdTeYfObIV3rMIbAqT_SOO3CRS56UgUoN9SMi8Szj4dn2ml1m-UCE3ilb0-ll8ckm5FdpKbxvBXuIAtYuMrLpBs6Rjm95Q/s320/diy-guitar-sting-clock-hands-4.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] 古典吉他的第四弦</td></tr></tbody></table><p>[圖2] 的則是古典吉他的第四弦,金屬線較細,拿來穿遙控器按鈕很好操作。</p><p>這個 2014年買的時鐘, 舊機芯用的是三號電池,為了能再利用因為電力不足,點不著自行車的四號電池,可以用巧拼貼剪下的泡棉,中央穿一片銅箔當導體,像 [圖3] 這樣:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpEqW-WS_IwX4GUcvn84yoYvOZGsn5RUPO0mLudbTSioiQKbmP1UGSu8FvksMablkEoMxcZHmENKsynW09yFHNsHGDSGrSFsXqyTUU33s527TFSvzSiq_5TsNH_-dRIqmSb2saitZiauEmQUnFbbnY4PM_XiTS1h2flV14O6hqkxAxKisPlGB_-N7qpY/s1024/diy-guitar-sting-clock-hands-2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpEqW-WS_IwX4GUcvn84yoYvOZGsn5RUPO0mLudbTSioiQKbmP1UGSu8FvksMablkEoMxcZHmENKsynW09yFHNsHGDSGrSFsXqyTUU33s527TFSvzSiq_5TsNH_-dRIqmSb2saitZiauEmQUnFbbnY4PM_XiTS1h2flV14O6hqkxAxKisPlGB_-N7qpY/s320/diy-guitar-sting-clock-hands-2.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖3] 四號電池的「墊腳石」</td></tr></tbody></table><p>將銅箔加泡棉做的四號電池「墊角石」放到三號電池的電池盒中:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidAgdctUDPNpkhlwh69h41oH8DMg5tUUE_E3lum_dVbv9rliMIpDHgKmfNU-HDjjMLgKyeovz32MjyPC14sVTPd1ZXXJfkjMnYVkAjewgyruSJxnvFSZ0lvyfumTa6eJnwO9FnfFKSVWl2jgXIw4mr_0O7ueIop4CI8lyXXxXmSjO7nxRq4W83p_tHHHs/s1024/diy-guitar-sting-clock-hands-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidAgdctUDPNpkhlwh69h41oH8DMg5tUUE_E3lum_dVbv9rliMIpDHgKmfNU-HDjjMLgKyeovz32MjyPC14sVTPd1ZXXJfkjMnYVkAjewgyruSJxnvFSZ0lvyfumTa6eJnwO9FnfFKSVWl2jgXIw4mr_0O7ueIop4CI8lyXXxXmSjO7nxRq4W83p_tHHHs/s320/diy-guitar-sting-clock-hands-3.jpg" width="320" /></a></div><p>運用了泡棉的彈性,感覺比之前用 3D printer 印的「電池轉換盒」好用多了;泡棉用剪刀剪一剪,剪成「火山」貌的錐形,很好施作,凸的一邊靠電池盒負極的張簧片,平的一面對電池負極;不用等 3D printer 一層層印,耗掉很多時間,泡棉又有彈性,只要穿一片導體,不用再加工。</p><p>哈~感覺好久沒玩手作了,應該要開始再來玩東玩西,亂玩一通才對,這個比寫程式又更好玩!</p><h3 style="text-align: left;">相關文章</h3><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2021/12/diy-fixing-remote-controller-button-4.html" target="_blank">雄:DIY : 遙控器按鈕回春術之四</a></li></ul><p></p><p><br /></p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-91867464632993483572023-12-21T00:08:00.002+08:002023-12-21T00:55:29.561+08:00Google Apps Script Web App 發布後網址的問題<p>今天一位朋友問到 HTML5 FUN <a href="https://gsyan888.blogspot.com/2014/08/html5-spelling.html" target="_blank">單字高手</a>是否能記錄成績?成績記錄的功能,早期是用 PHP ,然後程式放在學校的 web server,後來因為沒有管學校的伺服器,就改用 Google Apps Script ,資料則是儲存到 Google Drive 的試算表中,此部份在 2014 年的這篇文章中有記錄:</p><p></p><ul style="text-align: left;"><li><a href="https://gsyan888.blogspot.com/2014/02/apps-script-scorelogger.html" target="_blank">雄:Apps Script : 用 scoreLogger 來接收遊戲作答記錄</a></li></ul><p></p><p>當時HTML5 FUN 「單字高手」支援 PHP 的成績記錄,而 「<a href="https://gsyan888.blogspot.com/2022/11/html5-listening.html" target="_blank">聽音辨字</a>」及「<a href="https://gsyan888.blogspot.com/2014/02/html5-phoneticsquiz.html" target="_blank">注音高手</a>」可以支援以 scoreLogger 來記錄成績。</p><p>今天試了一下,scoreLogger 除了文章中的「程式庫」(現在 Google Apps Script 新編輯器改稱「資料庫」)的「專案金鑰」已經不同:</p><p></p><ul style="text-align: left;"><li>1uWS1QYrEIYtWwdb6dvkAJYYa6KQqxWmfD2xxv2L88iYRo4VQSU1scSGP</li></ul><p style="text-align: left;">還有新版編輯器的配置、名稱有異,基本上,功能是是沒有問題的。</p><p style="text-align: left;">大問題來了!這個大問題在前一陣子改別的 Google Apps Script 時,也是浪費了我很多時間才發現不是我的錯。</p><p style="text-align: left;">我們將 Google Apps Script 以 Web App (網頁應用程式)「部署」以後,會得到一個類似這樣格式的網址,:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>https://script.google.com/macros/s/aaabbbcccdddfffgg/exec</li></ul><p></p><p style="text-align: left;">因為我的程式是「部署」為任何人都可以執行,這個網址(前面這個是亂編的 XD )如果是在「無痕視窗」,或是只有用一個 Google 帳號登入的瀏覽器,都可以正常執行。不幸的,如果是用多個 Google 帳號登入下開啟,網址會被 Google 改為類似這樣:</p><ul><li>https://script.google.com/macros<span style="font-size: large;">/u/2</span>/s/aaabbbcccdddfffgg/exec</li></ul><p style="text-align: left;">看得出來嗎?被硬生生地加了料,此例加了「/u/2」,這樣一來,因為網址已經不是原來 Web App 的網址,肯定出錯的!</p><p style="text-align: left;">我會發現是因為前一陣子,在多個 Google 帳號登入的狀況下,想用另一個帳號在試算表中寫 Google Apps Script 時,會出現錯誤,開不了編輯器,必須用這樣的方法之一:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>開啟 <a href="https://script.google.com/" target="_blank">https://script.google.com/</a> ,然後才切換帳號使用。</li><li>在「無痕視窗」中,以要用的 Google 帳號登入後使用(但絕對不要再用別的 Google 帳號登入了)。</li></ul><p></p><p style="text-align: left;">原來這個問題已經存在好多年了,只是我以前都只用一個 Google 帳號,所以才沒發現。來看看一堆的在討論區中哀嚎:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li><a href="https://issuetracker.google.com/issues/72798634" target="_blank">https://issuetracker.google.com/issues/72798634</a></li></ul><p></p><p style="text-align: left;">自動「亂改」網址,這對開發者實在困擾啊!因為我們無法預期開網址的人,會不會用多帳號登入。</p><p style="text-align: left;">先記錄一下,我玩了一點的小心得,透過類似 <a href="https://corsproxy.io" target="_blank">CorsProxy</a> 的 CORS 代理伺服器來開簡易的 Web App,像前亂編的例子,就改用:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>https://corsproxy.io/?https://script.google.com/macros/s/aaabbbcccdddfffgg/exec</li></ul><p></p><p style="text-align: left;">因為是透過代理伺服器處理過,Google 端會當匿名使用(相當於無痕視窗中開啟),所以不會加多識別多帳號用的「/u/?」,然後就可以正常進行成績登錄。當然囉!得是像我記錄成績的程式,主要是接收資料,不會有複雜回應的,問題較少。</p><p style="text-align: left;">遇到多年不清除的臭蟲,看來只能自求多福,想別的方法了。目前的備案就是透過 Google Form + 試算表了。缺點是 HTML5 FUN 的程式又得配合著改,等完成再記錄了。</p><h3 style="text-align: left;">相關連結</h3><ul><li><a href="https://gsyan888.blogspot.com/2014/02/apps-script-scorelogger.html" target="_blank">雄:Apps Script : 用 scoreLogger 來接收遊戲作答記錄</a></li><li><a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">雄:HTML5 FUN 精選集</a></li><li><a href="https://gsyan888.blogspot.com/2014/08/html5-spelling.html" target="_blank">雄:HTML5 : 單字高手</a></li><li><a href="https://gsyan888.blogspot.com/2014/02/html5-phoneticsquiz.html" target="_blank">雄:HTML5 : phonetics_quiz 聽字詞拼注音</a></li><li><a href="https://gsyan888.blogspot.com/2022/11/html5-listening.html" target="_blank">雄:HTML5 : Listening 聽音辨字六選一</a></li></ul><p style="text-align: left;"><br /></p><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-757458446484353263.post-16691029516693684392023-12-04T14:07:00.022+08:002024-02-01T01:07:27.762+08:00HTML5 : 東拼西湊小教具<p>
2023年11月初,好友<a href="https://glglace.blogspot.com/" target="_blank">江明勳老師</a>發想一個數位工具:「可以劃一條線,把圖形切開成兩部分,每個部分都可以移動和旋轉」。以國小的數學課來說,我們常需要搭配教科書的附件,將附件中的圖形剪下、排列、黏貼......,以實體的操作讓處於具體運思期的學生,達到更理解課本內容之目的。數位工具如果搭配有觸控螢幕的載具,可以反覆的操作練習,也是另一種學習或是教學的方式。
</p>
<p>本文中的「HTML5 東拼西湊」可以載入圖片,然後將圖片進行以下處理:</p>
<p></p>
<ul style="text-align: left;">
<li>剪截</li>
<li>切割</li>
<li>移動</li>
<li>旋轉</li>
<li>鏡像</li>
<li>塗鴉</li>
</ul>
<p></p>
<p>
當然囉!這些功能也可以使用影像處理的工具,不過「HTML5
東拼西湊」是專門應用在學習上的,將界面及流程盡量簡化,希望人人可以很快地得心應手。
</p>
<h3 style="text-align: left;">立即使用</h3>
<p>想要馬上使用,就按一下這個紅色的按鈕啟動工具:</p>
<!--==========遊戲啟動按鈕開始==========-->
<div id="playButton" style="text-align: center;">
<button class="buttonPushable" onclick="start();" type="button">
<span class="buttonFront">按這裡開啟東拼西湊</span>
</button>
</div>
<br />
<!--==========遊戲啟動按鈕結束==========-->
<h3 style="text-align: left;">操作說明</h3>
<p>底下就「HTML5 東拼西湊」小教具的操作,簡單地說明一下。</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVFJlW0OfRsFcC0LqjY38ihCcM5O4FEa2QQ0EKczIjTukX8BOPokFIH86ojnDboHxpOPHA0Dh0dXU-JNeLjwDHMsfRS9dwkp8a9dDfcR_SkyKoCSv5Dl8LA5dn_-CbYzTy4LMm9RdDg0FPsGcXD0yw4lbtsrUeto30V5C9SCwdY8muLigB8ELARExcbY/s1360/html5-crop-1.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1360" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVFJlW0OfRsFcC0LqjY38ihCcM5O4FEa2QQ0EKczIjTukX8BOPokFIH86ojnDboHxpOPHA0Dh0dXU-JNeLjwDHMsfRS9dwkp8a9dDfcR_SkyKoCSv5Dl8LA5dn_-CbYzTy4LMm9RdDg0FPsGcXD0yw4lbtsrUeto30V5C9SCwdY8muLigB8ELARExcbY/s320/html5-crop-1.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖1] HTML5 東拼西湊的截圖</td></tr></tbody></table><h4 style="text-align: left;">關閉</h4>
<p>
[圖1] 是「HTML5
東拼西湊」的截圖,操作時,如果有叉叉的小圖示,按下去以後,就可以執行「關閉」的指令;最右上角是結束程式;紅色叉叉則是關掉目前的圖片,準備載入其它圖片;在圖形選單中央的叉叉,則是關閉選單。
</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu6HdFOIwt1I8rRsPcBgi_hL-g0ebAp1chB4miPZJeQ77n-y_ldDFL3IFIHXG6v_b3kLU-BmyEj6sDitpdXU3YfhoBSX6Q4pIgveTdchUrRWSoF4H-CjrYDytgpg4exhJLGUswHY6XHduLMsunvnOY25fEPJcKQ7NhHVVUEsHm7bVebA3IDANRbkQm4Jk/s1360/html5-crop-2.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1360" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu6HdFOIwt1I8rRsPcBgi_hL-g0ebAp1chB4miPZJeQ77n-y_ldDFL3IFIHXG6v_b3kLU-BmyEj6sDitpdXU3YfhoBSX6Q4pIgveTdchUrRWSoF4H-CjrYDytgpg4exhJLGUswHY6XHduLMsunvnOY25fEPJcKQ7NhHVVUEsHm7bVebA3IDANRbkQm4Jk/s320/html5-crop-2.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">[圖2] HTML5 東拼西湊的起始畫面</td></tr></tbody></table><h4 style="text-align: left;">載入圖片</h4>
<div>
「HTML5 東拼西湊」可以載入一張圖片來進行操作,啟動工具以後,會類似 [圖2]
的畫面。我們可以用以下的方法來載入圖片:
</div>
<div>
<ul style="text-align: left;">
<li>由檔案總管,或是其它視窗,將圖片拖曳進畫面中,即可載入圖片。</li>
<li>按一下畫面中央的圓圈,即可照相(行動載具),或是選取圖片檔案。</li>
<li>在網址輸入區中輸入有公開分享的圖片網址,由網址載入圖片。</li>
</ul>
</div>
<h4 style="text-align: left;">圖片的剪裁與分割</h4>
<div>
圖片載入以後,可以按一下工具箱中「剪裁縮放」的圖示,然後在圖片上設定要剪裁的範圍。預設是使用「矩形選取區」的工具來設定範圍大小,想要調整大小,就拖曳選取區的四個角落,或是邊線,設定完矩形選取區的大小以後,在矩形的中央按一下,就會執行剪裁的程序。
</div>
<p style="text-align: left;">
另外一種選取方法是選用「任意形狀選取區」,它就一般所謂的「套索」,像畫筆一樣,將要選取的部份外圍,連筆「畫」一圈,畫完就立即執行剪裁的程序。
</p>
<p style="text-align: left;">
而要將圖片的某一切割出來,就按工具箱中的「新增區塊」,選完工具以後,跟前面「剪裁縮放」一樣,可以使用「矩形選取區」或是「任意形狀選取區」來設定要切割出來的範圍。
</p>
<h4 style="text-align: left;">區塊的刪除與縫合</h4>
<div>
切割完的區塊可以用拖曳的方式,將區塊搬到任何位置,如果想將它再放回未切割前的位置,可以在區塊上,原地長按不放,大概
0.5
秒放開後,會有選單跳出來,再按一下「縫回原圖」的按鈕,即可將該區塊「縫」回原始的位置。
</div>
<p style="text-align: left;">
如果要刪除該區塊,則是在長按後的選單中,按一下「刪除區塊」的按鈕。
</p>
<h4 style="text-align: left;">區塊的旋轉與鏡像</h4>
<div>
如果想將區塊旋轉、先在工具箱中設定好每次要旋轉的角度,按一下要旋轉的區塊,再按「↺」或是「↻」的按鈕,來進行逆時針旋轉,或是順時針旋轉。
</div>
<p style="text-align: left;">
如果想將區塊鏡像,先按一下要處理的區塊,然後在工具箱中按「⇄」或是「⇅」,來進行水平翻轉,或是垂直翻轉。
</p>
<p style="text-align: left;">
想改變區塊的透明度,就先按一下要設定的區塊,然後在工具箱中選取透明度。
</p>
<h4 style="text-align: left;">塗鴉設定選項</h4>
<div>
在工具箱中有「啟用畫筆」的按鈕,按一下,即可在畫面中塗鴉。想全部擦掉,就按一下另一個按鈕「清除塗鴉」。
</div>
<p style="text-align: left;">
啟用畫筆以後,就不能再針對區塊來操作,所以如果想搬移圖片的區塊,就要先在工具箱中,按一下「停用畫筆」的按鈕。
</p>
<p style="text-align: left;">
如果想換畫筆的顏色及粗細,在啟用畫筆以後,對著工具箱以外的「畫布」,原地長按不放,0.5秒後放開,即可出現設定的選單。
</p>
<h4 style="text-align: left;">塗鴉與圖片結合</h4>
<p>
塗鴉的內容和圖片是在不同層的,所以塗鴉不會跟著圖片被切割,如果想讓塗鴉的內容可以跟著圖片一起被切割,在「啟用畫筆」並塗鴉後,對準畫布,原地長按不放,0.5秒後放開,出現塗鴉的設定選單,按一下「加到圖上」的按鈕,即可將塗鴉的內容「畫」到圖片上(一種力透紙背的概念)。接著切割的內容,就是圖片和塗鴉混合的。
</p>
<h4 style="text-align: left;">自訂工具箱的位置</h4>
<p>
「HTML5 東拼西湊」的工具箱,橫拿時,預設會放在左側,直拿時,預設會放在下方,如果想自訂擺放的位置,就按住工具箱空白處不放,往想放的方向拖曳後放開,程式會依所指的方向,將工具箱換過去。
</p>
<h4 style="text-align: left;">QRCode</h4>
<div>如果載入圖片是使用輸入「圖片網址」的方式,有兩大好處:</div>
<div>
<ul style="text-align: left;">
<li>可以使用「東拼西湊」內建工具,產生帶有網址參數的分享連結,打開來就能自動開啟該圖片。</li>
<li>可以使用「東拼西湊」內建的 QRCode 產生器,即時製作 QRCode。</li>
</ul>
</div>
<div>使用方法很簡單,先在「HTML5 東拼西湊」的圖片網址輸入區中,輸入圖片的網址,支援 Google雲端硬碟共用的圖片哦!(存取權要設為「知道連結的任何人」可以檢視);輸入完,並且按「載入」鈕,如果畫面上看到圖片,就可以按畫面右下角,「HTML5 東拼西湊」的小圖示來產生 QRCode了。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://gsyan888.github.io/html5_fun/html5_math/assets/icon-crop.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="200" height="90" src="https://gsyan888.github.io/html5_fun/html5_math/assets/icon-crop.png" width="90" /></a>
</div>
<div>「HTML5 東拼西湊」的小圖示就是上面這個,哈!它可是分享(指派任務)時的利器 ^_^</div>
<h3 style="text-align: left;">影片示範</h3>
<div>有關「HTML5 東拼西湊」的操作示範影片,在底下的網址中:<br /><ul style="text-align: left;"><li><a href="https://www.youtube.com/watch?v=ZdWRpuzxTfU" target="_blank">https://www.youtube.com/watch?v=ZdWRpuzxTfU</a></li></ul></div>
<h3 style="text-align: left;">範例題目</h3>
<div>
<ul style="text-align: left;">
<li>
<button onclick="applyTheUrlAndAutoStart(this.parentNode.getElementsByTagName('a')[0].innerHTML);">套用範例圖片1</button>
<br />
<a href="https://gsyan888.github.io/html5_fun/html5_math/samples/circle-perimeter-sample.svg" target="_blank">https://gsyan888.github.io/html5_fun/html5_math/samples/circle-perimeter-sample.svg</a>
<br />
</li>
<li>
<button onclick="applyTheUrlAndAutoStart(this.parentNode.getElementsByTagName('a')[0].innerHTML);">套用範例圖片2</button>
<br />
<a href="https://gsyan888.github.io/html5_fun/html5_math/samples/circle-area-sample-1.svg" target="_blank">https://gsyan888.github.io/html5_fun/html5_math/samples/circle-area-sample-1.svg</a>
<br />
</li>
<li>
<button onclick="applyTheUrlAndAutoStart(this.parentNode.getElementsByTagName('a')[0].innerHTML);">套用範例圖片3</button>
<br />
<a href="https://gsyan888.github.io/html5_fun/html5_math/samples/circle-area-sample-2.svg" target="_blank">https://gsyan888.github.io/html5_fun/html5_math/samples/circle-area-sample-2.svg</a>
<br />
</li>
</ul>
</div>
<h3 style="text-align: left;">相關連結</h3>
<div>
<ul>
<li>
<a href="https://gsyan888.blogspot.com/2023/05/html5-math-whiteboard.html">雄 : HTML5 FUN : 數學小白板</a>
</li>
</ul>
<p></p>
<ul>
<li>
<a href="https://gsyan888.blogspot.com/2023/05/html5-fun-homepage.html" target="_blank">雄 : 打造自己的遊戲 : HTML5 FUN 烘焙機大彙整</a>
</li>
</ul>
<p></p>
<ul>
<li>
<a href="https://gsyan888.blogspot.com/2022/10/html5-fun-collection.html" target="_blank">雄 : HTML5 FUN 精選集</a>
</li>
</ul>
</div>
<h3 style="text-align: left;">更新記錄</h3>
<p style="text-align: left;"></p>
<ul style="text-align: left;">
<li>2023.12.12 分割的區塊長按後,多一個「再次分割」的選項,可以再設定範圍切割;剪截支援任意形狀。</li>
<li>2023.12.06 支援 Google 雲端硬碟公開分享的圖片檔案;右下角的圖示可以產生 QR code。</li>
<li>2023.12.05 長按會有一個小圓漸大的動畫,時間到自動顯示選單。</li>
<li>2023.12.04 公開發布。</li>
<li>2023.11.04 雛形測試版。</li>
<li>2023.11.01 江明勳老師發想。</li>
</ul>
<p></p>
<div><br /></div>
<!--==========遊戲畫面開始==========-->
<div id="HTML5FunWrapper">
<div class="credit"><label><a href="https://gsyan888.blogspot.com/" target="_blank" title="更新: 2023.11.05.v0.1">2023.11.04.v0.1 by gsyan</a></label></div>
<div id="gameWrapper">
<canvas id="canvas"></canvas>
</div>
<canvas id="canvasSelect"></canvas>
<canvas id="canvasDoodle"></canvas>
<div id="dropMessage">
<div class="dropArea" onclick="clickAni(this, 0.95);selectFileOrTakePicture();" title="按這裡加入圖片">
<label>拖曳圖片<br />或按一下選取<br />拍照</label>
</div>
<div class="imageURLBlock">
<input class="imageURL" onchange="loadImageFromURL();" placeholder="這裡可以貼上圖片網址 https://..." type="text" />
<button onclick="clickAni(this);loadImageFromURL();">載入</button>
</div>
</div>
<span class="canvas-close-btn" onclick="importImage();" title="更換圖片">×</span>
<div class="tools-v-left" id="tools">
<button onclick="croping=false;clickAni(this);reset();" style="background-color: black; color: white;" title="將圖片恢復成載入時的樣子並清除塗鴉及剪裁的區塊"><label>全部<br />還原</label></button>
<button onclick="clickAni(this);crop();" style="background-color: red; color: white;" title="選取圖片的某範圍並縮放到最大可用的尺寸"><label>剪裁<br />填滿</label></button>
<select id="shapeList" name="shapeList" onchange="selectorShape=Number(this.value);" title="設定選取的方式">
<option value="0">任意形狀選取區</option>
<option selected="" value="1">矩形選取區</option>
</select>
<button onclick="clickAni(this);croping=false;newClip();" style="background-color: #4fff4f;" title="切割某一區塊"><label>新增<br />區塊</label></button>
<select id="opacityList" name="opacityList" onchange="setOpacity(this);" onclick="setOpacity(this);" title="設定區塊或是塗鴉區的透明度">
<option value="0.1">透明10%</option>
<option value="0.25">透明25%</option>
<option value="0.5">透明50%</option>
<option value="0.6">透明60%</option>
<option value="0.7">透明70%</option>
<option selected="" value="0.8">透明80%</option>
<option value="0.9">透明90%</option>
<option value="1">不透明</option>
</select>
<button class="symbolBtn" onclick="clickAni(this);rotate(-1);" title="逆時針轉"><label>↺</label></button>
<select id="angleList" name="angleList" onchange="setAngleOffset(this.value);" title="設定旋轉時每次轉的度數">
<option value="1">1度</option>
<option value="5">5度</option>
<option value="10">10度</option>
<option value="45">45度</option>
<option selected="" value="90">90度</option>
<option value="180">180度</option>
</select>
<button class="symbolBtn" onclick="clickAni(this);rotate(1);" title="順時針轉"><label>↻</label></button>
<button class="symbolBtn" onclick="clickAni(this);mirror(1);" style="background-color: #00cc66;" title="水平翻轉"><label>⇄</label></button>
<button class="symbolBtn" onclick="clickAni(this);mirror(2);" style="background-color: #00cc66;" title="垂直翻轉"><label>⇅</label></button>
<button onclick="clickAni(this);clearDoodle();" style="background-color: #fadbd8;" title="清除塗鴉區的所有內容"><label>清除<br />塗鴉</label></button>
<button id="enableDooleBtn" onclick="clickAni(this);enableDoole();" style="background-color: #aed6f1; opacity: 0.85;" title="啟用或是關閉塗鴉功能"><label>啟用<br />畫筆</label></button>
</div>
<div class="crop-logo-icon" onclick="showQRCode();" title="HTML5 FUN::東拼西湊::gsyan.雄"></div>
<div class="longPressSpot"></div>
<div class="menuLayer"></div>
<div class="topLayer"></div>
<button aria-label="close" class="myBtn closeButton" onclick="setVisibility(0);" title="關閉">X</button>
</div>
<!--==========遊戲畫面結束==========-->
<!--==========遊戲 CSS 設定開始==========-->
<style>
#HTML5FunWrapper {
display: block;
position:fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
margin: auto;
background-color: #ffffff;
line-height: normal;
z-index: 10000;
visibility: hidden;
/* visibility: visible; */
/* border: 1px dashed; */
-webkit-user-select: none;
user-select: none;
-moz-user-select: none;
}
#gameWrapper {
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: auto;
-webkit-user-select: none;
user-select: none;
-moz-user-select: none;
/* border: 5px dashed #D7DBDD; */
}
.crop-logo-icon {
display: block;
position: absolute;
width: 50px;
height: 50px;
bottom: 0px;
right: 0px;
opacity: 0.2;
margin: 0;
padding: 0;
background-image: url('https://gsyan888.github.io/html5_fun/html5_math/assets/icon-crop.png');
background-repeat: no-repeat;
background-size: contain;
}
.longPressSpot {
display: none;
position: absolute;
transform: translate(-50%, -50%);
width: 10px;
height: 10px;
margin: auto;
background-color: #D0D3D4; /* #E0DFDF70; */
/* border: 1px solid #CC993360; */
border-radius: 50%;
pointer-events: none;
}
.menuLayer {
display: none;
position: absolute;
transform: translate(-50%, -50%);
margin: auto;
}
.topLayer {
display: none;
position: absolute;
transform: translate(-50%, -50%);
margin: auto;
padding: 0.5em 1.5em;
font-weight: 600;
font-size: 1.35em;
color: #8a6d3b;
background-color: #fcf8e3;
border: 8px solid #fff; /* #cc9933; */
border-radius: 1em;
white-space: nowrap;
pointer-events: none;
}
.qrcode-close-btn {
position: absolute;
left: 90%;
top: 0%;
font-size: 60px;
font-weight: bold;
color: #f00;
cursor: pointer;
pointer-events: auto;
}
.qrcode-img {
position:absolute;
left:50%;
top:50%;
transform:translate(-50%, -50%);
width:340px;
height:340px;
padding:1.5em;
margin:auto;
border: none!important;
}
.qrcode-img-thumbnail {
position: absolute;
max-width: 60px;
max-height: 60px;
left: calc(100% - 10px);
top: calc(100% - 10px);
transform: translate(calc(-12.5% - 60px), calc(-12.5% - 60px));
border: 1px dashed #FF8040;
border-radius: 3px;
}
#dropMessage {
display: block;
position: absolute;
width: 450px;
height: 450px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
/* border:1px dashed #0000ff; */
}
.dropArea {
display: block;
position: absolute;
width: 200px;
height: 200px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
margin: auto;
border: 5px dashed #cc9933;
border-radius: 500px;
cursor: pointer;
/* pointer-events: none; */
}
.dropArea label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
cursor: pointer;
}
#dropMessage input {
width: 40em;
padding: 0.5em;
border: 1px dashed lightgrey;
border-radius: 10px;
}
.imageURLBlock {
position: absolute;
top: 100%;
left: 50%;
transform: translate(-50%, -50%);
width: 40em;
text-align: center;
/* border: 1px solid #ffff00; */
}
.imageURLBlock button {
border: 1px solid lightgrey;
border-radius: 10px;
background-color: white;
padding: 0.5em;
}
.whiteOutline{text-shadow:0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white,0 0 4px white;}
.credit {
display: block;
position: absolute;
bottom: 0.1em;
left: 0.25em;
font-size: 9px;
text-align: left;
margin: 0.25em ;
color:#A6ACAF;
}
.credit a:link { text-decoration: none; color:#A6ACAF;}
.credit a:visited { text-decoration: none; color:#A6ACAF;}
.credit a:hover { text-decoration: none; color:#A6ACAF;}
.credit a:active { text-decoration: none; color:#A6ACAF;}
#canvasSelect {
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: auto;
/* opacity: 0.3; */
/* border: 5px dashed #00ff00; */
}
#canvasDoodle {
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: auto;
opacity: 0.3;
/* border: 5px dashed #0000ff; */
}
#tools {
position: absolute;
text-align: center;
border: 1px solid #cc9933;
border-radius: 2em;
cursor: move;
}
.tools-v-left {
width: 70px;
left: 45px;
top: calc(50% - 10px);
transform: translate(-50%, -50%);
padding: 0.5em 0.25em;
margin: 0em;
}
.tools-v-right {
left: calc(100% - 45px);
}
.tools-h-top {
left: 50%;
top: 20px;
transform: translate(-50%, 0);
padding: 0.25em 0.5em;
white-space: nowrap;
}
.tools-h-bottom {
top: calc(100% - 86px);
}
button {
border-radius: 2em;
margin: 0.25em 0.25em;
padding: 0.25em;
cursor: pointer;
}
#tools select {
width: 48px;
height: 1.5em;
margin: 0.5em;
}
#tools button {
width: 48px;
height: 48px;
border: 1px solid orange;
padding: 0;
margin: 0.25em 0.125em;
display: table-cell;
vertical-align: middle;
cursor: pointer;
}
#tools label {
cursor: pointer;
}
.symbolBtn {
font-weight: 600;
font-size: 24px;
}
#canvas {
position: absolute;
border:1px dashed #ff000020;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
/*
bottom: 55px;
top:calc(50% - 50px);
transform: translate(-50%, calc(-50% + 50px / 2));
*/
}
.canvas-close-btn {
position: absolute;
left: 90%;
top: 0%;
font-size: 60px;
font-weight: bold;
color: #f00;
cursor: pointer;
}
.imageClip {
position:absolute;
}
.selectedObj {
border:1px dashed #00ff00;
}
.topObj {
z-index: 1;
}
/* for close button */
.myBtn {
border: 1px solid #ff9933;
border-radius:100px;
width:50px;
height:50px;
margin:4px;
padding:5px;
cursor:pointer;
user-select:none;
}
.closeButton {
position: absolute;
background:#454545;
color:white;
opacity:0.7;
border:0;
top: 0px;
right: 0px;
height:32px;
max-height:32px;
max-width:32px;
min-height:32px;
min-width:32px;
width:32px;
cursor: pointer;
}
/* shadow play button */
.buttonPushable {
background: hsl(340deg 100% 32%);
border-radius: 12px;
border: none;
padding: 0;
cursor: pointer;
outline-offset: 4px;
margin: 2em;
}
.buttonFront {
display: block;
padding: 12px 42px;
border-radius: 12px;
font-size: 1.25rem;
background: hsl(345deg 100% 47%);
color: #F4D03F; /* white; */
border: 1px dotted hsl(340deg 100% 32%);
transform: translateY(-6px);
}
/* loading Logo */
.loading-container {
width:240px;
height:24px;
z-index:10000;
position:absolute;
margin:auto;
transform: translate(-50%, -150px);
opacity: 1;
}
.loading-logo {
position:absolute;
transform:translate(50px,32px);
width:140px;height:140px;
background-color:white;
border-radius:140px;
background-image: url('https://gsyan888.github.io/html5_fun/assets/icon.png');
background-repeat: no-repeat;
background-size: 100px 100px;
background-position: center;
}
.loading-label {
width:120px;
height:24px;
position:absolute;
transform:translate(10px,-24px);
text-align:center;
font-size: 20px;
color: red; /* #cc3300 */;"
text-shadow: 5px 5px 10px black;
margin:auto;
padding:4px;
}
.stop-animation {
animation: none;
}
.fade-in-out {
opacity: 0;
animation: fade-in 1s ease-in forwards, fade-out 4s 1s ease-out forwards;
}
@keyframes fade-in {
100% {
opacity: 1;
}
}
@keyframes fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.circleBtn {
position: absolute;
display: table-cell;
vertical-align: middle;
text-align: center;
border: 1px solid #00000050; /* #00ffff; */
border-radius: 50%;
margin: 0;
padding: 0;
transform: translate(-50%, -50%);
cursor: pointer;
}
</style>
<!--==========遊戲 CSS 設定結束==========-->
<!--==========遊戲程式開始==========-->
<script>
/* 主程式的路徑 */
var html5funScriptURL = 'https://gsyan888.github.io/html5_fun/html5_math/assets/math-image-crop.js';
/**
* 由外部的 .js 載入設檔值, 並執行 callback 的指令
*/
loadJsFromExternalScript = function (scriptSrc, callback) {
var nocacheVal = '?nocache=' + new Date().getTime(); //為了避免 cache 的問題,在檔名後加亂數
var scriptToAdd = document.createElement('script'); /* 建立一個 scriptElement */
scriptToAdd.setAttribute('type', 'text/javascript');
scriptToAdd.setAttribute('charset', 'utf-8');
scriptToAdd.setAttribute('src', scriptSrc + nocacheVal); //避免 cache 時用的
//scriptToAdd.setAttribute('src', scriptSrc);
/* 載入成功時 */
scriptToAdd.onload = scriptToAdd.onreadystatechange = function () {
if (!scriptToAdd.readyState || scriptToAdd.readyState === "loaded" || scriptToAdd.readyState === "complete") {
scriptToAdd.onload = scriptToAdd.onreadystatechange = null;
document.getElementsByTagName('head')[0].removeChild(scriptToAdd); /* 載入後移除 */
if (typeof(callback) == 'function') {
callback(); /* 執行指定的函數 */
}
};
};
/* 無法載入時, 將設定用預設值 */
scriptToAdd.onerror = function () {
scriptToAdd.onerror = null; /* 將事件移除 */
document.getElementsByTagName('head')[0].removeChild(scriptToAdd); /* 移除 script */
if (typeof callback == 'function') {
callback(); /* 執行指定的函數 */
}
}
/* 在 head 的最前頭加上前述的 scriptElement */
var docHead = document.getElementsByTagName("head")[0];
docHead.insertBefore(scriptToAdd, docHead.firstChild);
};
start = function() {alert('程序錯誤, 尚未載入程式');};
applyTheUrlAndAutoStart = function() {alert('程序錯誤, 尚未載入程式');};
/* 頁面標題帶有 [東拼西湊] 才會載入程式 */
if (/東拼西湊/.test(document.title)) {
loadJsFromExternalScript(html5funScriptURL);
}
</script>
<!--==========遊戲程式結束==========-->
Unknownnoreply@blogger.com0