tag:blogger.com,1999:blog-64294121019356498522024-03-14T14:15:19.009+08:00夢幻天地blog推動自由軟體的blogchen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.comBlogger325125tag:blogger.com,1999:blog-6429412101935649852.post-89991713870901509742024-01-10T09:55:00.008+08:002024-01-10T09:56:05.928+08:00osep_scratch切換鏡頭<p> 記錄一下自已改的地方</p><p>src/lib/video/camera.js</p><p>在const requestStack = [];後面加上</p><p>/*add by chen 20221209 end */</p><p>在const requestVideoStream = videoDesc => {<br /> let streamPromise; <br />後面加上</p><p>let video_value ={};<br /> const webcamId= `${window.now_webcamId}`;<br /> if (webcamId == "user"){<br /> video_value = {facingMode: "user"};<br /> } else if ( webcamId == "environment" ){<br /> video_value = {facingMode: "environment"};<br /> } else{<br /> video_value = {deviceId: webcamId };<br /> }</p><p>修改video: videoDesc為</p><p>video: video_value,<br /> // video: videoDesc ,video:{facingMode: "user"}, {facingMode: "environment"},video:{deviceId: "xxxx" }</p><p><br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-22404328391563058322023-11-20T15:11:00.005+08:002023-11-20T15:26:28.729+08:00u8g2繁中字型<p> 看了一篇文章,覺得不錯,把它實做了一下。</p><p>參考網址:<a href="https://www.kidsgo.net/u8g2/index.php">https://www.kidsgo.net/u8g2/index.php</a></p><p> 簡繁中常用字型:<a href="https://github.com/kaienfr/Font/blob/master/learnfiles/chinese%E7%AE%80%E7%B9%81%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8.txt">https://github.com/kaienfr/Font/blob/master/learnfiles/chinese%E7%AE%80%E7%B9%81%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8.txt</a></p><p> 我轉換好的字型檔:<a href="https://drive.google.com/file/d/19Mw1fSSWmxFYSHbvg457jsi362sWJ0L6/view?usp=sharing">https://drive.google.com/file/d/19Mw1fSSWmxFYSHbvg457jsi362sWJ0L6/view?usp=sharing</a></p><p> 使用方法:</p><p>1.把字型檔和ino放在相同目錄</p><p>2.在ino中加入語法</p><p dir="ltr" id="docs-internal-guid-19c1d316-7fff-1976-cb05-3ba973ef49c4" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial,sans-serif" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">#include <U8g2lib.h></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial,sans-serif" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">#include "u8g2_font_e58524b32706dda48e7107fc64bfd183.h"</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial,sans-serif" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);<br /></span><span face="Arial,sans-serif" id="docs-internal-guid-031b1ffb-7fff-8360-3995-35473fb0083f" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">u8g2.setFont(u8g2_font_unifont_myfonts);</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial,sans-serif" id="docs-internal-guid-031b1ffb-7fff-8360-3995-35473fb0083f" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial, sans-serif" id="docs-internal-guid-031b1ffb-7fff-8360-3995-35473fb0083f" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">加入的中文字庫在說明文件中:</span><span face="Arial,sans-serif" id="docs-internal-guid-031b1ffb-7fff-8360-3995-35473fb0083f" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><a href="https://docs.google.com/document/d/125J4c5W3LA7Bf7vy8gK1z82v_ekKfAIktCgZy0Krrls/edit?usp=sharing">https://docs.google.com/document/d/125J4c5W3LA7Bf7vy8gK1z82v_ekKfAIktCgZy0Krrls/edit?usp=sharing</a></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Arial,sans-serif" id="docs-internal-guid-031b1ffb-7fff-8360-3995-35473fb0083f" style="background-color: transparent; color: blue; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"> </span></p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxL-UUvsCG_UtPmkc02q6yKxkNuKZ_d2s5QTtW2tthgKftXwp8bmzajcYYBF76bzR1d4g4PZeLk2Ia0EQp6YghCjlfxoguKio72bcXvg5rlmxOjr_4AmJhnNIR74KfxkwyHNqwhPkawQRMFn8x7omB6KJGVTL4uNjL9eMP9GA9eAO3Ow4drikS9WqgijMH/s462/222.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="455" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxL-UUvsCG_UtPmkc02q6yKxkNuKZ_d2s5QTtW2tthgKftXwp8bmzajcYYBF76bzR1d4g4PZeLk2Ia0EQp6YghCjlfxoguKio72bcXvg5rlmxOjr_4AmJhnNIR74KfxkwyHNqwhPkawQRMFn8x7omB6KJGVTL4uNjL9eMP9GA9eAO3Ow4drikS9WqgijMH/s320/222.png" width="315" /></a></div><br /><p></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-54135227465490571662023-11-01T13:49:00.001+08:002023-11-01T14:28:12.228+08:00google日曆連動line<p>參考網址 :https://happyplayblogs.blogspot.com/2021/09/line-notify-google.html<br /></p><p> 建立一個google script內容如下</p><p>申請一個line notify 權杖 <br /></p><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="kw1" style="color: #000066; font-weight: bold;">const</span> NotifyToken <span class="sy0" style="color: #339933;">=</span> <span class="st0" style="color: #3366cc;">''</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #006600; font-style: italic;">// Line Notify 權杖</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="kw1" style="color: #000066; font-weight: bold;">//const</span> calendar <span class="sy0" style="color: #339933;">=</span> CalendarApp.<span class="me1" style="color: #660066;">getDefaultCalendar</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;<br />//某一個月曆<br /></span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="kw1" style="color: #000066; font-weight: bold;">const</span> calendar <span class="sy0" style="color: #339933;">= <br /></span><div style="background-color: #f8f9fa; color: #3c4043; font-family: "Roboto Mono", "Droid Sans Mono", "monospace", monospace; font-size: 13px; font-weight: 400; line-height: 18px; white-space: pre;"><div><span style="color: #185abc;">const</span><span style="color: #3c4043;"> </span><span style="color: #202124;">calendar</span><span style="color: #3c4043;"> = </span><span style="color: #c92786;">CalendarApp</span><span style="color: #3c4043;">.</span><span style="color: #202124;">getCalendarById</span><span style="color: #3c4043;">(</span><span style="color: #b31412;">'日曆ID'</span><span style="color: #3c4043;">);</span></div><div><span style="color: #3c4043;"><br /></span></div></div> </div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="kw1" style="color: #000066; font-weight: bold;">function</span> Notify<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> Now <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="color: #000066; font-weight: bold;">new</span> <span class="kw4">Date</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> Start <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="color: #000066; font-weight: bold;">new</span> <span class="kw4">Date</span><span class="br0" style="color: #009900;">(</span><span class="kw1" style="color: #000066; font-weight: bold;">new</span> <span class="kw4">Date</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">setHours</span><span class="br0" style="color: #009900;">(</span><span class="nu0" style="color: #cc0000;">0</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">0</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">0</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">0</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> End <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="color: #000066; font-weight: bold;">new</span> <span class="kw4">Date</span><span class="br0" style="color: #009900;">(</span><span class="kw1" style="color: #000066; font-weight: bold;">new</span> <span class="kw4">Date</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">setHours</span><span class="br0" style="color: #009900;">(</span><span class="nu0" style="color: #cc0000;">23</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">59</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">59</span><span class="sy0" style="color: #339933;">,</span> <span class="nu0" style="color: #cc0000;">999</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> calendarData <span class="sy0" style="color: #339933;">=</span> calendar.<span class="me1" style="color: #660066;">getEvents</span><span class="br0" style="color: #009900;">(</span>Now<span class="sy0" style="color: #339933;">,</span> End<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">if</span> <span class="br0" style="color: #009900;">(</span>calendarData.<span class="me1" style="color: #660066;">length</span> <span class="sy0" style="color: #339933;">></span> <span class="nu0" style="color: #cc0000;">0</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> NotifyContents <span class="sy0" style="color: #339933;">=</span> <span class="st0" style="color: #3366cc;">'今日共'</span> <span class="sy0" style="color: #339933;">+</span> calendarData.<span class="me1" style="color: #660066;">length</span> <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">"筆待執行活動<span class="es0" style="color: #000099; font-weight: bold;">\n</span>"</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> calendarData.<span class="me1" style="color: #660066;">forEach</span><span class="br0" style="color: #009900;">(</span>item <span class="sy0" style="color: #339933;">=></span><span class="br0" style="color: #009900;">{</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">if</span> <span class="br0" style="color: #009900;">(</span>Now <span class="sy0" style="color: #339933;"><=</span> item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> year <span class="sy0" style="color: #339933;">=</span> item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">getFullYear</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> month <span class="sy0" style="color: #339933;">=</span> item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">getMonth</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">+</span><span class="nu0" style="color: #cc0000;">1</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> day <span class="sy0" style="color: #339933;">=</span>item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">getDate</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> hour <span class="sy0" style="color: #339933;">=</span> item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">getHours</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="kw1" style="color: #000066; font-weight: bold;">var</span> minute <span class="sy0" style="color: #339933;">=</span> item.<span class="me1" style="color: #660066;">getStartTime</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span>.<span class="me1" style="color: #660066;">getMinutes</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> startTime <span class="sy0" style="color: #339933;">=</span> year <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">"/"</span><span class="sy0" style="color: #339933;">+</span> month <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">"/"</span> <span class="sy0" style="color: #339933;">+</span> day <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">" "</span> <span class="sy0" style="color: #339933;">+</span> hour <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">":"</span> <span class="sy0" style="color: #339933;">+</span> minute</div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> NotifyContents <span class="sy0" style="color: #339933;">+=</span> <span class="st0" style="color: #3366cc;">"<span class="es0" style="color: #000099; font-weight: bold;">\n</span>標題:"</span> <span class="sy0" style="color: #339933;">+</span> <span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">(</span>item.<span class="me1" style="color: #660066;">getTitle</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span> <span class="sy0" style="color: #339933;">!=</span> <span class="st0" style="color: #3366cc;">""</span><span class="br0" style="color: #009900;">)</span> <span class="sy0" style="color: #339933;">?</span> <span class="br0" style="color: #009900;">(</span>item.<span class="me1" style="color: #660066;">getTitle</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span> <span class="sy0" style="color: #339933;">:</span> <span class="br0" style="color: #009900;">(</span><span class="st0" style="color: #3366cc;">"無標題"</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span> <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">"<span class="es0" style="color: #000099; font-weight: bold;">\n</span>"</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> NotifyContents <span class="sy0" style="color: #339933;">+=</span> <span class="st0" style="color: #3366cc;">"開始時間:"</span> <span class="sy0" style="color: #339933;">+</span> startTime <span class="sy0" style="color: #339933;">+</span> <span class="st0" style="color: #3366cc;">"<span class="es0" style="color: #000099; font-weight: bold;">\n</span>"</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="br0" style="color: #009900;">}</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="br0" style="color: #009900;">}</span><span class="br0" style="color: #009900;">)</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> Logger.<span class="me1" style="color: #660066;">log</span><span class="br0" style="color: #009900;">(</span>NotifyContents<span class="br0" style="color: #009900;">)</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> UrlFetchApp.<span class="me1" style="color: #660066;">fetch</span><span class="br0" style="color: #009900;">(</span><span class="st0" style="color: #3366cc;">"https://notify-api.line.me/api/notify"</span><span class="sy0" style="color: #339933;">,</span> <span class="br0" style="color: #009900;">{</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="st0" style="color: #3366cc;">"method"</span> <span class="sy0" style="color: #339933;">:</span> <span class="st0" style="color: #3366cc;">"post"</span><span class="sy0" style="color: #339933;">,</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="st0" style="color: #3366cc;">"payload"</span> <span class="sy0" style="color: #339933;">:</span> <span class="br0" style="color: #009900;">{</span><span class="st0" style="color: #3366cc;">"message"</span> <span class="sy0" style="color: #339933;">:</span> NotifyContents<span class="br0" style="color: #009900;">}</span><span class="sy0" style="color: #339933;">,</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="st0" style="color: #3366cc;">"headers"</span> <span class="sy0" style="color: #339933;">:</span> <span class="br0" style="color: #009900;">{</span><span class="st0" style="color: #3366cc;">"Authorization"</span> <span class="sy0" style="color: #339933;">:</span> <span class="st0" style="color: #3366cc;">"Bearer "</span> <span class="sy0" style="color: #339933;">+</span> NotifyToken<span class="br0" style="color: #009900;">}</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="br0" style="color: #009900;">}</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"> <span class="br0" style="color: #009900;">}</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="br0" style="color: #009900;">}</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="br0" style="color: #009900;"> </span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="br0" style="color: #009900;">執行時要允許授權 <br /></span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="br0" style="color: #009900;">google script是可以設定觸發條件</span></div><div class="de1" style="background: rgb(255, 255, 255); border-left: 1px solid rgb(221, 221, 221); color: black; margin: 0px 0px 0px -7px; padding: 0px 8px; position: relative; user-select: text; vertical-align: top;"><span class="br0" style="color: #009900;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju9Evjil72DvWNdSeIKUN4GAA82CeKPOeQj5RTvuuiyjaK_R4WrkgVS1MKhdDJWOZsoy9Zk7hwmxgJshQoq4JroyStLT0_igorgxPm7bysDQheEIEH4lk-eB7lNC-B9nExW5fd3PSKe7y_NTVJ0pN_pHstzOQsxe0zbFtTrM_cda82YWdlKMIFPOqdcSWx/s728/555.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="686" data-original-width="728" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju9Evjil72DvWNdSeIKUN4GAA82CeKPOeQj5RTvuuiyjaK_R4WrkgVS1MKhdDJWOZsoy9Zk7hwmxgJshQoq4JroyStLT0_igorgxPm7bysDQheEIEH4lk-eB7lNC-B9nExW5fd3PSKe7y_NTVJ0pN_pHstzOQsxe0zbFtTrM_cda82YWdlKMIFPOqdcSWx/s320/555.png" width="320" /></a></div><br /> <br /></span></div><p></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-42340725621920280282023-10-25T14:20:00.004+08:002023-10-25T14:20:41.143+08:00未來學校-教育雲<h2 style="text-align: left;">簡報 <br /></h2><p> <a href="https://docs.google.com/presentation/d/1u3jpats4NzKMXqSpxhAUSkilanzCZPEfrCEJEBcK4fw/edit?usp=sharing">https://docs.google.com/presentation/d/1u3jpats4NzKMXqSpxhAUSkilanzCZPEfrCEJEBcK4fw/edit?usp=sharing</a></p><p> </p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-63610478215317047042023-09-20T19:12:00.001+08:002023-09-20T19:12:26.175+08:00ubuntu 下arduino ide無法寫入microbit磁碟機<p> 錯誤訊息:</p><p>Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-09-12:07)</p><p> <br /></p><p> 解決方法:</p><pre class="notranslate"><span class="pl-c1">cd</span> /etc/udev/rules.d
sudo wget https://raw.githubusercontent.com/arduino/OpenOCD/master/contrib/60-openocd.rules
sudo udevadm control --reload-rules</pre><pre class="notranslate"> </pre><p> </p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-54418631179645212152023-08-24T11:37:00.005+08:002023-10-30T13:24:50.095+08:00esp32-cam記錄<p>參考文章: <a href="https://shop.mirotek.com.tw/iot/iot-start-2/">https://shop.mirotek.com.tw/iot/iot-start-2/</a></p><p>1.接線:<span style="color: red;">燒錄時要準備一個jump把IO0和GND接起來。</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://shop.mirotek.com.tw/wp-content/uploads/2021/04/I100002-4-300x132.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="300" height="132" src="https://shop.mirotek.com.tw/wp-content/uploads/2021/04/I100002-4-300x132.png" width="300" /></a></div> <p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://shop.mirotek.com.tw/wp-content/uploads/2021/04/I100002-3-3-2-1024x569.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="445" data-original-width="800" height="445" src="https://shop.mirotek.com.tw/wp-content/uploads/2021/04/I100002-3-3-2-1024x569.png" width="800" /> </a></div><div class="separator" style="clear: both; text-align: left;"> <span style="color: red;">怎知道有接好否?</span>把usb接上電腦,開啟arduino ide,打開serial monitor,把鮑率設為115200(通常是這鮑率,若無訊號可以改一下鮑率,如果都無訊號就是接錯),如果有看到...或亂碼大概就對了,按下reset鈕,就會看到類似下圖。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTVBInmWsjKTcn_fDIKCx8GHRfWdBR5TW0yUHvpImSiJxYD3y7s8G3UV5W2yraMh6mDDEAd34mDqu9_j7DpUMwSVgn_Xkf78OPq6sojX1ky6eUSpANEfPGY9_Wht7ynQZI8t-KHb4MGbl3SY6je4vgXseuHUmizd1kRPV7SIUWSArssAIbh5KCdSVyRq6p/s1045/esp3200.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="603" data-original-width="1045" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTVBInmWsjKTcn_fDIKCx8GHRfWdBR5TW0yUHvpImSiJxYD3y7s8G3UV5W2yraMh6mDDEAd34mDqu9_j7DpUMwSVgn_Xkf78OPq6sojX1ky6eUSpANEfPGY9_Wht7ynQZI8t-KHb4MGbl3SY6je4vgXseuHUmizd1kRPV7SIUWSArssAIbh5KCdSVyRq6p/s320/esp3200.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">2.讓arduino ide認識esp32:在arduino ide(我用的是1.8.14)偏好設定位置填入網址:https://dl.espressif.com/dl/package_esp32_index.json<br /></div><br /> <br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghb1sca-nzf5CBKSiu2wCLEfZVzO5O2npUK5LGVs9p9mHq9yRKu4os24ZEkULJdDcADdITwc4kNUDAPqT0NR_Vbs6gwBCy3AsdlLe-AxnAdUykyw7HjG109eh-z5o2eYqhjmGnvkXZ0TBtbas3Vr8vpj1yJE8GawxsTBaBcU7-HcmQcrQCuZtQA-Do0Qty/s800/esp3201.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="800" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghb1sca-nzf5CBKSiu2wCLEfZVzO5O2npUK5LGVs9p9mHq9yRKu4os24ZEkULJdDcADdITwc4kNUDAPqT0NR_Vbs6gwBCy3AsdlLe-AxnAdUykyw7HjG109eh-z5o2eYqhjmGnvkXZ0TBtbas3Vr8vpj1yJE8GawxsTBaBcU7-HcmQcrQCuZtQA-Do0Qty/s320/esp3201.png" width="320" /> </a></div><div class="separator" style="clear: both; text-align: left;"> </div><p>工具/開發板/開發板管理員,輸入esp32,把esp32板子安裝起來。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFToRyRqYhnCh-2nxZ7-12Bso2R0EaxDRlqutqhYd2wZ1S-rW8h0z8gAOcBVCBwBPAyZGVJwJd1ZKF1lTH7UdZdlOK4-o6OeFrjrfBM00751NO_LqmUSWCrzaplL_XPbFFsjI3itntad_BmXT05Odqfrn81lFJzM-co2dOZPPsJWojq2P_djRUjbu0lPT8/s1000/esp3202.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1000" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFToRyRqYhnCh-2nxZ7-12Bso2R0EaxDRlqutqhYd2wZ1S-rW8h0z8gAOcBVCBwBPAyZGVJwJd1ZKF1lTH7UdZdlOK4-o6OeFrjrfBM00751NO_LqmUSWCrzaplL_XPbFFsjI3itntad_BmXT05Odqfrn81lFJzM-co2dOZPPsJWojq2P_djRUjbu0lPT8/s320/esp3202.png" width="320" /></a></div><p>板子使用<span lang="EN-US">ESP32 </span><span lang="EN-US">Wrover</span><span lang="EN-US"> Module,使用esp32板子要先安裝esptool,請自行安裝。參數設定如下圖()</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfK8FHWLosSFYjqbMkKpqhsZcBWL8RAMnEE5Jni3j265VGw4o8uUlU-Ab8qUk4V-vgqpRVPJ_taUUNe1oSSTQsVMlj4YqeFl2Pq1p2qOCCp65LvPjgT3Xz-L0FRz4dfIShn6Pg3a-HRd6V4EqphXhWzu8br-2tYaxAebKp-kCor9vFESoL5__wX8fNbkd_/s1376/esp3209.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="873" data-original-width="1376" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfK8FHWLosSFYjqbMkKpqhsZcBWL8RAMnEE5Jni3j265VGw4o8uUlU-Ab8qUk4V-vgqpRVPJ_taUUNe1oSSTQsVMlj4YqeFl2Pq1p2qOCCp65LvPjgT3Xz-L0FRz4dfIShn6Pg3a-HRd6V4EqphXhWzu8br-2tYaxAebKp-kCor9vFESoL5__wX8fNbkd_/s320/esp3209.png" width="320" /></a></div><br /><p><br /></p><p>燒錄範例檔:開啟範例檔CameraWebServer。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipRHvTl5SJ4sm1vDvg-a5i-j7fT0cA8KaSlCNCrMuBj82HqGMH5DB0m6XexPZ-wofWHoBwWOukh7iOfURD0luLe4ec5oiwwnMiK9e6RuVorBZuEke2rbLxpL34Zlr0vXHCS_hmNwoQmVN58DDHBxJ-_FM6DwstaGA4mBYhzjCeLvrAL1_yCsj-f0xoAa5i/s1376/esp3205.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="873" data-original-width="1376" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipRHvTl5SJ4sm1vDvg-a5i-j7fT0cA8KaSlCNCrMuBj82HqGMH5DB0m6XexPZ-wofWHoBwWOukh7iOfURD0luLe4ec5oiwwnMiK9e6RuVorBZuEke2rbLxpL34Zlr0vXHCS_hmNwoQmVN58DDHBxJ-_FM6DwstaGA4mBYhzjCeLvrAL1_yCsj-f0xoAa5i/s320/esp3205.png" width="320" /></a></div><p>要修改的部分如下:</p><p>第17行#define CAMERA_MODEL_ESP_EYE // Has PSRAM,註解掉(加//)。</p><p> //#define CAMERA_MODEL_ESP_EYE // Has PSRAM</p><p>第24行//#define CAMERA_MODEL_AI_THINKER // Has PSRAM把註解(//)拿掉</p><p>#define CAMERA_MODEL_AI_THINKER // Has PSRAM </p><p>第38 39 行,改成你要連線AP的SSID和密碼:</p><p>const char* ssid = "<span style="color: red;">AP的SSID</span>";<br />const char* password = "<span style="color: red;">AP的密碼</span>";<br /></p><p>編譯檔案有無問題,無問題後燒錄(<span style="color: red;"><b><span style="font-size: large;">燒錄前要把jump插入IO0和GND,很重要、很重要、很重要</span></b></span>) <span style="color: red; font-size: large;">,<b>按下燒錄後,要先按著reset鈕,看到Connecting.........後放開reset鈕。</b></span><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDnnTTdBbm_goQCskWsV9HVvQkOPdqrUBtleO2XyVRWevB3sRGMzZyyxtpZ1GGlg0PNvT89JywNK09sTgMDDSkSMIRU-5-1unEFmlibB86epO3S_Hek3No5j2cO9rb0t9ND7DYgTvfJ9fd0JEj9svo0Y5pT9meIc4nRHjA5JR-Td0W7WIS7D-cErYvYWw-/s754/esp3206.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="754" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDnnTTdBbm_goQCskWsV9HVvQkOPdqrUBtleO2XyVRWevB3sRGMzZyyxtpZ1GGlg0PNvT89JywNK09sTgMDDSkSMIRU-5-1unEFmlibB86epO3S_Hek3No5j2cO9rb0t9ND7DYgTvfJ9fd0JEj9svo0Y5pT9meIc4nRHjA5JR-Td0W7WIS7D-cErYvYWw-/s320/esp3206.png" width="320" /></a></div><br /><p>燒錄完成,<span style="color: red;">移除jump</span>,打開serial monitor,按下reset鈕就會看到板子連上ap後的ip,在瀏覽器中輸入ip就可以看到畫面了。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKepalUYTxBr62WqLFLR-P-FvSJGHXRA2W1qmMbAOzhSFyuYARoCveFg_qDuCfCwgcFJXRGwgWKFnq8ewCABFjCj2OQvKQ9QpVeHXVvXT67AdNUfLCb6yj7teL8-Bn_AIESZPab9to9EsXWJDIlomqe-42EYeTB6q7AEQjkt61AVZwEm2W1w60xGFV0-HH/s1045/esp3207.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="603" data-original-width="1045" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKepalUYTxBr62WqLFLR-P-FvSJGHXRA2W1qmMbAOzhSFyuYARoCveFg_qDuCfCwgcFJXRGwgWKFnq8ewCABFjCj2OQvKQ9QpVeHXVvXT67AdNUfLCb6yj7teL8-Bn_AIESZPab9to9EsXWJDIlomqe-42EYeTB6q7AEQjkt61AVZwEm2W1w60xGFV0-HH/s320/esp3207.png" width="320" /></a></div><br /><p><br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS3FjQnksKCyNq8PHv-KynUu10pQD4cu1EnDv7JrzTTGFBXtKdYhr7RWndYemsfoPyVuVVSIsvbGm45LmYtPYvCZ2eIl1RSDaFKR8ESMgARZQE53C56C6pPS-jQ-mxQRLL3B2y0Z80VIZbp8A2ZpxRPqXCDF7N9DsVgiYe-c6X5KvaS9RVH8jE78kvoYnR/s1376/esp3208.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="873" data-original-width="1376" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS3FjQnksKCyNq8PHv-KynUu10pQD4cu1EnDv7JrzTTGFBXtKdYhr7RWndYemsfoPyVuVVSIsvbGm45LmYtPYvCZ2eIl1RSDaFKR8ESMgARZQE53C56C6pPS-jQ-mxQRLL3B2y0Z80VIZbp8A2ZpxRPqXCDF7N9DsVgiYe-c6X5KvaS9RVH8jE78kvoYnR/s320/esp3208.png" width="320" /></a></div><p>320x240時可以把臉部辨功能打開。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIpPqQ4vdiRWF8S_bX7UyzV_q0OcP6WNhIKNo3Kpb02z72-tp02_3qFUEncss13-mr4Ymenk9SZjisynun8MqXgFDFLOJI0o5f5uyCX2_zLvGBof1VBwu-5iOo6G6s_CjYNoBlxU9llnLmpOv3282JdWLEcvLlILqf9PVF_JDJt_fEX62pZwKb8d1ReJ4/s1376/222.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="873" data-original-width="1376" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIpPqQ4vdiRWF8S_bX7UyzV_q0OcP6WNhIKNo3Kpb02z72-tp02_3qFUEncss13-mr4Ymenk9SZjisynun8MqXgFDFLOJI0o5f5uyCX2_zLvGBof1VBwu-5iOo6G6s_CjYNoBlxU9llnLmpOv3282JdWLEcvLlILqf9PVF_JDJt_fEX62pZwKb8d1ReJ4/s320/222.png" width="320" /></a></div><br /><p>腳位圖</p><br /><p><br /></p><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9DoY2YMqT6FrKrdyj4tFVuil6-bmbpr7RBL9QxvAVoyPB9nv0L0fJcvh7rxkMU4MbXESNggvdc2Cn1cerbdBxyYgHBotAR-5yZP_Ss2zlUS0lME_0CxFiKhXkp0eqQPdTIayUCvRelIrR0fIpiONVVxbhsUuaFJxiEdvXO_w-LNtARUnfy-F0e4Id4USO/s828/ESP32-CAM-pinout-new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="368" data-original-width="828" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9DoY2YMqT6FrKrdyj4tFVuil6-bmbpr7RBL9QxvAVoyPB9nv0L0fJcvh7rxkMU4MbXESNggvdc2Cn1cerbdBxyYgHBotAR-5yZP_Ss2zlUS0lME_0CxFiKhXkp0eqQPdTIayUCvRelIrR0fIpiONVVxbhsUuaFJxiEdvXO_w-LNtARUnfy-F0e4Id4USO/s320/ESP32-CAM-pinout-new.png" width="320" /></a></div><br />chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-92202005690270071192023-07-11T21:12:00.002+08:002023-07-11T21:12:40.779+08:00open字型<p> <a href="https://zi-hi.com/%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87%E5%85%8D%E8%B2%BB%E5%AD%97%E5%9E%8B%E5%88%97%E8%A1%A8">https://zi-hi.com/%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87%E5%85%8D%E8%B2%BB%E5%AD%97%E5%9E%8B%E5%88%97%E8%A1%A8</a></p><p> </p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-78696374333308257352023-06-12T18:26:00.004+08:002023-06-14T13:00:29.758+08:001120614高義研習<p> OSEP</p><p><a href="https://sites.google.com/view/osep-scratch3/%E7%B7%9A%E4%B8%8A%E8%B3%87%E6%BA%90">https://sites.google.com/view/osep-scratch3/%E7%B7%9A%E4%B8%8A%E8%B3%87%E6%BA%90</a></p><p>OSEP scratch</p><p><a href="https://estea8968.github.io/osep_web_serial/app/">https://estea8968.github.io/osep_web_serial/app/</a><br /></p><p> </p><p>Edge 側邊欄</p><p><a href="https://microsoftedge.microsoft.com/addons/detail/ai%E5%8A%A9%E6%89%8B-openai-chatgpt%E4%BE%A7%E8%BE%B9%E6%A0%8F/jigjjhbimkkakoncmabgiefpjebkaoek">https://microsoftedge.microsoft.com/addons/detail/ai%E5%8A%A9%E6%89%8B-openai-chatgpt%E4%BE%A7%E8%BE%B9%E6%A0%8F/jigjjhbimkkakoncmabgiefpjebkaoek</a></p><p>擴充套件 </p><p><a href="https://microsoftedge.microsoft.com/addons/detail/chatgpt-for-bing/pmdicooijnnjlpfgjelgoodagjpbpjpm">https://microsoftedge.microsoft.com/addons/detail/chatgpt-for-bing/pmdicooijnnjlpfgjelgoodagjpbpjpm</a></p><a href="https://microsoftedge.microsoft.com/addons/detail/chatgpt-for-bing/pmdicooijnnjlpfgjelgoodagjpbpjpm">ChatGPT for Bing - Microsoft Edge Addons</a><p></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-84917033768555850262023-05-31T15:16:00.007+08:002023-05-31T21:51:05.290+08:00sonarqube原碼檢測安裝記事<p> 參考文章:https://hackmd.io/@spyua/SkA2AwdBF</p><h2 style="text-align: left;">linux下環境設置</h2><p>vm.max_count:流程可以擁有的VMA(虛擬內存區域)的數量<br />fs.file-max:系統所有程序一共可以開啟的檔案數量<br />ulinit:設置shell啟動進程所占用的資源 <br /></p><p>sudo sysctl -w vm.max_map_count=262144<br />sudo sysctl -w fs.file-max=65536<br />ulimit -n 65536<br />ulimit -u 4096 </p><p><br /></p><h2 style="text-align: left;">安裝openjdk-11-jdk</h2><p>windows download jdk-17(<span style="color: red;">不能用jdk-20</span>)</p><p><a href="https://www.oracle.com/tw/java/technologies/downloads/#jdk17-windows">https://www.oracle.com/tw/java/technologies/downloads/#jdk17-windows</a> <br /></p><p> java -version<br /></p><h2 style="text-align: left;">安裝和設置資料庫PostgreSQL</h2><p>sudo apt install postgresql postgresql-contrib<br />sudo service postgresql start<br />sudo service postgresql status<br />sudo passwd postgres</p><p>windows install PostgreSQL</p><p><a href="https://www.postgresql.org/download/windows/">https://www.postgresql.org/download/windows/</a> <br /></p><p>sudo service postgresql status,用於檢查您資料庫的狀態。<br />sudo service postgresql start,用來開始執行您的資料庫。<br />sudo service postgresql stop,用來停止執行您的資料庫。<br /></p><p>su - postgres<br />createuser sonar<br />psql<br />ALTER USER sonar WITH ENCRYPTED password 'sonar';<br />CREATE DATABASE sonarqube OWNER sonar;<br />grant all privileges on DATABASE sonarqube to sonar;<br />\q<br />exit</p><p></p><h2 style="text-align: left;"> 下載完解壓縮</h2><div style="text-align: left;">官網:<a href="https://www.sonarsource.com/products/sonarqube/downloads/">https://www.sonarsource.com/products/sonarqube/downloads/</a> </div><div style="text-align: left;"><br /></div><div style="text-align: left;">config資料夾下 <br /></div><div style="text-align: left;">sonar.properties修改處<br /><br />sonar.jdbc.username=sonar<br />sonar.jdbc.password=sonar<br />sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube</div><div style="text-align: left;"><br /></div><div style="text-align: left;">sonar.sh修改處<br />RUN_AS_USER=sonar</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><pre class="part" data-endline="104" data-position="1736" data-startline="102"><code class="hljs">sudo vim /etc/security/limits.conf</code></pre><pre class="part" data-endline="104" data-position="1736" data-startline="102"><code class="hljs">增加 </code></pre><pre class="part" data-endline="104" data-position="1736" data-startline="102"><code class="hljs">sonarqube - nofile 131072<br />sonarqube - nproc 8192<br /></code></pre></div><div style="text-align: left;">啟動<br /></div><div style="text-align: left;">./sonar.sh start</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;">中文化</div><div style="text-align: left;">擴充套件中輸入關鍵字chinese,裝起來</div><div style="text-align: left;">直接下載.jar也可以。</div><div style="text-align: left;"><a href="https://github.com/timlee/sonar-l10n-zh-tw/releases/tag/v1.0">https://github.com/timlee/sonar-l10n-zh-tw/releases/tag/v1.0</a></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><h2 style="text-align: left;">檢測cli文章</h2></div><div style="text-align: left;"><h3 style="text-align: left;">下載程式</h3> <a href="https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/">https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/</a></div>修改<code>conf/project.properties</code><div style="text-align: left;"><code>增加入容</code></div><div style="text-align: left;"><code>#檔案編碼 <br /></code></div><div style="text-align: left;"><code>sonar.sourceEncoding=UTF-8<br />#專案目錄<br />sonar.projectBaseDir=/home/teacher/file_dir</code></div><div style="text-align: left;"><code>#程式碼位置<br />sonar.sources=.<br />sonar.cobol.copy.directories=/copy</code></div><div style="text-align: left;"><code>#登入帳密<br />sonar.login= admin<br />sonar.password= password</code></div><div style="text-align: left;"><code>#專案key<br />sonar.projectKey=projectkey </code></div><div style="text-align: left;"><code><br /></code></div><div style="text-align: left;"><h3 style="text-align: left;"><code>執行檢測</code></h3></div><div style="text-align: left;"><code>./bin/sonar-scanner<br /></code></div><p></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-65212697147129232322023-05-24T13:11:00.008+08:002023-06-28T17:54:39.829+08:00ventoy研習<p>官網</p><p><a href="https://www.ventoy.net/en/index.html">https://www.ventoy.net/en/index.html</a></p><p>文件</p><p><a href="https://www.ventoy.net/cn/doc_news.html">https://www.ventoy.net/cn/doc_news.html</a></p><p>簡報</p><p><a href="https://docs.google.com/presentation/d/1-b3yULlszrXeyRjWexbgtE9pD8TQqnQLYW99WvMYHeQ/edit?usp=sharing">https://docs.google.com/presentation/d/1-b3yULlszrXeyRjWexbgtE9pD8TQqnQLYW99WvMYHeQ/edit?usp=sharing</a></p><p>文章</p><p><a href="https://wdpsestea.blogspot.com/2021/09/ventoy.html">https://wdpsestea.blogspot.com/2021/09/ventoy.html</a></p><p>影片</p><p><a href="https://www.youtube.com/playlist?list=PL52qbzg6rwU6TgHsoUvYwGjb8ZnqGvKVB">https://www.youtube.com/playlist?list=PL52qbzg6rwU6TgHsoUvYwGjb8ZnqGvKVB</a></p><p> </p><p>擴容<br />select vdisk file="目標檔名"<br />list vdisk<br />expand vdisk maximum=大小(G,*1024)<br />attach vdisk<br />list volume<br />select volume 分割區編號<br />extend<br />list volume<br />detach vdisk<br />exit <br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-7144597874215282402023-04-27T13:45:00.001+08:002023-04-27T13:46:45.417+08:00nano燒錄bootloader<p> 1準備一塊nano當負責燒錄板子。使用arduino ide燒錄範例檔ArduinoISP</p><p>2燒錄的nano和被燒錄的nano,接線方式:GND 、5V、D11、D12、D13根腳位都對接。負責燒錄板子D10腳位接到被燒錄板子的reset腳位</p><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB92asfjW54ak_Z4N4193b0D9UTOG5_BVyLtXhE8qjbWXOdPfA7Q8ToR3a7SSt99DG9vY6KolXXBfTyzw8CUeIIQQruBA-UhaFmrmdEAoj8C3MSZrLQyaLNbxhsFUfMMbQ7rytVpUQ-G2Bqxmuh_VAGlRY_2OxhNAm0XdbSFcvHLsTfnLa0zQCMeClgQ/s471/555.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="433" data-original-width="471" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB92asfjW54ak_Z4N4193b0D9UTOG5_BVyLtXhE8qjbWXOdPfA7Q8ToR3a7SSt99DG9vY6KolXXBfTyzw8CUeIIQQruBA-UhaFmrmdEAoj8C3MSZrLQyaLNbxhsFUfMMbQ7rytVpUQ-G2Bqxmuh_VAGlRY_2OxhNAm0XdbSFcvHLsTfnLa0zQCMeClgQ/s320/555.png" width="320" /></a></div><p>3.連接好後,選擇板子為nano,處理器是ATmega328P,選擇連接port,最後執行燒錄Bootloader。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_70GoQijxouVDQKoAnmAlQWgQ3WmhjGVvSGXSkW3OOtUtne1qWwIazRAWjexrPYZYrTApKvjxECveNTIEipPa1LUE1DnDN0p5OzPD24mD10YGBAVo1VlcRe40OnYtLhn5vDbodd7ulI4YjXHIJ6YbF7WNZmUDs_CDV1FnNdoE5gLgS7NMGyuBbYNZ8g/s650/666.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="621" data-original-width="650" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_70GoQijxouVDQKoAnmAlQWgQ3WmhjGVvSGXSkW3OOtUtne1qWwIazRAWjexrPYZYrTApKvjxECveNTIEipPa1LUE1DnDN0p5OzPD24mD10YGBAVo1VlcRe40OnYtLhn5vDbodd7ulI4YjXHIJ6YbF7WNZmUDs_CDV1FnNdoE5gLgS7NMGyuBbYNZ8g/s320/666.png" width="320" /></a></div><br /><br />chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-27034567954815246872023-04-18T18:07:00.007+08:002023-04-18T18:07:50.779+08:00市大上課<p> </p><p> 講義:<a href="https://docs.google.com/presentation/d/1jLkCjFau-0aEKC7y9HhnGX4tc8lzGOV6xQm03tT-sSw/edit?usp=sharing">https://docs.google.com/presentation/d/1jLkCjFau-0aEKC7y9HhnGX4tc8lzGOV6xQm03tT-sSw/edit?usp=sharing</a></p> chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-90227840766630453012023-03-30T21:19:00.006+08:002023-04-15T08:16:46.973+08:00Linkit7697記事<h2 style="text-align: left;">linkit7697規格: <br /></h2><p><a href="https://www.taiwansensor.com.tw/product/linkit-7697-%E7%89%A9%E8%81%AF%E7%B6%B2%E8%A3%9D%E7%BD%AE%E9%96%8B%E7%99%BC%E6%9D%BF/">https://www.taiwansensor.com.tw/product/linkit-7697-%E7%89%A9%E8%81%AF%E7%B6%B2%E8%A3%9D%E7%BD%AE%E9%96%8B%E7%99%BC%E6%9D%BF/</a></p><p> <br /></p><h3 class="platform__h3">Linkit 7697 物聯網裝置開發板 開發平臺</h3>
<ul class="listContainer"><li>含浮點運算功能的 ARM Cortex-M4 MCU,最大運行時脈為 192 MHz</li><li>內置 352KB SRAM 和 64KB boot ROM</li><li>支援外掛帶有四週邊介面(QPI)模式的串列快閃記憶體</li><li>支援在快閃記憶體上直接執行程序(XIP)</li><li>在 XIP 模式下的 32KB cache</li><li>25 個 DMA channels</li><li>支援 32kHz 晶體的低功耗 RTC 模式</li></ul><h3 class="platform__h3" style="margin-left: 40px; text-align: left;">藍牙</h3>
<ul class="listContainer"><li>低功耗藍牙 4.2(Bluetooth LE)</li></ul>MT7697D 是強化版本,額外提供了 802.11a,以及 5GHz 頻帶的支援。 <br /><div> <h2 style="text-align: left;">esp32規格</h2><p style="margin-left: 40px; text-align: left;"><a href="https://zh.wikipedia.org/wiki/ESP32">https://zh.wikipedia.org/wiki/ESP32</a></p><p style="margin-left: 40px; text-align: left;">CPU:160/240 MHz </p><p style="margin-left: 40px; text-align: left;">記憶體:520 KB SRAM</p><p style="margin-left: 40px; text-align: left;">wifi:802.11 b/g/n 2.4G</p><p style="margin-left: 40px; text-align: left;">藍芽: v4.2 BR/EDR/BLE</p><p style="margin-left: 40px; text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR7wO4f3g5fu86hAovl8vGnhH4RtUy2LP_hsd6YM37g3QLJfAUfdDfnmvQM1i4B4Lk7DsHHVbPX3q-9tehcgZDG_kRWFOAvdTd9e7gc317aoVATQnsK_fEuWDfsEO5z037d9SEFtMqvedPiSg9d3mIaWOlgYMNvviJ3R_lokZKlbD9FhO3ppjygEciEA/s765/esp32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="765" data-original-width="673" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR7wO4f3g5fu86hAovl8vGnhH4RtUy2LP_hsd6YM37g3QLJfAUfdDfnmvQM1i4B4Lk7DsHHVbPX3q-9tehcgZDG_kRWFOAvdTd9e7gc317aoVATQnsK_fEuWDfsEO5z037d9SEFtMqvedPiSg9d3mIaWOlgYMNvviJ3R_lokZKlbD9FhO3ppjygEciEA/s320/esp32.png" width="282" /></a></div><br /> <p></p><div><h2 style="text-align: left;"> arduino ide要認識Linkit7697做法如下:</h2><p>在偏好設定中加入:https://raw.githubusercontent.com/estea8968/osep_web_serial/master/src/firmware/linkit7697/package_mtk_linkit_7697_index.json</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7GaFItLmQA2Pfq5OIobR3NS7TBP_DzsKVyrB4mVIkKZ5lYk8Nf4g36XXNtRyxUaCMqEckmphHNwiJfNbkdbBcRP_EpXoJOJn2l5PIFLV-GF7HWMyLHbHHG68QhBjniSL3AL1PlKscF__mEoJp789BkiD3S_EeIdOJPaeG4uSb1XV5QsZMZxThLcNYDA/s800/a01.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="622" data-original-width="800" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7GaFItLmQA2Pfq5OIobR3NS7TBP_DzsKVyrB4mVIkKZ5lYk8Nf4g36XXNtRyxUaCMqEckmphHNwiJfNbkdbBcRP_EpXoJOJn2l5PIFLV-GF7HWMyLHbHHG68QhBjniSL3AL1PlKscF__mEoJp789BkiD3S_EeIdOJPaeG4uSb1XV5QsZMZxThLcNYDA/s320/a01.png" width="320" /></a></div>在面板管理員中輸入Linkit,會找到板子,安裝。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoR6HPlbnC3zHyP22MwKVnqRIjjNpM8DtKz6g_lo6HCaCCnmB_Vv_xkM-MgJah4u02p_fdd0ZkOh-448hEip_b3jLo3j1ahhzaQTgLJI3c9creUTLqyuQT6AjLcBNtFxOFlA_OcCOfIK7gmiS--lC8XoLRaWDVeIWQ9qQKeu-9rOX80MIST3KzXDBUQ/s1000/a02.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1000" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoR6HPlbnC3zHyP22MwKVnqRIjjNpM8DtKz6g_lo6HCaCCnmB_Vv_xkM-MgJah4u02p_fdd0ZkOh-448hEip_b3jLo3j1ahhzaQTgLJI3c9creUTLqyuQT6AjLcBNtFxOFlA_OcCOfIK7gmiS--lC8XoLRaWDVeIWQ9qQKeu-9rOX80MIST3KzXDBUQ/s320/a02.png" width="320" /></a></div>安裝好後就會有Linkit7697的板子。<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AC2lcYUG0pcy_34W5N8rOSY2z4mW_ARj-PHWsHgVJZEodFxUzDSppX7nVgzWXMJiLgchaDWaMV9yz1TWefySQ3dPJ2Dl7b3KWPB1P2i1aHOABXWPeFp41IyBDkriMMDT2IjMfMmljakyY97TOhAaJYVUp24CdLIqXCaERbShlAeHpZluhnqHdbB5fg/s943/a03.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="943" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AC2lcYUG0pcy_34W5N8rOSY2z4mW_ARj-PHWsHgVJZEodFxUzDSppX7nVgzWXMJiLgchaDWaMV9yz1TWefySQ3dPJ2Dl7b3KWPB1P2i1aHOABXWPeFp41IyBDkriMMDT2IjMfMmljakyY97TOhAaJYVUp24CdLIqXCaERbShlAeHpZluhnqHdbB5fg/s320/a03.png" width="320" /></a></div><br /><p> </p></div></div>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-67988550737262667632023-03-28T14:04:00.004+08:002023-03-28T14:04:35.069+08:00釋放vhdx占用的無用空間<p>可能會用到的資訊 <br /></p><p> 資料來源:https://blog.dino9021.com/2017/12/compact-vhd-vhdx.html</p><h3 class="post-title entry-title" itemprop="name">
Compact VHD / VHDx
</h3>
<div class="post-header">
<div class="post-header-line-1"></div>
</div>
有時候你會發現, Dynamic 的 VHD / VHDx 怎麼 Compact 都還是一樣大<br />
一個 100GB 的 VHD 裡面明明只有 20GB 卻無法縮小<br />
在許多年前我就有發現這個問題並自己摸索找到方法解決<br />
只要進行以下步驟就可以縮小了<br />
<ol><li>以唯讀模式將 vhd mount 起來</li><li>Compact</li><li>unmount</li><li>再 Compact 一次</li></ol>
用 PowerShell Script 比較省事, 請參考以下指令照順序做就可以了<br />
<br />
<a name="more"></a><div>$VHDx = "D:\Hyper-V\Virtual Hard Disks\Disk.vhdx"</div><div>mount-vhd -path $VHDx -readonly</div><div>optimize-vhd -path $VHDx -mode full</div><div>dismount-vhd -path $VHDx</div><div>optimize-vhd -path $VHDx -mode full</div>
<br />
需要注意的是 OS 必須有 Hyper-V Role 才有能力執行 optimize-vhd<br />
如果只是裝了 Hyper-V Management Feature 是不行執行 Compact 的<br />
<br />
後來才發現微軟有這個資訊的參考資料:<br />
<a href="https://blogs.technet.microsoft.com/askcore/2012/09/20/compacting-a-dynamically-expanding-virtual-hard-disk-in-windows-server-2012/" target="_blank">https://blogs.technet.microsoft.com/askcore/2012/09/20/compacting-a-dynamically-expanding-virtual-hard-disk-in-windows-server-2012/</a><br />
chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-36041004756915466762023-03-07T17:13:00.007+08:002023-03-07T19:57:10.962+08:00112年比賽研習<p></p><p> 系統軟體:<a href="https://drive.google.com/file/d/1_LAUs60YlnRY8G40X7qdRrUimFN52LsD/view?usp=sharing">https://drive.google.com/file/d/1_LAUs60YlnRY8G40X7qdRrUimFN52LsD/view?usp=sharing</a></p><p>研習檔案:<a href="https://drive.google.com/drive/folders/1_EyZDvUgmLnqFE4_b8p3cDSzkE4-6WdL?usp=share_link">https://drive.google.com/drive/folders/1_EyZDvUgmLnqFE4_b8p3cDSzkE4-6WdL?usp=share_link</a></p><p>莊政儀老師講義:<a href="https://docs.google.com/presentation/d/1wOn70yQ3Wof6GwQet1NLoVyIkjQ2B_r7gPMDckrIaUw/edit#slide=id.g1f6de74ed1f_2_0">https://docs.google.com/presentation/d/1wOn70yQ3Wof6GwQet1NLoVyIkjQ2B_r7gPMDckrIaUw/edit#slide=id.g1f6de74ed1f_2_0</a></p><p></p><p>以前的資料:<a href="https://drive.google.com/drive/folders/1Mcc8BM8Xru3g7c6b86PLmEhrsKWui0-y?usp=share_link">https://drive.google.com/drive/folders/1Mcc8BM8Xru3g7c6b86PLmEhrsKWui0-y?usp=share_link</a></p><p> 今年度資料<br /></p><p><a href="https://www.doe.gov.taipei/News_Content.aspx?n=8BAE8883AD94E2E0&sms=06B6662E5FDADA7A&s=DC3295F20233D6B3">https://www.doe.gov.taipei/News_Content.aspx?n=8BAE8883AD94E2E0&sms=06B6662E5FDADA7A&s=DC3295F20233D6B3</a></p><p><br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-2044827348273133902023-02-03T18:29:00.005+08:002023-02-03T18:29:45.749+08:00electron編譯出錯<p> error globalThis.....</p><p>在hmtl中加入</p><p><script><br /> this.globalThis || (this.globalThis = this)<br /> </script> </p><p>避免錯誤訊息<br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-12735939437108337042023-01-24T20:49:00.002+08:002023-02-01T09:29:15.022+08:00osep scratch3 編譯<p> 1.安裝git 和node js</p><p>2.在家目錄下指令</p><p>git clone https://github.com/estea8968/osep_web_serial.git<br /></p><p>cd osep_web_serial</p><p>npm install <br /></p><p>npm run copy <br /></p><p>npm start</p><p>如果是win系統</p><p> git clone https://github.com/estea8968/osep_web_serial.git<br /></p><p>cd osep_web_serial</p><p>npm install <br /></p><p>npm run copy:win<br /></p><p>npm run start:win</p><p>打包npm run build<br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-70183252447201538592022-12-18T13:59:00.001+08:002022-12-18T13:59:14.819+08:00google calendar連結<p> https://calendar.google.com/calendar/render?action=TEMPLATE&text=Birthday&dates=20180201T090000/20180201T180000&sprop=&sprop=name:</p><p>text=主題</p><p>dates=起時間/終時間 </p><p><br /></p><p>https://calendar.google.com/calendar/render?action=TEMPLATE&text=Example+Google+Calendar+Event&details=More+help+see:+https://support.google.com/calendar/thread/81344786&dates=20201231T160000/20201231T170000&recur=RRULE:FREQ%3DWEEKLY;UNTIL%3D20210603&ctz=America/Toronto</p><p><br /></p><p>https://github.com/InteractionDesignFoundation/add-event-to-calendar-docs/blob/main/services/google.md<br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-1897256228267767682022-12-17T08:26:00.009+08:002022-12-17T08:26:55.358+08:00js blockly不錯文章<p>值得細細品味 <br /></p><p> https://mindplus.dfrobot.com.cn/ext-js</p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-44559251594037059872022-06-14T21:36:00.005+08:002022-06-16T14:02:04.569+08:00scratch3增加擴充積木(進階)<h2 style="text-align: left;">30天通github</h2><p><a href="https://github.com/doggy8088/Learn-Git-in-30-days">https://github.com/doggy8088/Learn-Git-in-30-days</a><br /></p><p></p><h2 style="text-align: left;">java script快速入門播放清單</h2><a href="https://youtube.com/playlist?list=PLxNBsYH_m6ywXdOfpVgibRbJzidecajoX">https://youtube.com/playlist?list=PLxNBsYH_m6ywXdOfpVgibRbJzidecajoX</a><h2 style="text-align: left;">scratch-vm index.js結構</h2><p> //require基本架構</p><p>const ArgumentType = require('../../extension-support/argument-type');<br />const BlockType = require('../../extension-support/block-type');<br />const formatMessage = require('format-message');<br />const msg = require('./translation');<br /></p><p> </p><p>物件</p><p>class 物件名稱 {</p><p>//物件架構</p><p> constructor(runtime) {<br /> the_locale = this._setLocale();<br /> this.runtime = runtime;<br /> }</p><p>//物件資料 <br /></p><p> getInfo() {<br /> the_locale = this._setLocale();<br /> return {<br /> id: 'mqtt',<br /> color1: '#003D79', //'#0C5986',<br /> color2: '#34B0F7',<br /> name: 'MQTT',<br /> blockIconURI: 'data:image/png;base64,',<br /> blocks: [<br /> {</p><p> }</p><p>}</p><p>function(){</p><p>}</p><p></p><p>module.exports = 物件名稱;</p><p><br /></p><h2 style="text-align: left;">語系</h2><h3 style="text-align: left;">方法1: <br /></h3><p>在index.js中有 <br /></p><p>const msg = require('./translation');</p><p>物件中要有function定義語系</p><p>_setLocale() {<br /> let now_locale = '';<br /> switch (formatMessage.setup().locale) {<br /> case 'zh-tw':<br /> now_locale = 'zh-tw';<br /> break;<br /> default:<br /> now_locale = 'en';<br /> break;<br /> }<br /> return now_locale;<br /> } </p><p>物件架構是呼叫function定義語系</p><p>constructor(runtime) {<br /> the_locale = this._setLocale();<br /> this.runtime = runtime;<br /> } <br /></p><p>使用方法:</p><p>msg.disconnect[the_locale]; <br /></p><p></p><p></p><p></p><p>在資料夾下,要有translation.js</p><p> 檔案內容:</p><p>export const disconnect = {<br /> 'en': 'disconnected',<br /> 'zh-tw': '未連線',<br />}; </p><h3 style="text-align: left;">方法2:</h3><p>在index.js中加入語系物件</p><p>const formatMessage = require('format-message'); <br /></p><p>const FormLcdShow = {<br /> 'en': 'LCD show text [VALUE] at [ROW] row',<br /> 'zh-tw': 'LCD顯示文字[VALUE]在第[ROW]列',<br />};</p><p>在物件中加入架構</p><p>constructor(runtime,util) {<br /> the_locale = this._setLocale();<br /> this.runtime = runtime;<br /> }</p><p>需要有function _setLocale()</p><p>_setLocale () {<br /> let now_locale = '';<br /> switch (formatMessage.setup().locale){<br /> case 'en':<br /> now_locale='en';<br /> break;<br /> case 'zh-tw':<br /> now_locale= 'zh-tw';<br /> break;<br /> default:<br /> now_locale='en';<br /> break;<br /> }<br /> return now_locale;<br /> } </p><p>使用方法</p><p>FormLcdShow [the_locale]</p><p><br /></p><p>積木表示</p><p>在物件中使用陣列blocks: [ ]包括所有積木。</p><p>每個積木為一物件{}。內容為</p><p>opcode: 'digital_write',<br /> blockType: BlockType.COMMAND,<br /> text: FormDigitalWrite[the_locale],<br /> arguments: {<br /> PIN: {<br /> type: ArgumentType.NUMBER,<br /> defaultValue: 'D2',<br /> menu: "digital_pins"<br /> },</p><p> <span> </span><span> </span><span> </span>}</p><h3 style="text-align: left;">方法3: <br /></h3><p>/src/lib/libraries/extensions/index.jsx的<br /></p><p>翻譯檔案在/node_modules/scratch-l10n/locales/editor-msgs.js</p><p>中文語系在最後面。</p><p>格式範例:</p><p>"gui.extension.microbitMore.description":"玩轉 micro:bit 的所有功能。(v2-0.2.4)",<br /></p><p></p><br />chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-78779491430655488442022-06-13T18:41:00.006+08:002022-06-13T19:00:59.950+08:00新竹縣米立雲<p> <a href="https://youtu.be/etTxYNv8oQs">https://youtu.be/etTxYNv8oQs</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/etTxYNv8oQs" width="320" youtube-src-id="etTxYNv8oQs"></iframe></div><br /> <a href="https://bbb.hcc.edu.tw/playback/presentation/2.3/870dd43b9442d2e2f4af47aadcc16927485783db-1654056155990">https://bbb.hcc.edu.tw/playback/presentation/2.3/870dd43b9442d2e2f4af47aadcc16927485783db-1654056155990</a><p></p><p> </p><p>教育部備課平台</p><p><a href="https://weteach.edu.tw/">https://weteach.edu.tw/</a></p><p> <br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-13917494013010699802022-03-31T22:18:00.003+08:002022-06-08T13:00:58.786+08:00研習<p>高義國小澆灌系統</p><p><a href="https://drive.google.com/drive/folders/16faW5YKEdjaWkTcA4JGqFVED4kbGYRid?usp=sharing">https://drive.google.com/drive/folders/16faW5YKEdjaWkTcA4JGqFVED4kbGYRid?usp=sharing</a></p><p><br /></p><p> </p><p>全國貓咪盃</p><p><a href="https://drive.google.com/drive/folders/1Mcc8BM8Xru3g7c6b86PLmEhrsKWui0-y?usp=sharing">https://drive.google.com/drive/folders/1Mcc8BM8Xru3g7c6b86PLmEhrsKWui0-y?usp=sharing</a></p><p><a href="https://docs.google.com/presentation/d/1g72LZcTsZr_ZPIZe5yebTdZp5CX2BsImZ5idyVp3FtI/edit?usp=sharing">https://docs.google.com/presentation/d/1g72LZcTsZr_ZPIZe5yebTdZp5CX2BsImZ5idyVp3FtI/edit?usp=sharing</a></p><p><br /><br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-56109239713582747762022-03-22T07:29:00.003+08:002022-03-23T13:02:53.658+08:00npm build apk<p>産生金鑰檔 <span></span></p><pre>keytool -genkey -v -keystore 檔名.keystore -alias 別名osep -keyalg RSA -keysize 2048 -validity 10000<br /> </pre><pre>sudo npm install -g androidjs-builder</pre><pre>web data html file save to dir </pre><pre>mkdir dir</pre><pre></pre><pre>cd dir </pre><pre><span><pre>androidjs init</pre><pre>npm install </pre><pre>npm run start:dev </pre><pre>npm run build</pre><pre> </pre><pre><span><pre>androidjs build --release</pre></span></pre></span> </pre><pre>apk in dist direction </pre><p></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-90261991151359680702022-01-31T15:22:00.003+08:002022-01-31T15:22:24.901+08:00esp32 arduino編譯LedControl.h錯誤<p> #include <LedControl.h></p><p>少了pgmspace.h這個檔案,但LedControl套件沒有avr資料夾。</p><p> </p><p>拜神,找到,這裡有https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/pgmspace.h</p><p>把它放入LedControl套件裡(先建avr資料夾)。</p><p>編譯就成功了。 <br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0tag:blogger.com,1999:blog-6429412101935649852.post-91665573315780977292022-01-25T14:55:00.011+08:002022-01-25T17:43:49.291+08:00uno當bootloader<p> 遇到ch340燒錄死機。</p><p>解決方法:</p><p>1.找另一張正常的uno,當bootloader主板</p><p>2.接法:11 、12、13、5V、GND對接。usb線接在好的uno上,好的uno D10要接到有問題的uno reset孔。</p><p>3.好的uno燒錄範例檔Arduino ISP。</p><p>4.arduino ide 讀出要燒的ino</p><p>5.檢查arduino ide 的設定 board 和port </p><p>6.按著好的uno 板子上的reset按鈕,滑鼠點下草稿碼/以燒錄器上傳,等約5-10秒,放掉reset按鈕,就看到開始燒錄。</p><p>接法可以參考網址: <br /></p><p><a href="https://forum.arduino.cc/t/uno-to-uno-bootloader/554994/4">https://forum.arduino.cc/t/uno-to-uno-bootloader/554994/4</a></p><p><br /></p><p>如果bootloader可以燒成功,就可以回春了。</p><p>亂試一下,碰巧成功。做法如下</p><p>燒錄器先選AVR ISP,按著reset鈕不放,工具/燒錄bootloader,10秒左右放掉,這時會出現錯誤訊息,再把燒錄器選回Arduino as ISP,再按著reset鈕不放,工具/燒錄bootloader,10秒左右放開,就有機會燒成功,的板子我做了好幾次才成功,但把故障的板子啟回來,還不賴。<br /></p>chen esteahttp://www.blogger.com/profile/04600738232797191317noreply@blogger.com0