<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>半夏星夜 Stars Of The Summer Night</title>
  <subtitle></subtitle>
  <link href="https://blog.roroiii.com/feed.xml" rel="self"/>
  <link href="https://blog.roroiii.com/"/>
  
    <updated>2025-05-13T00:00:00Z</updated>
  
  <id>https://blog.roroiii.com</id>
  <author>
    <name>半夏</name>
    <email>rosa@roroiii.com</email>
  </author>
  
    
    <entry>
      <title>每日心得筆記 2020-06-11(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-11/"/>
      <updated>2020-06-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-11/</id>
      <content type="html">
        <![CDATA[
      <h2>今天</h2>
<p>git clone 設定 GitHub 專案</p>
<h2>感受</h2>
<p>太久沒練習寫題目，卡關很久 XD</p>
<h2>額外行動</h2>
<p>codewars 解題：Nth power rules them all!
寫了 Codewars 解題卡關紀錄 筆記</p>
<h2>明天要</h2>
<ul>
<li>[ ] 看 GIT101</li>
<li>[ ] 熟悉 GIT 指令</li>
<li>[ ] 早上出門去運動</li>
</ul>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-12(五)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-12/"/>
      <updated>2020-06-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-12/</id>
      <content type="html">
        <![CDATA[
      <h2>本週目標：</h2>
<ul>
<li>[x] CS101 初心者的計概與 coding 火球術</li>
<li>[ ] CMD101 Command Line 超新手入門</li>
<li>[ ] GIT101 Git 超新手入門</li>
</ul>
<h2>今天的行動</h2>
<ul>
<li>[x] 路跑３公里完成！</li>
<li>[x] 看 GIT101</li>
<li>[ ] 熟悉 GIT 指令</li>
<li>[x] 第一週（06/12 ~ 06/21）：暖身週</li>
<li>[x] 使用 CoderBridge 整理一篇之前寫的文章並發布
<a href="https://www.coderbridge.com/@roroiii/3f7a6e98c300473fb70dacdb65cc0fc7">PHP 會員管理系統 - CRUD 概念 &amp; 前後端分離介面</a></li>
</ul>
<h2>給明天的自己</h2>
<p>放個假，出去玩兩天 XD
下禮拜一回來開啟認真模式</p>
<hr>
<h2>Reflective 感受</h2>
<h3>你要如何形容今天的情緒</h3>
<p>今天有點混亂的準備課程內容，雖然筆記軟體都很熟悉，但是使用起來還是想找一個最順手的，覺得還是 HackMD 的輸入方式最習慣，但是因為不好搜尋筆記內容，所以之後的安排為：</p>
<ul>
<li>HackMD 寫每日心得筆記，之後再貼到作業裡面</li>
<li>Notion 寫技術文章筆記，方便自己搜尋找資料</li>
<li>CoderBridge 寫整理好的文章，把之前沒有公開的筆記慢慢整理貼過去，好像之後會有客製化的功能，如果開放之後我再去買個網址改過去。</li>
</ul>
<p>也有想過用 GitHub 自己弄一個，但是現在時間有點不夠用，也許有空再來研究。</p>
<h4>今天的高峰是什麼?</h4>
<p>今天終於開始看課程，但是看影片的速度有點慢 XD
因為看一半就會想到要找什麼內容，或是突然有什麼想法就中斷了，也許下禮拜一看課程的時候要給自己一個專心的時間。</p>
<h4>今天的低點是什麼?</h4>
<p>看到同學進度很快，筆記寫的很讚有點焦慮 XD
但是因為自己這兩天都不在家裡，沒辦法跟課跟很快，所以給自己的鼓勵是「看到厲害的同學就被激勵到，不要偷懶！」
然後每個人的進度程度都不一樣，適時比較但不要計較 XD</p>
<hr>
<h2>Interpretive 解釋反思</h2>
<h4>我們今天學到了什麼？</h4>
<p>時間是用取捨的，雖然每個都很想學會，但是要學就學最有相關跟幫助的內容。</p>
<h4>今天一個重要的領悟是什麼？</h4>
<p>安排自己的學習進度很重要。</p>
<hr>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-15(一)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-15/"/>
      <updated>2020-06-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-15/</id>
      <content type="html">
        <![CDATA[
      <h2>本週目標：</h2>
<ul>
<li>[CS101] 初心者的計概與 coding 火球術 100%</li>
<li>[CMD101] Command Line 超新手入門 5%</li>
<li>[GIT101] Git 超新手入門 30%</li>
<li>平日每天跑步 1.5 公里</li>
</ul>
<hr>
<h2>Objective 客觀</h2>
<h4>關於今天的課程，你記得什麼？</h4>
<p>如何初始化 Git ，查詢 Git 狀態，把檔案加入版控跟移除版控
如何看 Git 的歷史紀錄，不想加入版控的檔案要放在 .gitignore 裡面</p>
<h4>完成了什麼？</h4>
<ul>
<li>[x] 看了 Git 超新手入門，了解 vim 的指令與用法</li>
<li>[x] 熟悉 Git 指令並手寫成三張筆記</li>
<li>[x] 運動 - 跑步 1.5 公里</li>
<li>[x] 把 iTerm git 提示改成英文版</li>
<li>[x] 已經開始使用 command line 與 git 指令，只是還要看自己寫的筆記，覺得整理成表格滿方便的
<img src="https://i.imgur.com/pEIRqjR.png" alt="">
<img src="https://i.imgur.com/zfQho3i.png" alt=""></li>
</ul>
<h2>Reflective 感受</h2>
<h3>你要如何形容今天的情緒</h3>
<p>今天的學習配速也很慢 <em>(:з」∠)</em>
覺得自己還在抓學習的節奏，而且很了解自己是一個很容易分心的人，一個課程主題不能一天完成，會覺得很倦怠想睡覺就會不想繼續，所以明天加了一些自己之前就有在看的課程作為轉換心情用，就算沒有完成額外的課程也沒關係。</p>
<p>馬拉松不在一開始衝得快，而是能跑完全程的人。</p>
<h4>今天的高峰是什麼?</h4>
<p>終於學會 Git 指令感到感動，因為之前看了很多網路文章還是看不懂為什麼，今天看短短的影片就能懂了這些概念，覺得很有成就感。</p>
<h4>今天的低點是什麼?</h4>
<p>學習進度太慢有點太容易分心，明天嘗試關掉電腦版的 Line ，網頁分頁不要開這麼多。</p>
<hr>
<h2>Interpretive 解釋反思</h2>
<h4>我們今天學到了什麼？</h4>
<p>只有學了 git 指令 XD</p>
<h4>今天一個重要的領悟是什麼？</h4>
<p>學程式概念很重要。</p>
<h2>Decisional 決定行動</h2>
<h4>我們會如何用一句話形容今天的工作？</h4>
<p>要對自己嚴格一點。</p>
<h4>有哪些工作需要明天繼續努力?</h4>
<ul>
<li>早上嘗試用記憶力整理 Git 筆記到電腦裡，看自己記得多少
<a href="https://www.notion.so/roroiii/Git-bc4f0dd6597e4878b012c72790d3cb2e">Git 版本控制指令</a></li>
<li>繼續把 Git 課程看完</li>
<li>金魚都能懂的網頁切版 第七天 （額外）</li>
<li>台大計算機概論第二講 （額外）</li>
</ul>
<p>hw2：理解放鬆很重要 完成
因為假日去玩放鬆兩天 南投埔里鯉魚潭，好山好水 XD
但是結果玩得太累影響今天的學習進度，要再補回來。
每天的放鬆時間就是去跑步跟洗澡泡澡的時間～
維持正能量很重要。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-16(二)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-16/"/>
      <updated>2020-06-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-16/</id>
      <content type="html">
        <![CDATA[
      <h2><strong>Objective 客觀</strong></h2>
<blockquote>
<p>關於今天的課程，你記得什麼？完成了什麼？</p>
</blockquote>
<ul>
<li>[x] 把 CoderBridge 部落格設置完成（約一小時）
順便複習一下 SEO 的東西，發現 FB 後台整個又大改版了哈哈。
覺得 CoderBridge 真的滿方便的，比起 wordpress 好用多了，可以專注在寫文章這件事情上面。</li>
<li>[x] Git 的平行時空：branch</li>
<li>[x] GitHub：全球最大工程師交友平台</li>
<li>[x] <a href="https://www.notion.so/roroiii/Git-bc4f0dd6597e4878b012c72790d3cb2e">Git 版本控制指令</a>筆記</li>
<li>[x] 三張 git 手寫筆記</li>
<li>[ ] 跑步 1.5 公里</li>
</ul>
<h3><strong>Reflective 感受</strong></h3>
<blockquote>
<p>你要如何形容今天的情緒今天的高峰是什麼？今天的低點是什麼？</p>
</blockquote>
<p>有踏實的把課程看一個進度，所以還滿開心的。
但是看到朋友傳的訊息內容，又覺得有點沮喪 XD
今天情緒應該是坐過山車的感覺。</p>
<p>早上把 git 的筆記用記憶力寫出來某個程度，覺得熟悉也是滿厲害的 XD</p>
<p>發現課程影片分鐘數很少，但是花了滿多時間去理解的。但是如果真的有記在腦袋裡，花這些時間是值得的。</p>
<h3><strong>Interpretive 解釋反思</strong></h3>
<blockquote>
<p>我們今天學到了什麼？今天一個重要的領悟是什麼？</p>
</blockquote>
<ul>
<li>學了 git 指令 與 gitHub 的使用</li>
<li>學會了用蕃茄鐘控制學習時間</li>
<li><img src="https://i.imgur.com/OuyTmBS.jpg" alt=""></li>
</ul>
<h3><strong>Decisional 決定行動</strong></h3>
<blockquote>
<p>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</p>
</blockquote>
<p>明天會更好 QQ</p>
<ul>
<li>早上嘗試用記憶力整理 Git 筆記到電腦裡，看自己記得多少
<a href="https://www.notion.so/roroiii/Git-GitHub-5b264c3c14904284868e25be65c0565c">Git 與 GitHub</a></li>
<li>繼續把 Git 課程看完</li>
<li>金魚都能懂的網頁切版 第七天 （額外）</li>
<li>台大計算機概論第二講 （額外）</li>
</ul>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-17(三)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-17/"/>
      <updated>2020-06-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-17/</id>
      <content type="html">
        <![CDATA[
      <h2><strong>Objective 客觀</strong></h2>
<blockquote>
<p>關於今天的課程，你記得什麼？完成了什麼？</p>
</blockquote>
<ul>
<li>[x] CoderBridge 新增一篇文章
發現系統有 bug ，文字一次貼過去會 lag ，文章比較下面的文字會顯示不出來，但其實是有貼上的。圖片不能直接複製貼上，一張一張上傳覺得有點麻煩，今天先做一半明天再處理圖片內容。</li>
<li>[x] 跑步 1.5 公里</li>
<li>[x] [CMD101] Command Line 超新手入門 完成</li>
<li>[x] [GIT101] Git 超新手入門 完成</li>
<li>[x] 練習怎麼推專案到 GitHub 上，遇到權限問題已自行解決。</li>
</ul>
<h3><strong>Reflective 感受</strong></h3>
<blockquote>
<p>你要如何形容今天的情緒今天的高峰是什麼？今天的低點是什麼？</p>
</blockquote>
<p>很開心的是遇到推上 GitHub 遇到問題，但是自己有辦法找答案解決，解決辦法是把錯誤訊息第一行貼到 Google 搜尋。</p>
<p>只要在自己的 GitHub 上加入本地端的密鑰就解決了。
參考這幾篇文章自己做一個本地端的 SSH 密鑰。<a href="https://help.github.com/cn/github/authenticating-to-github/error-permission-denied-publickey">錯誤：權限被拒絕（公鑰）</a>
更開心的是還好有中文 XD 不然我一定更難理解，以後工作上遇到就知道是什麼狀況了。</p>
<h3><strong>Interpretive 解釋反思</strong></h3>
<blockquote>
<p>我們今天學到了什麼？今天一個重要的領悟是什麼？</p>
</blockquote>
<p><strong>照顧身體很重要</strong>，今天一直流鼻涕打噴嚏，因為不舒服腦袋就跑出很多負面想法，只好趕緊忽視繼續認真跟課。
下午有睡了一下，起來比較有精神但還是處在昏昏沈沉的狀態。</p>
<h3><strong>Decisional 決定行動</strong></h3>
<blockquote>
<p>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</p>
</blockquote>
<p>明天練習怎麼繳作業，把作業完成。
研究一下挑戰題
整理筆記發佈成文章</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-18(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-18/"/>
      <updated>2020-06-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-18/</id>
      <content type="html">
        <![CDATA[
      <h2><strong>Objective 客觀</strong></h2>
<blockquote>
<p>關於今天的課程，你記得什麼？完成了什麼？</p>
</blockquote>
<ul>
<li>[x] 繳交 week1 作業</li>
<li>[ ] 跑步 1.5 公里</li>
<li>[x] 寫一題 <a href="https://www.codewars.com/kata/5a58d46cfd56cb4e8600009d/solutions/javascript">Halving Sum</a></li>
<li>[ ] 整理筆記發佈到 blog</li>
</ul>
<h3><strong>自我檢測</strong></h3>
<ul>
<li>[x] P1 你說得出程式如何執行</li>
<li>[x] P1 你理解寫程式的本質只是一行行的指令</li>
<li>[x] P1 你了解前端與後端的區別</li>
<li>[x] P1 你能說出從發出一個 request 到接收 response 中間發生的事</li>
<li>[x] P1 你了解不同載具的差異在哪（Desktop、Mobile、Web）</li>
<li>[x] P1 你了解基本的 command line 指令</li>
<li>[x] P1 你知道 Git 在做什麼，以及為何我們需要 Git</li>
<li>[x] P1 你知道 add、commit、push、pull 等基本 Git 指令</li>
<li>[x] P1 你知道怎麼使用 branch 並送出 Pull Request</li>
<li>[x] P2 你熟悉 Git Workflow（其實就是交作業的流程）</li>
</ul>
<h3><strong>Reflective 感受</strong></h3>
<blockquote>
<p>你要如何形容今天的情緒今天的高峰是什麼？今天的低點是什麼？</p>
</blockquote>
<p>今天開心的一件事情就是原來我可以用 3 天學會 Git ?，因為之前網路上看了很多文章都還是不能理解他的概念，但是看影片跟用資料夾比喻覺得很快就進入狀況了，現在反過來看網路上的文章都能知道在寫什麼，覺得很神奇。這就是所謂的懂了就是懂了，也不知道當初自己卡關在哪裡的那種感覺吧！</p>
<p>放鬆的時候看 Peppa Pig 很療癒又可以練英聽，影片充滿笑聲，覺得心情變得很好：）</p>
<p>周杰倫的新歌也可以轉換讀書躁動的心情，很輕快的感覺～
https://youtu.be/-biOGdYiF-I</p>
<p>今天的低點就是自己之前安排的額外的影片課程都沒看 XD</p>
<h3><strong>Interpretive 解釋反思</strong></h3>
<blockquote>
<p>我們今天學到了什麼？今天一個重要的領悟是什麼？</p>
</blockquote>
<p>因為有持續在解題，知道自己會某些奇妙的地方會卡關，有的邏輯我知道怎麼思考，但是下手寫程式就會卡住不知道怎麼寫。
也許之後會跟別人一起討論解題，希望下週進度可以持續跟上～</p>
<h3><strong>Decisional 決定行動</strong></h3>
<blockquote>
<p>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</p>
</blockquote>
<p>明天會開始看 week2 的部分，然後早上先看一下簡單的排版課程影片
把心得筆記整理一下，發佈到 blog 。</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Command Line 基本指令</title>
      <link href="https://blog.roroiii.com/posts/git/command-line/"/>
      <updated>2020-06-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/git/command-line/</id>
      <content type="html">
        <![CDATA[
      <h2>電腦看到的跟人看到的不一樣</h2>
<p>電腦看得懂存文字
人看得懂圖像</p>
<p><img src="https://static.coderbridge.com/img/roroiii/fec8221694a94b38b73f6b71645c4113.jpg" alt=""><img src="https://static.coderbridge.com/img/roroiii/55d70448085c4e819560fe408bde3dcc.jpg" alt="">
更多常用指令
<img src="https://static.coderbridge.com/img/roroiii/7de89fa283914111a19285c1e6a3adae.jpg" alt=""></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Git 版本控制指令 與 vim 編輯器</title>
      <link href="https://blog.roroiii.com/posts/git/git-and-vim/"/>
      <updated>2020-06-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/git/git-and-vim/</id>
      <content type="html">
        <![CDATA[
      <h2>Git 的好處</h2>
<ul>
<li>比較容易看到版本之間的差異</li>
<li>有版本控制與分支的概念
<img src="https://static.coderbridge.com/img/roroiii/127d51a8ec204af4bf620e0161b66e63.png" alt=""></li>
</ul>
<p>最近在學習 Git，發現 Terminal 上 Git 命令提示顯示中文，希望改成英文。
<code>echo &quot;alias git='LANG=en_GB git'&quot; &gt;&gt; ~/.zshrc</code>
<img src="https://static.coderbridge.com/img/roroiii/78747c6a728642919821984e2bef29d6.png" alt=""></p>
<p>如果你在 git commit 的時候出現錯誤，跳出了一個要你設定帳號跟姓名的畫面，請輸入以下指令</p>
<p>（記得把名字跟 email 換成你自己的）</p>
<ol>
<li><code>git config --global user.name &quot;your name&quot;</code></li>
<li><code>git config --global user.email &quot;youremail&quot;</code></li>
</ol>
<blockquote>
<p>在 Mac “command + shift + . （dot）”可以顯示隱藏檔案/檔案夾。
<img src="https://static.coderbridge.com/img/roroiii/f12843e31c414d19823645aef8e0db90.png" alt=""></p>
</blockquote>
<h2>Git 的使用方式</h2>
<ol>
<li>先 <code>cd</code> 到要版控的資料夾</li>
<li><code>git init</code></li>
<li><code>git add .</code></li>
<li><code>git commit -m &quot;hello&quot;</code> 或 <code>git commit -am &quot;hello&quot;</code>
<img src="https://static.coderbridge.com/img/roroiii/34a6cee965c74e12bc8829b91dd338e9.png" alt="">
<img src="https://static.coderbridge.com/img/roroiii/807b0bde185743eaa4376e9cd08622fe.png" alt=""></li>
</ol>
<blockquote>
<p>如果是 WIN 系統要另外下載 Git (使用的是 Git Bash)</p>
</blockquote>
<h2>常用 Git 指令</h2>
<p><img src="https://static.coderbridge.com/img/roroiii/253512209c6a417084de061dd6434ff7.jpg" alt=""></p>
<h2>Git branch 分支</h2>
<p><img src="https://static.coderbridge.com/img/roroiii/59e2cdf5753848ed9b41f7f964e322b4.png" alt="">
兩個不同的 Branch ，好處是大家可以互相分工。</p>
<h3>Branch 開發流程</h3>
<ol>
<li><code>git branch b名稱</code> 開發新功能，先用 Branch 新建一個是好習慣</li>
<li><code>git checkout b名稱</code> 切換到 b 名稱 分支做開發</li>
<li><code>git checkout master</code> 開發完成切回主幹</li>
<li><code>git merge b名稱</code> 把 b 名稱 的分支合併進 Master</li>
<li><code>git commit -am &quot;c名稱&quot;</code> commit 修改的內容，結束</li>
</ol>
<h3>Branch 衝突 COUFLICT</h3>
<p>如果合併之後有衝突，要手動修改衝突的部分， Git 會提示哪裡需要修改。</p>
<ol>
<li>自己決定要留什麼內容（手動解決）</li>
<li>儲存檔案</li>
<li>commit
<img src="https://static.coderbridge.com/img/roroiii/c4e9a1b9c4774fecb94910fd9812fe61.jpg" alt=""></li>
</ol>
<h2>Vim 編輯器使用</h2>
<p><img src="https://static.coderbridge.com/img/roroiii/f12605ec59e9456b911aafb6177c2fe0.jpg" alt=""></p>
<h2>Git 狀況劇</h2>
<h3>什麼時候適合 commit ?</h3>
<p>自己決定時機，通常都是完成一個小進度的時候。</p>
<h3>打錯字了，想改 commit message</h3>
<p><code>git commit —amend</code> 可以修改指令名稱。</p>
<h3>已經 commit 可是後悔了</h3>
<p><code>git reset HEAD^</code><br>
上一個 commit 不要，但改的檔案還是要，預設 <code>git reset HEAD^ --soft</code> 的簡寫。
<code>git reset HEAD^ --hard</code><br>
上一個 commit 改的東西全部不要了(當作 commit 沒發生過)</p>
<h3>還沒 commit 但改的東西我不想要了</h3>
<p><code>git checkout --&lt;flie&gt;</code> 回復上一個 commit 狀態
<code>git checkout --.</code> 還沒 commit 的檔案都回到上一個 commit 的狀態
如果指令忘記了， <code>git status</code> 都有提示。</p>
<h3>想修改 branch 名稱</h3>
<ol>
<li><code>git checkout b名稱</code> 先切換到該 branch</li>
<li><code>git branch -m b新名稱</code> 重新命名該 branch</li>
</ol>
<h3>想修改或使用遠端的 branch</h3>
<p>直接用 <code>git checkout b名稱</code> 切換過去該分支， Git 就會自動抓下來了</p>
<h3>Git Hook 發生某件事情時通知我</h3>
<p>可以用來檢查 push 的狀態，或是錯漏的地方，有時間再研究一下。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Server  同步 gitLab</title>
      <link href="https://blog.roroiii.com/posts/git/server-ansyc-gitlab/"/>
      <updated>2020-06-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/git/server-ansyc-gitlab/</id>
      <content type="html">
        <![CDATA[
      <p>cPanel 自動同步 GitLab 檔案</p>
<h2>php 的方式</h2>
<p>Cron job 指令</p>
<pre class="language-php"><code class="language-php">php <span class="token operator">-</span>q <span class="token operator">/</span>home<span class="token operator">/</span><span class="token operator">...</span><span class="token operator">/</span>public_html<span class="token operator">/</span>git<span class="token operator">.</span>php <span class="token operator">></span><span class="token operator">/</span>dev<span class="token operator">/</span><span class="token constant">null</span> <span class="token number">2</span><span class="token operator">></span><span class="token operator">&amp;</span><span class="token number">1</span></code></pre>
<p>檔案 git.php</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
    <span class="token function">shell_exec</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'git pull origin master'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">echo</span> <span class="token string single-quoted-string">'同步完成！'</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<h2>git.sh 的方式</h2>
<p>Cron job 指令</p>
<pre class="language-php"><code class="language-php"><span class="token operator">/</span>home<span class="token operator">/</span><span class="token operator">...</span><span class="token operator">/</span>git<span class="token operator">.</span>sh <span class="token operator">></span><span class="token operator">/</span>dev<span class="token operator">/</span><span class="token constant">null</span> <span class="token number">2</span><span class="token operator">></span><span class="token operator">&amp;</span><span class="token number">1</span></code></pre>
<p>檔案 git.sh</p>
<pre><code>cd /home/.../public_html/資料夾名稱

git checkout -b branch-name
git remote update

UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse &quot;$UPSTREAM&quot;)
BASE=$(git merge-base @ &quot;$UPSTREAM&quot;)

if [ $LOCAL = $REMOTE ]; then
    echo &quot;Up-to-date&quot;
elif [ $LOCAL = $BASE ]; then
    echo &quot;Need to pull&quot;
    git pull origin branch-name
fi
</code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-19(五)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-19/"/>
      <updated>2020-06-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-19/</id>
      <content type="html">
        <![CDATA[
      <h2><strong>Objective 客觀</strong></h2>
<blockquote>
<p>關於今天的課程，你記得什麼？完成了什麼？</p>
</blockquote>
<ul>
<li>[x] week2 課程內容</li>
<li>[x] 金魚都能懂網頁設計入門 : 怎麼學 CSS - 鐵人賽第七天
學會用心智圖做 CSS 筆記，也把 CMD 用這種方式寫了一份筆記。</li>
<li>[x] 跑步 3 公里</li>
<li>[ ] <a href="https://www.codewars.com/kata/55d1d6d5955ec6365400006d/train/javascript">Round up to the next multiple of 5</a></li>
<li>[x] 整理筆記發佈到 blog</li>
<li>[x] 看一本書</li>
<li>[ ] [JS101] 用 JavaScript 一步步打造程式基礎</li>
<li>[x] [ALG101] 先別急著寫 leetcode 29%</li>
</ul>
<p>自我檢測：</p>
<ul>
<li>[ ] P1 你能靈活運用變數、迴圈、判斷式等等基本概念來解題</li>
<li>[ ] P1 你能一行行的說出現在程式在做什麼</li>
<li>[x] P1 你知道「回傳」跟「輸出」的差異</li>
<li>[ ] P1 你可以把用文字寫好的演算法轉成程式碼</li>
</ul>
<h3><strong>Reflective 感受</strong></h3>
<blockquote>
<p>你要如何形容今天的情緒今天的高峰是什麼？今天的低點是什麼？</p>
</blockquote>
<p>思考中．．．</p>
<h3><strong>Interpretive 解釋反思</strong></h3>
<blockquote>
<p>我們今天學到了什麼？今天一個重要的領悟是什麼？</p>
</blockquote>
<p>今天看了「蔡康永的說話之道」，裡面有幾句話覺得滿好的。
看在眼裡，放在心裡，講話不要說出「我」字。</p>
<blockquote>
<p>把無謂的勝利讓給對方
懂的認輸的人很懂說話</p>
</blockquote>
<p>不講出「我」字滿難的，但是仔細想想用「你」字的話就可以把話題丟給對方，營造一個良好的說話氣氛，找機會跟朋友聊天試試看 XD</p>
<h3><strong>Decisional 決定行動</strong></h3>
<blockquote>
<p>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</p>
</blockquote>
<ul>
<li>[ ] [JS101] 用 JavaScript 一步步打造程式基礎</li>
<li>[ ] [ALG101] 先別急著寫 leetcode 29%</li>
</ul>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-20(六)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-20/"/>
      <updated>2020-06-20T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-20/</id>
      <content type="html">
        <![CDATA[
      <h2><strong>Objective 客觀</strong></h2>
<blockquote>
<p>關於今天的課程，你記得什麼？完成了什麼？</p>
</blockquote>
<ul>
<li>[x] 練習腹式呼吸放鬆胸骨～</li>
<li>[ ] <a href="https://www.codewars.com/kata/55d1d6d5955ec6365400006d/train/javascript">Round up to the next multiple of 5</a></li>
<li>[x] [JS101] 用 JavaScript 一步步打造程式基礎 14% 寫題目居多</li>
<li>[x] 完成 week1 挑戰題</li>
<li>[ ] 金魚都能懂網頁設計入門 : 怎麼學 CSS - 鐵人賽第八天</li>
</ul>
<p>自我檢測：</p>
<ul>
<li>[ ] P1 你能靈活運用變數、迴圈、判斷式等等基本概念來解題</li>
<li>[ ] P1 你能一行行的說出現在程式在做什麼</li>
<li>[x] P1 你知道「回傳」跟「輸出」的差異</li>
<li>[ ] P1 你可以把用文字寫好的演算法轉成程式碼</li>
</ul>
<h3><strong>Reflective 感受</strong></h3>
<blockquote>
<p>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</p>
</blockquote>
<p>今天寫「<a href="https://www.notion.so/roroiii/Lv1-7650bb4485b04e21b94e4f7c9b73e919">綜合題目練習 Lv1</a>」的題目，有些之前都有練習過了，但是卡住的點還是在同一個地方，可能是我前面教學影面還沒看完就先寫題目的關係，但是解題有比之前快很多。星期一會把教學看完然後再寫題目。
覺得開心的是有找朋友一起報名這個課程，互相督促才會認真，不然我的個性可能會很快放棄面對現實先去找工作了 QQ
低點是解題的時候有點懷疑自己的智商 XD</p>
<h3><strong>Interpretive 解釋反思</strong></h3>
<blockquote>
<p>我們今天學到了什麼？今天一個重要的領悟是什麼？</p>
</blockquote>
<p>想到的事情就要行動～行動要比想法還快，才會成功。</p>
<h3><strong>Decisional 決定行動</strong></h3>
<blockquote>
<p>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</p>
</blockquote>
<p>明天是給畢業生送舊活動的日子，到晚上才有時間看書，如果太累明天會休息一下，星期一再繼續努力～</p>
<ul>
<li>[ ] [JS101] 用 JavaScript 一步步打造程式基礎</li>
</ul>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-22(一)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-22/"/>
      <updated>2020-06-22T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-22/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>[x] 練習腹式呼吸放鬆胸骨～</li>
<li>[ ] <a href="https://www.codewars.com/kata/55d1d6d5955ec6365400006d/train/javascript">Round up to the next multiple of 5</a></li>
<li>[x] [JS101] 用 JavaScript 一步步打造程式基礎 35% 寫題目居多</li>
<li>[x] git 練習</li>
<li>[ ] 金魚都能懂網頁設計入門 : 怎麼學 CSS - 鐵人賽第八天</li>
</ul>
<p>自我檢測：</p>
<ul>
<li>[x] P1 你能靈活運用變數、迴圈、判斷式等等基本概念來解題</li>
<li>[x] P1 你能一行行的說出現在程式在做什麼</li>
<li>[x] P1 你知道「回傳」跟「輸出」的差異</li>
<li>[ ] P1 你可以把用文字寫好的演算法轉成程式碼</li>
</ul>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>今天的情緒也像坐過山車一樣起起伏伏～但是看到自己一步一步慢慢完成課程進度覺得很讚
低點大概就是天氣真的太熱了，感覺快融化。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>學到怎麼用 node 直接在終端機上執行，覺得很方便，沒想到自己也可以靈活的使用終端機。好像每天都有新的突破！
還有弄懂了三元運算子，switch 解題有時候也可以用 array 的方式解題。</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>把 [JS101] 的教學看完，然後開始瘋狂解題～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-23(二)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-23/"/>
      <updated>2020-06-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-23/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>跑步３公里</li>
<li>[JS101] 用 JavaScript 一步步打造程式基礎 影片看完
還有開始整理自己的履歷表了，準備先找工作賺點房租跟生活費</li>
</ul>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>今天也是忽高忽低 XD 因為一點自己的私事影響情緒，不過還是 6 點多起床，打理好自己開始看課程，希望明天不要再被情緒影響，好好解題。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>今天終於把 week2 教學影片看完了～超開心
因為看影片速度很龜，不懂的地方會用原速度看，但是覺得像是複習 JavaScript 的感覺，也了解到很多新的 JavaScript 用法。</p>
<p>雖然影片都很短，但是要理解是需要花一些時間的，今天解題到 level1 的第六題，覺得解題有比一開始自己寫 cardwars 快很多。</p>
<p>也有偷偷看一下 week3 的進度，覺得程度大跳躍 XD
所以希望這兩天把 week2 結束掉，讓後面有更多時間解會卡關的題目。</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>明天開始瘋狂解題～
看一下 CSS 金魚系列
然後也許出門透透氣～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-24(三)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-24/"/>
      <updated>2020-06-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-24/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>綜合題目練習 Lv1 完成</li>
<li>綜合題目練習 Lv2 完成到第六題</li>
</ul>
<p>今天去圖書館轉換心情，換一個環境認真一下
看了世界名作「少年維特的煩惱」，覺得歌德真是一個神奇的人，他寫那本書的時候才 25 歲有點不相信 XD ，感覺像 40 歲的歷練，文筆精湛（或是說翻譯得還不錯），覺得他的世界觀還滿多可以參考的部分，帶給周圍的朋友歡樂之類的。
但我只看前半本，後半本感覺比較多是感情的描寫，就沒繼續看哩。是一本好書，推薦～</p>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>覺得解題寫不出來是因為不知道怎麼轉換成程式碼，或是不熟悉。
九九乘法表馬上就寫出來了，覺得很神奇，因為之前都沒什麼概念。
反而是星星的題目卡很久，因為 <code>console.log</code> 位置放的不對，出來的結果就都不同，還需要再多熟悉一下。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>這幾天都用迴圈解題，很少用內建函數，所以更能懂電腦程式跑的方法，還有 Chrome 的 debugger 很好用！</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>因為寫題目很分心又需要一直問人ＸＤ
所以明天還是會繼續寫題目
可能會做一下作業邊寫題
端午連假會跟朋友聚一下～之後再回來奮鬥</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-25(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-25/"/>
      <updated>2020-06-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-25/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>綜合題目練習 Lv2 完成
<ul>
<li>卡關「費氏數列」跟「找出最小值」</li>
</ul>
</li>
<li>綜合題目練習 Lv3 練習一</li>
<li>CSS 金魚系列第八天
<ul>
<li>認識 box 模型，由 width 、 border 、 padding 、 margin 組成。內容要不跑版認識他們很重要～</li>
<li>width 、 border 、 padding 是看得到的寬度</li>
<li>margin 是隱藏的寬度</li>
</ul>
</li>
<li>我的 week2 作業還沒寫ＱＱ</li>
<li>完成 20 分鐘有氧運動，全身汗 https://youtu.be/LZAQQOH5n8g</li>
</ul>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>今天卡關在費氏數列跟找出最小值，對於遞迴還滿沒有概念的，看了解題的講解影片有比較懂，之後遇到類似的題目應該就會知道怎麼下手了。
找最小值看影片覺得寫得很複雜ＸＤ 雖然看得懂概念但是自己應該寫不出來，後來問朋友用了 lv3 第一題 for 的選擇排序法完成，對排序法有點概念了。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>幾分耕耘幾分收穫，雖然坐了幾乎一整天，但是每天都有在進步。
寫不出來的時候去學些別的內容，有助於轉換腦袋。
以後作業完成一個進度就 git 一下，才不會忘記第一週的內容～</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>明天下午會跟朋友去散心走走
然後晚上回來繼續努力～把之前寫的筆記整理一下</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-26(五)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-26/"/>
      <updated>2020-06-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-26/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>week2 作業 第一、二題
用早上出門前的時間完成，第二題寫的有點久。</li>
</ul>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>今天早上很開心下午很興奮，晚上很低落，呈現一個拋物線的心情。
發生了一些事情，需要調整，今天就讓自己放個假。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>朋友很重要。有知心朋友更重要。</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>調整好心情繼續跟課。</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-27(六)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-27/"/>
      <updated>2020-06-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-27/</id>
      <content type="html">
        <![CDATA[
      <p>中午跟高中同學聚餐，暢聽媽媽經ＸＤ
今天完成了 week2 的第三、五題，其他題目做了一半，明天繼續加油！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-28(日)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-28/"/>
      <updated>2020-06-28T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-28/</id>
      <content type="html">
        <![CDATA[
      <h3>關於今天的課程，你記得什麼？完成了什麼？</h3>
<ul>
<li>完成 week2 作業</li>
</ul>
<h3>你要如何形容今天的情緒？今天的高峰是什麼？今天的低點是什麼？</h3>
<p>聽了「80 年代西洋經典情歌」放鬆情緒。</p>
<h3>我們今天學到了什麼？今天一個重要的領悟是什麼？</h3>
<p>學會自處。</p>
<h3>我們會如何用一句話形容今天的工作？有哪些工作需要明天繼續努力？</h3>
<p>開始第三週課程。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-29(一)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-29/"/>
      <updated>2020-06-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-29/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>金魚都能懂網頁設計入門 : Float 浮動 - 鐵人賽第九天
<ul>
<li>知道了原來在 float 被當作父層消失的時候，可以在寫一個元素撐開，希望之後可以有閒錢買 CSS 大全回家當睡前讀物。</li>
</ul>
</li>
<li>[ALG101] 先別急著寫 leetcode
<ul>
<li>跳著看來看去，不過有些題目在 JS101 都寫過了</li>
</ul>
</li>
<li>[JS201] 進階 JavaScript：那些你一直搞不懂的地方
<ul>
<li>決定先把這堂課看完，看到 hosting 的時候直接 hosting 進入我的淺意識了，超催眠 zZZ，但是之前有看過 Udemy 的課程克服ＪＳ奇怪的部分所以觀念算是很好理解的。</li>
<li>蕃茄鐘中場休息的時候搭配了<a href="https://youtu.be/eIib9hh2UCE">五月天 [ 突然好想見到你 ] Mayday live in the sky 線上演唱會</a>避免睡著，還滿有效果的，哈哈。</li>
<li>進度 30%</li>
</ul>
</li>
</ul>
<h3>明天的預定進度</h3>
<p>希望可以把 [JS201] 看完
再看一篇金魚系列</p>
<h3>還記得哪些內容？</h3>
<p>hosting 的優先順序</p>
<ol>
<li>function</li>
<li>arguments</li>
<li>variable
其他已經知道的觀念就沒寫下來了。</li>
</ol>
<h3>反思今天的學習成果</h3>
<p>對 Mac 操作越來越順手了，反之使用 win 系統會變得有點卡卡的了。
然後分頁跟程式都開很多，很分心ＸＤ 不過這好像是我之前工作的習慣，雖然有點浪費時間不過比較不會執著或是一直卡在同一個地方。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>課程影片很短以為可以狂飆看完，殊不知其實腦袋吸收需要時間，不知不覺一天就過去啦ＱＱ</p>
<hr>
<h6>tags: <code>程式筆記</code> <code>筆記</code></h6>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-06-30(二)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-06-30/"/>
      <updated>2020-06-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-06-30/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>發現昨天看錯進度了...看到 [JS201]，還想說第三週程度怎麼跳躍這麼快ＸＤ，今天就回到進度看了 [JS102]，目前看到 npm 的部分。</li>
<li>金魚都能懂網頁設計入門 : 網頁兩大主角 - 鐵人賽第十天
<ul>
<li>認識了 display 家族 愛佔位的大屁股 block 、 喜歡排隊的日本人 inline 、 結合兩個人的特性的小孩 inline-block</li>
<li>如果 menu 的內容使用 inline-block 內容彼此間還是有空白，可以在 menu 設定 <code>font-size: 0;</code> ，在內容上設定要使用的字型大小，空白就會消失了。</li>
</ul>
</li>
</ul>
<pre><code>&lt;style&gt;
        .menu {
            background-color: #fab;
            text-align: center;
            font-size: 0;
        }
        .navbar {
            display: inline-block;
            font-size: 16px;
            height: 30px;
            padding: 10px 30px;
            text-align: center;
            text-decoration: none;
            background-color: #ff0000;
        }
        .navbar:hover {
            background-color: #fff;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;menu&quot;&gt;
                &lt;a href=&quot;http://&quot; class=&quot;navbar&quot;&gt;link&lt;/a&gt;
                &lt;a href=&quot;http://&quot; class=&quot;navbar&quot;&gt;link&lt;/a&gt;
                &lt;a href=&quot;http://&quot; class=&quot;navbar&quot;&gt;link&lt;/a&gt;
                &lt;a href=&quot;http://&quot; class=&quot;navbar&quot;&gt;link&lt;/a&gt;
                &lt;a href=&quot;http://&quot; class=&quot;navbar&quot;&gt;link&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
</code></pre>
<h3>還記得哪些內容？</h3>
<ul>
<li>closure 閉包
就是在 function 裡 return 一個 function，然後使用這個 function 裡面計算後的值會存起來，這個概念跟 java 的某些部分有點像，但是我有點不清楚在 function 的值裡面放 function 會執行什麼結果，所以這個部分等之後更有概念再來看就好。</li>
<li>模組化 Module
可以把常用的 function 都集中在某個檔案，要使用的時候只要 require 就好了。
要製作可以輸出的 function 會使用 module.exports。
<img src="https://static.coderbridge.com/img/roroiii/d6b24218922148739cf289ad096e735a.jpg" alt=""></li>
<li>套件管理 npm
可以直接安裝 <a href="https://www.npmjs.com/">npm</a> 上有的軟體 <code>npm install 套件名稱</code>，安裝前使用 <code>npm init</code> 會產生 package.json 記錄安裝什麼版本的軟體，所以推到 github 可以忽略 node_modules 這個資料夾。</li>
</ul>
<h3>反思今天的學習成果</h3>
<p>今天從晚上才開始認真學習，但是有確保每個進度都有吸收進去。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>拖延症很可怕ＱＱ
所以先從最小最不會失敗的方式開始一個新的習慣吧！</p>
<h3>今日的額外行動</h3>
<p>半年的洗牙行動，醫生說我牙齒照顧得很好只是有一顆牙齒牙齦有點萎縮，可能是刷牙太大力ＱＱ
去了圖書館，今天不是平日嗎人超多差點找不到座位～看了賈伯斯傳，他真是一個傳奇的人，也很龜毛，不過感謝他讓我今日有 iPhone 跟 Macbook 可以用ＸＤ
這本書我看了幾次都還沒全部看完，有夠厚的ＸＤ</p>
<h3>明天的預定進度</h3>
<p>把 JS102 看完，寫一題作業
金魚系列</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-01(三)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-01/"/>
      <updated>2020-07-01T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-01/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>[JS102] 升級你的 JavaScript 技能：ES6 + npm + Jest 55%
我想晚點能看完，先打心得。</li>
<li>hw1 作業完成，ESLint 成功 commit</li>
<li>Google Analytics Academy 進度完成 1 Introducing Google Analytics
<ul>
<li>趁現在時間很多，還是準備把這張證照考起來 XD，覺得自己英文能力有進步，但是有些專有名詞還是要英文一遍中文一遍地慢慢看。</li>
</ul>
</li>
</ul>
<h3>明天的預定進度</h3>
<p>努力寫作業</p>
<h3>還記得哪些內容？</h3>
<p>認識了 npm 與 yarn ，還有怎麼 run 套件，可以寫 npm scripts 腳本自訂一些指令。
新版本一點的 npm 有 npx 指令，可以直接執行套件； npm 在子資料夾安裝的套件也會自動進入 node_modules 內。
yarn 是由 facebook 開發，優點是下載比較快。
Destructuring 解構
Spread Qperator 展開</p>
<h3>反思今天的學習成果</h3>
<p>今天不知道為什麼，看介紹 jest 的影片很多遍還是沒辦法吸收進腦袋裡，就一直重看重看卻左耳進右耳出，最後決定先跳過ＸＤ把下面的影片先看完。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>寫行銷的履歷信手捻來，寫前端的履歷處處卡關，希望目前階段可以找到兩個都有結合的工作，讓我可以繼續跟完課程兼顧巴豆。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-02(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-02/"/>
      <updated>2020-07-02T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-02/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>[JS102] 上完了～好感動</li>
<li>跑步 2.8 公里</li>
<li>hw3 作業完成
這題卡很久久久～寫了兩個小時有吧！明明就是很簡單的質數！看來我數學真的都還給老師 QQ 還好有數學老師同學 XD</li>
<li>[JS101] 後面解題的影片講解</li>
<li>[ALG101] 先別急著寫 leetcode 1-2 個影片</li>
</ul>
<p>今天的進度亂七八糟（？），反正就是跳著看，但發現這樣對於轉化大腦學習很有幫助，一個主題吸收不了的時候就去看解題影片ＸＤ
覺得今天學習效率算是不錯！</p>
<h3>明天的預定進度</h3>
<p>把 week3 作業寫完
解[ALG101]課程內的題目</p>
<h3>反思今天的學習成果，還記得哪些內容？</h3>
<p>今天學了滿多新的內容，是以前學 JavaScript 沒有接觸過的，尤其是 Jest ！我也不知道為什麼一個影片看那麼多次才懂 XD，但是最後有成功安裝上電腦，也有試著按照影片內容做一個測試，但是有發現一個跟影片不一樣的地方， <code>npx jest ./index.test.js</code> 多了 <code>./</code> 才能執行到檔案～看到綠綠的通過就是覺得開心^^</p>
<p>TDD 先寫測試再寫程式，覺得這個觀念滿好的，尤其是在寫測試的時候可以預想很多可能發生的狀況，盡可能把每一個條件都設想完整，也許開發程式的時候會有點痛苦（？）但是成果會是甜美的^^</p>
<p>Babel 也很可愛，是一個會把程式語法轉換成舊語法的神奇套件，執行指令用 <code>npx babel-node</code></p>
<p>Inport 跟 Export 這個我看了很久，發現有滿多寫法的，明天應該會花時間整理一下～</p>
<p>還有 ES6 可以在 Function 設定預設值</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">repeat</span><span class="token punctuation">(</span>str <span class="token operator">=</span> <span class="token string">'Hello'</span><span class="token punctuation">,</span> times <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> str<span class="token punctuation">.</span><span class="token function">repeat</span><span class="token punctuation">(</span>times<span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>最後是 ES6 的新語法</p>
<pre class="language-js"><code class="language-js">arr<span class="token punctuation">.</span><span class="token function">fliter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">value</span><span class="token punctuation">)</span> <span class="token operator">=></span> value <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">value</span><span class="token punctuation">)</span> <span class="token operator">=></span> value <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span></code></pre>
<h3>今天一個重要的領悟是什麼？</h3>
<p>沒有「對的人」，只有「對的關係」
人與人相處，總會相互影響。如果人因為彼此的存在，都變得更好了，把彼此性格裡好的一面帶出來了，這就是對的關係。
期許成為帶給周圍歡笑的樂觀的人^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-03(五)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-03/"/>
      <updated>2020-07-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-03/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>完成作業 hw4、hw5，剩下最後一題 hw2！</li>
<li>今天還有自己看了點書</li>
</ul>
<h3>明天的預定進度</h3>
<p>明天要回家一趟～可能晚上回來繼續把作業想完！</p>
<h3>反思今天的學習成果</h3>
<p>今天的進度異常的慢ＸＤ 可能真的解題難度提升，或是說還不習慣使用 LidemyOJ 的方式，也試著在作業使用 Jest ，但是不知道怎麼訂測試目標會比較好，還在摸索中。
花了很多時間在解題目，思考解法，有點像是在摸索的狀態，但是我相信就是有這段自我摸索程式的期間，才會為未來打下良好的基礎。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>天氣太熱就開冷氣吧！小心中暑之外也能增加集中注意力～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-06(一)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-06/"/>
      <updated>2020-07-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-06/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>[NET101] 網路基礎概論</li>
<li>week3 的第五題跟第二題卡關中</li>
</ul>
<h3>明天的預定進度</h3>
<p>看看能不能把 week3 作業完成
每天補一點 ALG101 的題目進度，可能會一天做一二題，因為現在自己的程度還需要多鍛鍊才跟得上程式邏輯ＱＱ
繼續看 [NET101] 網路基礎概論 的影片</p>
<h3>還記得哪些內容？</h3>
<p>看了傳紙條的故事，覺得講的好好笑ＸＤ</p>
<h3>反思今天的學習成果</h3>
<p>上禮拜六日放了兩天假，一天回家一天去幫忙活動煮飯，發現今天要再度進入狀況有點需要時間 QQ
每天解題或是看一兩個課程影片，都有助於繼續維持自己跟跟課的狀態～！
解題真的很活化大腦，卡關的時候很痛苦，解出來的時候覺得很開心，哈哈哈
一個月之後再回來把題目寫一遍，看看能不能再寫得出來，就知道自己是不是真的理解了。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>魚與熊掌不能兼得，改變自己的狀態需要時間，調整自己也需要時間，不是一天兩天速成的。
但是告訴自己每天進步一點點，累積起來就會越不一樣，成為一個更好的自己。
適時看書或其他影片都有助於轉換大腦，每天學習的步調不一樣也有助於減少倦怠感。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-07(二)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-07/"/>
      <updated>2020-07-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-07/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>把 week3 的作業寫完了！終於～開心撒花，解題解到懷疑人生 XD</li>
</ul>
<h3>明天的預定進度</h3>
<p>week4 的影片課程
ALG101 剩下還沒寫完的部分再解一題</p>
<h3>反思今天的學習成果</h3>
<p>今天真的解題目想很久，光光兩題解了一個下午，而且我還有偷看講解跟答案，還是不明白為什麼，所以今天也是求助友人的一天，希望我過一個月還記得這些寫過的程式！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>昨天把履歷表整理好，終於下定決心投出第一個履歷，沒想到今天就打電話給我約面試，出乎意料，但是查不太到那家公司的營業內容，直覺應該是博弈業，不過就是去當一個面試經驗～平常心面對。
也是逼自己趕快把自己另外準備的履歷表寫好，開始找工作，這段期間的工作可能會是一個過渡期工作，但是也很希望這個過渡期工作可以跟網頁有一點相關，第一個目標是把 Lidemy 課程跟好，另一個也是滿重要的目標就是要有飯吃ＸＤ
接下來要付房租保險費，自己在外租屋真的處處都是費用。
還有最近經歷失戀分手的轉換期，這段期間調整心情也是花費很大的力氣，但是很感謝有 Lidemy 至少讓我有一個目標需要去達成，不會一直 focus 在自己的情緒上面。
人生就像喝一杯水，當你喝下去才知道是酸的苦的甜的鹹的，才會有那句話，「如人飲水，冷暖自知」。這段轉換期我還在經歷逃避面對的階段，出去找工作也是讓自己趕快進入職場與向前的一個動力，不要讓自己安逸現況太久。很努力也很掙扎，不知道怎麼做才是最好的，但是還是要面對這個自己人生的課題。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-08(三)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-08/"/>
      <updated>2020-07-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-08/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第四期直播</li>
<li>由上到下：從 HTTP 協定開始講起</li>
<li>webpack 新手教學之淺談模組化與 snowpack 文章</li>
</ul>
<h3>明天的預定進度</h3>
<p>繼續看 week4 課程影片
寫一題 ALG 的題目</p>
<h3>反思今天的學習成果</h3>
<p>把「webpack 新手教學之淺談模組化與 snowpack」看完真的有比較了解這些運作，也感謝 Huli 寫了這麼一篇詳細解說的文章～
今天都在看跟面試有關的東西，也一直思考是不是找打工會比較跟得上課程，這是一個在夢想跟現實中取捨的抉擇。然後明天早上要去面試，感覺是博弈業ＸＤ
所以用一個平常心去當聊天就好。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>緩慢的進度需要給自己時間壓力了，感覺看課程影片是我的弱點，需要再調整一下自己的心態。也有可能是準備履歷找工作花了一些心力，希望之後可以調整回來。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-09(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-09/"/>
      <updated>2020-07-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-09/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>由下到上：從 TCP/IP 開始談起</li>
<li>看了作業內容，有點像天書ＸＤ</li>
</ul>
<h3>明天的預定進度</h3>
<p>繼續看影片
下午去面試</p>
<h3>還記得哪些內容？</h3>
<p>因為之前有寫過一點 PHP ，所以對 GET、POST 比較熟悉
HTTP 的協定也知道一點，所以有點像複習～</p>
<h3>反思今天的學習成果</h3>
<p>感謝之前考過軟乙，所以對這些理論的東西有些概念，除了要逼自己專心看影片不要走神之外都還不錯～</p>
<p>然後早上去經歷了久違的面試體驗，面試前超級無敵緊張的，我覺得是那種未知的恐懼超過對於面試的想像，其實就是講話聊聊天而已。
面試當場沒這麼緊張，可能比較像是去交流的心態，得失心也沒有看得那麼重，畢竟一個公司跟你的氣質合不合適也是滿重要的事情，就算沒錄取也是學到一個寶貴的面試經驗～工作內容會再用到一些更深的 SEO 操作，也不反對我寫網頁操作關鍵字，覺得如果真能把行銷技能結合現在課程學到的事情，會是很棒的一件事。
一個會網路行銷又會 UI 設計的前端工程師，或是叫做 SEO 前端工程師，聽起來就很酷！技能點好點滿，好像有點在幻想 XD</p>
<p>明天下午可能需要英文自我介紹，突然開始惡補英文ＸＤ 但是需要英文文案撰寫的能力，所以也只是當作去面試個經驗這樣～
其實我沒想到這麼快就會去面試的，以為還要繼續海投才有機會，因為這星期才投不到 10 家公司，就有 4 家找去面試，只能說我之前真的太小看自己了，拿到 offer 可能信心會暴漲之類的覺得自己超厲害。</p>
<p>面試心態推薦看這篇：<a href="https://medium.com/@DingDingTaiwan/%E6%89%BE%E5%B7%A5%E4%BD%9C%E6%99%82%E6%87%89%E8%A9%B2%E6%9C%89%E7%9A%84%E5%BF%83%E6%85%8B-3a95788187a5">找工作時應該有的心態</a></p>
<p>目前找工作的目的為現實考量，加上又跟課程，自認為進度掉了很多但是還是維持在當週進度（week4），狀態大概是這兩天花了比較多時間準備履歷，但覺得也是在為之後轉職前端工程師做準備，現階段真的很希望可以找到跟寫前端有相關的行銷工作。
如果現實允許全職學習的話是一件很幸福的事，但是我好像是屬於越忙越有動力越有效率的那種人，所以就算開始工作，進度也是會努力穩穩跟上的！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>時間花在哪裡，成就就在哪裡。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-10(五)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-10/"/>
      <updated>2020-07-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-10/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>[NET101] 網路基礎概論（搭配 JS 實作練習）83%</li>
</ul>
<h3>明天的預定進度</h3>
<p>六日兩天全力衝刺作業！</p>
<h3>還記得哪些內容？</h3>
<p>http 協定
怎麼接收 api
其他理論上的東西有點印象模糊，可能自己實作一遍會更清楚概念～</p>
<h3>反思今天的學習成果</h3>
<p>早上趁精神好趕快看 week4 的課程影片，一直無心下午的面試也沒準備什麼對答，只有練習一下很爛的英文自我介紹，想說下午面試只是去當砲灰（因為以為要想英文文案），在寫面試資料的時候也有機具專業英文要翻譯，當下覺得傻掉只好偷拍一下趕快求救 Google 翻譯ＸＤ，但是因為專有名詞太少見了 Google 翻譯的也很爛！只好亂寫，還有很多其他題目，光寫面試資料就寫了半個小時，裡面的員工非常熱情，我也展現了我可愛的牙齒給他們看：Ｄ</p>
<p>後來在面試的時候，主管說找我去面試不是想讓我做寫英文文案的 SEO ，而是做他們官網自己的網路行銷，是直屬於老闆底下的部門聽到真是讓我受寵若驚，還有聽他說老闆很會講話要我做好心理準備，客戶都是對台灣人比較多所以英文文案能力應該還好不太會用到ＸＤ</p>
<p>工作內容第一個月是改善主官網達成 50% ，已經有條列好需要改善的地方，之後每個月有需要達成的詢問量，如果沒達成第二個月薪資會做調整。這個職務的困難點就是要想辦法去跟資訊部門還有行銷部門溝通拿到以前的資料，想辦法呈現在主官網上，部門人員有老闆、主管、行銷助理跟一位比較資淺的工程師跟我，雖然聽到這邊覺得好像這樣跟網路行銷有點沒關係，但是就是覺得很好玩的感覺，也跟主管聊得來，結果就從以為是炮灰級面試變成拿到 Offer 的狀態，人生真是充滿驚喜。</p>
<p>我自認為進去會遇到的最大困難應該是什麼事情都會想自己做，因為太習慣之前公司什麼都要自己想辦法的模式了，像是要爬資料工程師說要一個禮拜，主管說不行這樣太慢了我就自己找工具去爬資料三天完成；或是客戶需要臨時修改什麼東西，我可能就都自己動手去改網頁了ＸＤ 分工合作目前還沒有遇過，覺得會是一個很有挑戰跟很好玩的一份工作！</p>
<p>最後主管告訴我說，如果我只是單純會網路行銷這塊她不會想找我去面試，找我去面試的原因是因為看到我離職之後這半年間持續進修寫網頁這塊，這是她想要找的人，突然心裡有點感動，沒想到自己充滿迷惘的上半年學習程式的路，竟然成為我換新工作的墊腳石。
這讓我想到我喜歡的一首歌<a href="https://youtu.be/L_7iGU5OpEA">ONE OK ROCK キミシダイ列車</a>，裡面歌詞寫到「過去の自分が今僕の土台となる」，人生沒有一條彎路是白走的，只是我們還不知道這些走過的路哪時候會用得上。</p>
<p>希望之後課程跟完可以挑戰看看新公司的工程部門囉！好期待明年一個全新的自己ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天跟朋友聊天，講了一個理性的話。
「現在待業中的自己無法想像開始工作的自己的樣子，在工作中的自己也無法想像待業中的自己的狀態，所以根本不用擔心現在跟未來的自己是什麼樣子。」
遇到困難就面對它，不想面對大困難就把它拆成一小個一小個的小問題，困難也會慢慢解決。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-12(日) 完成一個月學習！</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-12/"/>
      <updated>2020-07-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-12/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>金魚都能懂網頁設計入門 : 換個新盒子 - 鐵人賽第十一天</li>
<li>week4 hw1 跟 hw2 ， hw3 寫一半</li>
<li>做了 API 串接筆記</li>
<li>跟朋友走路聊天 1.5 小時，超累</li>
</ul>
<h3>明天的預定進度</h3>
<p>把 week4 作業寫完
金魚第 12 天
寫一題題目</p>
<h3>還記得哪些內容？</h3>
<p>重複看了很多遍 HTTP 跟 API 的影片，發現原來自己看影片是會有盲點的！跟人討論會學習的更快</p>
<h3>反思今天的學習成果</h3>
<p>今天早上跟同學 Math 一起去路易莎搶位置討論學習 week4 的作業，雖然是名叫討論實質上是他跟我教學講解作業內容哈哈，他只有帶電腦去解 LidemyOJ 題目而已，
他題目都快全部拿綠勾勾了，這是赤裸裸的程度差距ＸＤ
今天也發現自己學習真的會有盲點的，而且真的不知道是哪裡卡住，真的看作業像天書一樣，但是有時候有人跟你解釋一下你就懂了，所以有同學可以討論真好ＸＤ
然後真的想不出來的問題，也會想辦法發問的助教的
順帶一提，會叫同學 Math 是因為他是數學老師，以後就這樣代稱好了。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>感謝進度超前的同學們，幫我們把前面學習可能遇到的坑給補上了～
持續學習很重要，也感謝這個月自己每天努力寫出心得。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-13 23:34:02</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-13/"/>
      <updated>2020-07-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-13/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>金魚都能懂網頁設計入門 : CSS Reset - 鐵人賽第十二天</li>
<li>function 額外補充 影片</li>
<li>week4 作業 1-3 commit 完成</li>
</ul>
<h3>明天的預定進度</h3>
<p>完成 week4 作業<br>
看一點 week5 的內容<br>
明天會跟 Math 同學出去讀書</p>
<h3>反思今天的學習成果</h3>
<p>本來以為今天可以完成 week4 的作業的，但是靜心真是一門學問，養成好習慣需要打開 vscode 面對它！<br>
完成 commit 那一瞬間真是開心＾＾</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天變身履歷小能手，希望可以幫助自己身邊想要求得好工作的人，有一個敲門磚，大家一起越來越好！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-14 22:35:38</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-14/"/>
      <updated>2020-07-14T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-14/</id>
      <content type="html">
        <![CDATA[
      <h1>外出學習效果好的一天</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>week4 作業整個完成並繳交了～</li>
<li>金魚都能懂網頁設計入門 : 換個新盒子 - 鐵人賽第十一天</li>
</ul>
<h3>明天的預定進度</h3>
<ul>
<li>體檢完然後找姐姐～</li>
<li>製作星期四面試的企劃簡報</li>
<li>晚上回來解題</li>
<li>看 <a href="https://www.youtube.com/watch?v=8KuO4r5CHjM">CS75 (Summer 2012) Lecture 0 HTTP Harvard Web Development David Malan</a></li>
</ul>
<h3>還記得哪些內容？</h3>
<p>今天在路易莎很認真的坐了 6 個小時，終於把作業ＫＯ了哈哈哈，在外面藉著環境真的能夠提高專心程度，然後完成之後跑出去晃一大圈晚上 10 點才回家，好像是一種補償的心態ＸＤ<br>
把作業寫完之後對 API 怎麼串接有概念了！不過還是要看著小抄(?)才可以寫出來，之後想試試看用 try 跟 catch 再改寫一次作業～</p>
<h3>反思今天的學習成果</h3>
<p>專心效果無敵好～～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>動靜皆宜是良好的生活習慣～聊天講太久也會覺得累～</p>
<p>上帝幫你關上一扇門，會打開另一扇窗<br>
今天決定拒絕明天要面試的公司，然後過沒多久另一家公司打電話約星期四面試，可能是疫情的關係，感覺現在的企業有越來越重視網路行銷這個區塊哩。<br>
然後我忘記要拒絕了直接講好ＸＤ 只好準備企劃認真去面試了！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-15 22:43:42</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-15/"/>
      <updated>2020-07-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-15/</id>
      <content type="html">
        <![CDATA[
      <h1>瑣碎的事情也會成為心頭大事</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>看完修改後的 week4 作業，思考命名變數的方式</li>
<li>金魚系列第十二天</li>
<li>研究 HTTP Game 跟寫 LIOJ 題目</li>
</ul>
<h3>明天的預定進度</h3>
<ul>
<li>研究 HTTP Game 跟寫 LIOJ 題目
去面試換個職場經驗ＸＤ 然後暫時不想再去面試了因為已經有 offer ，準備好累好花時間啊，心理建設也很重要ＱＱ
希望到 8 月前的時間都用來好好練習程式的部分。</li>
</ul>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天早上去體檢了～超快半小時就結束哩
然後跑去前公司拿離職證明
其實沒看到什麼程式內容，明天下午希望能有點進度
星期五～日會跟朋友們去宜蘭好好放鬆ＸＤ
感謝這週是複習週，剛好可以補完一些之前的進度～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-16 23:42:35 搞烏龍但是意外吃到美食的一天</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-16/"/>
      <updated>2020-07-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-16/</id>
      <content type="html">
        <![CDATA[
      <h1>搞烏龍但是意外吃到美食的一天</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>LIOJ 寫了 6 題</li>
<li>闖關 Lidemy HTTP Challenge 到第 8 關</li>
<li>Request 額外補充（超重要）看完</li>
</ul>
<h3>明天的預定進度</h3>
<p>早上 4 點起床準備搭車出門去台北跟宜蘭玩ＸＤ<br>
晚上在民宿練練 LIOJ 一題，或是看一個影片，目的就是希望維持最小進度但是每天可以持續這樣～</p>
<h3>還記得哪些內容？</h3>
<p>HTTP Challenge 還滿好玩的，這樣子的闖關很有趣～而且看完 Request 額外補充影片之後再來玩更有效果。<br>
理解了 query string 、 encodeURIComponent 跟 content-Type</p>
<h3>反思今天的學習成果</h3>
<p>今天下午又在路易莎坐了大概 4 個小時，維持高度專注的學習，覺得真是一個不錯讀書的地方。<br>
然後解題要先理解是要求什麼內容，才寫得出程式碼...像是等差數列，我還不是很能理解ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天以自己的記憶力認為面試就是今天ＸＤ<br>
結果其實是下星期才面試！！白跑一趟也覺得自己滿蠢的ＸＤ<br>
但是我真的記得電話裡有跟對方確認時間是這星期四 7/16 啊...但是好像不是一家好公司，感覺是叫很多面試者準備分析他們公司的行銷內容然後得到免費 idea，之後可能會婉拒下星期的面試ＱＱ<br>
爾虞我詐是職場暗黑學～花這麽多心力準備不如，好好認真寫程式就好哩。</p>
<p>今天中午吃到韓式煎餅真的超級無敵好吃！！石鍋拌飯也超好吃～覺得幸福</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-17 23:34:11 宜蘭遊第一天 feat.台北</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-17/"/>
      <updated>2020-07-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-17/</id>
      <content type="html">
        <![CDATA[
      <h1>宜蘭遊第一天 feat.台北</h1>
<h3>今天的課程完成了什麼？</h3>
<p>理解放鬆很重要～所以跑來宜蘭玩哩</p>
<h3>明天的預定進度</h3>
<p>繼續好好玩宜蘭～玩水～曬黑再回台中ＸＤ</p>
<h3>還記得哪些內容？</h3>
<p>今天是宜蘭遊的第一天<br>
今天一大早 4 點多就起床準備了，大概 5 點半搭公車去朝馬， 3 小時後很順利的抵達台北，之後就開始了一個小時的假台北人生活。<br>
比起台中，台北人走路的速度真的很快，所以不知不覺也加快了走路的腳步。距離上次來台北轉運站大概也是兩年前了吧，但是竟然還記得怎麼走去搭捷運，知道去寄放行李然後再跑去搭捷運。</p>
<p>捷運指標真是很方便，稍微看一下就懂怎麼搭，然後板南線 2 站到了龍山寺，來這裡是因為我跟Ｕ約好一起秘密跑來求月老ＸＤ 來台北的機會也很少所以想說趁這次去宜蘭玩順路拜一下，至於為什麼想來龍山寺求月老，大概是前陣子高中聚的時候聽已經做媽媽的同學說了就是求完龍山寺的月老後遇到她先生的神奇故事，被故事情節燒到看來我也是個性情中人ＸＤＤ</p>
<p>然後早上很神奇沒什麼觀光客，只有滿滿的阿公阿嬤在唱經文，他們虔誠的信仰讓我有點感動，然後我跟Ｕ就在超熱天氣全身爆汗跟充滿阿公阿嬤唱誦的經文中拜了觀音求了月老，我每個ㄅㄨㄚ ˇ ㄅㄨㄟ ˙ 都以一個聖杯做結尾，超迅速結束這個拜月老與求籤詩的過程，離開的時候剛好唱經文的部分也結束了。<br>
得到是第四籤，跟我現在情況有符合，驗證這是一個神明認真有辦事的廟宇?<br>
最後沒想到拜拜的過程實在是太快哩，以至於剛好可以跟搭車到台北的小夥伴們會合一起搭乘格瑪蘭去宜蘭，這也是一個巧合吧ＸＤ</p>
<h3>反思今天的學習成果</h3>
<h3>今天一個重要的領悟是什麼？</h3>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-20 22:46:34 收心耍廢星期一 文章看好看滿</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-20/"/>
      <updated>2020-07-20T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-20/</id>
      <content type="html">
        <![CDATA[
      <h2>收心耍廢星期一 文章看好看滿</h2>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>看了這兩篇<a href="https://medium.com/hulis-blog/frontend-engineer-guide-297821512f4e">零基礎的小明要如何成為前端工程師？</a>、<a href="https://medium.com/@hulitw/introduction-mvc-spa-and-ssr-545c941669e9">跟著小明一起搞懂技術名詞：MVC、SPA 與 SSR</a> 還有一些相關的文章。</li>
<li><a href="https://www.youtube.com/watch?v=8KuO4r5CHjM">CS75 (Summer 2012) Lecture 0 HTTP Harvard Web Development David Malan</a></li>
<li><a href="https://www.youtube.com/watch?v=fqSHx7pRqLk">金魚都能懂網頁設計入門 : 排版的聖品 - 鐵人賽第十三天</a></li>
</ul>
<h3>明天的預定進度</h3>
<p>第六週課程<br>
week5 心得作業</p>
<h3>反思今天的學習成果</h3>
<p>文章「零基礎的小明要如何成為前端工程師？」之前還沒開始跟課時有看過，但是那時還不能完全理解是講什麼內容，今天再看一遍就幾乎明白了，算是有理解<br>
有點像是理解後就不知道自己以前卡在哪裡的那種感覺ＸＤ，然後不知不覺就一篇文章接著一篇看，感覺還有很多坑要補，就先收進書籤列等哪天想轉換心情的時候再來繼續讀。</p>
<p>CS75 好像憑我的英文能力，只能大概理解三分之一不到...聽大概 10 分鐘就會恍神一下，就斷斷續續的聽了 50 分鐘，給自己的心態建設就是不一定全部都要懂或是理解，只要這個影片可以帶給我一個覺得值得學習的地方就夠了，哈哈，超級正向的思考。</p>
<p>今天是出去玩回來的第一天，收心耍廢睡了很久，可能真的在宜蘭玩得太累太瘋狂了，但是還是可以維持跟課的狀況，覺得神奇</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>如果沒事情，自己好像可以昏睡一整天<br>
不知道這是一種超能力還是身體有什麼狀況ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-21 23:13:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-21/"/>
      <updated>2020-07-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-21/</id>
      <content type="html">
        <![CDATA[
      <h1>跑來跑去卻也有進度的一天</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>CS75 看完</li>
<li>Lidemy HTTP Challenge 解完全部 14 關</li>
<li>week4 兩個補充影片</li>
<li>week6 課程說明跟教學影片，進度 40%</li>
</ul>
<h3>明天的預定進度</h3>
<p>看能不能把 week6 課程看完，開始寫 week5 跟 6 的作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>原來 indexOf() 跟 splice() 組一組之後就可以拿來寫爬蟲了，我一直以為爬蟲只有 pyhon 之類的可以寫，原來用 JavaScript 去拿到對方的資料也一樣可以做到耶！真是神奇。<br>
寄信的程式就真的有點小不明白那個邏輯，因為程式碼拆分換位置變來變去，可能等我程度變厲害再回來看這個影片就看得懂了ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天算是有進度竟然還看了一部動畫外傳「紫羅蘭的永恆花園」，但是還是覺得動畫版一集一集得比較好看～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-22 23:15:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-22/"/>
      <updated>2020-07-22T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-22/</id>
      <content type="html">
        <![CDATA[
      <h1>早起跑來跑去卻停滯進度的一天</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>補打了昨天的心得ＸＤ</li>
</ul>
<h3>明天的預定進度</h3>
<p>看能不能把 week6 課程看完，開始寫 week5 跟 6 的作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>哎唷，今天進度是零，明明早上 6:50 就醒了，但是卻摸魚混了一天，感覺不能一直待在宿舍，要出去換個環境才會認真ＱＱ<br>
只有把「比悲傷更悲傷的故事」看完，後面感動得哭了一下，還有「擺渡人」看了一半ＱＱ好好笑很有梗</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>墮落偷懶的速度比想像中快啊！但是不可以責備自己，要多鼓勵自己繼續完成進度～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-23(四)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-23/"/>
      <updated>2020-07-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-23/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>金魚都能懂網頁設計入門 : Fixed 定位 - 鐵人賽第十四天</li>
<li>week5 作業繳交</li>
<li>week6 課程影片</li>
</ul>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-24 20:50:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-24/"/>
      <updated>2020-07-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-24/</id>
      <content type="html">
        <![CDATA[
      <h1>今天台北歷史高溫 39.7 度 但我在台中吹冷氣</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>week6 切版影片</li>
<li>嘗試作業切版</li>
</ul>
<h3>明天的預定進度</h3>
<p>明後跟大後天有活動需要幫忙，很幸運的 week6 進度要 delay 到下禮拜了ＱＱ</p>
<h3>還記得哪些內容？</h3>
<p>CSS reset.css<br>
還有怎麼分切版的內容，命名也是個學問～</p>
<h3>反思今天的學習成果</h3>
<p>應該是有維持「持續學習」的狀態，只是進度不盡理想ＸＤ<br>
是說真的也不知道什麼樣的學習進度才是理想<br>
只知道我一直在學，學起來都是自己的 這樣ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>愛人者人恆愛之。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-27 23:43:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-27/"/>
      <updated>2020-07-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-27/</id>
      <content type="html">
        <![CDATA[
      <h1>跟爺爺奶奶們度過開心快樂的夏令營</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>星期日晚上睡前看了幾頁「CSS 大全」，很好助眠</li>
<li>「網頁除錯大解密」看了三分之一</li>
<li>參與幫忙了一個都是爺爺奶奶的營隊～很好玩很開心</li>
</ul>
<h3>明天的預定進度</h3>
<p>寫 week6 的作業<br>
把「網頁除錯大解密」看完<br>
跑銀行刷存摺</p>
<h3>還記得哪些內容？ 反思今天的學習成果</h3>
<p>今天學前端的課程請假一日，去幫忙了一個帶動長者的營隊，結果現在打心得的時候因為早上玩得太累現在腦袋打結，回想不太起來今天到底做了什麼事情，但是這是個難得的經驗，就用照片訴說一切好了。</p>
<p><img src="/images/lidemy/f0e65f71fa77433a980281933796dc31.jpg" alt=""><br>
奇怪怎麼是兩隻可愛又幸福的雞...？<br>
啊...原來是活動剛結束大家還沒有上傳照片ＱＱ</p>
<p>帶活動之前都會緊張的不要不要的，但當每次看到大家的笑容跟感受到那種快樂的氛圍，好像累一點也無所謂ＸＤ</p>
<p>活動到 4 點結束，利用晚上的時間去洗衣服、影印資料、在外面吃飯、看醫生、拿換好鏡片的眼鏡，跑來跑去也總算把事情處理好了。有時候給自己今天要完成的事情好像可以對付拖延症～哈哈</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>助人為快樂之本。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-28 21:20:52</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-28/"/>
      <updated>2020-07-28T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-28/</id>
      <content type="html">
        <![CDATA[
      <h1>完成 week6 切版新拖延運動表單！～</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>金魚都能懂網頁設計入門 : 鐵人賽第十四～十六天</li>
<li>完成 week6 切版新拖延運動表單</li>
<li>看了 CSS 選取器的書</li>
</ul>
<h3>明天的預定進度</h3>
<p>繼續完成 week6 作業<br>
看一點 week7 的課程</p>
<h3>還記得哪些內容？ 反思今天的學習成果</h3>
<p>今天從 week6 比較簡單的第二題作業開始切版，光是 HTML 命名的部分就想了一個小時完成，希望讓程式碼看起來統一有閱讀性，然後寫 CSS 的部分大概也是一個小時，順著 HTML 命名好的部分從最上面開始慢慢寫出樣式，覺得還滿順利的。</p>
<p>有遇到的小困難大概是置中的部分，有想到</p>
<pre class="language-css"><code class="language-css"><span class="token property">margin</span><span class="token punctuation">:</span> 0 auto<span class="token punctuation">;</span>

<span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
<span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>

<span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>

<span class="token property">left</span><span class="token punctuation">:</span> 50%<span class="token punctuation">;</span>
<span class="token property">top</span><span class="token punctuation">:</span> 50%<span class="token punctuation">;</span>
<span class="token property">transform</span><span class="token punctuation">:</span> <span class="token function">translate</span><span class="token punctuation">(</span>-50% -50%<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
<p>應該還有一些我還沒想到或是不會的～之後再慢慢學起來～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>咖啡廳是一個神奇又能幫助專注的地方～但是缺點是需要飲品的費用</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-29 23:42:16</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-29/"/>
      <updated>2020-07-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-29/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第七週課程簡介、[FE102] JavaScript 與瀏覽器的溝通</li>
<li>JavaScript 全攻略：克服 JS 的奇怪部分 ：IIFE</li>
<li>第六週特別補充課程</li>
<li>English for Career Development 第 1 週</li>
</ul>
<h3>明天的預定進度</h3>
<p>第七週課程影片<br>
week6 作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<h4>第七週內容 - JavaScript 與瀏覽器的溝通</h4>
<p>有在「 node.js 」跟在「瀏覽器」上的 JavaScript 執行環境，這兩個執行環境有著不同可執行的 JavaScript 內容，有些並不是 JavaScript 原生的，而是執行環境本身創造出來的（例如： console.log ）</p>
<p><code>document</code> 是瀏覽器創造出來的，並不能在 node.js 上執行<br>
<code>setTimeout</code> 雖然兩個執行環境都可以執行，但也不是 JavaScript 原生的。</p>
<h4>JavaScript 全攻略：克服 JS 的奇怪部分 ：IIFE</h4>
<p>在 JS 的檔案內，如果想要一個 function 可以被執行並立即呼叫，可以放在 <code>()</code>內，不會有錯誤訊息產生，例如：</p>
<pre class="language-js"><code class="language-js"><span class="token punctuation">;</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'hello~'</span> <span class="token operator">+</span> name<span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span>Alex<span class="token punctuation">)</span></code></pre>
<p>就是一個可以被正確執行並印出訊息的匿名函數。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>睡覺時，做的夢也在寫程式～<br>
跟 siri 玩了一下～<br>
<img src="/images/lidemy/aadc7a43b37c4926b013ad115efe5add.jpg" alt=""></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-30 22:35:53</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-30/"/>
      <updated>2020-07-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-30/</id>
      <content type="html">
        <![CDATA[
      <h1>切版～以為簡單的地方卻要考慮許多細節</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>week6 hw1 切版作業</li>
</ul>
<h3>明天的預定進度</h3>
<p>繼續努力把 week6 作業完成</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天很努力的想把 week6 hw1 切完，但是在上方選單的地方卡很久，主要是 RWD 不熟所以弄了很久，大概就切了 2 個小時ＸＤ</p>
<p>完成到我要查詢訂單的按鈕部分，結果還是沒有把第六週作業寫完，希望明天可以ＫＯ它，這樣明天預定進度就不會一直 repeat 出現 「week6 作業」了ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>吹冷氣就會想睡覺～結果不吹冷氣就中暑了ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-07-31 23:39:33 7 月的最後一天，完成 week6 切版超開心</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-07-31/"/>
      <updated>2020-07-31T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-07-31/</id>
      <content type="html">
        <![CDATA[
      <h1>7 月的最後一天，完成 week6 切版超開心</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>week7 影片看到 「JavaScript 網頁事件處理」</li>
<li>week6 hw1 作業完成</li>
</ul>
<h3>明天的預定進度</h3>
<p>明天星期六要回家～可能會沒有進度</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天看 [FE102] 前端必備：JavaScript 學起來有點吃力～<br>
應該是因為第一次學這些函數的關係，希望多用幾次熟悉之後就跟他們變成好朋友了哈哈哈<br>
然後終於把第六週的切版完成了很開心?<br>
簡答題大概都知道是什麼，但是要詳細寫出來需要順一下邏輯～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>我好像是用一個叫做睡眠學習法的方式在跟課，遇到不懂的地方，睡一覺就懂了（？）<br>
然後好像是這樣睡太多所以進度開始落後哩ＸＤ</p>
<p>下禮拜一就要開始水深火熱的上班了，看網路上的評價好像是一家流動率極其高的公司，<br>
做行銷真的很燒腦袋跟靈感啊～<br>
希望能撐到賺取部分生活費再離職...至少三個月吧，再從半工作半學習轉回來繼續全職跟課加轉職ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-03 22:56:54</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-03/"/>
      <updated>2020-08-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-03/</id>
      <content type="html">
        <![CDATA[
      <p>今天第一天上班，早上月會下午公司制度介紹，好多同事好多事情要記，很久沒上班感受累一整天的感覺ＱＱ</p>
<p>但是還是努力完成 week6 的進度了～順利往 week7 邁進～！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-04 23:18:04</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-04/"/>
      <updated>2020-08-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-04/</id>
      <content type="html">
        <![CDATA[
      <p>今天是上班的第二天，開始瞭解工作事項一點點，目前主要是修改官網的文字與版面內容，不過公司只有提供大概的方向，細節要我們自己想。</p>
<p>然後我今天學的第一個東西竟然是 PHP CI，只能說我真的完全不會也沒有看過ＸＤ<br>
我的職務不是掛行銷企劃嘛，怎麼會是上班第二天就開始碰程式了呢ＸＤ</p>
<p>今天完成一個小小的文案撰寫，然後把文字丟進去工程師切好的版就跑版了，所以我就跟工程師說想自己調整一下，就把第六週切版的經驗用上了ＸＤ<br>
覺得一切都太神奇了傑克，希望之後上班也能有這種神奇的瞬間～</p>
<p>然後因為是新成立專門做公司品牌行銷的部門，同部門的同事都是新人，就是一個菜鳥俱樂部的團隊，但是溝通相處就滿好溝通也滿愉快的～</p>
<p>看到網頁部的工程師也有女生～之後也想跟他們交流學習看看。</p>
<p>今日的學習進度就是在工作上應用了在課程學得到東西ＱＱ<br>
還有複習了第七週 querySelector 的影片內容</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-05 23:50:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-05/"/>
      <updated>2020-08-05T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-05/</id>
      <content type="html">
        <![CDATA[
      <h1>切換行銷與程式的腦袋</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第七週的教學影片看完了～概念有通的感覺</li>
</ul>
<h3>明天的預定進度</h3>
<p>開始寫 week7 的作業，這個六日要全力衝刺邁向 week8</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天跟朋友吃完晚餐回家就馬上開啟電腦開始看 week7 的影片，看到中場總結，學習時間大約一小時。<br>
原來這些程式碼堆疊起來就可以變成複雜的網頁或是遊戲，希望我可以把那個邏輯學起來，變成下意識的邏輯行為ＸＤ</p>
<p>然後真的開始習慣使用程式的工具，寫文案不用 word 而是用 markdown 的語法寫在編輯器上，好像也是滿酷的。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>上班第三天，好像又回到了前公司的那種分工模式，三個臭皮匠勝過一個諸葛亮菜鳥們一起亂摸索～</p>
<p>然後不知道為什麼對於工作沒有像以前那麼戰戰兢兢，反而是樂觀面對挑戰，也許是同事是很謹慎的人，他已經把我的緊張拿走了ＸＤ<br>
或者是這份工作做多久都沒關係，因為我的目標是轉職成為工程師，所以下意識把它當成一個階段性的工作，如果突然整個部門裁掉好像也沒關係（？）<br>
但是希望我可以在這份工作上多偷師一點，或是多使用到程式相關的部分趁機練習ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-06 22:38:41</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-06/"/>
      <updated>2020-08-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-06/</id>
      <content type="html">
        <![CDATA[
      <h1>是行銷部門也是網頁部門的總經理室下的小部門</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>回去複習了 Git 跟 Bitbucket （因為公司是用這個版控）</li>
<li>再度複習 week7 的影片並加上老方法手寫筆記</li>
<li>複習 Command line 指令</li>
</ul>
<h3>明天的預定進度</h3>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>因為 week7 要沿用上週檔案所以嘗試使用 Command line 複製跟刪除資料夾，還好有做筆記不然不常用真的快忘記了ＸＤ<br>
week7 真的是我不熟的一個東西，所以就跟第一次學程式一樣，要學好多好多遍加上做自己的筆記才會吸收進去～<br>
以前有用過 jQuery 寫過監聽表單，應該概念是相同的只是語法不同而已～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天是上班的第四天，下班前同事跟我說影片網頁的 CSS 調整就交給我了ＸＤ<br>
所以我這個行銷企劃明天會調整 CSS?<br>
然後更令人振奮的消息就是我們部門的工程師他不會用 Git 做版本控制，跟我一樣菜菜的小新鮮人～但是還是找到了寫程式的工作～（我在台中）<br>
所以各位同學請放心，一定有願意用你的公司，不用怕找不到前端工程師的工作ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-07 23:03:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-07/"/>
      <updated>2020-08-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-07/</id>
      <content type="html">
        <![CDATA[
      <p>開始上班的第一週完成～<br>
下班前還把公司要上架的網頁樣式改壞了，同事週末幫我神救援人真的超好 QQ</p>
<p>星期五晚上給自己放個假，週末補進度＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-08 23:26:14</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-08/"/>
      <updated>2020-08-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-08/</id>
      <content type="html">
        <![CDATA[
      <h1>前端必備 JavaScript，jQuery 表示 QQ</h1>
<h3>今天的課程完成了什麼？</h3>
<p>今天都在寫 week7 的作業</p>
<h3>明天的預定進度</h3>
<p>週末把作業 week7 做完ＱＱ</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>本來想說六日來補這週開始上班延宕的學習進度，但是好像有點中暑昏睡了一整個下午所以 week7 的作業才寫到第一題。<br>
覺得 week7 這週的進度好像是一個分水嶺，懂了就懂了，不懂就會一直不知道自己是錯在哪裡，要怎麼找出程式邏輯上的錯誤跟知道自己是監聽在什麼位置上。<br>
還有函數的不熟悉，或是不知道可以用哪些函數就要再回去課程影片裡面找，覺得可以列出當周作業可能會用到的 JS 函數名稱，讓新手比較有方向去找答案ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>我發現我作業都卡關滿久的ＸＤ<br>
之前用 jQuery 學習寫表單即時監聽剛開始都覺得有點難，但是後來懂了之後就覺得其實滿簡單的。<br>
所以在理解痛苦的時期過後，一定會有順手寫程式的一天～^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-10 22:56:05</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-10/"/>
      <updated>2020-08-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-10/</id>
      <content type="html">
        <![CDATA[
      <h1>邊上班邊跟課的同學很厲害～時間好珍貴啊ＱＱ</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>假日把 week7 作業的第一題寫完了</li>
<li>week7 第二題只寫出一個展開的 FAQ</li>
<li>再把 week7 的影片看過複習</li>
</ul>
<h3>明天的預定進度</h3>
<p>先把 week7 第三題跟 week8 作業的版面刻出來，最後再處理 JavaScript 的部分</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>這個假日讀書進度不如預期，可能還在適應上班的生活，上班動腦的程度不輸給學程式，但是好處是至少都摸的到一點點的 CSS 還有賺生活費ＱＱ<br>
目前主要卡關還是在 JavaScript 的邏輯上，week7 hw1 是偷看範例解答跟影片才勉勉強強寫出來的，不過就算是這樣勉勉強強的寫出來，我再回去看一次課程影片理解的程度真的有上升。<br>
然後有自己默寫出切換背景顏色的按鈕功能，覺得跟一開始寫不出來的自己相比真的進步很多了～<br>
目前就是希望先把有把握的 CSS 給刻出來，最後只要加上 JavaScript 讓他動起來就好了！給自己信心跟鼓勵ＱＱ<br>
感謝 Huli 佛心開課，讓我們能按照自己的步調學習程式。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>一焦躁嘴唇附近就狂冒痘痘，好像是火氣大～明天要報告分析公司的網站有點焦慮<br>
已經習慣睡少少又上班整天的生活<br>
需要的是一個靈光的腦袋～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-11 23:37:25</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-11/"/>
      <updated>2020-08-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-11/</id>
      <content type="html">
        <![CDATA[
      <h1>需要時光屋 生出跟工作相同的學習時間</h1>
<h3>今天的課程完成了什麼？還記得哪些內容？反思今天的學習成果</h3>
<p>week7 進度卡關太久，把塵封一陣子的 JavaScript 拿起來讀了<br>
原來裡面也有「瀏覽器中的 JavaScript 」，內容厚度大概佔了磚塊書的三分之一<br>
所以我兩個禮拜還沒把 week7 作業寫完好像也是很正常的ＱＱ</p>
<p>因為第二題寫不出來多個展開，所以就看了 參考範例：hw2 FAQ 頁面，努力解題中。</p>
<p>然後因為 10 月 11 日要上台表演，星期二晚上都要去練舞，每週可以學習的時間又少了一個晚上...只能利用假日狂追進度哩ＱＱ<br>
但是因為大腦理解需要時間，所以之後跟課的安排會改成 1~5 晚上看課程影片跟文章，六日實作作業。</p>
<h3>明天的預定進度</h3>
<p>week7 第二題跟作業切版</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>每天練習時間不夠自己也會緊張<br>
主要是作業寫不出來會緊張ＱＱ<br>
就算很累，還是維持每天看一點程式的習慣，思考的方式才不會跑太遠～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-12 21:56:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-12/"/>
      <updated>2020-08-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-12/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>對不起今天身體累積疲勞太累了...休養一天<br>
但是實作了課程上學到的東西應用在工作上。</p>
<hr>
<p>在上班的時候研究了 BitBucket 的 git 方式，原來使用真的跟我們繳作業很像。<br>
網頁部的同事好像對 Git 也不太熟悉，用圖形化介面的比較多，聽到我用指令打 Git 覺得很不可思議，好像也有分成兩派一派用介面一派打指令，但是我只是剛好只學會指令而已ＸＤ</p>
<p>工作上也趁機應用到了上課講 LD JSON 格式做 SEO ，覺得 Lidemy 這個課程學的真的很深很廣，好像很多東西都比別人再多會一點。</p>
<p>今天不小心好像變成跟同事的主管打小報告了<br>
但是我不是有心這樣講的...只是希望我們負責的網站不要修改的時候再掛掉讓上面的頭頭們發現，請同部門的同事學一下 git 做版本控制而已ＱＱ</p>
<p>這個負責的主網站去年８月上線，用 PHP CI 架設，但是光光 application 底下就有 5GB 的檔案大小...CSS 有 20 幾支，JS 也有 10 幾隻，都是用別人的框架寫的。<br>
好像很趕著上線，所以很多網站的內容都沒有做優化草草結束，之前做網站的同事也都離職沒有留下文件...<br>
簡而言之就是一個坑！造就了我現在的工作職位ＸＤ</p>
<h3>明天的預定進度</h3>
<p>week7 第二題跟作業切版</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>「顧好身體很重要」<br>
最近每天回到家都 9 點多快 10 點然後直接開始課程進度，身體有點吃不消不太舒服決定今天早點休息好好睡覺。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-13 22:20:32</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-13/"/>
      <updated>2020-08-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-13/</id>
      <content type="html">
        <![CDATA[
      <h1>大腦理解需要時間 先看影片學習輸入腦袋～</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第八週影片，並且跟著影片實作一次</li>
</ul>
<h3>明天的預定進度</h3>
<p>第七週跟第八週作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>覺得第八週的影片內容很簡單就可以理解，但是聽同學說好像作業自己寫起來滿難的ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>轉換心情很重要～建立自信也很重要</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-14 23:05:16</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-14/"/>
      <updated>2020-08-14T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-14/</id>
      <content type="html">
        <![CDATA[
      <p>今天理解下班放假的週末很重要ＸＤ<br>
放鬆星期五一個晚上，六日努力兩天</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-16 20:43:41 週末台中聚加完成第 7 週卡關作業</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-16/"/>
      <updated>2020-08-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-16/</id>
      <content type="html">
        <![CDATA[
      <h1>週末台中聚加完成第 7 週卡關作業</h1>
<h3>週末的課程完成了什麼？</h3>
<ul>
<li>把卡很久的第 7 週 hw1~3 作業 ＫＯ 了！超開心</li>
<li>開始在寫第 8 週作業了</li>
</ul>
<h3>明天的預定進度</h3>
<p>把 week7 hw4 的觀念寫一寫<br>
week8 作業繼續寫<br>
看 week9 課程影片</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>很開心可以參加星期六的台中聚^^<br>
看到 Huli 、minw 助教跟同學們覺得有種「哇～原來有這麼多人一起學習，一起共同完成一件事情的感覺」，大家聊天起來也很像朋友交流，就是莫名安靜冷場的時候覺得很好笑哈哈。<br>
之前有看過 minw 助教在 Medium 分享的求職文章，覺得準備超充足的，我好像沒這麼認真有點慚愧ＸＤ，她分享自己學習的心路歷程也好完整，可以一直質疑自己的做法並持續改善學習的過程，很佩服也值得自己多學習^^<br>
然後有問了一點自己新工作上關於程式遇到的狀況，聽了 Huli 跟 minw 分享後對程式整個概念有一點豁然開朗的感覺，可能知道大概要怎麼做但是實際執行上需要嘗試看看ＸＤ<br>
然後關於求職的問題，程式的問題，大家都很樂意分享，真的很珍惜這種學習氛圍?希望能有下次的台中聚，或者是課程結束後聚聚大家合照一張做個歷史，應該會有點猛ＸＤ</p>
<hr>
<p>今天學習時數不長，但是感覺打通了什麼開關，終於把卡關已久的 week7 作業ＯＫ並開始 week8 作業、week9 影片了，有檢討自己卡關 week7 這麼久的原因，應該是因為第一次學到<code>document.querySelector()</code>跟<code>.addEventListener</code>的這個語法，然後剛開始上班學習時間少了很多所以才卡兩三個星期這麼久。<br>
week8 之後的課程以前自己都有摸索過一點點，應該在觀念上比較不會卡這麼久（我先預猜的ＸＤ）<br>
期許自己可以超車追上進度（完成作業繳交）</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>有人支持你學習程式跟有學習的夥伴是很重要的，還有維持每天心得文的習慣跟不想被淘汰的那種動力，會促使自己維持學習下去。<br>
當你有一些奇怪的念頭的時候，他們會在無形之中影響你讓你想要繼續跟課ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-17 22:27:43  決定實行早睡超早起計劃</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-17/"/>
      <updated>2020-08-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-17/</id>
      <content type="html">
        <![CDATA[
      <h1>決定實行早睡超早起計劃</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>PHP 作業影片，是熟悉的畫面的感覺ＸＤ</li>
<li>week7 作業繳交</li>
</ul>
<h3>明天的預定進度</h3>
<p>week9 影片<br>
week8 作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>寫 week7 作業的觀念題有當下的直覺「喔～這個就是什麼什麼」了！感覺 week7 的內容有進入了我自己的腦海裡了，但是要很深入解釋起來目前還是做不到。</p>
<p>努力用上班過度燒腦的腦袋寫完作業，很佩服自己但是寫觀念題要寫很多好像就寫不出來ＸＤ<br>
（因為上班要想文案網頁版面 SEO 關鍵字巴拉巴拉一堆事情一起做）<br>
然後最近沒有慢跑的習慣身體在哀嚎哩ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>忙到連買件上班要穿的襯衫的時間都沒有ＸＤ<br>
寧願拿來睡覺或是趕課程進度啊啊啊～～～現在要學的扎實好像很有難度因為時間太少<br>
只求至少都有概念作業寫得出來就好。<br>
容我後續再慢慢補起來...雖然知道這個坑可能會很深很深ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-18 22:17:30 記憶力大考驗－默默默寫ＱＱ</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-18/"/>
      <updated>2020-08-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-18/</id>
      <content type="html">
        <![CDATA[
      <h1>記憶力大考驗－默默默寫ＱＱ</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>PHP 影片課程</li>
</ul>
<h3>明天的預定進度</h3>
<p>week9 影片課程</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>PHP 課程可以用 2 倍速看，真的是複習的感覺ＸＤ<br>
不知道真的開始寫作業後，基本的 CRUD 還記得多少ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>網頁部的主管今天問我會不會在自己的部落格寫公司的事情<br>
有沒有看過公司的天眼通哈哈，該不會主管也在這個群裡面吧ＸＤ<br>
但是目前工作上還沒遇到太多奇怪的事或是讓人無法接受的事情...也可能是我已經習慣之前也在奇怪的公司流程下工作了所以不覺得奇怪(?)<br>
看看星期四跟五開會會發生什麼事情囉ＱＱ</p>
<p>然後有點不想背公司語錄跟對應的產品英文...什麼年代了還在考試默寫，選擇題不好嘛ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-19 22:33:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-19/"/>
      <updated>2020-08-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-19/</id>
      <content type="html">
        <![CDATA[
      <p>今天超忙，讚一個晚點補心得</p>
<hr>
<p>結果給自己放假一天～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-20 23:21:33 療癒的下班時間～空也蔬食好ㄔ～</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-20/"/>
      <updated>2020-08-20T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-20/</id>
      <content type="html">
        <![CDATA[
      <h1>療癒的下班時間～空也蔬食好ㄔ～</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第八週作業第一題，寫到串接 API 跟成功判斷值的內容。</li>
</ul>
<h3>明天的預定進度</h3>
<p>第八週第九週</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>厚唷唷唷唷唷～～～上班加班平日一到五都沒什麼進度啊ＱＱ<br>
只剩六日可以完整跟課了<br>
發現我第七週作業錯好多...助教跟老師應該改到很辛苦，但是我好像理解又沒辦法完全理解ＤＯＭ的感覺。<br>
第一小題忘記確認到送出表單的部分，再來修改～<br>
每天上班都用 git 存工作用的檔案跟上傳練習，已經很熟練了～撒花</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>我是個金魚腦的人，這樣煩惱來得快去得也快～<br>
但是過幾天就忘記前幾天寫的 code 該怎麼治啊ＱＱ</p>
<p>切版還算可以跟得上，只是跑版的問題沒有太多時間處理ＱＱ<br>
但是學 JavaScript 串接好像就有點辛苦<br>
然後希望之後心得文花少一點時間寫，多一點時間留給寫程式比較實在！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-21 23:54:03</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-21/"/>
      <updated>2020-08-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-21/</id>
      <content type="html">
        <![CDATA[
      <p>卡</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-22 22:16:15 串串 AIP Again~</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-22/"/>
      <updated>2020-08-22T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-22/</id>
      <content type="html">
        <![CDATA[
      <h1>串串 AIP Again~</h1>
<h3>今天的課程完成了什麼？</h3>
<p><img src="/images/lidemy/a12999c2c9bd47a6b7be416ca19473cb.jpg" alt=""></p>
<ul>
<li>CSS Diner 破關完成，還滿好玩的＾＾</li>
<li>完成第八週作業第一題</li>
</ul>
<h3>明天的預定進度</h3>
<p>第八週作業<br>
第九週影片</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>寫第八週的時候，對第七週的課程內容有種又再複習跟應用的感覺，所以越來越熟悉惹～<br>
然後在寫作業一的時候，覺得很多程式碼是重複的，所以明天會再試試看簡化程式碼，用變數替換一些變動的值。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>第八週作業<br>
人品大爆發，測試樣式寫在 first 獎項，結果抽了 200 多次都抽不到 first ，超好笑ＸＤ，只好把樣式改成在 none 做測試ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-23 23:26:05</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-23/"/>
      <updated>2020-08-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-23/</id>
      <content type="html">
        <![CDATA[
      <p>今日進度：<br>
第八週第二題～完成到抓取前 5 個熱門遊戲～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-24 22:31:50</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-24/"/>
      <updated>2020-08-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-24/</id>
      <content type="html">
        <![CDATA[
      <p>今天休息一日~~</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-25 22:53:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-25/"/>
      <updated>2020-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-25/</id>
      <content type="html">
        <![CDATA[
      <p>下班去後練舞，回到家 10 點了～今日走休閒路線<br>
進度第九週ＰＨＰ影片 ＝ MySQL 語法基礎</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-26 23:15:56</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-26/"/>
      <updated>2020-08-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-26/</id>
      <content type="html">
        <![CDATA[
      <p>今日進度 [BE101] 初探 PHP</p>
<p>覺得最近心態要調整一下...畢竟一邊上班一邊跟課的速度，不可能像以前全職學習那樣哩ＱＱ<br>
而且後面幾週的內容覺得很能應用在自己目前的工作上...希望能趕快到之後的進度ＱＱ</p>
<p>前幾天教同事用 position 做版面樣式定位，這樣應該也算是邊上班邊複習課程內容吧ＱＱ</p>
<p>還有發現上班自己用 git 做版控的檔案，開了 branch 卻沒有 commit 就上傳到雲端了，難怪一直不能 pull request ，覺得自己很蠢哈哈，還好後來自己發現不然就好笑了ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-28 22:43:38</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-28/"/>
      <updated>2020-08-28T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-28/</id>
      <content type="html">
        <![CDATA[
      <p>星期四很認真的把ＰＨＰ的課程看完準備開始做第九週作業...結果竟然忘記發心得就睡著了Ｑ__Ｑ</p>
<p>今日的體悟<br>
人生就是不能強求，人生就是有起有落，有失誤的時候Ｑ＿Ｑ<br>
這週的戰略就是心得文字很偷懶，但是很認真看課程...卻忘記發心得文了，哈哈哈</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-29 20:09:24</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-29/"/>
      <updated>2020-08-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-29/</id>
      <content type="html">
        <![CDATA[
      <p>今天從晚上 8 點一直寫第八週 twitch 作業一直寫到半夜一點多，快完成了真的有點感動ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-30 22:28:20</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-30/"/>
      <updated>2020-08-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-30/</id>
      <content type="html">
        <![CDATA[
      <h1>Twitch API 壞掉惹，害我 debug 超久ＱＱ</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第八週作業完成，已繳交</li>
<li>看同學的作業</li>
</ul>
<h3>明天的預定進度</h3>
<p>第九週內容</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>第八週第二個作業架構有點龐大，不過抓取ＡＰＩ的方式就更熟練了</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>本來今天要把第八週ＫＯ的！結果 Twitch API 壞掉，第五個值一直跑不出來＝＝<br>
早上完成某個進度之後就去吃飯，回來要在繼續寫就發現有錯誤，一直 debug 看程式內容，一直以為是自己邏輯寫錯...<br>
結果看同學作業跟老師的參考範例，抓出來的結果第五個值都是 undefine<br>
所以不是我的程式邏輯問題，是ＡＰＩ不穩定，今天又學到了一課ＱＱ<br>
真是有點 森 7777777<br>
就我要寫作業的時候有錯誤，怒打心得文的時候他又正常了ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-08-31 23:13:37</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-08-31/"/>
      <updated>2020-08-31T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-08-31/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第八週作業教學影片檢討看完</li>
<li>留言板影片</li>
</ul>
<h3>明天的預定進度</h3>
<p>明天晚上練舞，會休息一天，也許會看一點點課程影片。</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>callback function 還是不太熟悉，但是有再明白了一些些。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>很久沒像今天一樣吃這麼多甜食了，有點亢奮，像是小孩子吃太多糖會過動，今天晚上一直狂講話ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-01 23:14:23 一步一步會留下足跡，一言一行會留下成績</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-01/"/>
      <updated>2020-09-01T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-01/</id>
      <content type="html">
        <![CDATA[
      <h1>一步一步會留下足跡，一言一行會留下成績</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第九週課程影片</li>
</ul>
<h3>明天的預定進度</h3>
<p>第九週～</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>順了一下要寫作業的概念與流程</p>
<ul>
<li>先把本地端的ＸＡＭＰＰ架設起來</li>
<li>設定資料庫</li>
<li>切前端程式畫面</li>
<li>寫ＰＨＰ連線資料庫，還有顯示資料庫的內容</li>
<li>上傳到ＦＴＰ</li>
<li>在雲端的 phpMyAdmin 設定資料庫</li>
<li>確認程式運作正常</li>
</ul>
<p>之前學ＰＨＰ的時候寫了很多筆記，感覺概念應該是懂的，就剩下需要實作的時間了ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天是上班快滿一個月的日子，每天下班前都要打工作日誌，還有每天晚上打學習心得，覺得可以順便把工作心得記錄下來，之後轉職再回頭看寫的內容，應該會有很感受吧ＸＤ</p>
<p>看到很多同學問學習心態的問題，覺得自己雖然落後進度，但是一直保持學習狀態的原因，可能是因為現實中有朋友可以討論程式內容，還有目前工作跟程式也有點相關，每天都會看到程式（但是不是自己寫的），也會跟同事討論程式的問題，所以環境好像滿重要的。</p>
<p>只是我們公司算是接案公司，也沒有整個公司都是做網頁的東西，前端就只有單純切版，後端串資料這樣，比較簡單，也沒有用什麼很潮的前端框架（目前只有 Bootstrap），大部分都用 jQuery 串資料，所以這個課程的內容其實滿全面的，如果順利跟課完成感覺自己應該也是有某種程度了吧哈哈（超樂觀）</p>
<p>只是自己有對自己的小小期許，就是希望之後可以從台中北上去台北找前端的工作，刷刷技能跟累積經驗這樣～可以有另一種人生的體驗＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-03 22:27:47</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-03/"/>
      <updated>2020-09-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-03/</id>
      <content type="html">
        <![CDATA[
      <p>今天練習第九週作業...奮戰中ＱＱ<br>
還有下星期一上班要月會分享工作上的作品，覺超級緊張，超不會上台分享的，整個是我的短處ㄚＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-04 22:30:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-04/"/>
      <updated>2020-09-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-04/</id>
      <content type="html">
        <![CDATA[
      <p>今天身體不適，看了醫生，休息一天</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-05 22:52:44</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-05/"/>
      <updated>2020-09-05T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-05/</id>
      <content type="html">
        <![CDATA[
      <p>昨天晚上去看醫生，結果吃了藥引發藥物過敏...早上去掛急診ＱＱ<br>
本來今天的計畫都泡湯了...打完針眼睛現在還是腫腫的<br>
希望新開的藥藥不會過敏ＱＱ</p>
<p>回來昏睡到下午才醒</p>
<hr>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第九週作業切版完成，conn 連線完成。</li>
</ul>
<h3>明天的預定進度</h3>
<p>看可不可以把第九週作業做完～</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>切版跟連線還算順利，沒遇到什麼太大的問題～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>藥物過敏好可怕啊...<br>
這次打完抗過敏的針眼睛還是腫的，不知道什麼時候才會消ＱＱ<br>
好像常見的抗生素都不能吃了...可能改天需要去檢測一下是什麼藥物會過敏ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-06 18:59:34</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-06/"/>
      <updated>2020-09-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-06/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>第九週作業～</p>
<h3>明天的預定進度</h3>
<p>看第十週跟第十一週</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>晚點補</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>偷懶也是一種學習哲學ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-07 22:18:45</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-02/"/>
      <updated>2020-09-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-02/</id>
      <content type="html">
        <![CDATA[
      <p>寫作業中～寫到新增資料成功～<br>
最近身體不太舒服，一直出狀況ＱＱ<br>
今天就早點休息。</p>
<p>不想被當灌水文啊～～～但是這週我的身體一直不太舒服<br>
看了這週前面的心得文，緊張啊ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-07 23:23:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-07/"/>
      <updated>2020-09-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-07/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>我還在第九週～但是已經理解的七七八八，就是沒時間可以把它寫完啊啊啊！</p>
<h3>明天的預定進度</h3>
<p>星期二是之前答應別人要幫忙去跳舞表演，到 10/11 之前晚上都要練習。<br>
暫定星期二都會休息一天，但是也可能有進度。</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>理解ＰＨＰ無違和感<br>
希望可以快點進入到下一週～～<br>
身體你要撐住啊～～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天上班月會報告的超爛，這種需要上台演說的東西真心是自己不擅長的，但是做行銷都會講說第一個要推銷的是自己，但是我遇到要講自己哪裡厲害哪裡做得好就整個說不出口，這也是一種曖曖內含光對吧～（整個逃避心態）<br>
可惜公司要的不是這種低調的人，希望大家努力彰顯自己的價值。</p>
<p>今天是第一個月領薪水的日子，但是喜悅程度好像沒有想像中的高<br>
懷疑自己之後能適應公司的文化嗎ＱＱ</p>
<p>然後剛好公司的文章要改成部落格的形式，希望我努力跟進度到那裡，應用在工作上順便加強學習。</p>
<p>我是一個行銷人，但是卻在教菜鳥工程師寫前端，這個工作真的是充滿滿滿的神奇。</p>
<hr>
<p>寫作業中～寫到新增資料成功～<br>
最近身體不太舒服，一直出狀況ＱＱ<br>
今天就早點休息。</p>
<p>不想被當灌水文啊～～～但是這週我的身體一直不太舒服<br>
看了這週前面的心得文，緊張啊ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-08 22:20:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-08/"/>
      <updated>2020-09-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-08/</id>
      <content type="html">
        <![CDATA[
      <p>今天是休息日～晚上練舞練得好累ＱＱ<br>
到最後整個恍神，只想趕快回家洗洗睡～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-09 22:24:43</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-09/"/>
      <updated>2020-09-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-09/</id>
      <content type="html">
        <![CDATA[
      <p>今天一下班就去大醫院掛號看醫生，等了兩個小時才到我<br>
一個寶貴的晚上就這樣過去了ＱＱ<br>
明天開始繼續認真</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-10 23:26:01</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-10/"/>
      <updated>2020-09-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-10/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第九週作業，完成到登入畫面了，剩下記住登入狀態。</li>
</ul>
<h3>明天的預定進度</h3>
<p>第九週作業完成</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>這週作業做得很順～進度趕起來～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>有一種最近很久沒寫程式的感覺，需要再練練程式的語感。<br>
切換上班跟下班後的狀態。<br>
希望可以早日進入到 11 週，就知道哪裡會有程式的漏洞，可以應用在工作上＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-12 22:43:24</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-12/"/>
      <updated>2020-09-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-12/</id>
      <content type="html">
        <![CDATA[
      <h1>九月 秋天 心裡暖烘烘的</h1>
<p><a href="https://lidemy.slack.com/app_redirect?channel=U012P7Z87V3"><img src="http://img.shields.io/static/v1?label=slack&amp;message=roroiii&amp;style=flat-square&amp;logo=slack&amp;color=428bca" alt=""></a></p>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>第九週作業</li>
<li>回家陪家人吃飯聊聊天</li>
</ul>
<h3>明天的預定進度</h3>
<p>明天一定要把第九週繳出去～！<br>
第十週複習週的東西</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>回到宿舍馬上開始看最後一個影片「該怎麼記住登入狀態？Cookie 簡介與實作」</p>
<p>今天去完成一個很重要的任務，就是回家陪家人吃飯聊天，今天媽媽拿了超多衣服給我，都是我以前不敢穿或是不願意穿的那種風格，可能上班之後心態也有點轉變，想開始嘗試看看不一樣的風格，看看自己適合什麼風格，某些衣服穿上去突然覺得自己原來身材這麼好啊（自己講ＸＤ）阿嬤說我是從小孩變得有女人味了ＸＤ</p>
<p>自己在外面租房子真的滿辛苦的，要一直跑來跑去，還要抽時間回家，不像一直跟家人住在一起每天都可以見到面，有時候會覺得很羨慕可以跟家人一起住的人，但是每天見面好像又很容易吵架，感覺是一種想要有家人陪伴卻又想保有自己的空間。</p>
<p>然後今年這個下半年真的很棒，認識很多新的人跟環境，改變了自己的狀態，產生了新的想法。這些也要歸功於報名了 lidemy 程式導師實驗計畫這堂課，意外帶來的額外收穫吧！<br>
雖然每天都把自己搞得很累，但是不知不覺也已經持續了三個月呢！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>家人有時候能給你力量，多跟家人溝通講講話吧。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-13 21:09:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-13/"/>
      <updated>2020-09-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-13/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>把第九週作業繳交完成了～邁向第十週（撒花）</li>
</ul>
<h3>明天的預定進度</h3>
<p>第十週影片跟關卡遊戲</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>沒想要要理解記住登入狀態的 Cookie 會需要這麼多時間，系列文到第三篇真的有點不知道在講什麼＠＠，現在就是一個有點懂但不是太懂的狀態，目前只能以跟上課程、加深程式視野廣度為主，努力跟課哩。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>之前有跟同事說我在上這個課程，他都會問我進度到哪了，蛤～還在留言板，你也寫太久之類的嗆嗆我，就會覺得要努力趕快完成作業！<br>
沒想到同事也變成是另一個學習的動力ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-14 22:02:29</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-14/"/>
      <updated>2020-09-14T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-14/</id>
      <content type="html">
        <![CDATA[
      <p>卡一個綠點點，今天是休息日。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-15 21:44:21</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-15/"/>
      <updated>2020-09-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-15/</id>
      <content type="html">
        <![CDATA[
      <p>今天練舞休息一日</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-16 23:22:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-16/"/>
      <updated>2020-09-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-16/</id>
      <content type="html">
        <![CDATA[
      <h1>獲得成就感的一天～</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>看了上週的隨意聊</li>
<li>上班時複習第七週的東西...發現自己竟然寫不出來ＸＤ</li>
<li>複習第七週的影片</li>
</ul>
<h3>明天的預定進度</h3>
<p>緩慢進度進行中ＱＱ<br>
第十週心得跟玩遊戲</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天上班的時候，大膽的跟同事說我可以幫他改網站的 navbar 跟 footer，本來是我設計畫面，但是他斷斷續續弄了一個禮拜調整不出來，我就幫他改了ＸＤ</p>
<p>然後我下午的時間就把版面樣式調整好了，但是手機選的按鈕目前開關還是有點問題，我就想到了第七週卡關很久，真的在工作的時候寫不出來ＸＤ</p>
<p>同事上網去 copy 了一段 jQuery 把功能寫出來了但是不完整，我接手改的時候發現我只對 JavaScript 怎麼顯示隱藏 CSS 比較熟悉（可能第七週卡太久看到都記起來了）<br>
所以回來就去複習了一下第七週的影片跟筆記，發現有一種變簡單的錯覺，好像我真的可以寫得出來喔！比當時看了好幾遍還是不懂的自己，感受到了明顯的成長哈哈哈！<br>
真的能應用在工作上，覺得開心^^</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>現在是做著一份整合多功の工作<br>
從本質的網路行銷、SEO、內容行銷，loading page 設計、網站畫面設計，到目前簡單的前端程式調整，在行銷、設計、程式三個區塊之間互相轉換，還有要求需要集團管理融入公司文化。<br>
我也不知道這樣子工作最後會變成什麼樣子，畢竟沒有專精在某個區塊，可能是這樣子，就想要轉職專心去寫前端的程式吧！<br>
沒有一條路是白走的，這些彎彎繞繞一定會成就未來的自己滴＾＾～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-17 22:29:54 混用的 JavaScript，直接混起來～</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-17/"/>
      <updated>2020-09-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-17/</id>
      <content type="html">
        <![CDATA[
      <h1>混用的 JavaScript，直接混起來～</h1>
<h3>今天的課程完成了什麼？</h3>
<p>扎扎實實的複習第七週～<br>
第十週的闖關遊戲</p>
<h3>明天的預定進度</h3>
<p>第１１週課程</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天上班花了一整天才把手機版的選單調整完成．好像當了一天薪水小偷ＱＱ<br>
但是跟我同部門一樣菜菜的工程師寫不出來，所以我幫他寫好像也還可以（？）<br>
改了一個早上寫不出來很緊張，中午就用吃飯時間努力爬文，還好下午突然靈感湧現就把功能做出來了哈哈。<br>
功能是點選漢堡會開合選單，選單打開的時候點選旁邊的區塊就會自己收回去，然後因為ＳＥＯ的關係要屏棄<nav>的標籤，不然用 Bootstrap 分分鐘就寫出來了哈哈。<br>
因為我不會改 jQuery ，所以就變成 jQuery ＋香草 JS 的奇怪寫法<br>
公司目前不看重 code 的品質，只看重功能跟畫面，目前我有做出來就很厲害了哈哈ＸＤ<br>
同事說我怎麼不用 jQuery 寫就好，這樣程式碼很簡單，但是我不會寫啊～～<br>
附上可以運作的混用程式碼～希望不會傷了大家的眼睛<br>
<img src="/images/lidemy/3b7ead5c071c4d269e0f823b232654ee.jpg" alt=""><br>
但是說真的我們官網的 code 都是 PHP + HTML 或是 JavaScript + PHP 混在一起寫的～<br>
明天上班就會繼續回去設計後台的畫面了ＱＱ<br>
好希望上班可以多寫一點前端的東西啊～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>推遲的課程學習進度啊啊啊～～看到同學已經到第十四週，我已經落後四周了ＱＱ<br>
小緊張</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-18 23:13:11</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-18/"/>
      <updated>2020-09-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-18/</id>
      <content type="html">
        <![CDATA[
      <p>今天上班調整網頁 footer 的網頁選單，就上網去查了一些 CSS 的 hover 效果，還有找一些 RWD 跑版的問題，覺得 CSS 好像可以做到很多特效。之後再找時間好好研究一番。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-19 23:53:46</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-19/"/>
      <updated>2020-09-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-19/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>第十關的兩個遊戲，目前卡在第七關，找不到 token 是什麼ＱＱ</p>
<h3>明天的預定進度</h3>
<p>衝衝衝～第 11 週</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>玩遊戲真的很好玩～而且因為很想破關，所以會努力找答案<br>
覺得每週繳交作業也可以弄成破關解決大怪獸之類的，應該滿好玩ＸＤ<br>
破關完成真的很有成就感啊ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>相信、信任、然後信賴。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-20 23:07:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-20/"/>
      <updated>2020-09-20T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-20/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>第 11 週第一個作業～</p>
<h3>明天的預定進度</h3>
<p>繼續跟著影片課程，把 11 週作業做完。</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>感覺這週作業難度有增加，希望可以順利完成～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>跟人辯論，有點浩腦力～</p>
<hr>
<p>寫第 11 週作業中～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-21 21:59:56</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-21/"/>
      <updated>2020-09-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-21/</id>
      <content type="html">
        <![CDATA[
      <p>今天是休息日，但是還是決定認真下～</p>
<p>11 週跟課中</p>
<p>修改安全漏洞中<br>
但是登出有錯誤訊息，找ＢＵＧ找到眼睛有點累，先睡覺休息明天下班繼續奮鬥～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-24 22:17:35 不經意的話語 更顯暖</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-24/"/>
      <updated>2020-09-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-24/</id>
      <content type="html">
        <![CDATA[
      <h1>不經意的話語 更顯暖</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>１１週ＱＱ</li>
<li>[FE201] 前端中階：那些前端會用到的工具們，看了覺得開心～</li>
</ul>
<h3>明天的預定進度</h3>
<p>換先去看１２週的內容，跟前端比較有關係的東西～</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天不知道是第１１週的第幾天，但是有發現自己對ＰＨＰ沒有很愛，有進入倦怠期的感覺，所以今天決定要先去看１２週的課程，等下個星期連假有完整的時間再把１１週的內容補回來。</p>
<p>看了自己第１０週的作業回饋，Huli 跟 ClayGao 助教好貼心啊ＱＱ<br>
整個說到心坎裡，這種暖暖的回饋也是一個堅持學習的動力，有一種暖暖的學習氛圍，我要再努力一點～加油！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>echo~ 個喜歡ＰＨＰ的心情吧～<br>
今天同事簡單教我用 PHP 寫分頁的程式碼，但是我可能心裡對 PHP 有抗拒，整個有聽沒有懂，哈哈．</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-25 22:29:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-25/"/>
      <updated>2020-09-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-25/</id>
      <content type="html">
        <![CDATA[
      <h1>突然下班就揪起來的大學同學聚</h1>
<p>看到好久不見的大學同學，整了聊到店家關門時間又換地方繼續聊，站在路邊也要聊，聊到快１１點才各自解散回家。</p>
<p>好久沒有這種暢聊的感覺了，而且因為大家的工作經歷都不一樣，但是彼此的產業鍊又有相關，所以就有好多共同話題。</p>
<p>畢業後過了三四年才再見面，希望之後我們還能再度聚聚話家常＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-26 22:13:24 鬆鬆，鬆一下～身心健康</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-26/"/>
      <updated>2020-09-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-26/</id>
      <content type="html">
        <![CDATA[
      <h1>鬆鬆，鬆一下～身心健康</h1>
<h3>今天的課程完成了什麼？</h3>
<ul>
<li>練習前端切版一整天</li>
</ul>
<h3>明天的預定進度</h3>
<p>放鬆心情...舒緩一下緊繃的神經<br>
第１２週</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>前天跟同事討論由我負責一個官網畫面的切板，昨天下午到今天上班都在做這個版面，使用 BootStrap 跟 flex 切好切滿，但是發現有個版面需要 grid 才切得出來，星期一上班再花點時間研究一下。<br>
但是也許用 flex 也切得出來，但是我不知道要怎麼排列ＸＤ<br>
目前都沒有寫到 JavaScript 的部分，之後再看看怎麼應用進去～</p>
<p>然後很多版面忘記怎麼切，我都是回去看自己寫的作業ＸＤ<br>
啊！應該看 Huli 或是同學的作業，可能可以學到比較多。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>下班一整個感覺很累，有一種腦力浩劫的感覺，幾乎每天快到下班前都會這樣，不知道是情緒上還是生理上需要做調整，也許只是單純的疲勞而已，希望自己不要想太多ＱＱ</p>
<p>今天回宿舍之後就有很想哭的感覺，但是仔細思考也不知道是什麼原因想哭，也許是最近事情都一起來，每天都把自己搞得很忙，沒有給自己空間好好沈澱思考，不自覺壓抑情緒吧ＱＱ</p>
<p>上班也會有適應的壓力，這種壓力不知道從什麼時候開始漸漸壓過了學習的壓力，希望自己不要忘記要轉職的那顆心。</p>
<p>還有就是可以把課程所學的東西，不知不覺的就應用在工作上，就覺得好開心啊～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-27 23:39:40 學會讓自己放鬆</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-27/"/>
      <updated>2020-09-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-27/</id>
      <content type="html">
        <![CDATA[
      <h1>學會讓自己放鬆</h1>
<h2>今天第一次理解跟體悟到，放鬆很重要。</h2>
<p>就是一個流水帳報告今天在幹嘛的心得文，但是覺得自己的心情想記錄下來，就寫在心得文了 XD</p>
<p>昏睡到早上 9 點起床，昨晚做的夢不是被罵就是被車撞這種可怕的情節，好像壓力真的太大了。</p>
<p>起床簡單梳理，就跟家裡的兔子殼殼玩了一下。幫已經八歲的她梳掉眼睛上的眼油，修理眼睛附近的毛髮，她還是跟當初第一次見到的模樣一樣可愛。</p>
<p>中午去找朋友然後出去吃飯，但是覺得自己心裡一直卡卡的，放鬆不下來。</p>
<p>下午回家後睡到晚上起床，出門去上道場的練講班， 相隔一年後再進班壓力真的滿大的，同學們都很優秀，講師也嚴格的要求，但是相信自己跟著課程進度穩穩地前進，照著做兩年後會變成一個自己更喜歡的樣子。</p>
<p>剛好某個同學自我介紹說自己工作在寫程式，私下跟她聊了解她工作在寫網頁跟 JAVA，就很興奮告訴她我之後想轉職的事情，她給我鼓勵打氣的時候就覺得自己真的可以完成轉職這件事情。</p>
<p>晚上洗完澡跟朋友聊天，才意識到自己把自己逼得太緊這件事情，之前只覺得應該是壓力太大所以才會想哭，但是沒有意識到自己放鬆的時候，一直在想著什麼事情還沒做，什麼事情還可以做得更好，放鬆的時候沒有好好休息，沒有活在當下，只是一直在擔心未來還沒發生的事情。</p>
<p>有種把事情都攬起來的特質，很擔心自己做的不夠好，顧此失彼結果事情都做得不好。<br>
被他這樣一講我才發現，我就連休息都在責怪自己不夠認真還在混。<br>
所以今天晚上決定好好睡個覺，不去想什麼課程進度、工作、人生的事情。</p>
<p>今天要做的事情，就只有好好地睡個覺。<br>
以上，報告完畢。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-29 22:47:02</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-29/"/>
      <updated>2020-09-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-29/</id>
      <content type="html">
        <![CDATA[
      <p>今日進度:[FE201] 前端中階：那些前端會用到的工具們</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-30 22:37:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-09-30/"/>
      <updated>2020-09-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-09-30/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第１２週內容</li>
<li>複習第８週</li>
</ul>
<h3>明天的預定進度</h3>
<p>連假努力衝一波進度</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天跟同事討論到串資料的問題，他一直鼓吹我去學後端，說 PHP 比較好玩，但是我還是比較喜歡前端ＸＤ<br>
然後工作分配 SPA 網頁的部分，他串 PHP 資料，部份給我用 Ajax 串資料，希望星期一我寫得出來ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>工作壓力越來越大，要管很多不是專業領域工作範圍內的事，根本就包山包海公司大大小小的事情都要知道跟關心。需要自己主動跨部門溝通，心裡會有障礙需要學會跨出去，接下來還需要自己參加各部門會議去了解各部門，才能做官網行銷的內容，其實覺得有點不理解．．．但這就是這家公司的文化，不知道我小小的心靈可以撐多久啊～為什麼不能對某些窗口就好呢？讓幾個菜鳥一進公司就開始操刀這些事情真的好嗎？<br>
有預感我不是變得很厲害就是戰死沙場的那個ＱＱ</p>
<p>有點想念全職學習的生活．．．沈浸在 code 的世界很美妙～<br>
但是現實告訴我只能咬牙撐下去ＱＱ<br>
現在上班的樂趣就是偶爾能寫寫簡單的程式碼，暫時不管其他奇怪的五四三</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-01 23:18:13</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-01/"/>
      <updated>2020-10-01T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-01/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>第１２週課程<br>
練習用 SCSS、BABEL、jQuery<br>
直播隨意聊</p>
<h3>明天的預定進度</h3>
<p>11 週作業動工，希望可以做出一點雛形ＱＱ</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>感覺前端框架真的滿多可以利用的工具～<br>
覺得 SCSS 有繼承跟變數的概念真的很方便～<br>
下午出門去都會公園走走，但是今天因為換季的關係，一直狂過敏打噴嚏，超不舒服的ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>風大空氣乾燥的季節，就是過敏流鼻水的日子ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-04 23:16:27</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-04/"/>
      <updated>2020-10-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-04/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>第十一週影片ＰＨＰ看完～</p>
<h3>明天的預定進度</h3>
<p>看直播</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>順過一遍ＰＨＰ的邏輯之後，有比較通了～<br>
但沒想到連假還是沒有把作業做完ＱＱ<br>
希望之後可以把作業順利完成</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>現實是很殘酷的ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-06 00:52:43</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-06/"/>
      <updated>2020-10-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-06/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>把 Twitch API 新版影片看完</li>
<li>SASS 助教的補充影片</li>
<li>寫公司的 Ajax API 串接</li>
</ul>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天第一次在專案寫串接 api，很快就拿到資料了，但是顯示一直有問題，就是只會顯示最後一筆的畫面資料，今天整天都在弄這個ＱＱ<br>
最後下班前問了幾個同事，結果大家都對 JavaScript 不太熟哈哈，因為都寫 jQuery ，同事都問我為啥不用 jQuery 就好，就有點任性想寫 JavaScript 呀～ＸＤ<br>
可能很簡單學習，下次再用用看。</p>
<p>最後發現是在 for 迴圈內最後 append 的資料少了一個 ＋ 把自己加進去，資料就正確顯示了</p>
<p>回家就看了 Twitch API 新版影片，看完之後覺得自己目前程度，可以寫到第一個版本，優化過的版本還不是完全懂，但有些已經可以理解了</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>因為一個符號或分號 debug 整天，覺得有點心虛啊ＸＤ 就默默地加班了一下</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-07 23:24:14</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-07/"/>
      <updated>2020-10-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-07/</id>
      <content type="html">
        <![CDATA[
      <h1>上班充滿了程式話題，覺得開心</h1>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天就是上班用了 UI 套件 adminlte 複製貼上一個前端程式版面，拿來做成後台的畫面，本來是想要用 Google 搜尋到某位大神寫的<a href="https://blog.techbridge.cc/2018/04/28/antd-and-admin-website/">打造後台管理系統的好幫手：Ant Design</a>這個套件，但是還沒學到 React ，不知道從何下手，不然介面覺得很漂亮哈哈<br>
有想要偷偷超前先看之後幾週的影片學一下怎麼用ＸＤ</p>
<p>然後今天有請教公司全端的工程師，關於後台資料串接是要用框架還是用原生的 PHP ，他建議我們用原生的就好，因為公司比較多人會，後續也比較好維護。<br>
這個應該跟我還沒寫的第 11 週的作業有相關，到時候就可以看同事的程式碼寫得如何，去攻擊看看哈哈。</p>
<h3>明天的預定進度</h3>
<p>感覺訂了明天進度，但是好像都不會照著執行，都是看當天身體狀態來決定的耶ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>昨天晚上幾個人跟某位資工系的學弟一起聊天，聊到程式東西，我就想起來去年他大一在準備期中考的時候，我有幫他看過老師出的作業，好像是寫一個 for 迴圈，那時候我一直不知道 <code>if( a &gt;= 0 &amp;&amp; a &lt;=10 ) {執行 for 迴圈內容... }</code> ， a 要寫兩次才會成立，不是有<code>&amp;&amp;</code>了為啥還要後面在寫一遍啊？然後就常常卡在這種對工程師來說是常識的東西。<br>
到前幾天，真的在工作上寫出 JavaScript 串接 API 的程式，就突然有一種，「哇！原來我也成長到今天這個樣子了」的感覺，雖然還不是很厲害，作業還是一直卡著還沒生出來，但是我也是更接近理想中的自己的樣子了吧＾＾</p>
<p>回顧這幾個月寫程式的歷程，從覺得 Bootstrap 有點難理解，到真的應用在工作上，開始覺得簡單，這種成長是別人拿不走的。<br>
各位同學們我們一起加油吧！希望我們都可以成功轉職，找到屬於我們的一片小小天地～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-09 22:30:58</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-09/"/>
      <updated>2020-10-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-09/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>第 11 週作業，修改資訊安全漏洞</li>
<li>了解 webpack 的使用方式</li>
<li>學了如何用餘數無限循環圖片</li>
</ul>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">changeIndex</span><span class="token punctuation">(</span><span class="token parameter">change</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  ta <span class="token operator">=</span> <span class="token punctuation">(</span>a <span class="token operator">+</span> change <span class="token operator">+</span> a<span class="token punctuation">.</span>menu<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token operator">%</span> a<span class="token punctuation">.</span>menu<span class="token punctuation">.</span>length
<span class="token punctuation">}</span></code></pre>
<h3>明天的預定進度</h3>
<p>寫完 11 週第一個作業 ˊˇˋ</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>課程影片已經看到第 13 週，有發現自己很逃避寫ＰＨＰ的作業ＸＤ<br>
給自己鼓勵就是至少有老師給的 PHP 程式碼可以參考，別逃避了，趕快面對痛苦努力進入 12 週作業吧～～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>覺得別人說的話是壓力，就表示自己已經不想進步開始想逃避了。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-11 22:37:23</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-11/"/>
      <updated>2020-10-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-11/</id>
      <content type="html">
        <![CDATA[
      <h3>六日兩天的課程完成了什麼？</h3>
<p>還是卡在 11 週作業呀呀呀， 做到「修正問題：實作留言與會員的 join」，但是我發現我 comment 裡面沒有 username 的欄位資料，所以出現錯誤，突然不知道該怎麼處理ＱＱ<br>
還在研究中<br>
昨天整個忘記發心得就過了半夜 12 點，嗚嗚</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>一早起床就開始寫作業，但是 10 點跟別人約了下星期六要去幫忙表演的服裝試穿，就又中斷了學習時間。下午去看了南區的房子，之前覺得買房好像離我很遠，突然就來到簽約跟簽訂金的事情，很不真實的感覺。到了晚上要去上課，寶貴的假日時間就這樣過去了...<br>
其實也不知道為啥自己身上會攬了這麼多事情，但自己就每個都想要兼顧，不想放掉其中一個。但每個做的都有點差強人意的感覺，可能其實沒有很差，但是也好不到哪裡去，陷入在一個猶豫不決的情緒中ＱＱ<br>
雖然周圍的事情都在告訴我要放掉課程，先做好其他的事情，但是我還是想把課程跑完，每天做著微小的跟課努力對抗著。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>自己用功多少時間，這些東西都不會從你的腦袋被拿走。<br>
現在能做的就是把這些知識的東西盡量塞進腦袋裡面。<br>
課程影片進度跑到 13 週了，先求廣度的知識，之後再龜速實踐啊ＱＱ<br>
相信我打敗 11~13 週的 PHP 大魔王，就會進入一個飆速學習的狀態 XD</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-12 23:57:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-12/"/>
      <updated>2020-10-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-12/</id>
      <content type="html">
        <![CDATA[
      <p>卡...本來想好好讀書，殊不知看一看竟然累到睡著了ＱＱ<br>
還好有在 12 點之前醒來，不然又少了一個綠點點～</p>
<p>今日進度，還沒找出作業的ＢＵＧ，希望明天能找出來&gt;&lt;</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-13 23:54:36</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-13/"/>
      <updated>2020-10-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-13/</id>
      <content type="html">
        <![CDATA[
      <p>今天遇到了一件很震撼的事情...心情備受打擊。<br>
雖然知道自己很不會看人，但是很不想承認自己看走眼的事實。<br>
花了兩年看清一個人，也是很夠了。</p>
<p>現實生活的殘酷往往會幫你上了一課。<br>
但是我想我還是學不會看人這個技能。<br>
只能接受自己容易被唬的個性。</p>
<p>咁，明天一定會更好。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-14 19:30:26</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-14/"/>
      <updated>2020-10-14T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-14/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>作業卡在的 left join 結果發現是資料庫的欄位值，沒有改成 NULL 的關係，所以傳不進去，看同學的資料庫怎麼設定就照著修改了一下ＸＤ<br>
總算是又可以往前進了～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-15 22:52:41</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-15/"/>
      <updated>2020-10-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-15/</id>
      <content type="html">
        <![CDATA[
      <p>看了助教講解的 CSS 優化影片，但是好像不是能完全明白。<br>
覺得這個課程美妙的地方就在於，可能真正轉職之後再回來看，會有更深一層的體悟～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-16 22:43:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-16/"/>
      <updated>2020-10-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-16/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>寫完第 11 週的第一個作業</p>
<h3>明天的預定進度</h3>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<h3>今天一個重要的領悟是什麼？</h3>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-17 23:24:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-17/"/>
      <updated>2020-10-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-17/</id>
      <content type="html">
        <![CDATA[
      <p>今天看了 PHP 資訊安全相關的影片，原來攻擊手法有這麼多，哈哈 XD</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-18 22:45:29</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-18/"/>
      <updated>2020-10-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-18/</id>
      <content type="html">
        <![CDATA[
      <p>今天本來忙完一天回來想說要認真一波，結果一回到宿舍發現房門開一半...<br>
本來以為只是自己門沒鎖好，看了房間一圈東西也沒丟。<br>
但是朋友跟我說要小心有人有鑰匙開門闖空門之類的，越想越覺得可怕<br>
明天晚上跟房東約看監視器，希望只是自己粗心大意ＱＱ</p>
<p>心情受影響整個不敢看書了...希望能睡個好覺ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-19 22:14:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-19/"/>
      <updated>2020-10-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-19/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>今天練習把前端版面切完，使用 Bootstrap 跟相關的套件，練習看懂別人寫的 jQuery ，然後想辦法應用在自己要加功能的地方。</p>
<h3>明天的預定進度</h3>
<p>哎呀呀<br>
突破不了的ＰＨＰ卡關大魔王＝＝</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天想要做一個輸入文字後按 Enter 會變成小按鈕的標籤功能，但是實作到了監聽 Enter ，要加上按鈕跟 class 就出錯了...整個不知道是什麼問題ＱＱ</p>
<p>卡在這個地方太久了，好像一直是不懂要把東西加在哪裡<br>
就是差那個熟練度吧！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>做行銷有厭煩的時候，也許以後寫程式也遇到。<br>
不過一直有新的東西可以學，應該是我覺得最好玩的地方吧<br>
遇到一個想要做的功能，真的會努力想辦法找資源找方法做出來＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-21 23:40:10</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-21/"/>
      <updated>2020-10-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-21/</id>
      <content type="html">
        <![CDATA[
      <p>可惡惡惡惡~~~今天第一次去吃海底撈，是老闆請客，感謝老闆跟同事們都很體貼地包容我吃素 XD<br>
但是說真的我覺得就是青菜和菇的火鍋 XD</p>
<p>今天看 react，覺得有聽但是沒有很懂，哈哈</p>
<p>看了一下大家的心得感覺好像人數變少了 XD 也真的很多人卡在 11 周~13 周</p>
<p>我自己也還在 11 周努力中，目前只完成了第一個作業</p>
<p>今天想了想決定先往之後幾周的作業前進，先跳過這些作業卡很久的地方，以課程廣度為主要方向。</p>
<p>阿拉拉拉~~~但是我有比較會用 JavaScript 跟 callback function 了喔~</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-22 23:40:23</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-22/"/>
      <updated>2020-10-22T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-22/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>以為做完了第 11 週第一個作業，結果還有使用者分級功能要做ＱＱ<br>
覺得頭有點昏...以為可以跳過一週作業的說ＸＤ</p>
<p>只能告訴自己要努力了</p>
<p>有練習用 JS 跟 jQuery 的選擇器，早上上班看了很久還是不知道，結果同事最後傍午找到怎麼寫的ＸＤ<br>
感覺有越來越熟悉了</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-23 22:15:12</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-23/"/>
      <updated>2020-10-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-23/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>今天問了同事怎麼做到頁面權限的問題，原來只要在程式一開始執行的時候，就先判斷他的權限就好了<br>
本來以為作業又要卡關的，沒想到就問個問題就解答我心中的疑惑哩。</p>
<h3>明天的預定進度</h3>
<p>明後兩天要去南投，算是轉換這期間來的心情<br>
對於取捨搖擺不定，也是需要自己最後做下決定<br>
想完成的事情，卻因為把別的事情放為優先，導致今天這種卡關的局面<br>
如果不處理這種想法，將來一定還是會遇上同樣的問題。<br>
也許是怕自己做下決定之後會後悔，</p>
<p>只能告訴自己，做了決定就要全力以赴面對，那些課題也會一一突破。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>某人說我很需要心靈雞湯文，但我只想說我只是人，很頑強卻也脆弱，有時候只是想要獲得一股支持的力量而已。<br>
但我的表達很弱，所以他一直不明白我的點。<br>
哈哈</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-24 22:13:30</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-24/"/>
      <updated>2020-10-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-24/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>11 週努力中<br>
卡...在 PHP 要新增功能就不知道怎麼做了 資料丟來丟去已經搞不清楚了 囧<br>
找 bug 找到眼睛酸酸<br>
我的進度啊ＱＱ</p>
<h3>明天的預定進度</h3>
<p>推進 11 週作業<br>
決定明天來參考同學的作業怎麼寫＋看參考範例了</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-25 22:51:13</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-25/"/>
      <updated>2020-10-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-25/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>PHP 作業中<br>
看了 JavaScript ES6 的 hosting</p>
<h3>明天的預定進度</h3>
<p>決定後端 php 開啟抄襲大法＝＝<br>
只求大概理解，不求完全懂<br>
跳到前端的部分自己做，趕著繳作業哩</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-26 22:53:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-26/"/>
      <updated>2020-10-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-26/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>靠著今天一天的生理假，抱著病痛把 11 週的作業一上傳完成，資料庫也設定好了ＱＱ<br>
hw2 的作業就跟著影片做到一半哩<br>
希望可以趕快完成邁入 12 週</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天終於作業有點進度了，沒有在 bug 中打轉，感動ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>好房子總是會擦身而過啊ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-27 23:34:45</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-27/"/>
      <updated>2020-10-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-27/</id>
      <content type="html">
        <![CDATA[
      <p>生理期讓身體休息一下，明天繼續加油！！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-29 23:04:05</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-29/"/>
      <updated>2020-10-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-29/</id>
      <content type="html">
        <![CDATA[
      <p>影片課程進度跑到 14 週，系統架設<br>
之前有自己買網域跟買網址架設過，不過是用 wordpress 架設的。<br>
有些概念有點熟悉，希望不要在作業又卡住了 XD</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-30 21:13:17</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-30/"/>
      <updated>2020-10-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-30/</id>
      <content type="html">
        <![CDATA[
      <p>今天調整了前端樣式的版面，去看了 PHP 的 FOREACH 怎麼使用。覺得它拿來放重複版面的資料非常好用。還有跟公司的同事討論了一下 CI 的框架。今天突然間看懂了那些程式碼的內容，就發覺後端也沒有想像中的如此困難。但也可能是我沒想到資訊安全部分的問題，可能沒有我自己所想像中的簡單。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-10-31 22:39:46</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-10-31/"/>
      <updated>2020-10-31T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-10-31/</id>
      <content type="html">
        <![CDATA[
      <p>今天跟高中同學約出來聊了她工作上的事情，第一次發覺原來她在工作上遇到這麼多困難，還有職場性騷擾跟言語霸凌，雖然選對了公司，但是主管人不好就會壞掉一鍋粥的感覺@@<br>
本來是個傻傻天真的女生，現在竟然快得憂鬱症，就覺得事情很嚴重，還好她已經走出最黑暗的時候。<br>
她一直說想回到高中的時候，我也只能說我們回不去了 QQ</p>
<p>時間一直在往前推移，自己也感覺有點被現在的公司綁著，不知道下一步是繼續待著轉換程式部門，還是破釜沉舟離職重新投履歷。</p>
<p>本來是想工作個三個月手頭有點錢再全職學習沖一波，怎知人生給你一槍回馬刀殺出個前任來討錢，現在又被迫變成只能繼續賺生活費兼三分之一學習狀態 QQ</p>
<p>我...我真的很想跟上進度阿~~~<br>
但是題外話，目前公司同部門的菜鳥工程師也會教我公司官網 php 的東西，所以其實還是有在持續進步中<br>
只是作業卡很久我真的覺得自己很廢==</p>
<p>2020 是一個多事之年，也是我人生成長最快速的一年。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-01 22:41:25</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-01/"/>
      <updated>2020-11-01T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-01/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>把 11 週繳出去了！邁入 12 週的作業！</p>
<h3>明天的預定進度</h3>
<p>寫作業</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>有比較通 php 的概念還有引入方式，雖然作業都是跟著 Huli 的影片打，但是也是有學到那些抽象的架構概念，有越來越清楚的感覺。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>要面對明天月會上台報告的壓力哩ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-03 22:48:15</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-03/"/>
      <updated>2020-11-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-03/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>Bootstrap 切版中</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>有遇到一個狀況就是有自訂最大寬度的時候， Bootstrap col 會有預設的 padding 無法貼齊版面，是大概知道好像可以做自己的 Bootstrap 版面樣式，但是實際上要怎麼做還需要研究一下。<br>
<a href="https://wcc723.github.io/development/2020/10/08/custom-bootstrap-style/">手把手自訂你的 Bootstrap 樣式</a></p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>實際要把 webpack 應用起來覺得有點困難ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-04 22:30:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-04/"/>
      <updated>2020-11-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-04/</id>
      <content type="html">
        <![CDATA[
      <p>今天也是研究 Bootstrap 排版的問題，在 RWD 會有網頁左右滑動的問題，把網頁內容全部註解掉，還是會左右晃動==<br>
因為只有那一頁會這樣，所以見先暫時不管它<br>
但是還是好想找出問題點在哪裡 QQ<br>
最近比較看得懂混著的 php + html 程式碼了<br>
開始看 後端怎麼製作 api 的影片</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-05 23:27:30</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-05/"/>
      <updated>2020-11-05T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-05/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>看 API 的影片覺得不是很懂...所以自己練習了一遍<br>
但有些地方不知道為什麼這樣輸出</p>
<h3>明天的預定進度</h3>
<p>12 週作業～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-06 23:12:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-06/"/>
      <updated>2020-11-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-06/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>看 swiper 文件，怎麼用輪播的方式加上影片自動播放<br>
https://swiperjs.com/</p>
<p>CSS calc()应用场景 - Web 前端工程师面试题讲解 系列影片教學</p>
<p>api 相關影片看完</p>
<h3>明天的預定進度</h3>
<p>開始寫 week12 作業</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-08 23:00:21</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-08/"/>
      <updated>2020-11-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-08/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>12 週作業 完成前端畫面<br>
剩下 jQuery 做串接～</p>
<h3>明天的預定進度</h3>
<p>明天看醫生回診～先看影片</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>有時候以為自己會不是真的會<br>
有時候以為簡單其實不簡單<br>
卡在一個自我懷疑跟目前真的有在進步的狀態中<br>
加油！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-09 19:28:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-09/"/>
      <updated>2020-11-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-09/</id>
      <content type="html">
        <![CDATA[
      <p>看醫生回診，休息一天。<br>
但今天有抽時間看了 CKEditer 怎麼使用，前端顯示成功，剩下後端需要串接資料哩～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-10 23:30:02</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-10/"/>
      <updated>2020-11-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-10/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>寫 12 週作業中～</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>本來以為前端介面滿簡單的，但是好像需要考慮到很多小細節～<br>
按下按鈕之後要執行什麼內容，都需要考慮一下 JavaScript 怎麼執行</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>不要看輕自己，其實自己是很有價值的。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-11 23:45:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-11/"/>
      <updated>2020-11-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-11/</id>
      <content type="html">
        <![CDATA[
      <p>今天公司主機又發生斷線的狀況，大概一個小時，就跟別的部門的同事聊天，聊著聊著就決定開一個前端框架讀書會，要研究 React ，星期五上班分享交流一下。</p>
<p>所以今天跟明天晚上預計都在看 React 課程的影片<br>
希望我可以分享出一點東西ＸＤ</p>
<p>跟他們分享我之前寫的 Git 筆記被讚美說寫得很詳細ＸＤ<br>
有個同事就跟我分享 Git 另外兩個很常用的指令</p>
<h3>git stash save</h3>
<p>Git 暫存<br>
可以先切去別的分支，開發完成之後再切回來（就不用一直 commit）<br>
參考<a href="https://backlog.com/git-tutorial/tw/reference/stash.html">Stash（暫存）</a></p>
<h3>git cherry-pick</h3>
<p>撿別的分支的 Commit 過來合併<br>
參考<a href="https://gitbook.tw/chapters/faq/cherry-pick.html">【狀況題】如果你只想要某個分支的某幾個 Commit？</a></p>
<p>有想要一起精進的同事，會激發自己繼續學習的熱誠～<br>
也感覺自己好像邁向轉職更近一步惹</p>
<p>但我的作業目前還停留在 12 週ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-13 23:26:56</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-13/"/>
      <updated>2020-11-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-13/</id>
      <content type="html">
        <![CDATA[
      <p>今天晚上回診去醫院檢查，意外發現血糖比較高ＱＱ<br>
還有蛋白質吃太多（正常 4.1 以下，我 4.7）<br>
但是我吃素+體重過輕耶，這讓我震驚惹ＱＱ</p>
<p>醫生說是天生腸胃比較會吸收的關係，血糖要半年追蹤看看數值的變化。</p>
<p>然後說要開 React 讀書會的同事，今早沒來上班，下午很帥氣的來簡單交接一下就離職了＝＝</p>
<p>覺得學習還是要靠自己努力卡實在～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-15 20:50:40</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-15/"/>
      <updated>2020-11-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-15/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>今天是閉關狀態的第二天，試著想自己把 jQuery 的 TODO LIST 寫出來，不過一直想到怎麼用 JavaScript 寫，處在混亂狀態中<br>
已把前端畫面做好，資料怎麼儲存在後端還要再想一下。</p>
<h3>明天的預定進度</h3>
<p>明天晚上是回診日ＱＱ</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>又是一種還卡在進度的狀態ＱＱ<br>
跟 Huli 說得看影片是最偷懶的學習，自己好像懂，但是要寫又寫不出來的狀態中<br>
維持這種狀態好久了囧<br>
雖然上班會用到前端的東西，但是非必要使用就會忘記。<br>
短期內要快速提升只能靠自己下班時間多跟課<br>
卡在身體狀況不允許熬夜的情況下，學習時間真的超少＝＝<br>
12 跟 13 週作業繳出去，就要開始試著寫看看 React 了！</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>已經決定領完年終就離職跳槽，希望在年底前把履歷準備完成，順利在過年前拿到轉職的 offer<br>
不管學習狀態如何，都想先出去試試看了拉ＱＱ<br>
雖然網頁部門的主管跟我說，想走的時候可以跟他談談看轉去網頁部門，但是還是想去試試看有框架的公司ＸＤ</p>
<p>因為我現在直屬上司是老闆，轉部門整個跟老闆意願不符合，應該居率滿小的。<br>
然後我真的不想再聽到那句「行銷人首先就是要會行銷自己」，展現自己的才能讓公司的人看見之類的鬼話，如果真的是這樣，公司流動率就不會在 7 成了吧＝＝</p>
<p>不小心的小小抱怨ＱＱ</p>
<p>喜歡這週隨意聊的這段話<br>
『<br>
可能沒有特別做什麼，就是一直寫然後一直撞牆<br>
卻撞著撞著覺得自己好像有些進步<br>
接著某一天你就會突然開竅了，然後你就再也回不去了<br>
看到其他人卡住，你就會慢慢忘記當初卡住的感覺<br>
對你來說寫 React 會像吃飯喝水那樣自然，以 state 為核心的思考方式會深深印在你的腦海中<br>
這就是學習神奇的地方，它沒有回頭路<br>
想要「忘記學會」一件事情比「學會」還要難<br>
』</p>
<p>現在工作已經可以講行銷的語言跟程式的語言，對於跨部門溝通比較沒有問題（但是對老闆就有點問題哈哈）。<br>
也回不去當初連 HTML 都覺得困難的狀態了。<br>
謝謝這一年努力學習的自己，也包容這些時間偷懶的自己<br>
決定愛自己的優點跟接受自己的缺點，我覺得也是通往提升自己自信心的一條指標。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-16 22:02:16</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-16/"/>
      <updated>2020-11-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-16/</id>
      <content type="html">
        <![CDATA[
      <p>12 週作業 todo list 新增刪除、計算數量功能寫完<br>
Filter 寫一半 還在思考怎麼做會比較好</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-18 23:30:35</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-18/"/>
      <updated>2020-11-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-18/</id>
      <content type="html">
        <![CDATA[
      <p>今日下班後去做第三次復健課程，解決了自己長久以來的頭痛跟眼睛痛的問題，這個問題已經嚴重影響我的生活，包括日常看東西都超痛的</p>
<p>原來不是眼睛也不是頭的問題<br>
純粹是長期姿勢不良造成頭部與肩緊緊繃</p>
<p>以前是知道自己肩膀很緊，但沒想過這是問題的根本<br>
希望可以慢慢把自己治療到跟正常人一樣的狀態（至少不要長期每天頭痛眼睛痛）<br>
而且意外的發現臉的皮膚變好了哈哈</p>
<p>今天課程進度只有研究簡單的版面問題，因為想 javaScript 頭腦太痛了，今天 12 週作業先ＰＡＳＳ～<br>
看了 React 教學文件，以前 html、css、javaScript 都是分開寫的<br>
現在要變成寫在一起，感覺有點不習慣的觀念ＱＱ<br>
但是覺得好像滿方便的，希望可以努力進度ＧＯＧＯＧＯ～～～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-19 22:55:29</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-19/"/>
      <updated>2020-11-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-19/</id>
      <content type="html">
        <![CDATA[
      <p>今天又將 Todo List 重新寫了一遍，同事教我 ＰＨＰ 後台模組化的東西，模組化之後只要用布林值控制開關功能就好了。<br>
覺得這樣的模組化開發有好有壞，可以快速的開發，但是要客製化卻有滿多限制的，只能做出一些取捨。<br>
但是說不定其實有更好的開發新功能方式，只是我們兩個菜鳥目前還沒有想到哈哈。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-21 23:43:12</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-21/"/>
      <updated>2020-11-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-21/</id>
      <content type="html">
        <![CDATA[
      <p>今天回到手寫筆記的狀態了~把 React 課程邊聽邊筆記下來，覺得吸收比起只看影片好很多，只要不偷懶沒寫，這個方式是最適合自己吸收的 XD<br>
這樣開始自己練習的時候，就不會東忘西忘<br>
之後打算把自訂安裝 React 的步驟也記起來，之後忘記也有東西看了~YA~^^</p>
<p>覺得是吸收效果好的一天~</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-23 23:10:41</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-23/"/>
      <updated>2020-11-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-23/</id>
      <content type="html">
        <![CDATA[
      <p>今天放鬆一下自己，看看課外讀物!! &quot;下班後一小時的急速學習攻略&quot;</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-24 22:40:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-24/"/>
      <updated>2020-11-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-24/</id>
      <content type="html">
        <![CDATA[
      <p>開始製作履歷，都在公司用切版的東西，對 RWD 越來越熟悉了~!!!但是明天要寫 jQuery 不知道寫不寫得出來。現在課程進度一直沒進展覺得有點心慌慌~</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-27 23:04:26</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-27/"/>
      <updated>2020-11-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-27/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>12 週第二題，寫編輯功能寫不出來，不知道可以動態抓哪裡的值，所以打算把清空 todo 跟篩選 todo 做完，編輯先跳過之後回來補。把第一題寫完就可以繳作業哩。</p>
<h3>明天的預定進度</h3>
<p>ＫＯ 12 週作業！</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今天第一次用了 Git stash save 的暫存指令同步課綱，完成同步之後切回來作業，發現東西是上一次 commit 的東西，有點小緊張，後來找到回復暫存指令 git stash pop<br>
所有寫到一半的內容又回來了～ＹＡ<br>
雖然寫編輯 TODO 的內容寫不出來很灰心，但是卻對這種微小的進步感到開心。<br>
這可能就是寫程式最奇妙的感覺了哈哈。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>昨天偷偷私訊老師聊了一點點東西，我覺得自己是卡在公司這個環境裡出不來。<br>
雖然工作內容很雜很多常常加班，但是唯一優點就是同事人很好去問問題幾乎都願意教你。<br>
善用這種環境，努力提升自己的程式能力ＱＱ<br>
真的很想去有比較完整開發流程的公司，或是很多工程師同事的環境。<br>
但是目前自己的能力可能去了也是當砲灰，承受不住那種被質疑的感覺。<br>
一邊工作一邊去面試吧！也能知道自己缺了什麼。<br>
目前就是切版還行，程式邏輯還是不太強。<br>
加油！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-11-29 23:04:17</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-11-29/"/>
      <updated>2020-11-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-11-29/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>12 週 作業二 完成～整個開心拉哈哈哈<br>
但是花超多時間才完成覺得自己有夠笨的！</p>
<h3>明天的預定進度</h3>
<p>應該也是龜速學習的一天，繼續看 React</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>本來昨天想說有一整天的假日可以好好學習，然後星期五晚上就熬夜看了全職高手第二季到半夜三點，床太舒服睡到中午才起床，意外地睡了一個好覺。<br>
下午跑回宿舍接我家的兔兔到朋友家，就這樣一天過去了，結果就是星期六都沒進度 QAQ</p>
<p>今天好不容易把 12 週第二個作業寫完了，還是邊偷看老師的寫法慢慢摸索出來的方式，作業寫了一堆堆註解，但是想到有完成就好感動 (哭)。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>今天體認到自己真的不聰明，這個 12 週第二個作業，我花了一整個上班日（公司官網 cpanel 掛掉一整天，等待 MIS 處理，所以上班沒事就寫個作業）<br>
加上這個假日研究才寫出來，就像之前幫公司寫了不同按鈕按下去 ajax 不同資料，我也寫了一整天ＱＱ</p>
<p>但是原生 CSS 排版 RWD 目前已經有點水準哩，只差那個程式邏輯需要多練練。<br>
雖然很慢，但還是一點一點一滴一滴龜速進步中。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-01 05:00:58</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-01/"/>
      <updated>2020-12-01T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-01/</id>
      <content type="html">
        <![CDATA[
      <p>早上 4 點多起床讀書準備把 12 週作業寫完！<br>
終於有一天可以文青的講說「叫醒我的不是鬧鐘，是夢想。」</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-02 00:23:10</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-02/"/>
      <updated>2020-12-02T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-02/</id>
      <content type="html">
        <![CDATA[
      <h3>明天的預定進度</h3>
<p>SASS 切版切起來</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>早上被夢想叫起床之後，研究了兩個小時，終於搞懂ＰＨＰ怎麼製作出ＡＰＩ的<br>
我還是用手寫抄一遍才理解的。<br>
這可能就是自己學習程式概念的最好方式吧哈哈，但是真的滿沒效率的感覺。<br>
不過懂了之後，就像老師之前過說的，就回不去不懂的狀態了～真的很神奇</p>
<p>晚上尾椎不知道為什麼超痛，就沒什麼進度ＱＱ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>明天打算帶自己的 Mac 去公司，執行這個月要切版的內容，還是自己的筆電比較熟悉。<br>
直接用 SASS 切版多練習，然後看看能不能應用上 Webpack 之類的東西這樣～</p>
<h3>獲得一個偽類屬性職稱</h3>
<p>前幾天老闆突然叫我們同部門的三個人去申請公司名片，問了老闆我們名片上的職稱要寫什麼，他說就我們開心就好，最好寫個你們會想待久一點的職稱。</p>
<p>然後我就說，我要寫前端工程師，拿個名片掛名也爽ＸＤ<br>
但是其實自己心裡面很清楚，實際工作內容一點都不是這樣ＱＱ<br>
同事跟我說，你這樣之後就不是零經驗的人，有經驗的比較好跳槽<br>
這個偽類屬性職稱好像還不錯</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-03 23:42:34</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-03/"/>
      <updated>2020-12-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-03/</id>
      <content type="html">
        <![CDATA[
      <h2>獲得偽類屬性 前端工程師名片</h2>
<h3>今天的課程完成了什麼？</h3>
<p>練習切一個日本網站的版型</p>
<h3>明天的預定進度</h3>
<p>下班晚上回沙鹿拿過冬的衣物ＱＱ</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>參考日本網站練習切版，覺得學到滿多東西的，也看了他們是怎麼寫網站的。<br>
好像比較常用 min-width 600px 做斷點，然後圖片會分成大小版。<br>
比較特別的是，他們會為了版面好看，把文字斷點做成不同的圖片，然後再用 h2 之類的標籤包起來， alt 屬性就寫 h2 的文字內容。<br>
像是這樣</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h2</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>home-intro__head<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span>
    <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://nozakigumi.co.jp/cms/wp-content/themes/nozakigumi/img/home/img_intro01.png<span class="token punctuation">"</span></span>
    <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>豊かな未来に向けて挑戦し続ける<span class="token punctuation">"</span></span>
  <span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h2</span><span class="token punctuation">></span></span></code></pre>
<p>第一次看到這種寫法，比較好奇的是這樣 SEO 會有效果嗎ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>果然假的不能真<br>
前幾天老闆說想寫什麼就寫什麼職稱的名片<br>
想說冒充一下前端工程師<br>
結果名片...</p>
<p>結尾少個 r 真的不知道該說什麼惹ＸＤ</p>
<p>Coderbridge 部落格更新已經是 9 月的事情哩，原來我已經怠惰了這麼久嗎ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-05 23:17:26</title>
      <link href="https://blog.roroiii.com/posts/lidemy/020-12-05/"/>
      <updated>2020-12-05T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/020-12-05/</id>
      <content type="html">
        <![CDATA[
      <p>這兩天在惠蓀堂舞蹈發表演出，進度休息兩天。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-08 23:47:24</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-08/"/>
      <updated>2020-12-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-08/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<p>12 週作業完成</p>
<h3>還記得哪些內容？反思今天的學習成果</h3>
<p>今日反思<br>
自己對程式的邏輯越來越清楚，對沒有框架的程式碼，維護跟閱讀都比較沒有問題了。<br>
寫過第二遍的程式，寫出來的時間也變得很快哩。</p>
<p>今天跟同事學了一下公司的前端切版，發現其實沒有很難，程式計畫課程教的比較扎實ＸＤ<br>
還有同事教了我公司串接ＧＡ的 API 程式是怎麼寫的，那幾隻程式的寫法跟老師的寫法很像，感覺是滿有維護邏輯概念的人寫出來的，只是年代久遠作者已不可考。</p>
<p>沒想到菜菜的工程師每天回家都會看程式的書 2 個小時，真的感覺好認真不愧是要當爸的人。</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>公司沒有用框架真的好吃虧啊，沒有人會用 React 跟 Express ，SASS 跟 Webpack 也沒有，Git 也沒有用到<br>
所以一直徵不到工程師來報可能是這個原因，說好的都不來ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-11 06:32:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-11/"/>
      <updated>2020-12-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-11/</id>
      <content type="html">
        <![CDATA[
      <p>今天又是被夢想叫起床的日子<br>
早上 6 點醒了想到自己的進度就覺得擔心<br>
同學在講 React 都覺得好陌生啊根本還沒開始實作ＱＱ</p>
<p>但是又想把基礎打好，把作業一步一步完成<br>
可能自己就要花比別人多時間才能學會吧<br>
但是一切都是有可能滴，加油！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-18 21:27:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-18/"/>
      <updated>2020-12-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-18/</id>
      <content type="html">
        <![CDATA[
      <h3>今日心得與學習近況</h3>
<p>好久沒有打開自己的筆電了ＱＱ<br>
果然學習最難的事情跟助教說的一樣，就是強迫自己打開筆電，還有打開 vscode 的時候。<br>
最近上班時才開始聽 podcast ，只聽到辣個小明禿了第二集，然後不知道為什麼，我開始聽沒多久就有同事找我講話或是講事情，所以過了快一個月都還沒聽完第二集好瞎啊ＸＤ<br>
但是真的滿舒壓的～</p>
<p>這個星期接獲網頁部門支援案件切版的請求，所以就幫忙切了 5 頁順便寫了一個簡單的 jQuery 判斷顯示元件。<br>
至於自己的作業只差一步就完成繳出 12 週作業感到ＱＱ</p>
<p>不知道自己的能力到底是怎麼樣，很想出去面試看看，但是感覺自己只有切版還行，邏輯好像又不到很厲害，有點猶豫不決很怕被打槍ＸＤ<br>
頭銜掛個工程師一直是自己的小小夢想～繼續努力囉！</p>
<p>到 12 月底這段時間準備忙搬家打包，要到新家去哩～<br>
希望到了新家之後持續穩定的前端學習之旅^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-12-25 12:38:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2020-12-25/"/>
      <updated>2020-12-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2020-12-25/</id>
      <content type="html">
        <![CDATA[
      <h3>很激動的一天 (應該說一個中午?!)</h3>
<p>剛剛看老師 PO 第 14 週網域的折扣碼只能用到年底，趕快先把網域買一買，順便收信的時候，看到自己 8 月寫的部落格竟然有人留言鼓勵，真的好感動喔喔喔喔喔 QAQ<br>
激動到瞬間決定用公司電腦登入一下學習系統發表一下心得!!</p>
<p>我真的進度卡好久好久了喔喔喔喔喔喔<br>
雖然上班會一直開編輯器來用<br>
但是除了上班開電腦之外回家都沒再打開我的筆電惹 QQ<br>
昨天要用 JavaScript 寫抓一個 input 的 value 竟然寫不出來，真的好慘<br>
但是看當初覺得很難的老師的範例，卻又覺得變得很好理解，到底是怎麼回事呢 XD</p>
<p>等到一月中搬完家，一定繼續在新家好好努力 coding 作業~!!</p>
<h3>上班幾個月有感</h3>
<p>雖然還不是全職寫程式，但是這幾個月上班的時間以來，覺得老師教的觀念真的很扎實，同事問我什麼是先進先出的演算法是什麼我回答不出來，只能貼給他 https://visualgo.net/zh/sorting?slide=1 請他自己研究<br>
但是我真的記得老師有教過啊 XD<br>
還有一些很抽象的概念的東西，我都聽得懂他們在講什麼，自己現在也算是切版小能手哩。<br>
算是半隻腳踩在工程師的領域上了吧<br>
再接再厲囉~!! 同學們一起加油 GOGOGO~~~~!!!</p>
<p>聖誕節快樂^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-01-06 12:21:22</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-01-06/"/>
      <updated>2021-01-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-01-06/</id>
      <content type="html">
        <![CDATA[
      <h3>清清白白的 1 月進度報告 QQ</h3>
<p>這個月的重大決定<br>
1.這個星期搬完家終於可以告別大大小小充滿箱子的擁擠宿舍，到新家有桌子可以用來讀書了 QQ<br>
2.昨天滑開 104 發現自己現在的程式能力也是有相對應的工作可以做，可能設計公司要求不高的，可以先投投看。<br>
3.老闆讓我理智線斷裂，決定提離職找新工作了!!!!!<br>
4.希望趕快告別腳踩一半前端工程師的狀態 QQ<br>
5.多工真的不會讓你薪水變高，但會讓你變操提早爆肝<br>
6.EP4. 恩而且那些工程師也沒我英俊就是了-目前聽到這裡，好療癒阿 QWQ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-02-02 12:09:27</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-02-02/"/>
      <updated>2021-02-02T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-02-02/</id>
      <content type="html">
        <![CDATA[
      <p>今天實際把 scss 應用在開發專案上，覺得很喜歡這種自己一邊摸索一邊做專案的感覺<br>
上班也不覺得累了 QQ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-02-15 18:42:03</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-02-15/"/>
      <updated>2021-02-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-02-15/</id>
      <content type="html">
        <![CDATA[
      <h3>今天的課程完成了什麼？</h3>
<ul>
<li>把同學 webpack 的筆記都看了一遍</li>
<li>研究了 fetch 怎麼用</li>
<li>看了自己卡在 week12 的作業 原來現在還是不知道要怎麼寫出來，人都會卡在一樣的地方ＸＤ</li>
</ul>
<h3>明天的預定進度</h3>
<p>“稍微”再看一下</p>
<h3>還記得哪些內容？反思最近的學習成果</h3>
<p>大年初四，看好多同學都找到工作準備年後上班，我還在原本公司做切版，作業一直沒有進度一直卡在 week12 hw1<br>
但是不知道是不是上班常看 php，覺得理解有變快了，但沒有動手練習會忘得很快。<br>
希望自己還可以把作業寫出來<br>
或是跟著下一期同學一起學習轉職，阿有點延畢的感覺ＱＱ</p>
<p>綜觀查一下自己的進度大概就是不上不下，卡在一半，要去轉職純前端有點困難，但是我知道那種設計公司的前端不太需要框架其實自己是有滿多機會的，只是自己想去的還是一個有規模一點，至少有用框架的公司～！<br>
現在公司定義的前端＝切版<br>
只需要切版，不需要會用 jQuery 跟其他技能，還要包設計，這根本設計師啊ＱＱ</p>
<p>求職條件：<br>
使用 React 框架<br>
地點在台中<br>
薪水跟現在一樣 or 比現在高一點點<br>
不用包設計（靠這好重要ＱＱ）</p>
<p>然後因為自己還沒學完，只能利用下班時間自學，最近對自己說的魔法就是“稍微”<br>
稍微看一下就好，稍微偷懶一下就好，怎樣超有魔力的吧ＸＤ</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>轉職進度條<br>
SEO 行銷企劃 -&gt; SEO 工程師 -&gt; 目前：前端工程(設計)師 -&gt; 目標：前端工程師</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-03-04 22:34:12</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-03-04/"/>
      <updated>2021-03-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-03-04/</id>
      <content type="html">
        <![CDATA[
      <h3>近況</h3>
<p>痾痾痾啊啊啊，同學已經開始新工作，我還繼續卡在 12 週 （這好像是過不去的門檻嗎每次心得都要提一次＝＝）<br>
最近履歷準備好了，整理幾個小作品決定先出去面試新天地</p>
<p>然後我今天看自己之前寫的 12 週作業一，覺得需要自己重新寫過一遍，重新理解一遍會比較好。<br>
目前就是中午午休時間看 React ，回家看 JavaScript ， 上班切版之餘偷偷練一下寫 code 能力跟概念。<br>
學到的就是反覆看 React 基礎，終於看出個大概了ＱＱ<br>
有點像是本來摸著拼圖，終於看出一點樣子的感覺。</p>
<p>星期二上班寫了一個類似最近很夯的韓國顏色測驗遊戲，就是點了答案判斷下一個題目，用 JavaScript 寫竟然寫到下午三點才寫出來...應該說還好有寫出來了ＸＤ<br>
噴了 radio 抓值 null 的錯誤卻不知道怎麼解，就改成抓 input id 的地方</p>
<p>這是一個被技術主管看到會被殺掉的程式碼ＸＤ<br>
知道可以優化卻不知道要怎麼優化的狀態，目前自己就是卡在這種不上不下的狀態，唉呀呀</p>
<pre class="language-html"><code class="language-html">&lt;div class=\"solutions_form\" id=\"solutions_form\">
        &lt;div class=\"solutions\" id=\"sol01_div\" name=\"sol01_div\">
          &lt;div class=\"solutions_text\">
            &lt;div class=\"solutions_no\">1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            &lt;div class=\"solutions_title\">
              題目一
              &lt;div class=\"select\">
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">></span></span>&lt;input id=\"sol01\" name=\"sol01\" type=\"radio\" value=\"1\">是<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">></span></span>&lt;input id=\"sol01a\" name=\"sol01\" type=\"radio\" value=\"0\">否<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>

        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
        &lt;div class=\"solutions dis-none\" id=\"sol02_div\" name=\"sol02_div\">
          &lt;div class=\"solutions_text\">
            &lt;div class=\"solutions_no\">2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            &lt;div class=\"solutions_title\">
              題目二
              &lt;div class=\"select\">
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">></span></span>&lt;input id=\"sol02\" name=\"sol02\" type=\"radio\" value=\"1\">是<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">></span></span>&lt;input id=\"sol02a\" name=\"sol02\" type=\"radio\" value=\"0\">否<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
.
.
.
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span></code></pre>
<pre class="language-js"><code class="language-js">    <span class="token comment">// val=1, yes, no</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol01\"<span class="token punctuation">,</span> \"#sol02\"<span class="token punctuation">,</span> \"#sol03\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol02\"<span class="token punctuation">,</span> \"#sol03\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol03\"<span class="token punctuation">,</span> \"#sol04\"<span class="token punctuation">,</span> \"#sol10\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol04\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol05\"<span class="token punctuation">,</span> \"#sol07\"<span class="token punctuation">,</span> \"#sol06\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol06\"<span class="token punctuation">,</span> \"#sol07\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkAns</span><span class="token punctuation">(</span>\"#sol07\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// val=1, val=0, no, yes</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol01\"<span class="token punctuation">,</span> \"#sol01a\"<span class="token punctuation">,</span> \"#sol03\"<span class="token punctuation">,</span> \"#sol02\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol02\"<span class="token punctuation">,</span> \"#sol02a\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">,</span> \"#sol03\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol03\"<span class="token punctuation">,</span> \"#sol03a\"<span class="token punctuation">,</span> \"#sol10\"<span class="token punctuation">,</span> \"#sol04\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol04\"<span class="token punctuation">,</span> \"#sol04a\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">,</span> \"#sol05\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol05\"<span class="token punctuation">,</span> \"#sol05a\"<span class="token punctuation">,</span> \"#sol06\"<span class="token punctuation">,</span> \"#sol07\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol06\"<span class="token punctuation">,</span> \"#sol06a\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">,</span> \"#sol07\"<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">checkNOAns</span><span class="token punctuation">(</span>\"#sol07\"<span class="token punctuation">,</span> \"#sol07a\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">,</span> \"#sol11\"<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token keyword">function</span> <span class="token function">checkAns</span><span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">.</span>value <span class="token operator">===</span> \"<span class="token number">1</span>\"<span class="token punctuation">)</span> <span class="token punctuation">{</span>
          e<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>b <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token keyword">return</span>
        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
          e<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>c <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token keyword">return</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">function</span> <span class="token function">checkNOAns</span><span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> a1<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">.</span>value <span class="token operator">===</span> \"<span class="token number">0</span>\"<span class="token punctuation">)</span> <span class="token punctuation">{</span>
          e<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>b <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token keyword">return</span>
        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
          e<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>c <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          e<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token string">'_div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'dis-none'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token keyword">return</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-03-31 00:01:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-03-31/"/>
      <updated>2021-03-31T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-03-31/</id>
      <content type="html">
        <![CDATA[
      <h3>還記得哪些內容？反思今天的學習成果</h3>
<p>終於把 12 週的作業一最後一個功能寫完，然後發現還要設定到繳作業的資料庫ＸＤ<br>
但是有點想挑戰把作業二的 todo list 串接後端的部分寫完<br>
超級龜的寫作業速度，我應該從 12 月寫到現在，每篇心得都在 12 週了哈哈哈</p>
<p>覺得一直卡在一個很奇怪的概念觀念或是理解上面，導致我對 php 理解緩慢<br>
最近總會想：「阿～可能我就是沒這麼厲害，需要一天天的時間，慢慢的才能吸收理解那些抽象的概念」</p>
<p>最近上班會一直修改某程式主管從前公司帶來的 php 框架，公司主要都用這框架套前端畫面<br>
剛開始看像天書，一堆資料夾跟 php 檔，找不到資料庫對應哪個資料表，套用在 html 的 php 變數要去哪找，諸如此類的蠢問題</p>
<p>像是之前一直卡在這種符號的定義理解上<br>
之前一直不懂 -&gt; 符號的意思，上網查也講得很抽象，問同事也是很模糊的講過</p>
<pre class="language-php"><code class="language-php">apple <span class="token operator">=</span> a<span class="token operator">-></span><span class="token property">b</span>
banana<span class="token operator">-></span> <span class="token property">c</span><span class="token operator">=</span>d</code></pre>
<p>這兩個就感覺好像，還有這個 :: 符號是什麼鬼</p>
<pre class="language-php"><code class="language-php"><span class="token class-name static-context">class_kind</span><span class="token operator">::</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
<p>像是這種微妙的差異，卻在我每天都修改這個框架的一天天上班日裡慢慢熟悉<br>
然後突然有一天我就懂了怎麼用，真心覺得神奇</p>
<p>雖然沒有想走後端，但是慢慢理解這個架構，有種本來只看到一部分程式的象腿(?)，現在看得出這是一隻大象了的感覺<br>
然後再看 React ，就會覺得好像那個概念有點相似。<br>
可能就像之前老師說過的，當你有一天懂了，就會忘記之前自己是卡在哪裡。</p>
<p>課程結束才開始聽 podcast ，昨天跟今天竟然都聽到自己之前寫的心得，真心覺得害羞，但是感受到很大很大的鼓勵，是目前上班的精神糧食～</p>
<h3>今天一個重要的領悟是什麼？</h3>
<p>本來超級想離職的，但是養的兔兔去住院兩次 8 天就花了快兩個月的薪水，只好繼續為五斗米折腰。<br>
雖然是在一家超級雷的公司，天眼通充滿真實的Ｘ評，但是轉念想想，現在的工作一個月才跟主管開一次會，只要完成當月的進度就好了，其他時間沒人管你，其實是個爽缺(?)<br>
討厭公司就更努力的用上班時間學好學滿，看文件用專案偷練技術，哇還付我學費真好<br>
如果願意 fire 我的話也是會滿高興的，還有遣散費可以拿＾＾</p>
<p>最後就是本來已經做好心理準備兔兔要離開，但是今天又活蹦亂跳了<br>
人生低處就是轉機，認真的過每一天，快樂的過每一天，如果不開心，就裝作快樂的過每一天</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-04-24 10:51:35</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-04-24/"/>
      <updated>2021-04-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-04-24/</id>
      <content type="html">
        <![CDATA[
      <h2>2021-04-24</h2>
<h2>近況</h2>
<p>終於久違的在更新自己的東西啦～！把部落格、GitHub 更新一波<br>
原因是因為下星期四要去執行將近一年沒有經歷過的面試體驗<br>
請假理由就是連假出遊玩，這兩個月常常請假，已經想不出來有什麼理由好請了是有點心虛ＸＤ</p>
<p>感覺那家公司特效很強！網頁動畫很猛<br>
只是跟我現在公司一樣類型是接案的設計廣告公司<br>
一樣類型的公司有一樣的問題，就是流動率高加上內部效率不佳囉ＱＱ<br>
看面試分享感覺主要也是前端切版<br>
要從一個坑換到另一個坑嗎？自己是有點猶豫<br>
現在工作其實也過得滿爽的(?) 只是每天都要說服自己繼續待真的有點心累...<br>
目前狀態就是能力感覺不足以跳到喜歡的公司，又不想將就去了沒有前端框架的公司，所以就持續安於現狀的樣子。</p>
<h2>工作</h2>
<p>繼二月跟主管宣告工作內容轉成寫程式之後，前端除了切切版<br>
我大部分時間都在寫 PHP 啊！！！跟前端的距離就是我認識你但是我用不到你噎<br>
維護原生 PHP 框架跟 CodeIgniter<br>
人家框架都寫好了～資料庫架構也建好了，就只要修改變數，程式碼複製貼上<br>
其實感覺不出來自己到底有沒有在進步<br>
但是記得課程前幾週學的概念都有點忘記<br>
進退之間，都是學問啊</p>
<p>忘記的時候都會去看自己寫的筆記，沒有寫過的地方就沒什麼印象<br>
雖然同學筆記寫得好，但是複製貼上同學的筆記也會很快忘記<br>
所以筆記要自己好好寫喔（認真）</p>
<h2>生活</h2>
<p>我家兔子終於胖回來了，醫生說 9 歲這麼老可以恢復的這麼快也是很厲害<br>
但是錢包也乾扁得很快<br>
所以學費打算下個月再一起繳（抱頭）</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-04-26 22:44:41</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-04-26/"/>
      <updated>2021-04-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-04-26/</id>
      <content type="html">
        <![CDATA[
      <h2>近況</h2>
<p>繼上次接受了第一家邀約面試之後，這幾天不知道為什麼像連續開槍一樣一直有邀約面試，所以星期四早上一家下午一家，下星期再一家。<br>
把履歷寫的豐富真的滿有面試機會的，但面對面的面試真的是我的弱項ＱＱ<br>
沒什麼頭緒，就相當去體驗一下被洗臉的感覺好了 (?)<br>
一緊張講話就會大舌頭的毛病ㄉㄊㄌ</p>
<p>今天早上起床滑人力銀行突然對某個職缺很感興趣，要找的是「前後端工程師」，沒錯就是你兩邊都要會。<br>
但我看來看去感覺應該不用到精通吧，應該是偏向後端兼前端的職缺，感覺自己可以，應該也能在這家公司獲得一些什麼所以就投了，然後要去面試。</p>
<p>目前對自己程度的定義是前後端都會一點，框架不熟。<br>
這大概是我可以跳槽的基本囉ＱＱ</p>
<h2>工作</h2>
<p>因為公司官網要到中國備案的關係，今天都在搬檔案，把影片圖片那些從 cPanel 壓縮抓到我的電腦，在解壓縮一個一個傳到 cn 的網站上...很麻煩也很閒(?）而且備案沒通過看不到網站內容欸！根本無法 Debug 啊<br>
就看著 PJ 大大的文章一步一步學 React 當薪水小偷了<br>
其實這個月的進度幾乎已經完成了，最近每天寫工作日報都有點痛苦地擠出點「表示有在認真工作」的工作內容&gt;&lt;</p>
<h2>生活</h2>
<p>買了新的鍵盤滑鼠取代筆電的小小鍵盤跟觸控板，跟上班模式一樣果然打字健步如飛～有一種身體(手指)終於跟上思想的感覺<br>
工欲善其事必先利其器，大鍵盤是你的最佳選擇ＸＤ</p>
<p>還有最近聽 Podcast 聽到 minw 助教推薦的書單，真心覺得想拜讀，但是還是等下個月領薪水再說，嗯嗯！</p>
<p>休息跟放鬆是很重要的～唷</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-05-19(三)</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-05-19/"/>
      <updated>2021-05-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-05-19/</id>
      <content type="html">
        <![CDATA[
      <h2>近況</h2>
<p>寫完１３週的作業一跟三，今天午休時看完作業二的影片，是重構 Ajax 留言板為 Plugin，看完覺得有點小難但還還能理解，希望可以做得出來～</p>
<h2>工作</h2>
<p>今天主管突然宣布明天開始遠距離上班，雖然窩在家不錯但是還是喜歡去上班，跟同事講講廢話還有那種轉頭就能問別人，「欸～這裡程式幫我看一下」的那種感覺</p>
<p>下午臨時跟身在深圳的老闆開會，老闆突然問說我們部門三個有沒有更像團隊的感覺啦？內心浮現了好想離職好想離職不想繼續待在這裡，簡直快要脫口而出。
我就是那位掛名行銷企劃實際執行前後端程式的人沒有之一
重要的程式主管又不讓我碰
然後老闆說了我要執行中國網站的在地化行銷企劃，真的好棒
真的很想很想直接說不幹了...然後就主管就宣佈遠距離上班了
嗯～好像不錯</p>
<p>今天上班的貢獻就是寫了一個 CodeIgniter 驗證碼的程式，其實從昨天就開始在解了，那種寫不出來又沒人可以問的感覺真的很痛苦，也發現了自己的思考模式。</p>
<p>心路歷程： 第一天先看文件能不能自己解決問題 -&gt; 對 CodeIgniter 的框架某些地方不熟 -&gt; 第二天突然就看懂文件莫名的融會貫通，寫出前後端驗證碼 -&gt; 卡在寄信程式但又 Debug 解不出來 -&gt; 懷疑自己到底會不會寫程式 -&gt; 最後問了 4 個同事解出來了</p>
<p>解決心得：要問到對的人，才會有解方。</p>
<h2>生活</h2>
<p>結束連續三家面試過後的一個禮拜，雖然獲得了其中一家 offer 但沒有吸引我想跳槽，感覺會入另一個更大的坑於是婉拒。</p>
<p>最近聽 podcast 「EP13. 198 的空氣 484 真的比較新鮮？」
裡面那個被放置 play 的職務，好像就是我ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-06-08 18:51:42</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-06-08/"/>
      <updated>2021-06-08T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-06-08/</id>
      <content type="html">
        <![CDATA[
      <h2>學習</h2>
<p>把六角的免費課程 CI/CD 看完，覺得更有概念了，然後前天在看 Docker ~<br>
week13 剩下寫了一半的 Webpack Plugin<br>
偷看 20 幾週的 React 作業，好像有點小概念<br>
還有 從 Hooks 開始讓你的網頁 React 起來 看了一半</p>
<h2>近況</h2>
<p>雖然最近疫情嚴重，但違抗不了自己掙扎已久的想法，最後還是提出在 16 日離職，雖然主管有表示希望我留下來或是延後離職，但是心意已決不想改變。<br>
寄出辭職信的那一刻，留下解脫的眼淚。</p>
<p>從一份只是想暫時賺生活費的工作，不知不覺待了 10 個月......體悟到了自己真心不適合騎驢找馬，高敏感的自己，被環境影響真的很大，就職期間幾度完全不想寫 code，每次要坐回家裡的筆電前面就杜爛，感謝這次公司給的在家工作機會，讓我坐回電腦前面重新檢視自己。也是這次疫情，讓我覺得生命很短暫，喜歡的事情就勇敢去追求吧！就算過程跌倒很痛，也比起待在不喜歡的公司造成的心理壓力來的強。</p>
<p>這幾天跟幾位同事閒聊，原來大家都在等待時機跳槽，還有祝福我脫離苦海。<br>
原來不是只有我自己這樣想，嗯嗯！</p>
<p>終於可以順從自己的心願，回到全職學習狀態，好好的重整自己再出發。<br>
React ~~~ 我來拉～～～</p>
<h2>工作</h2>
<p>掛著行銷企劃的職位，跟工程師交接後續網站的程式內容。<br>
再跟另一位行銷同事接交大陸行銷的東西<br>
希望可以順利離職～～</p>
<h2>生活</h2>
<p>Podcast 的高敏感分數<br>
MBTI 測驗 - 提倡者<br>
高敏感分數是 90 分...<br>
不過自己是滿常感到焦慮的，朋友也常說我怎麼都在同一個問題打轉<br>
如果有件事情在心裡過不去就會一直抓著那個情緒不放</p>
<p>神經大條的同事送了一句話給我「誰在乎，誰痛苦」<br>
事情不用做到完美，也不用表現你會很多東西很有能力，這樣老闆跟主管會覺得是理所當然的，給你更多事情去做，只要做到符合薪水的努力程度就好了，上班就是要開心～<br>
除非你想在這家公司升職</p>
<p>雖然聽起來滿不合理滿欠揍的，但自己這樣想之後真的有比較快樂～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-06-21 18:35:50</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-06-21/"/>
      <updated>2021-06-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-06-21/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日進度】</h3>
<p>六角學院每週邀請講師全集，到 28 號之前能看多少是多少，哈哈</p>
<ul>
<li>React 從新手到實戰 I 看完，預計明後天把 II 跟 III 都看完</li>
<li>從 Hooks 開始讓你的網頁 React 起來，這個前幾天看完了～</li>
<li>和艦長一起玩轉 GitLab &amp; GitLab Workflow 之前有用過所以跳著看，著重看 CD 的部分，不過覺得吸收有限</li>
<li>Webpack 上半集跟下半集一半<br>
Webpack 的這位講師 Mike 講的方式覺得超推，他講話有點像補習班老師的感覺，影片看起來不會無聊ＸＤ<br>
實作了很多 webpack loader 跟 plugin ，也有說明使用上一些注意的小技巧，最重要的是我終於有點看懂怎麼拆分打包後的檔案了～撒花<br>
課程影片也附上 ppt ，覺得超用心的</li>
</ul>
<h3>【明日進度】</h3>
<p>React 從新手到實戰 II<br>
week 13 作業，剩下最後一題</p>
<h3>【學習心得】</h3>
<p>class component 吸收中，hook 真的比較好懂，多看不同的人教學風格也有助於多方吸收理解。</p>
<p>自己是吸收比較慢的型，看過一次（不懂的狀態）-&gt; 過幾天再看（慢慢理解） -&gt; 不熟的使用（增加熟悉度）-&gt; 腦袋有印象（有熟悉度惹）</p>
<p>目前摸索起來的吸收效果，如果課程有 50%已知，50%未知，那吸收起來效果會很好。<br>
如果 100% 全部未知，那吸收效果會很慢也很有限<br>
所以剛開始學習新事物，最好是有人簡單地告訴你概念，然後簡單的實作<br>
等概念慢慢加深，自己也可以做出點東西來，這時候再看官方文件可以吸收最多。</p>
<p>這感覺有點像做菜，剛開始學不會要你就做滿漢大餐，雖然你看著食譜可能做得出來，但挫折感應該會滿重的。<br>
先做一道水煮料理應該就滿簡單的吧ＸＤ<br>
之後有點料理概念，再去碰烘培或是西餐應該會更好上手。<br>
程式語言也是如此呢！我想</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-06-28 19:11:50</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-06-28/"/>
      <updated>2021-06-28T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-06-28/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日進度】</h3>
<p>week 14 週</p>
<ul>
<li>看完 <a href="https://www.youtube.com/watch?v=iDG8Ha2uZPs">程式導師實驗計畫：Lesson 8-2 之資料庫</a></li>
</ul>
<ul>
<li>學習 NoSQL、transaction、ACID 與 Lock。</li>
</ul>
<ul>
<li>看完 <a href="https://www.youtube.com/watch?v=QiCm9JE43KM">程式導師實驗計畫第二期：Week8-1 後端基礎（下）</a></li>
</ul>
<ul>
<li>學習 View、Stored Procedure 與 Trigger，順便複習 jQuery 的 Todo list 作業）</li>
</ul>
<p>以上用 notion 寫了筆記～</p>
<ul>
<li>
<p>簡略的看了一下同學們部署 AWS 的筆記，寫的都好用心好詳細，感恩同學們的大恩大德 ˙///˙</p>
</li>
<li>
<p><a href="https://www.youtube.com/watch?v=-W9F__D3oY4">CS75 (Summer 2012) Lecture 9 Scalability Harvard Web Development</a></p>
</li>
</ul>
<ul>
<li>看了三分之一就放棄了，太多專有名詞好像在看天書...我的英文程度只能聽得懂 <a href="https://www.netflix.com/tw/title/81214135">企鵝小鎮</a> 了吧ＱＱ 偷偷推很療癒的企鵝們</li>
<li>最後有 Google 到別人的筆記資料 <a href="https://giafudiary.blogspot.com/2019/06/load-balancehttp-request.html">(筆記) CS75 (Summer 2012) Lecture 9 Scalability Harvard Web Development David Malan</a> 感謝他翻成中文寫得滿清楚明瞭的</li>
</ul>
<h3>【明日進度】</h3>
<p>實際部署 AWS</p>
<h3>【學習心得】</h3>
<p>覺得自己看影片真的很不專心，一下跑去上廁所，一下停下來做筆記，一下又怎樣怎樣...大概一個小時的影片要看二個小時ＸＤ</p>
<p>看了朋友的筆電，發現他連 Lidemy 進度報告頁面看起來都是黑色頁面，覺得好酷問他怎麼做到的，原來是把 chrome 主題換成全黑，連看白色頁面都會自己變成黑色，突然覺得眼睛很舒服</p>
<p>雖然是實驗功能，如果有人想玩玩看～<br>
chrome://flags/#enable-force-dark<br>
將後方的「Default」改為「Enabled」。反之就改回來，需要重新啟動瀏覽器。<br>
助教們推薦的 Sidekick 也適用喔！Sidekick 真心覺得好用^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-07-06 17:42:18</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-07-06/"/>
      <updated>2021-07-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-07-06/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日進度】</h3>
<p>結束 14 週作業，邁入第 15.16 週</p>
<h3>【明日進度】</h3>
<p>預知明日進度如何，請見明日揭曉</p>
<h3>【學習心得】</h3>
<p>結束了 14 週作業～看了 15 週的 Show time 的官網導覽，覺得有些功能真的很酷～！對一些套件應用跟寫法很感興趣，就 clone 下來想要研究一番 &gt;_0</p>
<p>上星期耍廢了 4 天，整個好好放假，已經沒有前公司的工作記憶了，等待明日發薪水～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-07-20 15:14:52</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-07-20/"/>
      <updated>2021-07-20T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-07-20/</id>
      <content type="html">
        <![CDATA[
      <h2>week 16</h2>
<h3>【今日進度】</h3>
<p>把課程影片看完，對 ES6 的語法有更加熟悉，之前沒把這週的影片看完就直接看 React Class Component 整個不知道在幹嘛ＸＤ需要 BInd 來 Bind 去的～但看完影片有一種恍然大悟的感覺，喔～原來是這樣運作的ㄚ整個豁然開朗</p>
<p>小插曲是有些東西太久沒用竟然忘記了，沒關係，再 Google 補回來～</p>
<h3>【明日進度】</h3>
<p>week 16 作業完成<br>
week 17 開始</p>
<h3>【學習心得】</h3>
<p>每次影片看不完就是自己太執著於弄懂每個細節，每個步驟都停下來做筆記，不知不覺花了很多時間，不如就不要管這麼多，先把影片看完再說，筆記嘛，week16 很多同學的筆記，複習再過去看就行了，嗯嗯！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-07-21 13:28:04</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-07-21/"/>
      <updated>2021-07-21T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-07-21/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日進度】</h3>
<p>晚上寫 week 16 週的作業<br>
看 week 17 週的影片</p>
<h3>【學習心得】</h3>
<p>昨天突然得知家人生病的消息，感覺心情受影響<br>
打開 notion 寫下自己當下的心情，有一種情緒釋放的感覺，是時候該回家一趟了。</p>
<p>week 16 週影片已經看完，課程文章很多篇不想都看完，文字都讀不進去，那就不看吧，直接做完作業直奔下一週，之後有餘力再回來補齊。<br>
這樣想著又找回了學程式的動力，week 17 是自己都沒碰過的領域，有一種新鮮的興奮感^^</p>
<p>是說把書籤列整理乾淨，覺得好療癒啊！<br>
沒想到累積多年的書籤，一整理就花掉半天了，但覺得滿值得的</p>
<p><img src="/images/lidemy/8a03f463725243e8bdb343445bf62b2d.png" alt=""><br>
<img src="/images/lidemy/f409a96a4deb4fcb91f35acc3fc24887.png" alt=""></p>
<p>方法可以看：<a href="https://youtu.be/gWLP4Wk4DRQ">效率會爆增的「四字命名法」！一起極簡「書籤列/我的最愛」</a></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-07-26 19:25:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-07-26/"/>
      <updated>2021-07-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-07-26/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日進度】</h3>
<p>今天的預計進度是 week 16 作業完成， week17 影片看完<br>
但是有拖延症的我，因為寫作業的時候遇到一些不懂的地方，又去把老師寫的 JS 文章看完<br>
中午想睡覺就倒在沙發上昏睡了一個下午，沒開冷氣流了一身汗，我就廢哈哈哈<br>
閱讀中無意間看到了這二篇文章<br>
<a href="https://medium.com/hulis-blog/procrastination-ba12754ada49">致跟我一樣的拖延症患者：動力是需要刻意創造的</a><br>
<a href="https://hulitw.medium.com/%E5%BB%A2%E6%96%87%E5%B7%A5%E4%BD%9C%E8%80%85%E7%9A%84%E9%A4%8A%E6%88%90-d05a5b7e539">廢文工作者的養成</a><br>
雖然寫說是廢文，但我不知不覺把他們都看完了ＸＤ<br>
覺得自己以前打文章或是筆記心得在那邊刪刪減減的斤斤計較，擔心這個是不是沒營養會讓人覺得ＯＯＸＸ，有點完美主義者的我好像不存在了，我也要朝廢文的方向發展，我就廢 YA ～</p>
<p>是說也回顧了一下自己的心得，果然是從焦慮轉換成學習動力ㄚ<br>
這次全職學習的時候，刻意放鬆情緒緊繃的部分，所以動力好像就減低了呢<br>
但是有另一種學習的心態跑出來了～目前還沒掌握到底是怎樣的情緒<br>
大體而言都是正向的...吧？</p>
<h3>【明日進度】</h3>
<p>哎呦應該是 實作 week 17</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-07-27 21:38:45</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-07-27/"/>
      <updated>2021-07-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-07-27/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日學習心得】</h3>
<p>本來以為今天可以繳作業的，但是還是不太明白 setTimeout 的運作方式，所以還是想弄明白再繳作業。也許會去看一下同學都是怎麼解釋的，還有把 <a href="https://youtu.be/8aGhZQkoFbQ">What the heck is the event loop anyway? </a>再看懂一次</p>
<p>今天一早就開始把家裡大掃除，因為附近都在消毒，家裡飛進了很多不明的蟲蟲實在太可怕 &gt;&lt;<br>
就把天花板、牆壁都用除塵紙把灰塵擦一擦，拂塵把櫃子清一下，最後再拖個地，做完就全身都是汗了，但是家裡變好乾淨覺得很爽哈哈哈<br>
是說這樣可以清除家裡的各種氣味，有興趣的人可以嘗試一下(?)</p>
<p>下午又做了一下拉伸運動，今天是運動 day ~ 開心</p>
<p>晚上朋友的學生要補課，所以我就一邊聽數學一邊看課程影片，ORM 與 Sequelize，耳機外傳來各種數學的講解，竟然一個半小時課程影片看不完哈哈哈</p>
<p>今日我就廢但是又覺得我超棒～ 😆</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-02 21:07:37</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-02/"/>
      <updated>2021-08-02T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-02/</id>
      <content type="html">
        <![CDATA[
      <h2>week 17</h2>
<h3>【今日進度】</h3>
<p>星期一都比較認真ＸＤ<br>
廢了 4 天，其中還有照顧打完疫苗的家人，後遺症好像滿強的哈哈，還好目前都已經恢復正常。</p>
<p>今天把 Nginx 跟 Heroku 看完，準備要開始寫作業<br>
這次影片不刻意按空白鍵暫停做筆記（有點暫停做筆記強迫症），選擇不做筆記用腦袋記（關鍵詞先寫下來），嘗試用官方文件跟上網找資料實做作業（以前學 PHP 時都照著做感覺記憶不深刻）<br>
雖然有點不知道怎麼寫那個語法，不過整體概念已經有通了<br>
希望可以順利寫出來～</p>
<hr>
<p>課程影片 Express 串接 MySQL 資料庫跟 Sequelize 的差別本來看不是很明白，但是後來想想應該是第一遍沒有框架的寫 Express 串接資料庫，之後用 Middleware 補足 Express 沒有的功能。</p>
<p>Sequelize 就是有點類似框架的概念把一些繁雜的東西簡化了，讓我們可以更有架構的去寫程式</p>
<hr>
<p>作業二要做的 api ，有點沒想法ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>JavaScript 進階觀念</title>
      <link href="https://blog.roroiii.com/posts/javascript/"/>
      <updated>2021-08-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/javascript/</id>
      <content type="html">
        <![CDATA[
      <h2>這週學了一大堆以前搞不懂的東西，你有變得更懂了嗎？請寫下你的心得。</h2>
<p>這週學了很多以前沒有細想的地方，零散地做了筆記，雖然沒有很完整，但這大概是目前的理解程度，就把它拿來當作心得了。
本來 setTimeout 的原理不是很明白，又重看一遍 <a href="https://youtu.be/8aGhZQkoFbQ">What the heck is the event loop anyway?</a> 突然就明白了，懷疑自己第一遍看的時候都在注意講師很帥ＸＤ</p>
<hr>
<h2>嚴格執行環境 use strict</h2>
<p>讓 JavaScript 在嚴格模式下執行，大部分開發都會用。</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token string">'use strict'</span></code></pre>
<h2>七種資料型態</h2>
<p>最新的 ECMAScript 標準定義了七種資料型別：</p>
<ol>
<li>Boolean</li>
<li>Null</li>
<li>Undefined</li>
<li>Number</li>
<li>BigInt</li>
<li>String</li>
<li>Symbol （於 ECMAScript 6 新定義）
另外還有 Object</li>
</ol>
<p>以上是看 MDN 的 <a href="https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Data_structures">JavaScript 的資料型別與資料結構</a> 的定義。</p>
<h2>檢查型態</h2>
<ul>
<li>
<p><code>typeof</code> 看資料型態，但不一定只有上面這樣，也可以檢查有沒有這個值</p>
</li>
<li>
<p><code>null</code> 是 object ，這是 JavaScript 的著名 bug ，但已經錯很久修改會造成很多錯誤，所以未來可能也不會修。</p>
</li>
<li>
<p>檢測 array 的方法可以用 <code>Array.isArray([])</code></p>
</li>
<li>
<p><code>Object.prototype.toString.call()</code>
是另一種檢查型態的方法，看結果的第二個值就是傳進去的值的型態</p>
</li>
</ul>
<pre class="language-js"><code class="language-js">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token class-name">Object</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span>

<span class="token comment">// 結果 [Object Number]</span></code></pre>
<blockquote>
<p>Value 不能被改變，看起來改變其實是回傳一個新的值
Array 不一定需要改變，但 Array 可以被改變</p>
</blockquote>
<h2>賦值</h2>
<ul>
<li>存記憶體位置跟存值
<img src="https://static.coderbridge.com/img/roroiii/127c503e0f9e4a5a8c2be854f711651a.png" alt="">
↑ 最後 obj 是 10 obj2 是 30</li>
</ul>
<h2>var、let、const 作用域</h2>
<ul>
<li>ES5 以前 var 都是以 function 為作用域</li>
<li>ES6 新增 let 、 const 是以 { } 為作用域</li>
</ul>
<h2>hoisting（提升）</h2>
<ul>
<li>只有宣告的變數會提升，賦值的值不會提升。</li>
<li>單純的 function 宣告也會提升</li>
<li>如果是把 function 存在變數裡，只有變數會提升， function 是值所以不會提升。</li>
</ul>
<pre class="language-js"><code class="language-js">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>bbb<span class="token punctuation">)</span> <span class="token comment">// bbb is not defined</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>test<span class="token punctuation">)</span> <span class="token comment">// 提升為 var test 結果是 undefined</span>
<span class="token keyword">var</span> test <span class="token operator">=</span> <span class="token number">123</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">// 提升為 var a 結果是 undefined</span>
<span class="token keyword">var</span> <span class="token function-variable function">a</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<h2>hoisting 順序</h2>
<ol>
<li>function</li>
<li>arguments</li>
<li>var</li>
<li>let、const 在賦值之前無法存取，不會變成 <code>undefined</code> 而是 <code>is not defined</code> 或 <code>ReferenceError: Cannot access 'a' before initialization</code>，有個名詞叫做 TDZ（Temporal Dead Zone）中文翻譯 暫時性死區</li>
</ol>
<h2>理解 Execution Context 與 Variable Object</h2>
<ul>
<li>Execution Context 執行環境。一個 JavaScript 的 Object</li>
<li>Variable Object 執行環境裡面的變數物件，存放參數 Arguments</li>
</ul>
<p>執行順序小筆記：</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">var</span> a <span class="token operator">=</span> <span class="token number">1</span>
<span class="token keyword">function</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'1.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span> <span class="token comment">// undefined</span>
  <span class="token keyword">var</span> a <span class="token operator">=</span> <span class="token number">7</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'2.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span> <span class="token comment">// 7</span>
  a<span class="token operator">++</span>
  <span class="token keyword">var</span> a
  <span class="token function">inner</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'4.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span>
  <span class="token keyword">function</span> <span class="token function">inner</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'3.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span> <span class="token comment">// 8</span>
    a <span class="token operator">=</span> <span class="token number">30</span>
    b <span class="token operator">=</span> <span class="token number">200</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'5.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span> <span class="token comment">// 1</span>
a <span class="token operator">=</span> <span class="token number">70</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'6.'</span><span class="token punctuation">,</span> a<span class="token punctuation">)</span> <span class="token comment">// 70</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'7.'</span><span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token comment">// 200</span></code></pre>
<pre class="language-js"><code class="language-js">
inner <span class="token constant">EC</span>
inner <span class="token constant">VO</span> <span class="token punctuation">{</span>

<span class="token punctuation">}</span>

test <span class="token constant">EC</span>
test <span class="token constant">VO</span> <span class="token punctuation">{</span>
  <span class="token function-variable function">inner</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">,</span>
  <span class="token literal-property property">a</span><span class="token operator">:</span> <span class="token keyword">undefined</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token number">7</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token number">8</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token number">30</span>
<span class="token punctuation">}</span>

global <span class="token constant">EC</span>
global <span class="token constant">VO</span> <span class="token punctuation">{</span>
  <span class="token function-variable function">test</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">,</span>
  <span class="token literal-property property">a</span><span class="token operator">:</span> <span class="token number">1</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token number">70</span><span class="token punctuation">,</span>
  <span class="token literal-property property">b</span><span class="token operator">:</span> <span class="token number">200</span>
<span class="token punctuation">}</span></code></pre>
<h2>Call stack 資料結構</h2>
<ul>
<li>像盤子往上堆疊，執行完之後再從最上面一個個把盤子拿起來</li>
<li>專有名詞好像是叫 <strong>Last In, First Out</strong> 先進後出。</li>
<li>如果盤子有夠多，多到不堪負荷會溢出來變成 <strong>stack overflow</strong></li>
</ul>
<h2>Closure 閉包</h2>
<ul>
<li>在一個 function return 另一個 function</li>
<li>跟 scope chain 很有相關</li>
<li>除了在 function 內定義的方法外，無法用其他方法修改 function 內變數的值。</li>
</ul>
<h2>IIFE 立即呼叫函示</h2>
<ul>
<li>用 () 包起來，後面再加一個 () 就可以立刻執行。</li>
<li>後面的 () 是用來放參數 arguments 的</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token punctuation">;</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'123'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
<h2>物件導向</h2>
<ul>
<li>setter</li>
<li>getter</li>
<li>this 從這裡出現，學了物件導向 this 才有意義</li>
<li>ES5 之前，用 new 就是把 function 當成 construtor 來用， function 第一個字要大寫</li>
<li>使用 prototype 創建 method，調用的 function 就會相等 (true)，不會多佔用另一個記憶體空間。</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">//建構子，用 new Dog 呼叫這個 class 就會自動產生</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name
  <span class="token punctuation">}</span>
  <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">//method -> getter</span>
    <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name
  <span class="token punctuation">}</span>
  <span class="token function">sayHello</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>name<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">var</span> d <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Dog</span><span class="token punctuation">(</span><span class="token string">'abc'</span><span class="token punctuation">)</span>
d<span class="token punctuation">.</span><span class="token function">satHello</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 使用 method 的方式</span></code></pre>
<h2>物件導向的繼承：Inheritance</h2>
<ul>
<li>會出現 <code>extends</code>，第一個字大寫名稱的 function</li>
<li><code>extends</code> 上層有的東西都可以拿來用</li>
<li><code>super()</code> 就是上一層的 <code>constructor</code></li>
<li><code>super()</code> 跟 <code>constructor</code> 一定要傳參數，不然會找不到，<code>super()</code> 會到上層去設定一些初始化的東西</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name
  <span class="token punctuation">}</span>

  <span class="token function">sayHello</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>name<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">class</span> <span class="token class-name">BlackDog</span> <span class="token keyword">extends</span> <span class="token class-name">Dog</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">// super() 跟 constructor 一定要傳參數</span>
    <span class="token keyword">super</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span> <span class="token comment">// 就是 Dog 的 constructor</span>
  <span class="token punctuation">}</span>
  <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'test!'</span><span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">const</span> d <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BlackDog</span><span class="token punctuation">(</span><span class="token string">'hello'</span><span class="token punctuation">)</span>
d<span class="token punctuation">.</span><span class="token function">sayHello</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
<h2>This</h2>
<ul>
<li>依據環境 <code>this</code> 的預設值會有所不同。EX：瀏覽器預設 <code>this</code> 的值是 <code>window</code>，node.js 預設是 <code>global</code></li>
<li>跟程式碼在哪裡無關，跟你在哪呼叫有關</li>
<li>在 <code>'use strict'</code> 嚴格模式下，瀏覽器跟 node.js 預設值都會變成 <code>undefined</code></li>
<li>pure function 下跟 <code>this</code> 沒什麼關係，幾乎 <code>this</code> 都會是預設值</li>
<li>例外狀況：使用 <code>addEventListener</code> 的時候 <code>this</code> 指的是點到的東西</li>
<li>箭頭函示的 this 是依據綁定的位置。</li>
</ul>
<h2>改變 this 的值用 call() 跟 apply()</h2>
<ul>
<li>
<p>call 內的第一個值就會是 function 內的 this 的值</p>
</li>
<li>
<p>第一個值都是改變 this，call 後面放值，用逗號隔開，apply 後面放陣列。</p>
</li>
<li>
<p>call 跟 apply 都是呼叫 function</p>
</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">function</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span> <span class="token comment">// 結果為 hello</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">)</span> <span class="token comment">// 結果為 1, 2, 3</span>
<span class="token punctuation">}</span>

<span class="token function">test</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token string">'hello'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment">// hello 為新的 htis 的值，1,2,3 為參數</span>
<span class="token function">test</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token string">'hello'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// 跟上面 call 的用法結果相同，兩個結果會是一樣的</span></code></pre>
<h2>bind 回傳一個新的 function</h2>
<ul>
<li>綁定 this 的值，怎麼 call 都不會改變 this 的值
<img src="https://static.coderbridge.com/img/roroiii/43c0a6a8fe4f4cfd8668a469ca26ad16.png" alt=""></li>
</ul>
<h2>arrow function 箭頭函示的 this</h2>
<ul>
<li>跟在哪邊定義的有關係</li>
<li>跟在哪怎麼呼叫沒關係</li>
<li>一般的 <code>this</code> 在普通 function 內都會指向預設值（window 或嚴格模式下的 <code>undefined</code>），但是在箭頭函式內的 <code>this</code> 指的是被定義在程式碼的哪裡</li>
</ul>
<h2>throttle 閥值 &amp; debounce 去抖動</h2>
<p>debounce 像是排隊搭公車，最後一名乘客上車之後，司機才會開車。</p>
<p>debounce 範例</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">function</span> <span class="token function">debounce</span><span class="token punctuation">(</span><span class="token parameter">func<span class="token punctuation">,</span> delay <span class="token operator">=</span> <span class="token number">250</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">let</span> timer <span class="token operator">=</span> <span class="token keyword">null</span>
  <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token keyword">let</span> context <span class="token operator">=</span> <span class="token keyword">this</span>
    <span class="token keyword">let</span> args <span class="token operator">=</span> arguments

    <span class="token keyword">if</span> <span class="token punctuation">(</span>timer<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">clearTimeout</span><span class="token punctuation">(</span>timer<span class="token punctuation">)</span>
    <span class="token punctuation">}</span>
    timer <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
      <span class="token function">func</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> args<span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span> delay<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>throttle 跟 debounce 相似，不同的地方是讓使用者觸發相同事件時提供間隔，控制特定時間內事件觸發的次數。</p>
<p>throttle 範例</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">function</span> <span class="token function">throttle</span><span class="token punctuation">(</span><span class="token parameter">func<span class="token punctuation">,</span> time <span class="token operator">=</span> <span class="token number">250</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">let</span> last
  <span class="token keyword">let</span> timer

  <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> context <span class="token operator">=</span> <span class="token keyword">this</span>
    <span class="token keyword">const</span> args <span class="token operator">=</span> arguments
    <span class="token keyword">const</span> now <span class="token operator">=</span> <span class="token operator">+</span><span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

    <span class="token keyword">if</span> <span class="token punctuation">(</span>last <span class="token operator">&amp;&amp;</span> now <span class="token operator">&lt;</span> last <span class="token operator">+</span> timeout<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">clearTimeout</span><span class="token punctuation">(</span>timer<span class="token punctuation">)</span>
      timer <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        last <span class="token operator">=</span> now
        <span class="token function">func</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> args<span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span> timeout<span class="token punctuation">)</span>
    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
      last <span class="token operator">=</span> now
      <span class="token function">func</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> args<span class="token punctuation">)</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">function</span> <span class="token function">handleScroll</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>window<span class="token punctuation">.</span>scrollY<span class="token punctuation">)</span>
<span class="token punctuation">}</span>

window<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'scroll'</span><span class="token punctuation">,</span> <span class="token function">throttle</span><span class="token punctuation">(</span>handleScroll<span class="token punctuation">,</span> <span class="token number">500</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token comment">//500ms才允許再執行</span></code></pre>
<p>參考文章：</p>
<p><a href="https://medium.com/@alexian853/debounce-throttle-%E9%82%A3%E4%BA%9B%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC%E6%87%89%E8%A9%B2%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84%E5%B0%8F%E4%BA%8B-%E4%B8%80-76a73a8cbc39">Debounce &amp; Throttle -  那些前端開發應該要知道的小事(一)</a></p>
<p><a href="https://github.com/Lidemy/mentor-program-4th/issues/16">第十六週練習題 · Issue #16 · Lidemy/mentor-program-4th</a></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-09 19:47:23</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-09/"/>
      <updated>2021-08-09T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-09/</id>
      <content type="html">
        <![CDATA[
      <h2>week17</h2>
<h3>【今日進度】</h3>
<h4>做 week 17 hw1</h4>
<p>想說可以照著老師給的範例寫，但是又想寫得好一點，又去參考了 lidemy backend，也想用 <code>async</code> 跟 <code>await</code> 的方式寫寫看，先靜態的用 ejs 刻出首頁畫面， routes 也拆出來獨立一隻檔案，然後想一下要怎麼把資料正確跑出來，應該是 Controller 要寫一些東西把 Models 的資料丟過去 ，嘗試寫出來但是又覺得對 <code>next()</code> 的用法有點不熟悉所以去查了資料，漸漸搞懂之後一天又過去了ＸＤ</p>
<p>這次作業比較在意的是自己有沒有搞懂其中的原理，能不能靠自己寫出來，寫到一半發現自己對 Promise chaining 其實不是很熟，如果作業免強靠參考老師提供的 demo 寫出來，感覺真的工作後會死得很難看 QQ 再次體認到自己的不足</p>
<p>沒關係， “The best way to learn how to write code is write code” ，多寫寫應該就會了</p>
<h4>更新部落格跟 GitHub</h4>
<p>找資料的時候發現，原來 GitHub 的 profile 也是可以自訂的，就順手調整了一下^^<br>
早上把自己寫的 JavaScript 筆記貼到部落格上</p>
<h3>【學習心得】</h3>
<p>今天學習狀況算是滿好的，心態跟身體狀況都有到位，有出門散步 30 分鐘，有把家裡收拾一下，也有把程式寫進腦袋裡。</p>
<hr>
<h3>其他嘗試</h3>
<h4>實行一日一餐</h4>
<p>從疫情開始之後就常常待在家裡，運動跟吃飯的量都減少了，看了台客導演的斷食影片，開始思考自己平常吃的東西，是為了吃而吃，為了嘴饞而吃，還是身體真的餓了而吃？反正都在家還沒開始上班，應該影響不大，就嘗試看看。</p>
<p>第一天因為知道要到晚上才能吃東西，所以故意睡到 12 點才起床，到下午 7 點多的時候有手抖的情況，但是整體精神滿好的。</p>
<p>第二天 10 點多起床，想說應該水喝多一點，結果一下子喝太多水反而覺得超餓，到 4 點多直接按下熊貓叫外送了 XD</p>
<p>第三天記取教訓，水喝一樣多但是每次都少少的喝，果然餓肚子的情況減少了，但是一直排隔（也許是排氣？）。<br>
.<br>
.<br>
.<br>
到今天應該有一個禮拜了，整體精神變好了，感覺漸入佳境。<br>
前幾天真的會一直想找東西吃，想叫外送，雖然精神很好但是因為覺得好像很餓（心理上覺得）所以一直沒辦法靜下心來寫程式，希望之後可以維持這個習慣。</p>
<h4>失敗的早睡計畫</h4>
<p>想要每天晚上 10 點睡覺，但是躺在床上就是睡不著，一直翻到 12 點才可以真的入睡。<br>
希望可以挑戰成功</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-10 20:27:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-10/"/>
      <updated>2021-08-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-10/</id>
      <content type="html">
        <![CDATA[
      <h2>week17</h2>
<h3>【今日進度】</h3>
<h4>作業一註冊登入登出功能完成</h4>
<p>寫到 article 的 routes 的時候一直出現</p>
<p><code>Error: .post() requires callback functions but got a [object Undefined]</code></p>
<p>知道是沒有正確引入，也知道可能是錯字但就是找不到在哪裡，最後發現是 <code>module.exports</code> 少一個 s 的笨蛋錯誤 XD 感謝 <a href="https://stackoverflow.com/questions/34853675/error-post-requires-callback-functions-but-got-a-object-undefined-not-work/56739792">stackoverflow</a> 上有大大回答了這個蠢問題</p>
<p>同學遇到的 node 佔用 port 的問題今天我也遇到了，因為寫註冊資料感覺有成功但是 iTerm 上又沒有任何訊息跑出來，所以懷疑是 port 的問題。<br>
解決方法用 kill PID 是殺不掉的，要用 <code>killall -9 node</code> ，stackoverflow 又再一次順利地解決我的問題＾＾<br>
感覺自己 debug 的功力進步惹～</p>
<p>記得今天第一次成功寫出註冊資料的開心，忍不住就喊出了 歐耶\bS！</p>
<h3>【學習心得】</h3>
<p>今天學習狀況也很好，只是心臟跳得有點快，大概到下午 3 點的時候推測應該是肚子餓所以就蒸了地瓜來吃，但狀況還是沒改善，4 點多的時候跑去睡一下，起來就好很多了。</p>
<h4>一日一餐</h4>
<p>今天有同學密我詢問一日一餐的事情，有點受寵若驚ＸＤ原來也有人跟自己一樣想嘗試看看<br>
但是因為目前只實行一個禮拜所以也沒有太多的可以分享的ＱＱ<br>
一餐的量大概是比自己平常一餐的量還多，例如平常是吃一個便當，一日一餐開始之後就變成加大便當或是再多吃其他東西<br>
像是今天就是吃炒飯+披薩（披薩可能吃不完）</p>
<p>雖然一天只有吃一餐，但是可以吃好吃滿，晚餐的時候真的覺得滿爽的ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-12 23:42:15</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-12/"/>
      <updated>2021-08-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-12/</id>
      <content type="html">
        <![CDATA[
      <p>往 week 21 邁進～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-17 18:46:53</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-17/"/>
      <updated>2021-08-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-17/</id>
      <content type="html">
        <![CDATA[
      <h2>week21</h2>
<h3>【今日進度】</h3>
<p>這兩天把 React 基礎課程影片看完， 這次採用看影片加手寫筆記，之後再用 vscode 實作一次的方式學習。</p>
<p>以前對 React 一直是學一點學一點，但是整體概念還是沒有很連貫，透過跟影片實作一遍覺得有增加理解力。</p>
<h3>【學習心得】</h3>
<p>把番茄鐘改成 50 / 10 就像在學校上課一樣的時間，昨天認真了 6 小時，今天 4 小時。</p>
<p>雖然手寫筆記以後不會翻來看，就真的像是邊上課邊做筆記，但是看到自己洋洋灑灑寫了 10 頁真的有一種爽感ＸＤ</p>
<p>筆記本裡面寫了從以前學 HTML、CSS、PHP、JAVA 的東西，之前翻到的時候真的覺得很驚訝，原來以前自己這麼認真</p>
<p>還在前公司的時候切版很快，可能有一部分原因是寫過筆記？<br>
其實我也不知道，這可能是一個很笨的方法，但也可能就是自己增加記憶力的一種方式</p>
<hr>
<p>新增 - 用解構 [...todos]<br>
刪除 - 用 filter<br>
修改 - 用 map<br>
JSX 沒有迴圈沒有 if else<br>
換成 {todo.isDone &amp;&amp; '已完成' }<br>
或三元運算子 { a ? bb : cc}</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>React 只會更新畫面中有變化的部分</title>
      <link href="https://blog.roroiii.com/posts/react/react-change-state/"/>
      <updated>2021-08-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-change-state/</id>
      <content type="html">
        <![CDATA[
      <p>React 只會更新畫面中有變化的部分
useStatus</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> <span class="token punctuation">[</span>count<span class="token punctuation">,</span> setCount<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>資料預設值<span class="token operator">></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
<p>count 是透過 <code>useState()</code> 產生的變數，這是我們希望監控的變數
setCount 則是 <code>useState()</code> 產生用來修改 count 這個資料的方法
<code>useState()</code> 這個方法的參數中可以帶入資料的預設值</p>
<p>下面這些例子都是合法的：</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> <span class="token punctuation">[</span>price<span class="token punctuation">,</span> setPrice<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token punctuation">[</span>description<span class="token punctuation">,</span> setDescription<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">'This is description'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token punctuation">[</span>product<span class="token punctuation">,</span> setProduct<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'iPhone 11'</span><span class="token punctuation">,</span>
  <span class="token literal-property property">price</span><span class="token operator">:</span> <span class="token number">24900</span><span class="token punctuation">,</span>
  <span class="token literal-property property">os</span><span class="token operator">:</span> <span class="token string">'iOS'</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>React 的 controller component 與 uncontrolled</title>
      <link href="https://blog.roroiii.com/posts/react/react-controller-component-and-uncontrolled/"/>
      <updated>2021-08-17T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-controller-component-and-uncontrolled/</id>
      <content type="html">
        <![CDATA[
      <p>此為 React 學習筆記，純粹用自己好記憶的方式所寫喔～</p>
<p>常見表單的控制方法，分為
<strong>controller component (有被 React 控制著)</strong><br>
<strong>uncontrolled (沒有被 React 控制)</strong></p>
<hr>
<h2>controller component</h2>
<p>使用 <code>value={value} onChange={handleInputClick}</code> 做 controller</p>
<p><code>setTodos([value,...todos])</code> 這個方法會新增一個新的陣列，產生新的 todo。
這邊要注意的是不能用 <code>push</code> 對陣列做改變，因為 <code>push</code> 是改變原來的陣列
React 每次重新呼叫 function 會認為值沒有改變，所以畫面就不會變。</p>
<p><code> setValue(e.target.value)</code> 會拿到輸入的值</p>
<p>App.js</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> styled <span class="token keyword">from</span> <span class="token string">'styled-components'</span>
<span class="token keyword">import</span> TodoItem <span class="token keyword">from</span> <span class="token string">'./TodoItem'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useState <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>

<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>todos<span class="token punctuation">,</span> setTodos<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token punctuation">[</span>value<span class="token punctuation">,</span> setValue<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleButtonClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span><span class="token punctuation">[</span>value<span class="token punctuation">,</span> <span class="token operator">...</span>todos<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// 產生新的 todo</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleInputClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span> <span class="token comment">// 拿到 input 輸入的值</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>div className<span class="token operator">=</span><span class="token string">"App"</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>input type<span class="token operator">=</span><span class="token string">"text"</span> value<span class="token operator">=</span><span class="token punctuation">{</span>value<span class="token punctuation">}</span> onChange<span class="token operator">=</span><span class="token punctuation">{</span>handleInputClick<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>button onClick<span class="token operator">=</span><span class="token punctuation">{</span>handleButtonClick<span class="token punctuation">}</span><span class="token operator">></span>Add todo<span class="token operator">&lt;</span><span class="token operator">/</span>button<span class="token operator">></span>
      <span class="token punctuation">{</span>todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo<span class="token punctuation">,</span> index</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>
        <span class="token operator">&lt;</span>TodoItem key<span class="token operator">=</span><span class="token punctuation">{</span>index<span class="token punctuation">}</span> content<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> App</code></pre>
<hr>
<h2>uncontrolled</h2>
<p>有二種方法，一種是常見的 <code>ducument.querySelector</code> 抓取 className 名稱
一種是用 <code>useRef</code> 的方式。</p>
<p><code>ducument.querySelector</code> 抓取 className 名稱</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
   <span class="token keyword">const</span> <span class="token function-variable function">handleButtonClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'.input-todo'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">value</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
      <span class="token operator">...</span>
       <span class="token operator">&lt;</span>input className<span class="token operator">=</span><span class="token string">"input-todo"</span> type<span class="token operator">=</span><span class="token string">"text"</span>  <span class="token operator">/</span><span class="token operator">></span>
      <span class="token operator">...</span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<p>用 <code>useRef</code> 的方式
首先 import <code>useRef</code> 來用。
設定變數 <code>const inputRef = useRef()</code>
input 加上 <code>ref={inputRef}</code> 。</p>
<p><code>useRef</code> 可以像 state 一樣操作，但是在重新 Render 的時候不會改變。</p>
<p><code>console.log(inputRef.current.value)</code> 可以查看取到的值
在這裡 <code>inputRef</code> 是物件，物件裡面會有 <code>current</code> ，可以拿到所選的物件(<code>&lt;input type=&quot;text&quot;&gt;</code>)，是 React 提供的一種方法。
不太懂的話可以自己 console.log 幾次就知道了</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token punctuation">{</span> useState<span class="token punctuation">,</span> useRef <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>

<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>todos<span class="token punctuation">,</span> setTodos<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token punctuation">[</span>value<span class="token punctuation">,</span> setValue<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> inputRef <span class="token operator">=</span> <span class="token function">useRef</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleButtonClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>inputRef<span class="token punctuation">.</span>current<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span><span class="token punctuation">[</span>value<span class="token punctuation">,</span> <span class="token operator">...</span>todos<span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleInputClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>div className<span class="token operator">=</span><span class="token string">"App"</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>input ref<span class="token operator">=</span><span class="token punctuation">{</span>inputRef<span class="token punctuation">}</span> type<span class="token operator">=</span><span class="token string">"text"</span> onChange<span class="token operator">=</span><span class="token punctuation">{</span>handleInputClick<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>button onClick<span class="token operator">=</span><span class="token punctuation">{</span>handleButtonClick<span class="token punctuation">}</span><span class="token operator">></span>Add todo<span class="token operator">&lt;</span><span class="token operator">/</span>button<span class="token operator">></span>
      <span class="token punctuation">{</span>todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo<span class="token punctuation">,</span> index</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>
        <span class="token operator">&lt;</span>TodoItem key<span class="token operator">=</span><span class="token punctuation">{</span>index<span class="token punctuation">}</span> content<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>上面的範例都是用 <code>index</code> 當作 key 的值，但是這樣寫比較不好，應該讓每個 todo 都有獨特的 id ，所以可以改成這樣：</p>
<p>App.js</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> TodoItem <span class="token keyword">from</span> <span class="token string">'./TodoItem'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useState <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>

<span class="token keyword">let</span> id <span class="token operator">=</span> <span class="token number">2</span> <span class="token comment">// 因為 function 每次都會重新被呼叫，所以 id 要放在 function 外面</span>
<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>todos<span class="token punctuation">,</span> setTodos<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token literal-property property">id</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token literal-property property">content</span><span class="token operator">:</span> <span class="token string">'abc'</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token punctuation">[</span>value<span class="token punctuation">,</span> setValue<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleButtonClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        id<span class="token punctuation">,</span>
        <span class="token literal-property property">content</span><span class="token operator">:</span> value<span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token operator">...</span>todos<span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
    id<span class="token operator">++</span> <span class="token comment">// 由 setTodos 操作 state 讓 id + 1</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleInputClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token comment">// key 的值改成 todo.id</span>
  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>div className<span class="token operator">=</span><span class="token string">"App"</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>input type<span class="token operator">=</span><span class="token string">"text"</span> value<span class="token operator">=</span><span class="token punctuation">{</span>value<span class="token punctuation">}</span> onChange<span class="token operator">=</span><span class="token punctuation">{</span>handleInputClick<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>button onClick<span class="token operator">=</span><span class="token punctuation">{</span>handleButtonClick<span class="token punctuation">}</span><span class="token operator">></span>Add todo<span class="token operator">&lt;</span><span class="token operator">/</span>button<span class="token operator">></span>
      <span class="token punctuation">{</span>todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>
        <span class="token operator">&lt;</span>TodoItem key<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>id<span class="token punctuation">}</span> todo<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span>
      <span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> App</code></pre>
<p>TodoItem.js
增加一個 <code>data-todo-id={todo.id}</code> 確認 id 是不是有正確</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token string">'./App.css'</span>
<span class="token keyword">import</span> styled <span class="token keyword">from</span> <span class="token string">'styled-components'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> ThemeProvider <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'styled-components'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> <span class="token constant">MEDIA_QUERY_M</span><span class="token punctuation">,</span> <span class="token constant">MEDIA_QUERY_L</span> <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./constants/breakpoint'</span>

<span class="token keyword">const</span> theme <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">colors</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">primary_300</span><span class="token operator">:</span> <span class="token string">'#ff0000'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">primary_600</span><span class="token operator">:</span> <span class="token string">'#dd0000'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">primary_900</span><span class="token operator">:</span> <span class="token string">'#yy0000'</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">const</span> Title <span class="token operator">=</span> styled<span class="token punctuation">.</span>h1<span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  font-size: 36px;

  </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token punctuation">(</span><span class="token parameter">props</span><span class="token punctuation">)</span> <span class="token operator">=></span>
    props<span class="token punctuation">.</span>size <span class="token operator">===</span> <span class="token string">'XL'</span> <span class="token operator">&amp;&amp;</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
    font-size: 20px;
  </span><span class="token template-punctuation string">`</span></span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">const</span> TodoContent <span class="token operator">=</span> styled<span class="token punctuation">.</span>div<span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  color: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token punctuation">(</span><span class="token parameter">props</span><span class="token punctuation">)</span> <span class="token operator">=></span> props<span class="token punctuation">.</span>theme<span class="token punctuation">.</span>colors<span class="token punctuation">.</span>primary_300<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">;
  font-size: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token punctuation">(</span><span class="token parameter">props</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>props<span class="token punctuation">.</span>size <span class="token operator">===</span> <span class="token string">'XL'</span> <span class="token operator">?</span> <span class="token string">'20px'</span> <span class="token operator">:</span> <span class="token string">'16px'</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">;
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">const</span> BlackTodoItem <span class="token operator">=</span> <span class="token function">styled</span><span class="token punctuation">(</span>TodoItem<span class="token punctuation">)</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  background: #000000;
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">const</span> TodoItemWrapper <span class="token operator">=</span> styled<span class="token punctuation">.</span>div<span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  padding: 20px;
  border: solid 1px #000000;
  display: flex;
  align-items: center;
  justify-content: space-between;

  </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token constant">MEDIA_QUERY_M</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> {
    border: solid 2px red;
  }
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">const</span> Button <span class="token operator">=</span> styled<span class="token punctuation">.</span>button<span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  padding: 4px;
  background-color: blue;
  color: #ffffff;
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">const</span> ReButton <span class="token operator">=</span> <span class="token function">styled</span><span class="token punctuation">(</span>Button<span class="token punctuation">)</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">
  background-color: #ff0000;
</span><span class="token template-punctuation string">`</span></span>

<span class="token keyword">function</span> <span class="token function">Counter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">alert</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">function</span> <span class="token function">TodoItem</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> className<span class="token punctuation">,</span> size<span class="token punctuation">,</span> todo<span class="token punctuation">,</span> title <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>ThemeProvider theme<span class="token operator">=</span><span class="token punctuation">{</span>theme<span class="token punctuation">}</span><span class="token operator">></span>
      <span class="token operator">&lt;</span>Title<span class="token operator">></span><span class="token punctuation">{</span>title<span class="token punctuation">}</span><span class="token operator">&lt;</span><span class="token operator">/</span>Title<span class="token operator">></span>
      <span class="token operator">&lt;</span>TodoItemWrapper className<span class="token operator">=</span><span class="token punctuation">{</span>className<span class="token punctuation">}</span> data<span class="token operator">-</span>todo<span class="token operator">-</span>id<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>id<span class="token punctuation">}</span><span class="token operator">></span>
        <span class="token operator">&lt;</span>TodoContent size<span class="token operator">=</span><span class="token punctuation">{</span>size<span class="token punctuation">}</span><span class="token operator">></span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>content<span class="token punctuation">}</span><span class="token operator">&lt;</span><span class="token operator">/</span>TodoContent<span class="token operator">></span>
        <span class="token operator">&lt;</span>div<span class="token operator">></span>
          <span class="token operator">&lt;</span>Button<span class="token operator">></span>已完成<span class="token operator">&lt;</span><span class="token operator">/</span>Button<span class="token operator">></span>
          <span class="token operator">&lt;</span>ReButton<span class="token operator">></span>刪除<span class="token operator">&lt;</span><span class="token operator">/</span>ReButton<span class="token operator">></span>
        <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
      <span class="token operator">&lt;</span><span class="token operator">/</span>TodoItemWrapper<span class="token operator">></span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>ThemeProvider<span class="token operator">></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> TodoItem</code></pre>
<p>這樣就有 id 的值囉～</p>
<p><img src="https://static.coderbridge.com/img/roroiii/44f0c00ca015482e9a5d2c6d4f12ac16.png" alt=""></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-24 19:42:51</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-24/"/>
      <updated>2021-08-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-24/</id>
      <content type="html">
        <![CDATA[
      <h2>week21</h2>
<h3>【今日進度】</h3>
<p>今日總學習時數是四個小時～<br>
學習 useEffect、useLayoutEffect 跟 lazy initializers<br>
跟著實作的時候想把 todos 的 id 改成用 useRef 的方式處理，但是一直跑出 NaN 沒辨法抓到值，後來重看影片之後發現原來 <input ref={}> 這裡不用放值就可以用了，是要抓值的時候才會用到 ref={}</p>
<p>明天會照著影片試試看自己寫一個 hook 的方式</p>
<h3>【其他嘗試】</h3>
<p>下午跑去看中醫，沒想到問診就用了 20 多分鐘，是滿細心的醫生。<br>
一直以來都知道自己體質偏濕冷，沒想到糖跟乳製品都會影響腸胃道，讓身體水氣排不出去，冰的茶也不能喝，都很寒</p>
<p>但是又很想吃，一直斷斷續續地吃～<br>
雖然知道戒糖一個月就會有很大的改善<br>
但是醫生<br>
我一定會堅定地偷吃的（今天就偷吃一顆頻果吧我好棒＾＾）</p>
<hr>
<h3>【今日進度】</h3>
<p>預計把 [FE302] React 基礎 - hooks 版本 課程全部看完，並邊做筆記</p>
<h3>【學習心得】</h3>
<p>每次寫下明日學習進度要做什麼有種立下 flag ，就不會完成 QQ<br>
上週因為身體不舒服結果學習進度也停擺了幾天<br>
平均下來認真的天數大概也只有一週 2-3 天<br>
隨著全職學習的天數越來越多，心情上也是有變焦慮的感覺<br>
可能也跟晚上很難入睡，影響身體狀態有關係<br>
以前晚上都睡得超熟的我竟然也體會到失眠的痛苦拉(T 皿 T)/</p>
<p>昨天複習看了一下 [ALG101] 發現都沒什麼印象，會想辦法再把內容再補回腦袋裡面</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-25 11:02:58</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-25/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-25/</id>
      <content type="html">
        <![CDATA[
      <h3>【今日規劃】</h3>
<p>把 [FE302] React 基礎 - hooks 版本 課程全部看完，並邊做筆記<br>
看本週複習週影片</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 翻譯 繁轉簡 轉換編碼</title>
      <link href="https://blog.roroiii.com/posts/php/php-change-unicode/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-change-unicode/</id>
      <content type="html">
        <![CDATA[
      <p>利用 php 內建編碼，轉換編碼即可。</p>
<pre class="language-php"><code class="language-php">先把要轉換的資料從資料庫撈出來
之後對資料執行下面的程式

 <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'UTF-8'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'BIG5'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'BIG5'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'GB2312'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$out</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'GB2312'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'UTF-8'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token variable">$data</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span>
    <span class="token variable">$trans_column</span> <span class="token operator">=></span> <span class="token variable">$out</span><span class="token punctuation">,</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>

最後再更新到資料表就可以囉</code></pre>
<p>ci 版本</p>
<p>可以寫成獨立 function 之後調用</p>
<pre class="language-php"><code class="language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Trans</span>
<span class="token punctuation">{</span>
	<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">trans</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span>
	<span class="token punctuation">{</span>

		<span class="token variable">$table_name1</span> <span class="token operator">=</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'table_name1'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
		<span class="token variable">$trans_source</span> <span class="token operator">=</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'trans_source'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
		<span class="token variable">$trans_column</span> <span class="token operator">=</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'trans_column'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
		<span class="token variable">$column_name</span> <span class="token operator">=</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'column_name'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
		<span class="token variable">$column_id_name</span> <span class="token operator">=</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'column_id_name'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>


		<span class="token variable">$CI</span> <span class="token operator">=</span> <span class="token operator">&amp;</span><span class="token function">get_instance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   <span class="token comment">// 處理 ci 底層的運作</span>
		<span class="token variable">$CI</span><span class="token operator">-></span><span class="token property">db2</span> <span class="token operator">=</span> <span class="token variable">$CI</span><span class="token operator">-></span><span class="token property">load</span><span class="token operator">-></span><span class="token function">database</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'db3'</span><span class="token punctuation">,</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token variable">$CI</span><span class="token operator">-></span><span class="token property">db2</span><span class="token operator">-></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token variable">$table_name1</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">result_array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>



        <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$a</span> <span class="token keyword">as</span> <span class="token variable">$value</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>

            <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'UTF-8'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'BIG5'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'BIG5'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'GB2312'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$out</span> <span class="token operator">=</span> <span class="token function">iconv</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'GB2312'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'UTF-8'</span><span class="token punctuation">,</span> <span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$trans_source</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

            <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span>
                <span class="token variable">$trans_column</span> <span class="token operator">=></span> <span class="token variable">$out</span><span class="token punctuation">,</span>
            <span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$CI</span><span class="token operator">-></span><span class="token property">db2</span><span class="token operator">-></span><span class="token function">where</span><span class="token punctuation">(</span><span class="token variable">$column_id_name</span><span class="token punctuation">,</span><span class="token variable">$value</span><span class="token punctuation">[</span><span class="token variable">$column_id_name</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$CI</span><span class="token operator">-></span><span class="token property">db2</span><span class="token operator">-></span><span class="token function">update</span><span class="token punctuation">(</span><span class="token variable">$table_name1</span><span class="token punctuation">,</span><span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p>使用</p>
<pre class="language-php"><code class="language-php"><span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">index</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token comment">// news_title_tw</span>
         <span class="token variable">$news_title</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span>
             <span class="token string single-quoted-string">'table_name1'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'news'</span><span class="token punctuation">,</span> <span class="token comment">//資料表</span>
             <span class="token string single-quoted-string">'trans_source'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'news_title_tw'</span><span class="token punctuation">,</span> <span class="token comment">//轉換來源</span>
             <span class="token string single-quoted-string">'trans_column'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'news_title_cn'</span><span class="token punctuation">,</span> <span class="token comment">//被轉換欄位</span>
             <span class="token string single-quoted-string">'column_id_name'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'news_id'</span> <span class="token comment">//轉換主鍵</span>
        <span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">load</span><span class="token operator">-></span><span class="token function">library</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Trans'</span><span class="token punctuation">,</span><span class="token variable">$news_title</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">Trans</span><span class="token operator">-></span><span class="token function">trans</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span></code></pre>
<p>但是遇到文章那種比較複雜的內容，就不建議用這個方法，因為會有滿多錯誤的 QQ
文章推薦用 繁化姬 或 OpenCC API 的方式做轉換</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 會員管理系統 - 超入門版登入串接</title>
      <link href="https://blog.roroiii.com/posts/php/php-member-api/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-member-api/</id>
      <content type="html">
        <![CDATA[
      <p>開始製作登入畫面的連線，這裡用到 <code>mysqli_num_rows($result) == 1</code> 來判斷資料庫裡有沒有重複的資料。</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM usermember WHERE Username = 'Tina' AND Password = '999999'"</span><span class="token punctuation">;</span>

	<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_num_rows</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string single-quoted-string">'登入成功'</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string single-quoted-string">'登入失敗'</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

<span class="token delimiter important">?></span></span></code></pre>
<p>上面測試成功後，把登入的帳號跟密碼用變數取代，再用 Postman 測試有沒有成功。</p>
<p><code>mysqli_num_rows($result) == 1</code> 這裡的判斷值也改成 <code>true</code> 跟 <code>false</code> ，讓前端去處理要顯示什麼東西。</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$p_username</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Username"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_password</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Password"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM usermember WHERE Username = '<span class="token interpolation"><span class="token variable">$p_username</span></span>' AND Password = '<span class="token interpolation"><span class="token variable">$p_password</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_num_rows</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>成功之後就開始用 Ajax 寫串接啦~ <code>password: $(&quot;#Password&quot;).val()</code> 是取得前端畫面輸入框的值跟資料庫做對比，<code>if(data)</code> 是判斷登入成功之後執行什麼事情。</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">></span></span><span class="token plain-text">
    	$(function(){
    		$("#btn_login").bind("click", login);

    		function login(){
    			$.ajax({
    				url: '20200526-login.php',
    				type: 'POST',
    				dataType: 'json',
    				data: {username:$("#username").val(), password: $("#Password").val()},
    				success: show,
    				error: function(){
    					alert('連線錯誤');
    				}

    			})
    		}
    	});

    	function show(data){
    		if(data){
    			alert('登入成功');
    			location.href = "20200526-member-list.html";
    		}else{
    			alert('登入失敗');
    		};
    	};
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span></code></pre>
<p>在開始新增或是測試帳號有沒有重複，要先記得把資料庫重複的資料清空，判斷才會正確喔!
<code>$_POST[&quot;Username&quot;]</code> 的值要跟資料庫的名稱相同。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 會員管理系統 - 新增 &amp; 修改 &amp; 刪除</title>
      <link href="https://blog.roroiii.com/posts/php/php-member-cru/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-member-cru/</id>
      <content type="html">
        <![CDATA[
      <p>這是一個偷懶的小孩，時隔一年多才把筆記上傳的系列文 QQ</p>
<h2>新增資料 INSERT</h2>
<p>INSERT INTO VALUES</p>
<p><code>$sql = &quot;INSERT INTO Table名稱(欄位1, 欄位2, 欄位3) VALUES('欄位1的值', '欄位2的值', '欄位3的值')&quot;;</code></p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

<span class="token comment">//建立連線</span>
<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">//判斷連線式成功</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"連線錯誤"</span> <span class="token operator">.</span> <span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">//寫入資料</span>
<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"INSERT INTO usermember(Username, Password, Email)
VALUES('Mary', '123456', 'abc@mail.com')"</span><span class="token punctuation">;</span>

<span class="token comment">//先寫資料連線與執行，之後再寫判斷式。 mysqli_query($conn, $sql);</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料成功'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
	<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料失敗'</span> <span class="token operator">.</span> <span class="token variable">$sql</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"&lt;br>"</span> <span class="token operator">.</span> <span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   <span class="token comment">//$conn->close(); 也可以這樣寫</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>第二步嘗試用變數取代固定的 VALUES 值 ，用 POST 接收資料，製作前後端分離的概念。</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token comment">//設定變數來存放要接收的資料</span>
<span class="token variable">$p_username</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Username"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$p_password</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Password"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$p_Email</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Email"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"連線錯誤"</span> <span class="token operator">.</span> <span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">//VALUES 裡的值代換成自訂變數</span>
<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"INSERT INTO usermember(Username, Password, Email)
VALUES('<span class="token interpolation"><span class="token variable">$p_username</span></span>', '<span class="token interpolation"><span class="token variable">$p_password</span></span>', '<span class="token interpolation"><span class="token variable">$p_Email</span></span>')"</span><span class="token punctuation">;</span>

<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料成功'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
	<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料失敗'</span> <span class="token operator">.</span> <span class="token variable">$sql</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"&lt;br>"</span> <span class="token operator">.</span> <span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>使用 Postman 測試連線成不成功，這裡要注意的是 Key 名稱要跟資料庫的名稱相同。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/e1b545ac39884026956f172c42fd4373.png" alt=""></p>
<p>但是上面這樣寫在 PHP 頁面重新整理就會新增一筆空白的資料，所以我們可以加入判斷防止這件事情發生。</p>
<pre class="language-php"><code class="language-php"><span class="token comment">//判斷這三個值都不為空值才可以執行，否則就出現警告訊息。</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$p_username</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$p_password</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$p_Email</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
			<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料成功'</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
			<span class="token keyword">echo</span> <span class="token string single-quoted-string">'新增資料失敗'</span> <span class="token operator">.</span> <span class="token variable">$sql</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"&lt;br>"</span> <span class="token operator">.</span> <span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"不允許新增空白資料。"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>
<h2>更新資料 UPDATE</h2>
<p>UPDATE SET WHERE</p>
<p><code>**$sql = &quot;UPDATE [Table名稱] SET [資料表名稱] = '值' WHERE  [Primary key] = 值&quot;;**</code></p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token comment">//建立連線</span>
	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token punctuation">;</span>

	<span class="token comment">//更新資料</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"UPDATE usermember SET Username = 'TINA' WHERE ID = 1"</span><span class="token punctuation">;</span>

	<span class="token comment">//判斷更新資料有沒有成功</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"更新成功"</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"更新失敗"</span><span class="token operator">.</span><span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>也可以同時修改多筆資料</p>
<pre class="language-php"><code class="language-php"><span class="token comment">//更新資料</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"UPDATE usermember
	SET Username = 'Tina', Password = '999999', Email = 'tina@gmail.com'
	WHERE ID = 1"</span><span class="token punctuation">;</span></code></pre>
<p><img src="https://static.coderbridge.com/img/roroiii/547ee5c78c5148dca15ef04a3a06b473.png" alt=""></p>
<p>第二步同樣我們也可以用變數取代固定的值</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token comment">//設定變數接收值</span>
	<span class="token variable">$p_id</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"ID"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_username</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Username"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_password</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Password"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_email</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Email"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token comment">//更新資料使用變數</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"UPDATE usermember
	SET Username = '<span class="token interpolation"><span class="token variable">$p_username</span></span>', Password = '<span class="token interpolation"><span class="token variable">$p_password</span></span>', Email = '<span class="token interpolation"><span class="token variable">$p_email</span></span>'
	WHERE ID = '<span class="token interpolation"><span class="token variable">$p_id</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token comment">//判斷如果值有內容才可以更新</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$p_id</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$p_username</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$p_password</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$p_email</span> <span class="token operator">!=</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token comment">//判斷更新資料有沒有成功</span>
		<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
			<span class="token keyword">echo</span> <span class="token string double-quoted-string">"更新成功"</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
			<span class="token keyword">echo</span> <span class="token string double-quoted-string">"更新失敗"</span><span class="token operator">.</span><span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"資料更新不能空白。"</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>使用 Postman 測試看看是否成功</p>
<p><img src="https://static.coderbridge.com/img/roroiii/dc9868ef04314634a38d2006f0559a1b.png" alt=""></p>
<h2>刪除資料 DELETE</h2>
<p>DELETE FROM WHERE</p>
<p>跟上面相同，先設定一個變數置換 ID 的位置，就可以動態的刪除不同的資料囉！</p>
<p><code>**$sql = &quot;DELETE FROM  [Table名稱]  WHERE [Primary key]&quot;;**</code></p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$p_id</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"ID"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token comment">//刪除資料</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"DELETE FROM usermember WHERE ID = '<span class="token interpolation"><span class="token variable">$p_id</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"刪除成功!"</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string double-quoted-string">"刪除失敗!"</span> <span class="token operator">.</span> <span class="token function">mysqli_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 會員管理系統 - CRUD概念 &amp; 前後端分離介面</title>
      <link href="https://blog.roroiii.com/posts/php/php-member-crud/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-member-crud/</id>
      <content type="html">
        <![CDATA[
      <p>以下預設你已經裝好了 XAMPP ，也會使用這套軟體。</p>
<p>這篇文章會使用的語言：</p>
<ul>
<li>PHP &amp; MySQL</li>
<li>HTML ( Bootstrap )</li>
<li>JavaScript ( jQuery )</li>
</ul>
<p>使用到的 函數：</p>
<p>PHP &amp; MySQL</p>
<hr>
<ul>
<li>mysqli_connect() ; mysqli_connect_error()</li>
<li>mysqli_query()</li>
<li>mysqli_num_rows()</li>
<li>mysqli_fetch_assoc()</li>
<li>json_encode()</li>
<li>mysqli_close()</li>
</ul>
<p>JavaScript ( jQuery )</p>
<hr>
<ul>
<li>alert()</li>
<li>append()</li>
<li>$.ajax()</li>
</ul>
<h2>1.先建立資料庫 member</h2>
<hr>
<p><img src="https://static.coderbridge.com/img/roroiii/8de0a04477bb4168a7ea11c4513cea8b.png" alt=""></p>
<h2>2.創建一個管理 member 的管理帳號</h2>
<hr>
<p>不建議用最高權限管理，有可能手誤或程式寫錯就把系統整個砍掉！</p>
<p><img src="https://static.coderbridge.com/img/roroiii/44110768ae9d4e33a872e8689ab2c778.png" alt=""></p>
<p><img src="https://static.coderbridge.com/img/roroiii/c61fe492bd534ca2a7a0e9f4117a5a75.png" alt=""></p>
<p>指定資料庫的 管理權限不要勾選</p>
<p>資料表 給只管理 member 的權限</p>
<p>再重新登入之後就會看到只有 menber 這個資料庫。</p>
<p>使用者帳號這是練習使用 'member@localhost' 比較好記憶，但是在實務上帳號不可以用一樣的唷，危險危險。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/b90e6fad9f1049d4b27da2ce29c4e467.png" alt=""></p>
<p>如果不能重新登入，就是要到 phpMyAdmin 資料夾裡的 config.inc.php 檔案修改成使用 http</p>
<p>以下僅供練習，真正實務上要設計再強\強度高的密碼。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/9f4053de47f844269b9228a80cf5554b.png" alt=""></p>
<pre class="language-php"><code class="language-php"><span class="token comment">/* Authentication type and info */</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Servers'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'auth_type'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http'</span><span class="token punctuation">;</span>  <span class="token comment">//選擇使用 http 網域登入</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Servers'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'user'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'root'</span><span class="token punctuation">;</span>       <span class="token comment">//這裡輸入你的帳號</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Servers'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'password'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>       <span class="token comment">//這裡輸入密碼</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Servers'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'extension'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'mysqli'</span><span class="token punctuation">;</span>  <span class="token comment">//選擇是哪個資料庫</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Servers'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'AllowNoPassword'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>  <span class="token comment">//要不要開啟密碼登入資料庫</span>
<span class="token variable">$cfg</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Lang'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span></code></pre>
<p>資料庫的地方也會顯示沒有建立新資料庫的權限</p>
<p><img src="https://static.coderbridge.com/img/roroiii/1e35aa61970c4039ad767f209669878f.png" alt=""></p>
<h2>3.建立 PHP 連線</h2>
<hr>
<p>這裡可以參考 W3School 的 <a href="https://www.w3schools.com/php/php_mysql_connect.asp"><strong>PHP Connect to MySQL</strong></a> 練習寫一遍，以下是用 Example (MySQLi Procedural) 的範例練習。</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>

	<span class="token comment">//建立連線</span>
	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">//測試連線有沒失敗</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span> <span class="token operator">.</span> <span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token keyword">echo</span> <span class="token string single-quoted-string">'連線成功'</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>加上 <code>mysqli_connect_error()</code> 連線失敗會有錯誤訊息，就可以判斷是哪裡有 Bug</p>
<p><img src="https://static.coderbridge.com/img/roroiii/7f155f5d724a4245898a904761b625f3.png" alt=""></p>
<p>連線失敗 Access denied for user 'member'@'localhost' (using password: YES)</p>
<blockquote>
<p>小知識：<strong>CRUD</strong>
Create Read Update Delete
常用在資料庫連線的說法，再回去看 W3School 的 MySQL 列表是不是比較清楚明白了呢？</p>
</blockquote>
<h2>4.建立資料庫裡的資料表連線</h2>
<hr>
<p>因為一步驟一步驟學，所以把 PHP 連線跟資料表連線分開紀錄。有部分程式碼是一樣的。</p>
<p>參考 W3School 的 <a href="https://www.w3schools.com/php/php_mysql_select.asp">PHP MySQL Select Data</a></p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>    <span class="token comment">//資料庫 member</span>

	<span class="token comment">//連線資料庫</span>
	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">//判斷連線是否失敗</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span> <span class="token operator">.</span> <span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token comment">//選擇要撈取的資料， * 表示全部。</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'SELECT * FROM usermember'</span><span class="token punctuation">;</span>

	<span class="token comment">//找出 result 的語法</span>
	<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">//判斷資料表有沒有內容，如果是空的就不執行查詢</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_num_rows</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_assoc</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>   <span class="token comment">//因為不知道資料有多少筆，所以用 While 迴圈</span>
			<span class="token keyword">echo</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Username'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string single-quoted-string">'沒有資料內容'</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
	<span class="token comment">//每次連線完都要寫關閉，才不會讓伺服器負載過大</span>
	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>這裡畫一個流程圖</p>
<h2>5.讓 PHP 的 MySQL 資料轉成 JSON 格式</h2>
<hr>
<p>修改上一步驟的 if...else 程式碼。</p>
<pre class="language-php"><code class="language-php"><span class="token comment">//新增一個 PHP 陣列，用來轉成 Json 格式</span>
	<span class="token variable">$myarray</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">//判斷資料表有沒有內容，如果是空的就不執行查詢</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_num_rows</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_assoc</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
			<span class="token comment">// echo $row['Username'];</span>
			<span class="token variable">$myarray</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$row</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
		<span class="token comment">//轉成 json 語法</span>
		<span class="token keyword">echo</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$myarray</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token string single-quoted-string">'沒有資料內容'</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span></code></pre>
<p>解釋一下 <code>$myarray = array()</code> 是新增一個 PHP 陣列，目的是要把這個陣列轉換成 JSON 格式。由於 PHP 內建把陣列轉換成 JSON 的函數 <code>json_encode()</code> ，所以最後用 echo 就好。</p>
<p>還有 While 迴圈的地方，我們要把輸出結果用陣列取代，所以改寫成 <code>$myarray[] = $row</code> 。</p>
<p>如果只有寫 <code>$myarray = $row</code> ，就只會顯示第一筆資料。</p>
<p>把它想像成是抽屜一樣，多了 <strong>[ ]</strong> 就可以打開每個抽屜放入你要的資料，讓每筆資料都正常顯示了。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/190cdb0af046414892d9ffe2abd68759.jpg" alt=""></p>
<p><img src="https://static.coderbridge.com/img/roroiii/a1a3dfc9f0244bac959cf0070dc1b08d.jpg" alt=""></p>
<p>他們之間的關係圖應該是長這樣，有空再整理畫一張。</p>
<h2>6.開始寫個前端介面，接收資料庫的 data 囉</h2>
<hr>
<p>使用的是 Bootstrap 簡單做一個表格，用 jQuery 的 Ajax 函數串接資料顯示出來。</p>
<pre class="language-html"><code class="language-html">這是完整的程式碼，以下會一一說明解釋。
<span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>en<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">></span></span>
    <span class="token comment">&lt;!-- Required meta tags --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, initial-scale=1, shrink-to-fit=no<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>

    <span class="token comment">&lt;!-- Bootstrap CSS --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span>
      <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span>
      <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">/></span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">></span></span>會員資料系統<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>row<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>col-md-8 offset-2<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>table</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>table<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>thead</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>標號<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>姓名<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>註冊時間<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>信箱<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>thead</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tbody</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>member_list<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>001<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>TT<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>465656<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>d@mail<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tbody</span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>table</span><span class="token punctuation">></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>

    <span class="token comment">&lt;!-- Optional JavaScript --></span>
    <span class="token comment">&lt;!-- jQuery first, then Popper.js, then Bootstrap JS --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://code.jquery.com/jquery-3.4.1.min.js<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span>
      <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span>
      <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript">
      <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        $<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
          <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'GET'</span><span class="token punctuation">,</span>
          <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'http://www/mobileweb/20200515_php_Server_dataconn_to_json.php'</span><span class="token punctuation">,</span>
          <span class="token literal-property property">dataType</span><span class="token operator">:</span> <span class="token string">'json'</span><span class="token punctuation">,</span>
          <span class="token literal-property property">success</span><span class="token operator">:</span> show<span class="token punctuation">,</span>
          <span class="token function-variable function">error</span><span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'error!'</span><span class="token punctuation">)</span>
          <span class="token punctuation">}</span><span class="token punctuation">,</span>
        <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token keyword">function</span> <span class="token function">show</span><span class="token punctuation">(</span><span class="token parameter">data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> data<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
          str <span class="token operator">=</span>
            <span class="token string">'&lt;tr>&lt;td>'</span> <span class="token operator">+</span>
            data<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token constant">ID</span> <span class="token operator">+</span>
            <span class="token string">'&lt;/td>&lt;td>'</span> <span class="token operator">+</span>
            data<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>Username <span class="token operator">+</span>
            <span class="token string">'&lt;/td>&lt;td>'</span> <span class="token operator">+</span>
            data<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>Created_at <span class="token operator">+</span>
            <span class="token string">'&lt;/td>&lt;td>'</span> <span class="token operator">+</span>
            data<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>Email <span class="token operator">+</span>
            <span class="token string">'&lt;/td>&lt;/tr>'</span>

          <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#member_list'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
    </span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">></span></span></code></pre>
<p>特別要注意的是直接使用 Bootstrap 的檔案時，<strong>使用的 jQuery 檔案不能是 slim 檔</strong>，因為這個檔案不包含 Ajax 的語法，所以我們要修改 Bootstrap 預設引入的檔案。</p>
<pre class="language-html"><code class="language-html"><span class="token comment">&lt;!-- Optional JavaScript --></span>
    <span class="token comment">&lt;!-- jQuery first, then Popper.js, then Bootstrap JS --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://code.jquery.com/jquery-3.4.1.min.js<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js<span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo<span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js<span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6<span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">></span></span></code></pre>
<p>然後把要串接的資料程式寫在引入檔的下面，或是另外建一個 JavaScript 檔寫也可以。</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">></span></span><span class="token plain-text">
    	$(function(){
    		$.ajax({
    			type: "GET",
    			url: "http://www/mobileweb/20200515_php_Server_dataconn_to_json.php",
    			dataType: "json",
    			success: show,   //創立一個名字叫"show"的function，拉出去括號寫
    			error: function(){
    				alert("error!");
    			}
    		});
		});
		//定義名叫"show" 的 function 要做什麼內容
		function show(data){
			console.log(data);  //測試一下資料有沒有跑出來

			//因為要顯示很多筆資料，所以我們寫一個迴圈讓它重複做這件事情
			for(i=0; i&lt;data.length; i++){

				//str 存放要顯示的資料跟HTML格式
				str = '&lt;tr>&lt;td>'+data[i].ID+'&lt;/td>&lt;td>'+data[i].Username+'&lt;/td>&lt;td>'+data[i].Created_at+'&lt;/td>&lt;td>'+data[i].Email+'&lt;/td>&lt;/tr>';

				//寫一個監聽做這件事情，使用append()函數，把資料覆蓋上去的用法。
				$("#member_list").append(str);
			};
		};
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span></code></pre>
<p>如果跑出來的資料都是 undefined 表示 Ajax 裡面的 dataType 寫錯囉！ <strong>T</strong> 要記得大寫。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/72ef0e79fb594cdeb62f99618c84cd53.png" alt=""></p>
<p>str 存放要顯示的 HTML 應該有更好閱讀與維護的寫法，但是目前只學到這種，之後會再研究這部分的內容。</p>
<h2>結語</h2>
<p>以上就做完一個前後端分離的會員系統，非常簡單的做法，但是能利用自己實作理解前後端的概念，並互相串連起來。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 會員管理系統 - 會員列表</title>
      <link href="https://blog.roroiii.com/posts/php/php-member-list/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-member-list/</id>
      <content type="html">
        <![CDATA[
      <p>HTML</p>
<pre class="language-html"><code class="language-html"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>en<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">></span></span>
    <span class="token comment">&lt;!-- Required meta tags --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, initial-scale=1, shrink-to-fit=no<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>

    <span class="token comment">&lt;!-- Bootstrap CSS --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span>
      <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span>
      <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">/></span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">></span></span>會員列表<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>row<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>col-md-8 offset-2<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>card mt-5<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>card-header<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">></span></span>會員列表<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>card-body<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>table</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>table<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>thead</span><span class="token punctuation">></span></span>
                  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>編碼<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>帳號<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>密碼<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>信箱<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>註冊時間<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>thead</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tbody</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>member_list<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
                  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">></span></span>1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>Mark<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>Otto<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">></span></span>@mdo<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">></span></span>
                  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">></span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tbody</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>table</span><span class="token punctuation">></span></span>
              <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>card-footer<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
    <span class="token comment">&lt;!-- Optional JavaScript --></span>
    <span class="token comment">&lt;!-- jQuery first, then Popper.js, then Bootstrap JS --></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://code.jquery.com/jquery-3.4.1.min.js<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span>
      <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span>
      <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js<span class="token punctuation">"</span></span>
      <span class="token attr-name">integrity</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6<span class="token punctuation">"</span></span>
      <span class="token attr-name">crossorigin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>anonymous<span class="token punctuation">"</span></span>
    <span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript">
      Ajax 串接寫在這裡
    </span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">></span></span></code></pre>
<p>JavaScript</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token comment">//Ajax串接內容</span>
<span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  $<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
    <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'GET'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'http://192.168.10.14/mobileweb/member/20200526-list-api.php'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">dataType</span><span class="token operator">:</span> <span class="token string">'json'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">success</span><span class="token operator">:</span> show<span class="token punctuation">,</span>
    <span class="token function-variable function">error</span><span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'20200526-list-api error'</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">function</span> <span class="token function">show</span><span class="token punctuation">(</span><span class="token parameter">data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">// console.log(data);</span>
  <span class="token comment">// console.log(data[0].ID);</span>
  <span class="token comment">// strHTML = '&lt;tr>&lt;th>1&lt;/th>&lt;td>Mark&lt;/td>&lt;td>Otto&lt;/td>&lt;td>@mdo&lt;/td>&lt;/tr>';</span>

  <span class="token comment">//ES6寫法 **`** 代替 **'** 就有排版可讀性</span>
  str <span class="token operator">=</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;tr>
                  &lt;th></span><span class="token template-punctuation string">`</span></span> <span class="token operator">+</span>
    data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token constant">ID</span> <span class="token operator">+</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;/th>
                  &lt;td></span><span class="token template-punctuation string">`</span></span> <span class="token operator">+</span>
    data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>Username <span class="token operator">+</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;/td>
                  &lt;td></span><span class="token template-punctuation string">`</span></span> <span class="token operator">+</span>
    data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>Password <span class="token operator">+</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;/td>
                  &lt;td></span><span class="token template-punctuation string">`</span></span> <span class="token operator">+</span>
    data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>Email <span class="token operator">+</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;/td>
                  &lt;td></span><span class="token template-punctuation string">`</span></span> <span class="token operator">+</span>
    data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>Created_at <span class="token operator">+</span>
    <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">&lt;/td>
                &lt;/tr></span><span class="token template-punctuation string">`</span></span>

  <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#member_list'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>php 把資料撈出來</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM usermember ORDER BY ID DESC"</span><span class="token punctuation">;</span>  <span class="token comment">// ORDER BY ID DESC 排序最新在上面</span>

	<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">// $row = mysqli_fetch_assoc($result);  //挖掘機，挖資料，一次挖一筆</span>
	<span class="token comment">// echo $row["Username"];</span>

	<span class="token variable">$myArray</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_assoc</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>   <span class="token comment">//加上while迴圈讓挖掘機一直挖資料出來</span>
		<span class="token comment">//echo $row["Username"]."&lt;br>";</span>
		<span class="token variable">$myArray</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$row</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token comment">//轉成 json 格式</span>
	<span class="token keyword">echo</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$myArray</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p><img src="https://static.coderbridge.com/img/roroiii/8938d66d262b47deae36935552a7412f.png" alt=""></p>
<p>在 HTML 裡可以藏 <code>data-id</code> ，可以用 JavaScript 監聽
EX: HTML:<code>&lt;data-* = &quot;123&quot;&gt;</code> JavaScript: <code>data(*)</code></p>
<h2>刪除資料</h2>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$p_ID</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ID'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"DELETE FROM usermember WHERE ID = '<span class="token interpolation"><span class="token variable">$p_ID</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token comment">//mysqli_affected_rows($conn) == 1 表示刪除的資料要有1筆才會是成功刪除</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> <span class="token function">mysqli_affected_rows</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>
<p>確認 Postman 測試沒問題之後再開始寫 Ajax 串接刪除資料。</p>
<p><code>confirm()</code> 是有點像 <code>alert</code> 的彈出視窗，常拿來用為防止不小心刪除的雙重確認。</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">></span></span><span class="token plain-text">
      $(function(){
        $.ajax({
          type: "GET",
          url: "20200526-list-api.php",
          dataType: "json",
          async: false,    //把Ajax的非同步關掉。因為Ajax的優點是非同步、最後才執行，這裡關掉刪除按鈕才能監聽到資料。
          success: show,
          error: function(){
            alert('20200526-list-api error');
          }
        });

        //監聽刪除按鈕
        $("table #btn-del").bind("click", function(){  //因為監聽的位置巢狀很多層，加讓table可以讓瀏覽器順利找到資料。
          //alert($(this).data("id"));
          $del_id = $(this).data("id"); //設定一個變數儲存data-id的資料，以防使用者亂按位置跑掉。

          //防手滑刪除首選 confirm
          if(confirm("你確定要刪除"+ $del_id)){
            //Ajax執行刪除資料
            $.ajax({
              type: "POST",
              url: "20200526-member-del.php",
              data:{ID: $del_id},  //ID大小寫要跟Postman測試使用的一樣
              success: function(data){
                if(data){
                  alert('刪除成功');
                  location.href="20200526-member-list.html";
                }else{
                  alert('刪除失敗!')
                }
              },
              error: function(){
                alert('del api error');
              }
            });
          }


        });
      });
      function show(data){
        // console.log(data);
        // console.log(data[0].ID);
        // strHTML = '&lt;tr>&lt;th>1&lt;/th>&lt;td>Mark&lt;/td>&lt;td>Otto&lt;/td>&lt;td>@mdo&lt;/td>&lt;/tr>';
        for(i = 0; i&lt;data.length; i++){
            str = `&lt;tr>
            &lt;th>`+data[i].ID+`&lt;/th>
            &lt;td>`+data[i].Username+`&lt;/td>
            &lt;td>`+data[i].Password+`&lt;/td>
            &lt;td>`+data[i].Email+`&lt;/td>
            &lt;td>`+data[i].Created_at+`&lt;/td>
            &lt;td>
              &lt;a href="#" class="btn btn-danger" id="btn-del" data-id="`+data[i].ID+`">刪除&lt;/a>
              &lt;a href="#" class="btn btn-primary">更新&lt;/a>
            &lt;/td>

          &lt;/tr>`;

          $("#member_list").append(str);
        }

      }
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">></span></span></code></pre>
<h2>更新資料</h2>
<p>PHP 語法</p>
<p><code>mysqli_affected_rows($conn) == 1</code> 是確定資料庫的筆數為一筆才動作，才不會資料庫沒有那筆資料卻顯示 true。可以練習用刪除的語法改寫。</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$p_id</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ID'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_username</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Username'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_password</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Password'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
	<span class="token variable">$p_email</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Email'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token comment">//更新資料庫語法</span>
	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"UPDATE usermember SET Username='<span class="token interpolation"><span class="token variable">$p_username</span></span>', Password='<span class="token interpolation"><span class="token variable">$p_password</span></span>', Email='<span class="token interpolation"><span class="token variable">$p_email</span></span>' WHERE id='<span class="token interpolation"><span class="token variable">$p_id</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token comment">//mysqli_affected_rows($conn) == 1 是確定資料庫的筆數為一筆才動作</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> <span class="token function">mysqli_affected_rows</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP 會員管理系統 - 註冊表單判斷</title>
      <link href="https://blog.roroiii.com/posts/php/php-member-register/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-member-register/</id>
      <content type="html">
        <![CDATA[
      <p>在開始新增或是測試帳號有沒有重複，要先記得把資料庫重複的資料清空，判斷才會正確喔!
<code>$_POST[&quot;Username&quot;]</code> 的值要跟資料庫的名稱相同。</p>
<p>用 JavaScript 監聽帳號有沒有跟資料庫的帳號重複</p>
<pre class="language-php"><code class="language-php"><span class="token operator">&lt;</span>script<span class="token operator">></span>
		<span class="token keyword">var</span> flag_username <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
		<span class="token keyword">var</span> flag_password <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
		<span class="token keyword">var</span> flag_re_password <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
		<span class="token keyword">var</span> flag_email <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
		<span class="token keyword">var</span> flag_check_uni <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>

    	$<span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    		$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#btn_register"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"click"</span><span class="token punctuation">,</span>reg<span class="token punctuation">)</span><span class="token punctuation">;</span>

    		<span class="token comment">//監聽帳號</span>
    		$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"input propertychange"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    			<span class="token keyword">if</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span>this<span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span>length <span class="token operator">&lt;</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'帳號不得小於 6 個字'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"#ff0000"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_username <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_username <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>

    				<span class="token comment">//到資料庫去判斷帳號是否有重複</span>
    				$<span class="token operator">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
                        type<span class="token punctuation">:</span> <span class="token string double-quoted-string">"POST"</span><span class="token punctuation">,</span>
                        <span class="token argument-name">url</span><span class="token punctuation">:</span> <span class="token string double-quoted-string">"20200526-register-api-uni.php"</span><span class="token punctuation">,</span>
                        <span class="token argument-name">data</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>Username<span class="token punctuation">:</span> $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">,</span>   <span class="token comment">//Username的值要跟資料庫的名稱一樣</span>
                        success<span class="token punctuation">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">{</span>
                            <span class="token keyword">if</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">{</span>
                                $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"此帳號已存在!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                                $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"red"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                                flag_check_uni <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
                            <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                                $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"此帳號可以使用"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                                $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"#0BF844"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                                flag_check_uni <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
                            <span class="token punctuation">}</span>
                        <span class="token punctuation">}</span><span class="token punctuation">,</span>
                        <span class="token argument-name">error</span><span class="token punctuation">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                            <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"check uni api error"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                        <span class="token punctuation">}</span>
                    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span>
    		<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    		$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"input propertychange"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    			<span class="token keyword">if</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span>this<span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span>length <span class="token operator">&lt;</span> <span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'密碼不得小於 8 個字'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"#ff0000"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_password <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_password <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span>
    		<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    		$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#re_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"input propertychange"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    			<span class="token keyword">if</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span>this<span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">!=</span> $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_re_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'確認密碼不相同'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_re_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"#ff0000"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_re_password <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_re_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_re_password <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span>
    		<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    		$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"input propertychange"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    			<span class="token keyword">if</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span>this<span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span>length <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Email不得小於 10 個字'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"color"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"#ff0000"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_email <span class="token operator">=</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
    				$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#err_email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    				flag_email <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
    			<span class="token punctuation">}</span>
    		<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    	<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token keyword">function</span> <span class="token function-definition function">reg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
			<span class="token keyword">if</span><span class="token punctuation">(</span>flag_username <span class="token operator">&amp;&amp;</span> flag_password <span class="token operator">&amp;&amp;</span> flag_re_password <span class="token operator">&amp;&amp;</span> flag_email <span class="token operator">&amp;&amp;</span> flag_check_uni<span class="token punctuation">)</span><span class="token punctuation">{</span>
				<span class="token comment">//測試用</span>
				console<span class="token operator">.</span><span class="token function">log</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
				console<span class="token operator">.</span><span class="token function">log</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
				console<span class="token operator">.</span><span class="token function">log</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#re_password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
				console<span class="token operator">.</span><span class="token function">log</span><span class="token punctuation">(</span>$<span class="token punctuation">(</span><span class="token string double-quoted-string">"#email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

				<span class="token comment">/*實際串接資料庫 20200519-php-Insert-data.php*/</span>
				$<span class="token operator">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
					type<span class="token punctuation">:</span> <span class="token string double-quoted-string">"POST"</span><span class="token punctuation">,</span>
					<span class="token argument-name">url</span><span class="token punctuation">:</span> <span class="token string double-quoted-string">"20200519-php-Insert-data.php"</span><span class="token punctuation">,</span>
					<span class="token argument-name">data</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>Username<span class="token punctuation">:</span> $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#username"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token argument-name">Password</span><span class="token punctuation">:</span> $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#password"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token argument-name">Email</span><span class="token punctuation">:</span> $<span class="token punctuation">(</span><span class="token string double-quoted-string">"#email"</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
					<span class="token argument-name">success</span><span class="token punctuation">:</span> show<span class="token punctuation">,</span>
					<span class="token argument-name">error</span><span class="token punctuation">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
						<span class="token function">alert</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連接 20200519-php-Insert-data.php 有錯誤'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
					<span class="token punctuation">}</span>
				<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	    	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
	    		<span class="token function">alert</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'欄位有錯誤!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	    	<span class="token punctuation">}</span>
		<span class="token punctuation">}</span><span class="token punctuation">;</span>
		<span class="token keyword">function</span> <span class="token function-definition function">show</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">{</span>
			<span class="token function">alert</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span>
			location<span class="token operator">.</span>href<span class="token operator">=</span><span class="token string double-quoted-string">"20200519-login.html"</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">></span></code></pre>
<p>php 後端</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
	<span class="token variable">$p_username</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Username"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

	<span class="token variable">$servername</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"localhost"</span><span class="token punctuation">;</span>
	<span class="token variable">$username</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>
	<span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"123456"</span><span class="token punctuation">;</span>
	<span class="token variable">$dbname</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"member"</span><span class="token punctuation">;</span>

	<span class="token variable">$conn</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span><span class="token punctuation">(</span><span class="token variable">$servername</span><span class="token punctuation">,</span> <span class="token variable">$username</span><span class="token punctuation">,</span> <span class="token variable">$password</span><span class="token punctuation">,</span> <span class="token variable">$dbname</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'連線失敗'</span><span class="token operator">.</span><span class="token function">mysqli_connect_error</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>

	<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM usermember WHERE Username = '<span class="token interpolation"><span class="token variable">$p_username</span></span>'"</span><span class="token punctuation">;</span>

	<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">mysqli_num_rows</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>   <span class="token comment">//判斷重複</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
		<span class="token keyword">echo</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
	<span class="token function">mysqli_close</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?></span></span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>PHP CodeIgniter 資料庫字詞替換</title>
      <link href="https://blog.roroiii.com/posts/php/php-replace-str/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/php/php-replace-str/</id>
      <content type="html">
        <![CDATA[
      <p>大量替換字詞，針對文章只取一部份資料替換再塞回去資料庫
資料撈出來-&gt;替換字詞-&gt;更新回去
遇到 / 可以直接替換
&quot; 會有點問題，要做跳脫字元的處理</p>
<pre class="language-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
  <span class="token keyword">echo</span> <span class="token string single-quoted-string">'\''</span><span class="token punctuation">;</span> <span class="token comment">// 會印 '</span>
  <span class="token keyword">echo</span> <span class="token string single-quoted-string">'\\'</span><span class="token punctuation">;</span> <span class="token comment">// 會印 \</span>
  <span class="token keyword">echo</span> <span class="token string single-quoted-string">'\"'</span><span class="token punctuation">;</span> <span class="token comment">// 會印 "</span>
<span class="token delimiter important">?></span></span></code></pre>
<pre class="language-php"><code class="language-php">    <span class="token comment">//替換字詞</span>
    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">replace</span><span class="token punctuation">(</span><span class="token variable">$database</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">db</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">load</span><span class="token operator">-></span><span class="token function">database</span><span class="token punctuation">(</span><span class="token variable">$database</span><span class="token punctuation">,</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">db</span><span class="token operator">-></span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'news_id, news_content_cn'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token variable">$query</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">db</span><span class="token operator">-></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'news'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

      <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$query</span><span class="token operator">-></span><span class="token function">result_array</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$row</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
        <span class="token variable">$str</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://www.web.tw'</span><span class="token punctuation">;</span>
        <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$str</span></span>"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">,</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'news_content_cn'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$count</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span>
          <span class="token string single-quoted-string">'news_content_cn'</span> <span class="token operator">=></span> <span class="token variable">$result</span><span class="token punctuation">,</span>
        <span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">db</span><span class="token operator">-></span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'news_id'</span><span class="token punctuation">,</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'news_id'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">db</span><span class="token operator">-></span><span class="token function">update</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'news'</span><span class="token punctuation">,</span> <span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span></code></pre>
<p>嘗試了公司的資料庫，發現只要遇到 雙引號就無法替換 QQ
但其他字詞都沒問題，
用了簡短的 Array 去測試也都沒問題
我推測的原因是文章的資料表格格式太多種，可能有遇到什麼狀況造成無法順利取代。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Custom Hook 來自己寫一個  hook 吧!</title>
      <link href="https://blog.roroiii.com/posts/react/react-custom-hook/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-custom-hook/</id>
      <content type="html">
        <![CDATA[
      <h2>首先， 自訂的 Hook 一定要用 use 作為開頭</h2>
<p>會用到的 hook 記得要 import 進來。
把變數 return 回去就可以在 app.js 中使用。</p>
<p>新增一個檔案叫做 useInput.js 把 App.js 裡面的邏輯抽出來</p>
<h3>useInput.js</h3>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> useState <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span> <span class="token function">useInput</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>value<span class="token punctuation">,</span> setValue<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">{</span>
    value<span class="token punctuation">,</span>
    setValue<span class="token punctuation">,</span>
    handleChange<span class="token punctuation">,</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>再做一個把 todos 會用到的東西抽出來</p>
<h3>useTodos.js</h3>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> useState<span class="token punctuation">,</span> useEffect<span class="token punctuation">,</span> useRef <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>
<span class="token keyword">import</span> useInput <span class="token keyword">from</span> <span class="token string">'./useInput'</span>

<span class="token keyword">function</span> <span class="token function">writeTodosToLocalStorage</span><span class="token punctuation">(</span><span class="token parameter">todos</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  window<span class="token punctuation">.</span>localStorage<span class="token punctuation">.</span><span class="token function">setItem</span><span class="token punctuation">(</span><span class="token string">'todos'</span><span class="token punctuation">,</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>todos<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span> <span class="token function">useTodos</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> id <span class="token operator">=</span> <span class="token function">useRef</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span> value<span class="token punctuation">,</span> setValue<span class="token punctuation">,</span> handleChange <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useInput</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>todos<span class="token punctuation">,</span> setTodos<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token keyword">let</span> todoData <span class="token operator">=</span> window<span class="token punctuation">.</span>localStorage<span class="token punctuation">.</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token string">'todos'</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token string">''</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>todoData<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      todoData <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>todoData<span class="token punctuation">)</span>
      id<span class="token punctuation">.</span>current <span class="token operator">=</span> todoData<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>id <span class="token operator">+</span> <span class="token number">1</span>
    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
      todoData <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> todoData
  <span class="token punctuation">}</span><span class="token punctuation">)</span>

  <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">writeTodosToLocalStorage</span><span class="token punctuation">(</span>todos<span class="token punctuation">)</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>todos<span class="token punctuation">]</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleButtonClick</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        <span class="token literal-property property">id</span><span class="token operator">:</span> id<span class="token punctuation">.</span>current<span class="token punctuation">,</span>
        <span class="token literal-property property">content</span><span class="token operator">:</span> value<span class="token punctuation">,</span>
        <span class="token literal-property property">size</span><span class="token operator">:</span> <span class="token string">'XL'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token operator">...</span>todos<span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token function">setValue</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
    id<span class="token punctuation">.</span>current<span class="token operator">++</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleToggleIsDone</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">id</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span>
      todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>todo<span class="token punctuation">.</span>id <span class="token operator">!==</span> id<span class="token punctuation">)</span> <span class="token keyword">return</span> todo <span class="token comment">// 不等於要修改的 id 直接回傳</span>
        <span class="token keyword">return</span> <span class="token punctuation">{</span>
          <span class="token operator">...</span>todo<span class="token punctuation">,</span>
          <span class="token literal-property property">isDone</span><span class="token operator">:</span> <span class="token operator">!</span>todo<span class="token punctuation">.</span>isDone<span class="token punctuation">,</span>
        <span class="token punctuation">}</span> <span class="token comment">// 是要修改的 id 就把原本的 todo 加上要修改的屬性</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
    <span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleDeleteTodo</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">id</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span>todos<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> todo<span class="token punctuation">.</span>id <span class="token operator">!==</span> id<span class="token punctuation">)</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">{</span>
    todos<span class="token punctuation">,</span>
    setTodos<span class="token punctuation">,</span>
    id<span class="token punctuation">,</span>
    handleButtonClick<span class="token punctuation">,</span>
    handleToggleIsDone<span class="token punctuation">,</span>
    handleDeleteTodo<span class="token punctuation">,</span>
    value<span class="token punctuation">,</span>
    setValue<span class="token punctuation">,</span>
    handleChange<span class="token punctuation">,</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>如果要用同一個 hook 在新的 input 裡面使用，這樣寫就可以調用了
變成 ES6 object 的寫法</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token comment">// 假如有第二個 input 也需要這個方法，就可以用：</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token literal-property property">value</span><span class="token operator">:</span> todoName<span class="token punctuation">,</span> <span class="token literal-property property">setValue</span><span class="token operator">:</span> setTodoName<span class="token punctuation">,</span> <span class="token literal-property property">handleChange</span><span class="token operator">:</span> handleTodoName <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useInput</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
<p>最後 App.js 檔案就變得很乾淨了
<code>import { useState, useRef, useEffect } from &quot;react&quot;;</code>
也都不用寫在 App.js 裡面</p>
<h3>App.js</h3>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">import</span> TodoItem <span class="token keyword">from</span> <span class="token string">'./TodoItem'</span>
<span class="token keyword">import</span> useTodos <span class="token keyword">from</span> <span class="token string">'./useTodos'</span>

<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span>
    todos<span class="token punctuation">,</span>
    setTodos<span class="token punctuation">,</span>
    id<span class="token punctuation">,</span>
    handleButtonClick<span class="token punctuation">,</span>
    handleToggleIsDone<span class="token punctuation">,</span>
    handleDeleteTodo<span class="token punctuation">,</span>
    value<span class="token punctuation">,</span>
    setValue<span class="token punctuation">,</span>
    handleChange<span class="token punctuation">,</span>
  <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useTodos</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">className</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>App<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>value<span class="token punctuation">}</span></span> <span class="token attr-name">onChange</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleChange<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">onClick</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleButtonClick<span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">Add todo</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token punctuation">{</span>todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">TodoItem</span></span>
          <span class="token attr-name">key</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>id<span class="token punctuation">}</span></span>
          <span class="token attr-name">todo</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">}</span></span>
          <span class="token attr-name">title</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>title<span class="token punctuation">}</span></span>
          <span class="token attr-name">size</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>size<span class="token punctuation">}</span></span>
          <span class="token attr-name">handleDeleteTodo</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleDeleteTodo<span class="token punctuation">}</span></span>
          <span class="token attr-name">handleToggleIsDone</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleToggleIsDone<span class="token punctuation">}</span></span>
        <span class="token punctuation">/></span></span>
      <span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token plain-text">
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> App</code></pre>
<p>這樣拆開來寫的好處是，介面跟邏輯分開，把共同的邏輯抽出來另外寫，這樣以後只要在套用一樣的邏輯，就可以產出不一樣的 UI 畫面了，是不是很棒呢～^^</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>在 React 刪除 todo 的方法</title>
      <link href="https://blog.roroiii.com/posts/react/react-delete-todo/"/>
      <updated>2021-08-25T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-delete-todo/</id>
      <content type="html">
        <![CDATA[
      <p>觀念：在 parent 處理 function -&gt; 當作 props 傳下去給 child -&gt; child 再呼叫這個 function</p>
<p>parent(App.js) 傳給 child(TodoItem.js)</p>
<hr>
<p><code>todos.filter(todo =&gt; todo.id !== id)</code> true 的東西會留下來</p>
<p>可以用下面這了例子來思考
<code>[1, 2, 3].filter(i =&gt; i &gt; 1)</code> 大於 1 的會留下來</p>
<p><strong>App.js</strong></p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>

  <span class="token operator">...</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleDeleteTodo</span> <span class="token operator">=</span> <span class="token parameter">id</span> <span class="token operator">=></span> <span class="token punctuation">{</span>  <span class="token comment">// 接收 id 當作參數</span>
    <span class="token function">setTodos</span><span class="token punctuation">(</span>todos<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token parameter">todo</span> <span class="token operator">=></span> todo<span class="token punctuation">.</span>id <span class="token operator">!==</span> id<span class="token punctuation">)</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>div className<span class="token operator">=</span><span class="token string">"App"</span><span class="token operator">></span>

      <span class="token operator">...</span>

      <span class="token comment">// 把 handleDeleteTodo 傳下去給 child</span>
      <span class="token punctuation">{</span>
        todos<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token parameter">todo</span> <span class="token operator">=></span> <span class="token operator">&lt;</span>TodoItem key<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">.</span>id<span class="token punctuation">}</span> todo<span class="token operator">=</span><span class="token punctuation">{</span>todo<span class="token punctuation">}</span> handleDeleteTodo<span class="token operator">=</span><span class="token punctuation">{</span>handleDeleteTodo<span class="token punctuation">}</span><span class="token operator">/</span><span class="token operator">></span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
  <span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
<p><strong>TodoItem.js</strong></p>
<pre class="language-js"><code class="language-js"><span class="token comment">// 接收 handleDeleteTodo 就可以使用了</span>
<span class="token keyword">function</span> <span class="token function">TodoItem</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> className<span class="token punctuation">,</span> size<span class="token punctuation">,</span> todo<span class="token punctuation">,</span> handleDeleteTodo <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span><span class="token operator">></span>
      <span class="token operator">...</span>
      <span class="token operator">&lt;</span>ReButton
        onClick<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
          <span class="token function">handleDeleteTodo</span><span class="token punctuation">(</span>todo<span class="token punctuation">.</span>id<span class="token punctuation">)</span>
        <span class="token punctuation">}</span><span class="token punctuation">}</span>
      <span class="token operator">></span>
        刪除
      <span class="token operator">&lt;</span><span class="token operator">/</span>ReButton<span class="token operator">></span>
      <span class="token operator">...</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span><span class="token operator">></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-26 12:22:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-26/"/>
      <updated>2021-08-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-26/</id>
      <content type="html">
        <![CDATA[
      <h2>Week 21</h2>
<h3>【今日目標】</h3>
<h5>把 [FE302] React 基礎 - hooks 版本 課程全部看完，並邊做筆記</h5>
<p>昨日進度到 prop drilling 與 context<br>
感覺進度有點慢啊ＱＱ</p>
<h5>早起</h5>
<p>8 點多起床，身體很重眼皮也很重，趕快拿出手機翻看轉移注意力果然起床了～</p>
<p>昨天晚上下大雨的關係，今天早上天氣超好的，去丟垃圾的時候在家附近走了一圈，邊走邊聽 Podcast ，最近在聽「下一本讀什麼」，每集內容都是在講一本書，覺得瓦基的聲音也太好聽，不知不覺就聽完一集了，推薦給大家～</p>
<h3>【昨日學習心得】</h3>
<h5>學習時數約 3 小時</h5>
<p>早上突然很想把以前寫的筆記都丟到部落格，就一次丟了好幾篇，還有看了 MVC、MVP、MVVM 的差別，不過說實在的看了很多遍還是不太理解之間的差異，覺得其實都滿像的耶<br>
就像 SQL Injection 跟 XSS 攻擊，其實都知道是什麼原理，但是就會一直忘記哪個是哪個，可能在去面試之前自己寫個衝刺筆記印象會比較深刻</p>
<p>React 的部分看到避免 Rerender 的方法，還有渲染機制 Reconciliation</p>
<h4>Rerender</h4>
<ol>
<li>component state 改變，再呼叫一次 function 的方式就叫 Rerender</li>
<li>component state 改變，V-DOM 找出 DOM diff 這也叫 Render</li>
</ol>
<h4>增進效能，避免重複渲染 Rerender</h4>
<p>Memo 與 useCallback 常搭配使用<br>
Memo 是 component 用的，會檢查 props 有沒有改變，避免重複渲染<br>
因為 React 的機制會從父元件全部重新渲染，但是子元件沒有改變的情況下，會造成效能上不必要的浪費，這時候 Memo 就派上用場了。</p>
<p>useCallback 可以把一個 function 記起來，依據 dependency function 內的東西做變動，如果 denpendency function 內的東西沒有改變的話，就算重複 render 一次二次都不會改變。</p>
<p>useMemo 是給資料用的，在計算量大的時候使用</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-27 10:37:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-27/"/>
      <updated>2021-08-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-27/</id>
      <content type="html">
        <![CDATA[
      <h2>Week 21</h2>
<h3>【今日目標】</h3>
<h4>看複習週影片調整狀態～</h4>
<h4>把 [FE302] React 基礎 - hooks 版本 課程全部看完，並邊做筆記</h4>
<ul>
<li>昨日進度到 React 實戰篇 - 留言板 ，已經先看過一遍，今天打算跟影片一起實作一次</li>
<li>Class Component 的部分打算視今天的狀況再看一遍並做筆記</li>
<li>實作完留言板後把 [FE302] 的部分完全看完，明日再實作一遍 React 實戰篇 - 部落格 的部分</li>
</ul>
<h3>【早起】</h3>
<p>8 點準時起床，情緒不是高，約 10 點半開始讀書。</p>
<h3>【昨日學習心得】</h3>
<p>學習時數 5 小時<br>
其實中間分心做了很多事情，洗衣服掃陽台換了床單，但是東摸西摸一下子又可以馬上回來繼續學習，學習狀況是滿好的，感謝番茄鐘</p>
<p>晚上 6 點多集中力明顯降低，跟平常一樣看動畫吃晚餐，覺得很幸福～</p>
<p>睡前發生了一點事情，覺得心裡滿腔的情緒，但是又覺得何必呢？這樣一想情緒就消下去很多，但是心裡總覺得卡卡的，果不其然躺到床上思緒暴漲停不下來，被淚水淹沒天際。<br>
用手機查關鍵字總是查不到自己想找的，昨晚終於找到一絲線索，現實真的嚇得我不要不要的，到底是能改還是不能改？需要一點時間去想自己的答案，還有下一步該怎麼走。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>React 增進效能，避免重複渲染 Rerender</title>
      <link href="https://blog.roroiii.com/posts/react/react-render/"/>
      <updated>2021-08-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-render/</id>
      <content type="html">
        <![CDATA[
      <h2>渲染機制 Reconciliation</h2>
<p>首先先簡單了解 React 的渲染機制 Reconciliation
<img src="https://i.imgur.com/ApLV4M6.png" alt=""></p>
<h2>認識 Rerender</h2>
<p>component state 改變，再呼叫一次 function 的方式就叫 Rerender
component state 改變，V-DOM 找出 DOM diff 這也叫 Render</p>
<h2>增進效能，避免重複渲染 Rerender</h2>
<ul>
<li>
<p>Memo 與 useCallback 常搭配使用
Memo 是 component 用的，會檢查 props 有沒有改變，避免重複渲染
因為 React 的機制會從父元件全部重新渲染，但是子元件沒有改變的情況下，會造成效能上不必要的浪費，這時候 Memo 就派上用場了。</p>
</li>
<li>
<p>useCallback 可以把一個 function 記起來，依據 dependency function 內的東西做變動，如果 denpendency function 內的東西沒有改變的話，就算重複 render 一次二次都不會改變。</p>
</li>
<li>
<p>useMemo 是給資料用的，在計算量大的時候使用</p>
</li>
</ul>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-29 22:39:05</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-29/"/>
      <updated>2021-08-29T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-29/</id>
      <content type="html">
        <![CDATA[
      <h2>Week 21 第二週結束</h2>
<h3>【本週回顧】</h3>
<h3>8/27 星期五</h3>
<ul>
<li>[x] 看複習週影片調整狀態～</li>
<li>[x] 把 [FE302] React 基礎 - hooks 版本 課程全部看完</li>
</ul>
<p>還沒做到</p>
<ul>
<li>[ ] React 實戰篇 - 留言板 ，跟影片實作一次</li>
<li>[ ] React 實戰篇 - 部落格，跟影片實作一次</li>
<li>[ ] Class Component 的部分再看一遍並做筆記</li>
</ul>
<p>狀態不佳，可能是因為晚上沒睡好的關係，到下午的時候昏睡了 3 個小時，起來之後把剩下的課程影片看完。</p>
<h3>8/28 星期六</h3>
<p>10 點半起床，之後就開始把家裡打掃一番<br>
因為最近很容易鼻子過敏狂打噴嚏流鼻水，超不舒服的嚴重影響學習，把地板地毯吸過拖過，二台電風扇都清洗乾淨，也把紗窗用吸塵器吸乾淨，邊做家事邊聽「下一本讀什麼」，打掃真的是很療癒的一段時間^^</p>
<p>晚上看了「閱讀前哨站」的子彈筆記方法，決定自己也要開始實踐，直接就下訂買了子彈筆記本還有空白的單字本，單字本是打算記下程式網站上常出現的單字，透過手寫增加記憶力的連結，目標是能只靠自己看懂並理解官方文件的內容。</p>
<p>睡前把「React Native 學習手冊」拿來讀，雖然 React Native 是寫 APP 用的，但是跟網頁用的 React 長的七八成像，最大差別大概只有引入的方法還有 render 用的元素不一樣，但邏輯都差不多。雖然因為是 2018 年出版的中文譯本，還在 React 16 版而已，卻是一本輔助學習 Class Component 的好書。</p>
<p>這本書是之前在讀冊買書滿 699 選的一本贈品，當時看到有 React 的工具書覺得好像賺到了，但拿到的時候覺得像天書一樣。沒想到今天卻覺得第一章的範例程式碼好簡單，真是神奇的改變。</p>
<h3>8/29 星期日</h3>
<p>今天算是休息日吧，沒有特別安排學習的東西，早上做了瑜伽，獲得了抖抖腳（肌肉狂抖）順便回顧這幾天的學習狀況。<br>
剛剛把反脆弱拿來朗讀（真的一個字一個字念）可以增進理解不然真的很難讀懂，也練習自己咬字發音，我講話真的很弱，很容易舌頭打結也講不久，大概一個小時我的喉嚨就開始燒聲超廢，但是練習咬字發音可以減少自己面試時的緊張程度（有點類似增加自我掌握度的感覺？），應該會繼續維持這個微小的習慣。</p>
<h3>本週做的決定</h3>
<ul>
<li>
<p>買了電子閱讀器 Kobo<br>
（Kindle 跟 Kobo 選擇兩難，最後決定因素是買中文書為主的平台也減少轉檔的麻煩，還有外型較小一點自己也比較喜歡。查比較文發現外國 YouTube 都偏向推薦 Kobo 國內都偏向 Kindle 覺得還滿特別）</p>
</li>
<li>
<p>開始做子彈筆記<br>
其實是從寫 React 的紙本筆記後發現自己好像滿喜歡寫下來的感覺，還有寫下來真的比較記得住，又剛好看到瓦基的文章，總總巧合反正就是決定開始試試看了，也希望可以改善自己學習知識的方式，順便規劃自己未來想要做什麼。</p>
</li>
<li>
<p>增加運動量<br>
選項一、早上做瑜伽<br>
選項二、用啞鈴來運動<br>
今天去寶雅試拿啞鈴，感覺自己適合 2 公斤的重量，因為網路上比較便宜又免運所以最後還是決定在網路上買。但是剛剛在反脆弱裡面讀到，頭頂重物的反脆弱性，適度增加自己承受的壓力有助於增加骨骼密度之類的內容（還沒完全讀懂解釋不好請見諒），也想試試看頭頂重物的感覺，就拿犀牛書或是 CSS 大全來頂好了，希望掉下來可以不要砸到腳。</p>
</li>
</ul>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-30 21:40:17</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-30/"/>
      <updated>2021-08-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-30/</id>
      <content type="html">
        <![CDATA[
      <h2>Week 21 Recat</h2>
<h3>【今日進度】</h3>
<p>今天就跟著留言板的影片做了一個下午，沒想到花了 5 個多小時，有點震撼。</p>
<p>明明是照著做，雖然自己切版有調整了一下，但是就覺得也實作得太慢了吧 ∑(O_O;)</p>
<p>就讓我想到以前剛學 JavaScript ，還在前公司的時候，因為程式少了一個「+」號 Debug 一整天的感覺，實實在在的薪水小偷啊(¬д¬。)</p>
<p>本來想做分頁功能，突然發現自己實在是不知道要怎麼下手，知道改一下網址的參數就可以拿到新的資料，但是弄了一下發現按鈕按下去都沒有反應，突然有點不知道要怎麼 Debug (´Д ｀。</p>
<p>###【早起跟其他活動】</p>
<ul>
<li>
<p>6:36 鬧鐘還沒響就自己醒來了，覺得很爽好久沒有這麼早起了，也做了瑜伽，希望明天也可以 ( ´･ω･)</p>
</li>
<li>
<p>把後陽台的紗窗裝好了，希望蟲蟲不要再來家裡</p>
</li>
</ul>
<h3>【學習心得】</h3>
<p>覺得自己學的真的滿慢的，有點緊張，本來打算 9 月可以開始投履歷面試，但是惰性還是打敗了意志力，最近處於閉關狀態也有覺得自己好像變笨了（應該是臨場反應變慢？）</p>
<p>目標是把 React 學到一個段落，9 月底前要做出個小成果並且投出履歷。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-08-31 22:48:38</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-08-31/"/>
      <updated>2021-08-31T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-08-31/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今日目標】</h3>
<p>今天改成交叉學習的方式</p>
<ul>
<li>[ ] 2hr 昨天的留言板今天再做一遍（不看影片靠記憶跟上網找資料做出來）</li>
<li>[ ] 2hr React 部落格影片實做</li>
<li>[ ] 2hr Redux 影片看完，做個小練習</li>
<li>[ ] 2hr 複習與整理面試必考題的內容</li>
<li>[ ] 寫一題 lidemyOJ 題目</li>
</ul>
<h5>【早起跟其他活動】</h5>
<p>今天也在 6 點 4x 分起床，好激動啊啊啊，早起的感覺真好，真的像瓦基說的那樣，有一種拿回自己人生的掌控權的感覺，希望明天也可以早起。</p>
<p>一樣做了瑜伽，做的過程中覺得身體快散了好痛苦啊啊啊，但是做完感覺身體都醒了，也留了超多汗。</p>
<p>昨天睡前看了買很久都沒有讀完的「深度學習的技術」，之後的學習會照著書上的方法試試看，「提取記憶、交錯學習、間隔練習」，希望可以讓自己快點融會貫通。</p>
<p>書上說重複閱讀只會增加短期記憶，也會有讓你好像學了很多的錯覺，提取記憶會讓你感到痛苦甚至很難，但是能提高學習成效至少一倍，只是你會有種好像自己學的很少懷疑自己是不是對的，請堅持會慢慢看到成果的。</p>
<p>之前都是一直重看影片，真的過了一陣子就不記得內容了哈哈。</p>
<h3>【昨日學習心得】</h3>
<p>做了 React Message Board 留言板。</p>
<p>看了 redux 的課程影片，今天試著用印象把流程圖畫出來還不錯，但是程式的印象比較少，只記得 subscribe、dispatch 跟 store 的關鍵字。</p>
<hr>
<h2>React &amp; Redux</h2>
<h3>【今日進度】</h3>
<ul>
<li>O 2hr 昨天的留言板今天再做一遍（不看影片靠記憶跟上網找資料做出來）</li>
<li>O 4hr React 部落格影片實做（做完選單列，沒看影片但是想不出來的地方有照著老師提供的範例去做）</li>
<li>O 40min Redux 影片重新看一遍 redux 的程式注意細節</li>
<li>X 2hr 複習與整理面試必考題的內容</li>
<li>X 寫一題 lidemyOJ 題目</li>
</ul>
<h3>【學習心得】</h3>
<p>今天早上重新寫了一遍 react 留言板，給自己限時在 2 小時內完成，有一種緊張感，除了完成了功能之外還多做了 nickname 的欄位，給自己點個讚：）</p>
<p>之後接著繼續寫部落格，但是有點沒頭緒，晃一晃看資料一個小時就過去了，目前只有把頁面架構分出來，跟寫了一點選單列。</p>
<p>下午 5 點多明顯專注力下降了，雖然看了一點 Redux 但是吸收不是太好。<br>
目標列點還有兩個沒完成，明天再分配一下學習時間。</p>
<p>今天小腿超級無敵酸的，走路都會痛ＸＤ</p>
<p>最後是 finial project 的部分，本來是沒有打算另外做一個只想把作業改到完善，有點怕耽誤同學的時間，也怕自己寫不出來哭哭，但是換個角度一想，因為自己做出承諾就沒有回頭路了，硬著頭皮也要跳下去把專案做完，就是這樣一個心情加入了 david-christian 大大的組別，還請多多指教了～</p>
<p>掛著第 4 期學生的標籤，其實自己內心是有點小不安，就快要走完最後一里路了，加油～！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-02 00:00:08</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-02/"/>
      <updated>2021-09-02T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-02/</id>
      <content type="html">
        <![CDATA[
      <p>綠點點卡一個失敗&gt;&lt;<br>
已經初步討論完 finial project 哩<br>
感恩兩位神隊友一起從 9:30 奮戰到快 12:00<br>
d=(´▽ ｀)=b</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-03(四) React &amp; Redux 學習目標與檢討</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-03/"/>
      <updated>2021-09-03T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-03/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今日目標】<strong>化輸入為輸出</strong></h3>
<ul>
<li>提取：A4 白紙寫下昨天學了什麼</li>
<li>整理：｜ 30min ｜面試常見題目（只先整理問題不用回答）</li>
<li>複習：｜ 30min ｜ [ALG101] 挑一題練習寫出來（Unit2.5：實戰練習：找次大值）</li>
<li>練習：｜ 2hour ｜ React 部落格，當作 22 週作業完善功能寫完</li>
<li>練習：｜ 2hour ｜[FE303] Redux 簡介課程內容程式，自己寫一遍</li>
<li>課程：｜ 3hour ｜[FE301] class component 看到 React 基礎（邊做筆記）</li>
</ul>
<h5>【早起跟其他活動】</h5>
<ul>
<li>早起：昨天很累，10 點就去睡了，但是沒想到 3:00 就醒了睡不著 <em>(:з」∠)</em>，感覺有點影響今天讀書的身體狀態。</li>
<li>運動：瑜珈</li>
</ul>
<h3>【昨日學習心得】</h3>
<p>總學習時數 6 小時多</p>
<h4>✔︎ 提取：A4 白紙寫下昨天學了什麼</h4>
<h4>✔︎ 練習：｜ 30min ｜做出昨日影片 jQuery todolist 並存在 localStorage</h4>
<p>結果花了 2.5 個小時才寫出來，真的太大看自己了，看影片都覺得自己都懂了應該很容易，結果過了一天就把那些 jQuery 常用的方法都忘光光，不過好在最後有寫出來，也會用 jQuery 官方文件找資料了 。打算下禮拜找個時間再寫一次，確認真的有吸收</p>
<h4>△ 練習：｜ 2hour ｜ React 部落格，做到課程影片進度</h4>
<p>有點花太多時間在版面上面，其實也是因為自己不熟 React 的 style component 寫法，本來想說切個美美的版應該很快咻咻咻就切完，結果才大概兩個月沒寫 css 一些以前常寫的屬性印象都變淡了，還回去看當初做的網站自己是怎麼寫的，好在最後時間裡有先做出串接文章 api ，今天再努力看看能不能把功能做完整一些。</p>
<h4>X 整理：｜ 1hour ｜面試常見題目（只先整理問題不用回答）</h4>
<p>這是一個寫了兩次目標都沒有達成的任務，要再調整時間的分配。</p>
<h4>✔︎ 課程：｜ 2hour ｜[FE303] 看到 Redux 簡介（✘ 邊做筆記）</h4>
<p>有達到自訂的目標，但是看課程的時候大腦呈現「資訊量太多吸收不良」，甚至「度估」的情況都出現了，所以打算再把「度估」時的影片再看一遍跟做筆記。</p>
<h4>△ 課程：｜ 3hour ｜[FE301] React 基礎（✘ 邊做筆記）</h4>
<p>「先別急著學 React」 的部分都看完了，也實做過一次課程中的概念，但是目標進度還沒到，今天再往下一個段落前進囉～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-04 12:18:46</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-04/"/>
      <updated>2021-09-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-04/</id>
      <content type="html">
        <![CDATA[
      <p>React &amp; Redux<br>
【今日目標】<br>
提取：A4 白紙寫下昨天學了什麼<br>
複習：｜ 30min ｜ [ALG101] 挑一題練習寫出來<br>
練習：｜ 2hour ｜用 React 實作出一個 todo list<br>
課程：｜ 3hour ｜[FE301] class component 能看到哪就看到哪（邊做筆記）</p>
<p>縮小目標減低心理上的抗拒～</p>
<p>【早起跟其他活動】<br>
運動：瑜珈<br>
唸書：思維進化</p>
<p>【昨日學習心得】<br>
總學習時數 應該只有 30 分鐘 ＝＝|||</p>
<p>✔︎ 提取：A4 白紙寫下昨天學了什麼<br>
△ 複習：- Unit2.5：實戰練習：找次大值 (5:41) 就看了一遍～沒有練習<br>
✘ 整理：｜ 30min ｜面試常見題目（只先整理問題不用回答）<br>
這個先放棄因為都不想開始，丟進代辦事項</p>
<p>因為起床的時間很詭異（半夜三點＝＝|||）所以早上超想睡覺的，雖然很想把課程看完但是濃濃的睡意就跑去睡覺，本來只想睡一個小時結果多睡了一點就到 12 點多了，起來看到簡訊疫苗通知，終於輪到我了很興奮地上網去預約疫苗，結果家裡附近的診所都約滿，想說是在跟我開玩笑嗎可以有資格打疫苗然後約不到地點，這也太瞎，把所有台中的地區都看過發現只剩榮總可以打疫苗，要跑超遠的，然後還手殘選錯天選到星期四，只能再看看今天登記結束之後能不能修改時間ＱＱ</p>
<p>本來只是想抒發一下昨天使用網站的心得，沒想到打了太多字就乾脆貼成另外<br>
一篇心得文了，<a href="https://roroiii.coderbridge.io/2021/09/04/web-uiux/">規劃網站的時候除了寫程式，你還可以再多想想「體驗」</a></p>
<p>感覺帶上了一點主觀偏見，可以再寫得更好一點，但是畢竟只是筆記嘛，這樣就好了。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2020-09-05(六) 持續進化的 React 學習心得</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-05/"/>
      <updated>2021-09-05T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-05/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今日目標】</h3>
<h4>△ 練習：｜拜託自己請給我今天完成｜用 React 實作出一個 todo list</h4>
<h4>複習：｜這個剛剛已經完成惹好棒哦｜ [ALG101] 挑一題練習寫出來</h4>
<h4>✘ 課程：｜晚上你就給我看這個！｜[FE301] class component 能看到哪就看到哪（邊做筆記）</h4>
<h3>【早起跟其他活動】</h3>
<p>運動：瑜珈
今天做了一個動作是躺在地上把下半身撐起來垂直地面，然後把腳放在頭上，影片裡 Juliana 的身體可以這麼軟真的很神奇，我也好喜歡她手臂的肌肉線條，希望有一天我也可以(?)</p>
<p>唸書：思維進化
真的覺得這本書對現在的自己很有幫助，有打開自己另一種思考方式的感覺。
昨天看到某個段落是在講拖延症，標題就寫著一句「你沒有未來」，心裡其實是滿反感的，但是看完解釋好像他講的也滿有道理，拖延症就是一種有「明天」、「後天」、「下禮拜」都可以做，最後什麼都沒完成的症狀。
比較常聽到的說法應該是「專注當下」你可以做什麼，你想做什麼現在就開始做吧！</p>
<p>我真的滿喜歡打心得文的哈哈，越打越有勁然後重要的作業(；¬д¬)
謝謝來密我的同學，你們就是提升我打心得這個興趣的一種小確幸ＸＤ</p>
<h3>【昨日學習心得】✔︎ △ ✘</h3>
<h4>✘ 提取：A4 白紙寫下昨天學了什麼</h4>
<h4>✔︎ 複習：｜ 30min ｜ [ALG101] 挑一題練習寫出來</h4>
<p>覺得一直不想開始是因為沒有把環境弄好，就是那個在本地端 <code>cat input.txt | node code.js</code> 再打心得文的當下就給他放在一個資料夾裡設定好惹，刻不容緩～！！</p>
<h4>△ 練習：｜ 2hour ｜用 React 實作出一個 todo list</h4>
<p>大概練習了 2 個小時，但是都是在研究套件。
本來就只是想把版面弄得好看一點，想說來套個 Bootstrap 好了，可以在 styled-component 內當元件引用，但是發現只是覆寫而已，就覺得有更好的做法，上網查發現有人把 Bootstrap 的設定更簡單化改造成 <a href="https://bootstrap-styled.github.io/bootstrap-styled/">bootstrap-styled</a>，但是已經一二年沒更新想說還是依據 Bootstrap 官網的方式走好了，設定好了之後又覺得 Bootstrap 編譯出的 css 很肥大只能整包引入進來，然後自訂的 custom.scss 檔內的設定也只是編譯出來覆寫了內建的 scss 而已，就覺得應該有更好的做法吧</p>
<p>後來就想說不然來研究一下 <a href="https://material-ui.com/zh/">material-ui</a> ，簡直是 Bootstrap 超強進化版，也好像有類似 styled-component 的寫法可以使用，而且只要安裝他的套件，不像 Bootstrap 還要另外裝 scss 跟設定一堆東西。
但是這個作業打算先停損在 Bootstrap ，先求把作業做完就好不然會永遠寫不完ＱＱ</p>
<p>一開始只是想要把按鈕改得好看一點，只是想改個顏色，其實自己寫也滿快的但是就要一種求好心切（是這樣用嗎？）的心態然後去查了一堆文件，但是也是學到要怎麼樣找資料的感覺。</p>
<p>希望以後找 React 的相關資料也可以這麼順風順水哈哈</p>
<h4>✘ 課程：｜ 3hour ｜[FE301] class component 能看到哪就看到哪（邊做筆記）</h4>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-06 22:00:21</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-06/"/>
      <updated>2021-09-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-06/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今日&amp;昨日進度】</h3>
<p>死磕硬磕花了兩天把 todolist 的 filter 功能做完了，送自己這個表情＝＝|||</p>
<h3>【學習心得】</h3>
<p>昨天開始寫作業的時候雖然本來是用 Bootstrap ，但是發現好像有點麻煩所以最後選擇用 Material-ui，官方文件寫得滿清楚的，也可以兼容 styled component 的方式，其中要注意一下 css render 的順序，還有為了改主題顏色研究了一陣子，算是半套用成功(?)<br>
結果實際效用就是 todolist 也只用到 Input 跟 Button 元件，但是花了我很多時間研究ＸＤ 給自己的鼓勵是，未來如果工作上用到應該會比較快上手～</p>
<p>filter 全部、已完成跟未完成的功能我真的做超久，從昨天晚上一直寫到睡前，再從今天早上 8 點多一直死磕硬磕的寫到下午 4 點多才終於做出來，期間找了超多 todolist 的教學（但大部分都沒有教這個不然就是都用 react router 做出來），看了幾個同學的作業但都還是沒辦法順利 render 我要的東西</p>
<p>有確認<br>
1.知道用 filter 去判斷 todo.isDone 的狀態<br>
2.按下按鈕之後要顯示需要的內容<br>
3. todos.map 那邊要 filter 我要的內容</p>
<p>猜測可能要用 filter() 或是 map() 的方法去判斷<br>
有想過用 &quot;all&quot;, &quot;done&quot; ,&quot;undone&quot; 去做判斷，但是這樣 todos 的資料又要再加入一筆，明明已經有 isDone 應該要從這邊去做判斷</p>
<p>覺得會卡住應該是對 props 傳遞上還不是很理解，所以我就把整個 todolist 邏輯都砍掉只離下 UI 全部重做一遍，最後剩下卡在 filter</p>
<p>後來看到有個同學用 todos.filter().map() 這樣的方式去判斷，突然想到對啊可以用兩個內建函式去對資料做處理，但還是卡在按鈕按下去回傳的狀態（回傳的是 filter 後的 array）之後又想想啊不對應該是要讓判斷的按鈕回傳 true 或是 false 比對 todos.filter() 的狀態，所以只要設定好 todoFilter 的值為 null 、true、false 就可以得到想要的資料了。</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// 初始資料</span>
<span class="token keyword">const</span> <span class="token punctuation">[</span>todoFilter<span class="token punctuation">,</span> setTodoFilter<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// 按鈕按下去</span>
<span class="token keyword">const</span> <span class="token function-variable function">handleTodoFilter</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">isDone</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token function">setTodoFilter</span><span class="token punctuation">(</span>isDone<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">return</span><span class="token punctuation">(</span>
todos<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> todo<span class="token punctuation">.</span>isDone <span class="token operator">!==</span> todoFilter<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">todo</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> <span class="token comment">//render的東西))</span>
<span class="token punctuation">)</span></code></pre>
<p>透過重新做一次 todolist 邏輯上感覺有更清楚了，一直寫不出來也真的很焦慮，內心也會突然冒出「靠杯這個這麼簡單我怎麼寫不出來，靠邀寫了一整天了耶耶耶」各種否定的想法，但是寫出來的那一刻就覺得「我怎麼可以這麼棒哈哈哈」超級有成就感，我想這就是寫程式的快樂吧～</p>
<p>然後晚上才開始看 class component 後半部的課程影片，發現影片裡面老師已經有講過類似的方法了，我還研究這麼久真的很瞎ＸＤ</p>
<p>今天～我就是一隻蝦，蝦蝦蝦～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-13 22:17:27</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-13/"/>
      <updated>2021-09-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-13/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今天學習心得】✔︎ △ ✘</h3>
<p>✔︎ 今天把 React 課程影片看完<br>
✔︎ 看了 21、18 週的複習週影片<br>
✔︎ 嘗試了 Vercel + Next.js 的部署 Demo 範例，研究了一下 Vercel 的後台功能。</p>
<h3>【上週學習心得】✔︎ △ ✘</h3>
<p>上星期三討論 finial project 到半夜一點隔天去打疫苗ＸＤ<br>
就想著會不會很嚴重啊～提心吊膽地過了幾天。</p>
<p>結果打完疫苗隔天應該是副作用最嚴重的時候，竟然四點起床寫 todolist 的作業，不知不覺當天就寫了十幾個小時。應該是普拿疼的副作用吧，竟然一直寫寫寫了很多程式碼，普拿疼好優秀(?)</p>
<h3>✔︎ 練習：｜拜託自己請給我今天完成｜用 React 實作出一個 todo list</h3>
<p>沒想到這個喊話進入到了我的內心，讓我在身體不舒服的時候把作業寫完，也做好了簡單的 RWD，編輯功能也做好了，真的很神奇。</p>
<h3>✔︎ 課程：React 課程影片</h3>
<p>21-24 週 React 課程影片幾乎都看完了，剩下 Redux 核心：Middleware 還沒看預計這週就是一直開始寫寫寫～</p>
<p>沒想到從進入 21 週開始已經過了 3 星期了ＱＱ<br>
希望這週可以把 21 週作業繳出去</p>
<h3>【早起跟其他活動】</h3>
<p>運動：瑜珈<br>
因為打疫苗暫停了幾天～希望從明天回歸繼續做瑜珈</p>
<p>唸書：致富心態<br>
這也是打開自己另一種思維的一本書，目前看到一半，覺得還不錯。<br>
有些看似理所當然的事情，用另一個角度去看會得到另一種思維，酷！</p>
<p>英文：<br>
最近一直有想著要怎麼樣再增加自己英文閱讀的能力（就是想看的懂官方文件 7-8 成的程度），看到有篇文章裡面說「學程式，直接看國外 YouTuber 怎麼講解，無形中連專有名詞都學會了」，覺得好像是這樣耶，有些專有名詞不知道怎麼念，也是聽老師影片課程一直講到就記起來了。</p>
<p>也嘗試看 React 的英文文件，發現前幾個段落我就抄了很多不太懂的單字ＸＤ<br>
然後查一下怎念，大概意思是什麼，看的速度超慢<br>
但是後面的段落也一直出現同樣的單字，所以照這個樣子慢慢累積，應該以後看文件的速度就會越來越快吧(?)</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-15 23:54:49</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-15/"/>
      <updated>2021-09-15T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-15/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今日學習心得】✔︎ △ ✘</h3>
<p>今天下午才開始看 React 的 Tic Tac Toe 教學，中英文文件交叉的看，看英文文件練習英文閱讀，看不下去再看一下中文版本</p>
<p>把 todolist 作業部署到 GitHub 上面惹，也寫了一點點簡單的 Readme</p>
<p>遇到學習撞牆期，有點靜不下心來寫作業，比較想先把部落格作業寫完，但是又覺得五子棋滿重要的想把它寫完ＱＱ</p>
<p>覺得很想趕快出去工作，今天就又看了一下「台中的 React 職缺」，<br>
嗯嗯！有點少ＸＤ</p>
<h3>【早起跟其他活動】</h3>
<p>下午做了瑜珈～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-27 11:52:41</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-27/"/>
      <updated>2021-09-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-27/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【今天學習心得】✔︎ △ ✘</h3>
<p>很久很久沒打學習心得，距離上次打心得也過了快兩個禮拜，時間真的一下子就過了～<br>
爽爽的放了中秋連假四天（應該是說這幾天都在放假？）<br>
其中也開始做了 week22 的部落格，但是就是一直想把他做的完美一點，像是拿得出去的作品的水準，結果花很多時間在首頁其他功能都還沒完成，意識到這一點，之後會先著重在把功能做完，之後才是美化版面。</p>
<p>打完疫苗之後學習動力一直不是很高，可能因為免疫力受影響自己身體有點狀況，明明知道要完成五子棋跟表單驗證的功能，但是一直不想打開編輯器去寫，存在著一種反抗心態。也一直有種「好想趕快去工作喔～～」的感覺，大概是在家待太久了吧，可能明天試著去路易莎寫作業。</p>
<p>但是不管怎麼樣已經跟自己約定好了９月底前要投出第一封履歷然後開始去面試，因為真的要去面試了所以動力也會因為壓力被迫提升～作品只有以前做的幾個專案跟一個簡單的 React Todo List，就當作試試水溫跟獲得經驗吧，先行動！</p>
<h3>【早起跟其他活動】</h3>
<p>昨天跟朋友跑去大坑爬了 7 號步道～真的是一條全家大小適宜的路線，整路都有樹陰不會太熱，坡度也不陡，可以聽到大家都在邊閒聊邊爬山，很放鬆～<br>
唯一的小缺點是我又報錯路結果我們就騎到公墓裡面去了，還好一下就折返了ＸＤ</p>
<p>持續瑜珈跟早睡成功（大約 10 點左右就寢），覺得身體有越來越回復成正常的健康了哈哈，早睡真的改善一堆奇奇怪怪的小毛病。</p>
<p>中醫說不能吃糖也盡量戒掉了，意外發現以前覺得超難喝的無糖豆漿變得好好喝～另外發現 costco 的燕麥奶驚人的好喝耶！</p>
<p>飲料就是喝了會一直想喝，過段時間不喝的話，就不會想喝<br>
糖上癮真的滿可怕的ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-09-30 08:53:19</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-09-30/"/>
      <updated>2021-09-30T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-09-30/</id>
      <content type="html">
        <![CDATA[
      <h2>React &amp; Redux</h2>
<h3>【昨天學習心得】✔︎ △ ✘</h3>
<p>終於來路易莎讀書惹，前天在家還是超頹廢<br>
看了別人的履歷發現有放 D3.js ，上網查是什麼不小心就把 <a href="https://youtu.be/TOJ9yjvlapY">D3.js - A Practical Introduction</a> 看完惹，第一次學到 SVG 的寫法覺得很神奇～不過目前應該還用不到 D3.js</p>
<p>履歷的部分，我是照著一位轉職工程師的人分享的履歷做，是說去年我去應徵行銷職位也是用他的範本覺得滿好用的，將來更新履歷應該也會照著這個版面。</p>
<p>寫行銷履歷的時候一下就寫出來了，寫工程師的履歷的時候，腦袋卡很久，尤其作品介紹啊啊啊～～換個角度寫很燒腦，希望過一年後也能洋洋灑灑的就把工程師履歷寫出來。要把東西講的「看起來很厲害又不能太吹牛放屁」是一門學問。</p>
<p>結果回到家也繼續努力，把履歷弄得差不多了，雖然 React 跟其他作品比起來完成度差很多，但是今天會投出第一封履歷完成自訂目標ＸＤ<br>
之後兩天要來刷題目，練習一下</p>
<h3>【早起跟其他活動】</h3>
<p>終於來到路易莎讀書～平日人也太多了幾乎坐滿，9 點來已經沒有插座的位置了，其實環境有點吵，但是意外地找回專注力，開心＾＾</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-04 22:37:52</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-04/"/>
      <updated>2021-10-04T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-04/</id>
      <content type="html">
        <![CDATA[
      <h3>【今天目標】✔︎ △ ✘</h3>
<p>今天的目標目前只有下午去面試</p>
<hr>
<h3>上星期回顧</h3>
<hr>
<p>✔︎ 9/30 完成投出履歷的目標<br>
✔︎ 履歷完成並影印<br>
✔︎ 練習自我介紹跟看常考問題</p>
<p>目前先在 104 上面找的公司</p>
<ol>
<li>這次面試的目的是試水溫保持平常心～另一個目旳是找回自己寫程式的初衷(?)</li>
<li>先避開博弈業（真的超困難 10 家裡面有 7 家都是）</li>
<li>工作內容有提到 React 的公司</li>
<li>避開一看就是接案公司的公司</li>
</ol>
<p>對了我是在台中找工作，我覺得跟台北求職環境很不一樣，可能因為前端工程師職缺比較少，想要練習面試先不要隨便投，先找幾家覺得比較有機會又沒那麼喜歡的練習面試，面試回來調整過後，再開始投想要的公司會比較好。</p>
<p>台中可以找到前端工程師的職缺的平台大概只有 104 跟 CakeResume ， 1111 上面職缺也偏少，大部分 104 上面都有了所以可以先略過，其他平台基本上前端職缺是 0。</p>
<p>9/30 在 104 投出 5 封履歷，目前收到 2 家面試，今天面一家，星期三面一家。</p>
<p>其實面試信心有點低ＸＤ 很怕很簡單的題目都寫不出來， 21、22 週作業也還沒繳出去，又看到同學的 finial project 都好認真，自己目前只做了一個 React 小作品，這次面試回來要開始 finial project 的進度了～～</p>
<p>課程的最終目標應該是讓你得到前端工作的一個手段，而非最終目的。<br>
抱著這樣的想法就決定先開始面試拉～</p>
<h3>【早起跟其他活動】</h3>
<p>今天也做了瑜珈 YA~!<br>
昨天看到跳繩相關的影片覺得好像很棒，可以鍛鍊身體協調性也可以長肌肉，過幾天來嘗試看看跳繩～</p>
<hr>
<h2>連續四天的面試之旅</h2>
<h3>【今天面試心得】✔︎ △ ✘</h3>
<p>痾痾痾啊啊啊，面試結束了<br>
今天那個主管對我說學歷其實滿重要的，我回來想想其實也說得滿有道理的。<br>
然後看了一下四大資工系碩士大概學什麼，準備考試的內容有什麼<br>
有線性代數、離散數學、計算機組織&amp;作業系統、資結&amp;演算法...<br>
有些我連聽都沒聽過 ∑(O_O;)<br>
可能要讀資工系碩士還有一段很大的距離吧ＱＱ</p>
<hr>
<p>早上又接到了兩家面試通知，明天是線上面試，看公司陣容也都是本科系的高材生<br>
問到一些概念或是邏輯題就ＱＱ</p>
<p>自我安慰 我的強項就是統包（包設計包行銷包寫程式包寫規格書包山包海都包我都包～）</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-06 19:12:09</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-06/"/>
      <updated>2021-10-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-06/</id>
      <content type="html">
        <![CDATA[
      <h3>【今天面試心得】✔︎ △ ✘</h3>
<p>昨天本來有一個線上面試，但是我一直沒收到 Google meet 的連結，時間到了打電話去問，才發現對方是寄 Email 給我， 結果我沒看 Email 囧<br>
改約到下星期五早上 10 點</p>
<p>今天跑到南屯工業區去面試，騎車騎了 50 分鐘，因為沒塞車所以覺得滿快的。</p>
<p>面試主管是一位大陸人，覺得問答的時候有點雞同鴨講因為很多程式的說法不一樣，面試的時候還有兩個人在那邊乾瞪眼的時候，真的超尷尬只好趕快想問題問 囧</p>
<p>明天再面試兩家這週的面試之旅就結束了<br>
感覺有投履歷就幾乎有面試機會，也真的是滿神奇的<br>
只是感覺自己技術還不夠，等明天面試完之後要來練習刷題，還有寫邏輯跟數學題。</p>
<p>我覺得最怪的是從 5 月那時候面試 3 家，到現在的 2 家公司，都沒有一家考 JS 的啊啊啊，我去面試前端問我後端的東西，不然就考我數學ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-07 19:14:21</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-07/"/>
      <updated>2021-10-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-07/</id>
      <content type="html">
        <![CDATA[
      <h3>【今天面試心得】✔︎ △ ✘</h3>
<p>早上一家寫在面試心得</p>
<p>下午那家是博弈公司就不寫面試心得惹，算是沒仔細看然後投履歷投到，有面試邀約就覺得不然去看看好了。<br>
進去開始面試之後一個應該是主管的人跟我說，我的技術主管人在柬埔寨，所以我要電話面試之後就打給他，然後我就開始跟手機上的貓咪大頭貼面試ＸＤ<br>
有趣的是又遇到了應該是大陸人的口音，所以有些技術名詞又不一樣惹</p>
<p>這是我第一家被考 JavaScript 跟 React 的公司，好感動！！！終於被問到惹～～<br>
問了 javaScript 底層的運作，還有 React 的運作原理，瀏覽器到伺服器這中間發生了什麼事情，CSS 怎麼解析的，瀏覽器怎麼解析網頁的之類的</p>
<p>電話結束之後帶我進去面試的主管就說，那等他們討論之後會再通知二面然後才決定薪水，台灣這邊就會只有我一個工程師，然後遠端溝通，等疫情過後要去柬埔寨。<br>
面試大概 20 分鐘左右就結束惹～感謝這家公司讓我有個練習面試答題的機會</p>
<p>這禮拜面試下來覺得</p>
<ol>
<li>不管到哪家公司全部都要重新學，無法立即上手，所以有教育訓練的公司可能會好一點</li>
<li>finial project 的 UI 畫面建議直接用現成套件，公司比較重你的邏輯跟判斷能力，功能是重點，套件讓你的畫面看起來有質感，又不會花太多時間在 CSS。</li>
<li>面試的態度跟學習意願，這滿重要的</li>
</ol>
<p>目前為止面試了 4 家公司，兩個主管是大陸人，還是其實台灣已經有很多公司是陸資了嗎ＱＱ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-10 11:56:02 轉換心態</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-10/"/>
      <updated>2021-10-10T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-10/</id>
      <content type="html">
        <![CDATA[
      <h3>求職進度</h3>
<h4>轉換心態</h4>
<p>感謝老師的隨意聊，每次都讓我自己重新檢視心態，從第四期課程跟到現在第五期課程要結束了，從全職學習變成在職學習，又從在職變成全職學習，但我還是在通往轉職的路上，真的是一段滿長的時間。</p>
<p>這一年多的期間也偷懶放鬆自己很多次，但每次認真開始寫程式都是最有收穫的時候。期間也像老師說的那樣懷疑自己是不是不適合寫程式，自己數學很爛、解題解不出來、程式寫不出來...<br>
剛好在前幾天看到一篇 ptt 版上有人詢問「leetcode 解題卡住要怎麼辦」的問題，底下留言都滿正向的，大部分的人都說「卡住是正常的，不卡才奇怪，寫久了有一天就突然通了，真的想不出來就先看解答，也會學到別人怎麼解題」<br>
其實大家都會卡住，只是對問題的心態上的差別，然後就覺得其實自己沒有自己想的那麼差。</p>
<p>我自己覺得個性還有想法跟原生家庭滿有關係的，但是透過看書跟 podcast 的一些節目，或是接觸其他人都會漸漸讓自己的想法跟心態轉換，這是一場心態上的長久拉鋸戰。</p>
<h4>調整作法</h4>
<p>結束上禮拜的面試之旅之後，下禮拜還是會繼續面試，唯一的差別就是開始寫 finial project 了，去面試之後覺得自己還有一些可以在專案上做得更好的地方，面試也是強迫自己開始行動，不再用學習心態去面對程式，而是轉換為求職工具，解決工作上遇到的問題的一種方法。</p>
<h4>關於專案</h4>
<p>昨天花了一天的時間研究並架設環境，使用 Next.js + Material-UI 當作技術棧，再加上點簡單的圖表，因為我們這組的經驗是去面試會被問到有沒有使用過，我個人的目標是讓專案在這個月做到足夠去面試的程度，雖然想再加上 TypeScript ，也嘗試開始寫，但是因為常常噴錯就要花時間去找解決方案，加上需要讓組員都熟悉語法，這樣專案可能會做到年底，所以就等之後再自己找時間補上。</p>
<h4>關於 offer</h4>
<p>剛開始出去面試的時候心情常常起起伏伏的，感謝組員 David 用他以前的面試經驗鼓勵我，讓我對自己有信心。雖然拿到了第一個 offer ，但是考慮了公司的規模只有 5 個人、使用 anguler 的學習難度、工作上要做設計兼 PM 兼寫計畫書與出差，看網路上的評價也是如此，雖然薪水是面試到目前為止最好的，但是與自己目標不符合應該不會去報到。</p>
<p>期望可以遇到一家寫 React 的公司～下星期面試，ＧＯＧＯ！</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-12 17:55:45</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-12/"/>
      <updated>2021-10-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-12/</id>
      <content type="html">
        <![CDATA[
      <h2>專案</h2>
<h3>【今天學習心得】✔︎ △ ✘</h3>
<ol>
<li>早上把專案的選單做完惹，邊研究 MUI 的元件用法。</li>
<li>註冊 leetcode 寫了 Reverse String 的題目，想說可能之後面試會遇到，寫的時候很卡，就跑去 codewars 一下就寫出來了，leetcode 感覺偏演算法，就先從簡單的題目來練習看看。</li>
<li>跟小樹屋的同學一起看了 modernweb 的直播影片</li>
<li>問了老師關於 offer 的一些問題</li>
</ol>
<h3>【早起跟這星期預計活動】</h3>
<p>晚上要去洗牙～<br>
這禮拜的星期三跟星期五要面試，然後會把 21 跟 22 週的作業補起來，可能早上寫專案下午寫作業之類的，今天從早上 9 點開始坐在電腦前到晚上 6 點，時間一下就過去惹～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>React Next.js and Material UI(MUI)</title>
      <link href="https://blog.roroiii.com/posts/react/react-nextjs-mui/"/>
      <updated>2021-10-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/react-nextjs-mui/</id>
      <content type="html">
        <![CDATA[
      <p>這次 finial project 使用 React Next.js 還有 Material UI，Material UI 在最近改版變成 MUI ，引入的套件名稱都換掉了，官網的 logo 也更新，就趁著這次專案實作看看。</p>
<p>元件使用：</p>
<ul>
<li>react</li>
<li>styled-components</li>
<li>next.js</li>
<li>mui</li>
<li>mui icon</li>
<li>emotion (在 MUI 5 一定要裝 @emotion/react 跟 @emotion/styled 不然會報錯)</li>
<li>eslint</li>
<li>prettier</li>
</ul>
<p>剛開始使用 MUI 套件的時候，會覺得上面要引入一大堆東西，但減少了很多寫 CSS 的部分，因為剛開始熟悉 MUI 所以切版不算快，越來越熟悉之後就覺得其實滿好用的，而且介面也可以很漂亮。</p>
<p>MUI 官網上就有很多範例可以用，裡面也有一些 status 已經幫你寫好了，只要稍微調整之後就可以直接拿來用。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/604e50efbeea45aeb20a7033c11b7131.png" alt=""></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-14 21:54:42</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-14/"/>
      <updated>2021-10-14T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-14/</id>
      <content type="html">
        <![CDATA[
      <h3>【今天學習心得】✔︎ △ ✘</h3>
<p>今天繼續 week22 週的部落格作業了，因為前幾天專案都一直在切版，快把 React 串接的寫法都忘記了，所以就安排今天順便複習。<br>
結果繼續寫作業還是在專注在排版細節ＸＤ 一直提醒自己版面先大概就好，先把功能切出來！<br>
目前跟著影片做到登入功能。</p>
<p>等一下要來研究 David 給的專案後端的東西～</p>
<h3>【早起跟其他活動】</h3>
<p>明天要第一次體驗線上面試，覺得比實體面試還緊張，感覺好像技術很強很厲害，那家公司有提到有「Websocket、OAuth、JWT 相關知識」加分，但我只知道 Websocket 是一種從 server 推播通知到使用者端的東西；OAuth 應該是驗證有關的；JWT 就是一種身份驗證方式。</p>
<p>從上禮拜面試的經驗之後，每天晚上都跟朋友一起寫 Codewars 解題，雖然都是從很簡單的開始，但覺得這樣每天至少一題好像邏輯有進步，還滿不錯的：）</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-16 01:12:59</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-16/"/>
      <updated>2021-10-16T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-16/</id>
      <content type="html">
        <![CDATA[
      <h3>結束兩個禮拜的面試之旅</h3>
<h4>丟履歷階段</h4>
<p>這次面試都是用 104 丟履歷，台中其他平台的職缺都滿少的（如果有推薦的平台可以跟我說 &gt;&lt;），其他平台有的話 104 上面也幾乎都會有，我每天都會看一下有沒有新的職缺，篩選符合「React」關鍵字的職缺大概一百多個（包含後端、APP 之類的職缺），「前端工程師」的話有多一點點，但有感覺這陣子職缺真的滿少的，可能到 11 月再看看會不會有新的機會。<br>
想要丟出 100 封履歷做個海投練習有點難達成ＸＤ</p>
<h4>實際去面試</h4>
<p>自己丟出 12 封履歷，邀約面試大概 4 個最後去 1 家，總共面試 6 家公司。<br>
面試心得都打在文章惹<br>
剛開始第一家都會緊張，面試多家之後就會比較平常心，但今天第一次視訊面試就緊張到爆炸（大概是以前沒經驗下次應該會比較好）</p>
<h4>預計調整的部分</h4>
<p><strong>繼續精進程式，多寫一點</strong><br>
前端求職人數真的比較多，也因為這樣公司對技術的要求就會比較高一點，面試下來有感受到自己程式能力還有很多不足的地方</p>
<p>擔心進公司寫不出程式來怎麼辦？為什麼會寫不出來？<br>
-&gt;自己練習不夠多，程式寫的太少肌肉記憶不夠</p>
<p>那要怎麼改善能力不夠的問題？<br>
-&gt;繼續練習解題<br>
-&gt;試著練習看別人專案的程式碼然後自己打一遍<br>
-&gt;看英文 YouTube 程式教學（可以學到一些用詞還有概念）</p>
<p><strong>沒有展現想要進去那家公司的決心(?)</strong><br>
有幾家公司滿重視求職者瞭不瞭解自家產品，還有是不是真的有意願想去公司，可能我自己對於選擇公司方面沒有太多想法ＱＱ 以至於很難展現那種決心。</p>
<h4>總結</h4>
<p>這次本來是想試水溫面試的，也錄取了一家公司。但在這兩個禮拜的過程中，也覺得是不是有 offer 了就先直接去工作比較好，還有現在求職的機會比較少也許先去報到待著明年再換公司？不要都只有停留在學的部分，想去一家有技術又不雷的公司，也要自己先有那個能力才行呀～</p>
<p>不然就先去工作看看勒？反正最差能力不夠被辭退，不是也跟現在的狀態（待業）一樣嗎？</p>
<p>接案公司很累很操，就想成是給你一個大量練習寫程式的機會<br>
沒有 code review 的公司，就想成是「哇我寫這樣程式也會跑實在太感動惹」<br>
沒有厲害的同事，就想成是自己精進研究自學技術的能力<br>
反正不管怎麼都把它想成正面的，程式能力就會一直進步的。</p>
<p>把未來的希望放在第二第三家公司，先求進入的門票而不是一直站在門外看，就算被說能力不夠，想辦法努力改善就好了。</p>
<p>去面試就要一直給自己心理建設，內心戲很多，不知不覺又把心得打太多惹ＱＱ</p>
<h3>【Codeing 進度 】✔︎ △ ✘</h3>
<ul>
<li>今天早上線上面試結束之後，心情有點低落，不過也知道原因，努力改善就好了。</li>
<li>寫了 <a href="https://www.codewars.com/kata/556deca17c58da83c00002db/solutions/javascript">Tribonacci Sequence</a> 複習以前的數學還有看英文的能力ＸＤ</li>
<li>昨天晚上建置專案後端環境，感謝組員 David 的熱心影片教學。</li>
</ul>
<h3>【早起跟其他活動】</h3>
<p>持續瑜珈<br>
明天有客人要來把家裡打掃了一遍，順便整理心情。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-10-19 10:48:58</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-10-19/"/>
      <updated>2021-10-19T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-10-19/</id>
      <content type="html">
        <![CDATA[
      <h3>求職進度</h3>
<p>本來有打算去錄取的 offer ，但是又不太想去，想去的點是薪水還不錯，不想去的點是工作內容不是自己喜歡的。</p>
<p>就這樣一直猶豫了一個禮拜，雖然這中間還有面試但後來都沒下文<br>
最後做了一個蠢決定，不然就上網抽籤問大甲媽好了</p>
<p>問了去那家公司好不好<br>
籤詩說強求不會有好結果，還有被迫異地出差的風險（記得真的是寫有危險相關的事情）</p>
<p>然後問 11 月再找工作會遇到好的機會嗎<br>
這個好像比較好，大意是說靜心等待，之後會遇到貴人或是大利</p>
<p>然後早上我就寄信去回絕 offer 了，想想不喜歡的工作是真的也做不久。<br>
沒想到自己決定 offer 都還要問別人Ｑ_Ｑ<br>
「勸君把定心莫虛」這句講得真好</p>
<p>繼續努力把專案還有作業完成，定下心來提升自己，等待新的機會來臨。</p>
<p><img src="https://i.imgur.com/MNayAI5.png" alt="圖"></p>
<h2>React &amp; Redux</h2>
<h3>【昨日進度】✔︎ △ ✘</h3>
<p>昨天把部落格作業登入還有發文功能完成了，今天預計完成分頁跟註冊功能（好像這樣作業就寫完了耶）<br>
專案把首頁的商品版面切好了，有越來越熟悉 mui ，今天預計來研究 Daivd 給的後端 api 文件</p>
<p>是說最近心得變得好少喔，是因為課程週期已經結束了嗎ＱＱ<br>
還是大家都開始在準備面試惹，突然變得好冷清呀</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-11-12 14:55:07</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-11-12/"/>
      <updated>2021-11-12T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-11-12/</id>
      <content type="html">
        <![CDATA[
      <p>好久沒回來打心得ＱＱ</p>
<h3>Finial Project</h3>
<p>最近三個星期都在做專案的東西，想說專案是要做購物網站所以選擇 Next.js 作 SSR ，沒想到遇到很多錯誤狀況，還好 Google 都找得到解法，也嘗試用 Redux 跟 axios 在專案裡面，還好沒有一頭熱先用 TypeScript 不然應該會做更久ＸＤ。</p>
<p>在 Next.js 的 getStaticProps 用了 token 驗證會有狀況，因為頁面還沒生成前沒有 window 可以用，就無法拿到 token 去打 api ，就會報錯<br>
索性直接改成用 useEffect 裡面呼叫 api，目前是沒遇到什麼問題，但是感覺有點怪怪的(?)<br>
我負責的部分目前剩下上傳圖片的串接製作，接下來就是修專案細節惹。</p>
<h3>求職</h3>
<p>今天才又打開學習心得，看看大家的進度跟面試心得，瞬間覺得自己好弱ＸＤ<br>
1.LIdemyOJ 的題目目前只解了三分之一，希望自己可以把它解完，目前計劃一天寫一題。<br>
2.搜集同學的面試題目，練習口說跟把題目打下來避免忘記(真的是金魚腦ＱＱ)<br>
3.把 21.23.24.17.18 週的作業做完，一邊面試<br>
下星期準備開始繼續面試惹～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-11-18 13:07:31</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-11-18/"/>
      <updated>2021-11-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-11-18/</id>
      <content type="html">
        <![CDATA[
      <p>投出了三封履歷，然後上個月去面試的準備都忘得差不多了。<br>
所以要重新再記在腦袋裡。</p>
<p>但是準備面試，之前曾經寫過的程式又會漸漸忘記了<br>
大概二三個禮拜就是一個極限</p>
<p>感覺解決問題的能力，還有邏輯力才是可以持續長久的東西。</p>
<p>祝大家面試順利，加油ＧＯＧＯＧＯ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>LidemyOJ 解題 - 聯誼門票搶起來</title>
      <link href="https://blog.roroiii.com/posts/javascript/lidemyOJ/"/>
      <updated>2021-11-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/javascript/lidemyOJ/</id>
      <content type="html">
        <![CDATA[
      <p>久違的練習解題目，覺得 Huli 出的 Lidemy OJ 題目都滿經典的，而且都是中文題目，很適合訓練邏輯思考。</p>
<p>網址：https://oj.lidemy.com/</p>
<p>我自己報名程式導師實驗計畫，從零基礎開始學程式，剛開始看這些題目真的頭很痛看不太懂，真的很像在寫數學題，認識的數學系同學卻很快就把題目解完了，真的是肉眼可見的程度差距ＸＤ</p>
<p>你要告訴自己其實不是不懂也不是不會，只是沒看過這些題目剛開始被震懾到而已，有一天你也可以靠自己解出這些題目的！多寫題目多看題目都會進步，每天練習一點點，累積起來也會很可觀。</p>
<p>邏輯思考對工程師真的滿重要的，但是這種抽象概念也不是一朝一夕可以練成的，建議大家可以從簡單的題目開始慢慢練習解題，每次解出來都會有種痛快感ＸＤ</p>
<p>解題重點：</p>
<ol>
<li>先找到要抓取的值</li>
<li>找到要分割的字串長度</li>
<li>把字串拼起來之後用 <code>split()</code> 分割</li>
<li>找到要抓取的字的位置，字串拼接起來就是答案</li>
</ol>
<p>附上我的 ac 方式，不是最好，但是是我自己想出來的解法ＸＤ</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">var</span> readline <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'readline'</span><span class="token punctuation">)</span>

<span class="token keyword">var</span> lines <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
<span class="token keyword">var</span> rl <span class="token operator">=</span> readline<span class="token punctuation">.</span><span class="token function">createInterface</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  <span class="token literal-property property">input</span><span class="token operator">:</span> process<span class="token punctuation">.</span>stdin<span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

rl<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'line'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">line</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  lines<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>line<span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

rl<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'close'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">solve</span><span class="token punctuation">(</span>lines<span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token keyword">function</span> <span class="token function">solve</span><span class="token punctuation">(</span><span class="token parameter">lines</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">// 這裡寫解題方式</span>
  <span class="token keyword">let</span> numLength <span class="token operator">=</span> <span class="token function">Number</span><span class="token punctuation">(</span>lines<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
  <span class="token keyword">let</span> m <span class="token operator">=</span> <span class="token function">Number</span><span class="token punctuation">(</span>lines<span class="token punctuation">[</span>numLength <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
  <span class="token keyword">let</span> s <span class="token operator">=</span> lines<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>

  <span class="token keyword">function</span> <span class="token function">sArr</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> numLength<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      s <span class="token operator">+=</span> lines<span class="token punctuation">[</span>i<span class="token punctuation">]</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> s<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> strArr <span class="token operator">=</span> <span class="token function">sArr</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token keyword">let</span> str <span class="token operator">=</span> <span class="token string">''</span>
  <span class="token keyword">function</span> <span class="token function">ansStr</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> m<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      str <span class="token operator">+=</span> strArr<span class="token punctuation">[</span><span class="token function">Number</span><span class="token punctuation">(</span>lines<span class="token punctuation">[</span>numLength <span class="token operator">+</span> <span class="token number">1</span> <span class="token operator">+</span> i<span class="token punctuation">]</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> str
  <span class="token punctuation">}</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">ansStr</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>前端工程師真的要會滿多技能的，基本的前端三劍客、英文能力、邏輯思考、抽象概念、UIUX、SEO、後端你最好都要懂一點，感覺未來 TypeScript 跟 Docker 可能也會是基本配置，進到公司之後也是無止盡的學，新手菜鳥真的別指望可以像別人下班在家追劇放鬆玩遊戲，要追上公司的程度你自己要花很多下班時間進修。</p>
<p>尤其前端變化真的很快，可能兩年前寫的扣現在看起來已經不太能用了，變成無止盡的學，你是為了薪水還是真心喜歡工程師這份工作呢？</p>
<p>我自己是後者拉，可以讓我持續成長的公司我都很喜歡，太安逸或是技術都沒有想要更新的公司就會待不住，我就常問自己，如果我中了樂透生活無慮我還會想當工程師嗎？答案也是肯定的，因為我就閒不住，就一直想學新的東西，這可能也是自己從行銷轉工程師的原因ＸＤ</p>
<p>覺得很可惜的是為什麼以前學生時代不知道寫程式這麼有趣呢？如果可以早幾年知道該多好</p>
<p>祝大家都可以解出解不開的題目，找到心目中理想的工作。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-11-26 17:45:00</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-11-26/"/>
      <updated>2021-11-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-11-26/</id>
      <content type="html">
        <![CDATA[
      <p>已經看了二天的區塊鏈的知識，<br>
想說今天來路易莎讀書順便繼續精進 nextJS，<br>
不小心寫了一篇 <a href="https://roroiii.coderbridge.io/2021/11/26/lidemyoj-problem-1003/">LidemyOJ 解題 - 聯誼門票搶起來</a><br>
幫同學修個履歷<br>
殊不知一上小樹屋跟大家閒聊就又到了路易莎的下班時間<br>
一天的假認真又結束惹</p>
<p>答應說要寫求職心得文的同學，還有說會回來寫工作心得文的同學們<br>
我很期待你們的分享ＸＤ<br>
感受滿滿小樹屋正能量的一天</p>
<p>最近充滿了職前焦慮，很怕進公司跟不上被火了，一有壓力就想出去走走運動跳繩瑜伽ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>每日心得筆記 2021-12-07 23:39:29</title>
      <link href="https://blog.roroiii.com/posts/lidemy/2021-12-07/"/>
      <updated>2021-12-07T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/lidemy/2021-12-07/</id>
      <content type="html">
        <![CDATA[
      <p>上班的第一個星期～</p>
<p>在研究 react query 的時候看到了第三期學長的 <a href="https://chihyang41.github.io/2020/09/07/React-Query-Tutorial/">React Query Tutorial</a> 文章，感覺整理得好清楚！</p>
<p>希望自己也可以持續寫文章，化輸出為輸入～～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>2022 個人愛用程式開發工具</title>
      <link href="https://blog.roroiii.com/posts/others/2022-work/"/>
      <updated>2022-04-23T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/others/2022-work/</id>
      <content type="html">
        <![CDATA[
      <p>身為一位剛轉職前端的程式開發小菜菜，上班的這幾個月來有固定的愛用工具。
跟開發沒有直接相關性，是其他輔助使用的軟體。</p>
<p><img src="https://static.coderbridge.com/img/roroiii/0a0353d34aa1482580dd8a59a1b503c8.png" alt=""></p>
<h2>Sidekick 瀏覽器</h2>
<p><a href="https://join.meetsidekick.com/kukzv">官方介紹</a></p>
<p>我習慣用的開發筆電是 Macbook Pro 13 ，但是 Chrome 瀏覽器在 Mac 作業系統上有個大問題，就是超級吃記憶體，因為我的私人電腦只有 8G 記憶體，一打開 Chrome 我的風速就會全力運轉超級吵，電腦也超燙，所以就在 Lidemy 課程助教們的推坑下換了 Sidekick 瀏覽器。</p>
<p>實際與 Chrome 的操作起來是差不多的，但是多了側邊欄我覺得超級方便，外掛套件也是相通的，整個無痛轉換，最重要的是，我的筆電終於不會風扇高速運轉啦～（撒花）</p>
<p>Sessions 的功能也可以區分瀏覽器的不同用途，一次開啟需要的分頁就是讚啊～可以分成追劇用、看漫畫用、工作用之類的，方便方便～</p>
<p>唯一最大的缺點是書籤列只有第一次加入的時候可以同步，之後修改的書籤不會同步在不同裝置上。之前去看官方說明是寫還在開發研究中，但是我的書籤列真的越來越肥大也不常去打開，最後我是用 Notion 去記錄每個專案會用到的參考網址。</p>
<h2>Notion</h2>
<p>這個網路上的教學很多，上手之後真的是很方便的工具。
缺點是免費版本只有最多 1000 block 的限制，當然你可以再多開新的 worksapce 就可以再多 1000 block 了，目前使用個人免費版本都沒有超過，公司的專案使用上就開了很多不同的 workspace 了 XD</p>
<h2>HackMD</h2>
<p>每次要隨手寫東西紀錄的時候，直接線上儲存，輸入的方式我覺得比 Notion 順，但是基於開源的精神，筆記預設都是有網址就看得見、有登入任一帳號就可以修改內容的，所以如果忘記去修改權限的話私密資料就 GG，這點要注意。
除此之外都是我喜歡的優點，介面簡單方便直覺，邊聽課程邊打筆記之類的都超級方便，推推 👍</p>
<h2>1Password</h2>
<p>這是一個紀錄密碼的工具，在這個需要紀錄一堆堆密碼還有註記詞的年代，有一個密碼管理工具會是你腦內海馬迴的另一個好方法，至於安全性就見仁見智，看你怎麼使用。
本來只是想試用 14 天，時間到沒有去取消就一次給我刷一年的費用下去了 囧
所以基於都花錢了不用白不用的心態，就開始使用了，目前的心得是還不錯用。</p>
<p>可以看看這篇文章使用這種加鹽的方式（雙重盲密碼）記錄你的密碼，這樣密碼被駭客駭走也不會真的把你的密碼直接偷走歐
https://www.allthingssecured.com/tips/password-security/double-blind-password-strategy/</p>
<p>我有幾個 Chrome 的使用者裡面紀錄不同的帳號密碼，要整理全部的密碼真的滿累的，但我相信現在不整理以後應該也只會越來越多。
順便把儲存在 Chrome 瀏覽器的密碼都清理掉了(只能一個一個按刪除很累，但是匯出可以一次全部匯出，好像真的不是很安全)</p>
<h2>筆電支架</h2>
<p><img src="https://static.coderbridge.com/img/roroiii/c7c52e68337f430eb5fa87c5bd4d1b49.jpg" alt="">
在蝦皮上買的，已經買了 3 支應該會再買第 4 隻，超級好用的哈哈哈
應該 2-300 就有一隻了，可以散熱筆電，高度也可以符合視線，我通常會搭配藍牙鍵盤跟滑鼠一起使用。</p>
<p>寫部落格的話目前只有使用 CoderBridge ，大部分功能都可以滿足我現在的需求了。</p>
<h3>2022 不再用到的工具</h3>
<p>Adobe 系列，哈哈哈哈哈</p>
<p>今天解除安裝一堆 Adobe 的修圖軟體，正式告別跟他說掰掰，跟設計圖片說掰掰，也順便解除安裝其他沒有用到的軟體。</p>
<p>剛開始其實有點猶豫覺得電腦還是要裝一下，需要修圖怎麼辦之類的
但工作上會用到的修圖只有更改圖片尺寸、裁剪圖片之類的簡單操作，使用電腦內建的預覽程式就可以做到了，不需要再打開專業的修圖軟體。
至於自己 PO 文會用到的圖片，真的需要就用手機修圖軟體做就好了！</p>
<p>擇你所愛，愛你所擇。
斷捨離不用到的軟體也是一種選擇。
謝謝曾經愛用的軟體，與新歡軟體們邁向你新的人生里程碑。</p>
<p>其實還有一些愛用的軟體，但是有點懶得打下去了，這篇就當作是自己的隨手工具紀錄。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Debounce 與 Memoize</title>
      <link href="https://blog.roroiii.com/posts/debounce-memoize/"/>
      <updated>2023-04-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/debounce-memoize/</id>
      <content type="html">
        <![CDATA[
      <h2>Debounce</h2>
<h4>概念</h4>
<p>類似搭公車，人都上車了公車才發動～要是發現還有人要上車，公車就會再等一下直到大家都上車。</p>
<h4>應用</h4>
<p>在搜尋時，等待使用者打完所有要搜尋的字之後，才去打 API 拿資料，減少效能耗損優化效率～</p>
<p>詳細介紹可參考：<a href="https://www.freecodecamp.org/news/javascript-debounce-example/">Debounce – How to Delay a Function in JavaScript (JS ES6 Example)</a></p>
<pre class="language-js"><code class="language-js">寫法一
<span class="token keyword">function</span> <span class="token function">debounce</span><span class="token punctuation">(</span><span class="token parameter">fn<span class="token punctuation">,</span> delay</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">let</span> timer <span class="token operator">=</span> <span class="token keyword">null</span>
  <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token operator">...</span>args</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>timer<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">clearTimeout</span><span class="token punctuation">(</span>timer<span class="token punctuation">)</span>
    <span class="token punctuation">}</span>
    timer <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">,</span> delay<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

寫法二
<span class="token keyword">function</span> <span class="token function">debounce</span><span class="token punctuation">(</span><span class="token parameter">fn<span class="token punctuation">,</span> delay <span class="token operator">=</span> <span class="token number">300</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">let</span> timer
  <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token operator">...</span>args</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">clearTimeout</span><span class="token punctuation">(</span>timer<span class="token punctuation">)</span>
    timer <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">,</span> delay<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<hr>
<h2>Memoize</h2>
<h4>概念</h4>
<p>把複雜的計算記起來，下次就不用再算一次～
類似 React 的 useMemo 跟 Memo 的功能</p>
<h4>應用</h4>
<p>直接看下面程式碼～
利用一個 Object 儲存運算後的值，如果 Object 內沒有這個值就把它存起來～
有值的話就直接回傳計算後的結果</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">memoize</span><span class="token punctuation">(</span><span class="token parameter">fn</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">let</span> cached <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
  <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">n</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>cached<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      cached<span class="token punctuation">[</span>n<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">fn</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> cached<span class="token punctuation">[</span>n<span class="token punctuation">]</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>參考：<a href="https://github.com/Lidemy/mentor-program-4th/issues/16">第十六週練習題</a></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>2023 年 改名詳細，改證件、跑銀行與保險公司心得紀錄</title>
      <link href="https://blog.roroiii.com/posts/2023/"/>
      <updated>2023-04-11T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/2023/</id>
      <content type="html">
        <![CDATA[
      <h2>前言</h2>
<p>改名
因為是去年 12 月底的事情，有些流程真滴有點忘記且見諒 QQ</p>
<h2>準備</h2>
<p>我是用 iphone 備忘錄條列要去的機構，完成就打勾
因為幾乎每家銀行的 google 評價都很差，我很怕去那種很雷的分行等很久被冷臉ＸＤ
所以挑選的分行都是看完 google 的負評再決定去哪家分行的（負評才是最真實的）</p>
<h3>花費時間</h3>
<p>我是在 2022/12/30 這天去改名字的，想說新的一年使用新的名字^^
請了一天特休，加上幾個早上的上班前時間，因為我有的銀行比較多，所以一天是跑不完的</p>
<p>以下用跑的順序介紹</p>
<h2>證件機構</h2>
<h3>1.戶政事務所（台中潭子）</h3>
<p>先上網預約，之後會有人員打電話來跟你確認，並提醒要攜帶的資料，服務滿親切的。
改名需要攜帶戶長的身分證跟印章（更新詳細記事使用），如果沒帶的話，也可以之後再請戶長自行去戶政事務所更新。
我是選戶籍地的分行，因為台灣銀行我開在戶籍地，想說一次可以跑完。
填寫資料加上等待時間，大約一小時可以拿到新的身分證
因為等一下要跑銀行，所以我申請了 5 份戶籍謄本（只列個人改名事實）</p>
<h3>2.監理所（台中北屯）</h3>
<p>換發行照跟駕照，超級快的，順便看到很多小朋友在考機車駕照，好青春 QQ</p>
<h2>實體銀行</h2>
<h3>合庫銀行（小插曲）</h3>
<p>從潭子戶政事務所騎到北屯監理所，再回到潭子合庫分行，大概一個小時內就換完證件了，合庫行員跟我說抓不到我的聯徵資料，叫我改天再來（天啊我都請假了）
然後我就去銀行外面打電話給戶政事務所講了我的情況，戶政事務所表示他們資料已經上傳了，以前也沒有人遇過這種情況，叫我再跟銀行確認看看，態度真的滿好的，但是合庫不給我改戶名，我就決定先去台灣銀行。</p>
<h3>台灣銀行（潭子分行）</h3>
<p>咦一樣是公股銀行，台銀卻有收我的改名資料。因為台銀櫃檯都是用站的櫃位，我就站了一個小時等行員修改我的資料，為了改兩個字，我看她簽了一堆資料，有些資料還要等她後面坐的主管授權才可以進行下一步，真滴麻煩她了，是說這個流程是不是需要優化一下勒。</p>
<p>花費時間：約莫 1 小時
需要資料：身分證、新印章、戶籍謄本（只列個人改名事實）
收費：更換印鑑費用 100 元</p>
<h3>合作金庫銀行（潭子分行）</h3>
<p>對又是合庫，我在台銀順利改完名之後又回到了同一間分行，這時候他們已經可以調到我的聯徵資料了，就迅速的改名（約 30 分鐘就好了）
然後我想順便處理手機轉帳的東西，有位帥氣哥哥（其實跟我一樣年紀）就幫我處理好了
不得不說，潭子這家合庫真的服務很好。</p>
<p>花費時間：約莫 30 分鐘 ~ 1 小時
需要資料：身分證、第二證件、新印章
收費：更換印鑑費用 100 元</p>
<h3>中部健康保險局</h3>
<p>進去先跟服務台阿姨抽號碼牌，掃描大頭照，帥帥的人員幫我處理，服務相當的好。
但是現場真的太吵了像是菜市場（真的不誇張人很多）我覺得應該要給他們麥克風，不然每天喊應該會燒聲。
等號碼牌領取新的健保卡，舊的健保卡可以留著做紀念，我有留著，因為上面有我小時候蠢蠢的萌樣（？）</p>
<p>花費時間：約莫 30 - 40 分鐘
需要資料：新的大頭照
收費：更換健保卡費用 200 元</p>
<h3>台新銀行（市府分行）</h3>
<p>要給台新一個大拇指，現場很多人在等，但是處理速度一流，超級快速有效率，讚讚
因為我有 gogo 信用卡，行員會直接幫我撥打客服，現場跟客服人員講完電話，信用卡就完成換發，之後會寄新的信用卡到通訊地址，真的好棒啊～～～～</p>
<p>花費時間：約莫 20 分鐘 (處理時間，不包括前面大約 10 分鐘等待時間)
需要資料：身分證、第二證件、新印章
收費：Richart 數位帳戶不收費（真的很佛讚讚）</p>
<h3>國泰世華銀行（市府分行）</h3>
<p>從台新騎車一下就到了國泰（很近）
因為我沒帶公司的識別證之類的證明，行員竟然要打電話到我的公司做照會，我覺得有點瞎（又不是開戶！只是改個數位帳戶名而已）
這是我沒意料到的事情，而且是用我的新名字問有沒有這個人在這裡上班，不就還好我有先跟公司說我要改名＝＝
但畢竟每家銀行都有自己的流程，要使用他家的服務就要給予尊重。
我趕在 3 點多銀行關門前到國泰，之後處理到 4 點多，行員跟我說信用卡要自己打電話跟客服處理，然後我就離開了。
跟上一家台新做對比，國泰的處理方式真的 QQ。
後來我決定不改國泰的信用卡了，反正只是國外刷卡可能刷不過，用別張卡就好了。</p>
<p>花費時間：約莫 1 小時
需要資料：身分證、第二證件、新印章
收費：不收費</p>
<h3>富邦產險</h3>
<p>這是今天跑的最後一家（大部分都到 5 點就關門了），我覺得櫃檯的服務人員很忙，要接電話還要服務現場的顧客，但是不得不說服務相當的優秀，但因為防疫用的壓克力隔板太高，我不小心給她身分證的時候打到服務人員的頭，真的是很不好意思 QQ</p>
<p>花費時間：約莫 40 分鐘
需要資料：身分證、第二證件
收費：不收費</p>
<h2>網路銀行</h2>
<h3>將來銀行</h3>
<p>...
反正總之我是改名失敗了，他們說名字不影響提存款我就不改了。</br>
對了順便說一下，這家銀行開戶送的 N 點是會算進你的所得清單裡唷。</p>
<h3>樂天銀行</h3>
<p>樂天改名應該是最快速的一家。
跟線上客服說你證件名字有變更，他就會傳給你網址，點進去上傳新的雙證件就完成了！
跟線上開戶一樣快速，覺得這才是網銀該有的樣子呀 ♪( ´θ ｀)ノ</p>
<h2>護照</h2>
<h3>中部外交部</h3>
<p>我是 5 月 5 日去的，但是我在 3 月 20 日的時候就上網預約了，到現場真的滿坑滿谷都是人，
我瞄了一眼現場等待的電子看板，上面寫著還要再等 5 小時 30 幾分...真心建議不急的人上網預約。
預約有專用櫃台，進去先到左手邊大廳抽號碼牌，之後到右手邊找專用櫃台，大概稍微等一下就輪到自己了。</p>
<hr>
<p>其實我本來還有打其他家銀行的心得，結果在操作舊部落格的時候不小心手殘就杯具了，
憑藉著我很爛的記憶力還有記帳上的手續費紀錄，還有郵局、富邦銀行、永豐銀行，這三家服務都很不錯唷。
我就剩下中信銀行沒去改戶名，但是這個帳戶超級少用的就想說算了，還有學歷證明再找時間去改。</p>
<h2>總結</h2>
<p>台灣人很愛改名字，但是各家銀行改名需要的資料還有流程都不一樣，有些銀行感覺真的需要優化流程，行員感覺都辛苦，客戶也覺得很拍謝。</p>
<p>每家銀行都要脫口罩拍照，覺滴尷尬</br>
如果有下次，我應該是不會改名字了（應該也沒有下次拉 QQ）</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>11ty 一日架站心得，搭配 Netlify 與 Google Domains 購買網域</title>
      <link href="https://blog.roroiii.com/posts/11ty-netlify-google-domains/"/>
      <updated>2023-04-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/11ty-netlify-google-domains/</id>
      <content type="html">
        <![CDATA[
      <h2>11ty</h2>
<p>這次 blog 搬家使用了很多人推薦的 <a href="https://www.11ty.dev/">11ty</a>，搭配 11ty 官方推薦的 Netlify 簡單架設網站，自己使用的版型是 Yinka 製作的簡單乾淨版面，覺得漂亮很喜歡。</p>
<p>在 Yinka 的 <a href="https://github.com/yinkakun/eleventy-duo">Github</a> 專案裡面 Fork 一份到自己的 Github 再拉到本地端就可以開始修改了， 我自己是新做了一頁 Archive 準備拿來檢視自己到底寫過什麼碗糕( ；´Д ｀)</p>
<p>金魚腦的記憶力，就是會馬上忘記，所以記錄下來學過什麼以後還可以回來複習，特別是面試常被問的題目。</p>
<h2>Google Domains</h2>
<p>以前就有用過 google domains 買過網址，這次買也超級快速的，基本上選定網址加入購物車結帳然後就完成了，非常方便，也有附贈 SSL 憑證跟信箱轉址的服務。</p>
<p>用 google domains name servers 才能使用信箱轉寄服務，關於怎麼在 Netlify 加上 DNS 可以參考下方的教學影片。</p>
<p><a href="https://www.youtube.com/watch?v=cDDr-NoI5fo">[Tutorial] - How to Setup Custom Domain | Netlify &amp; Google Domains | 2022</a></p>
<h2>Netlify</h2>
<p>第一次使用。我覺得跟 Next.js 的背後金主爸爸 Vercel 很像，只是選單好像比較多，先註冊一個帳號，然後授權自己的 Github 專案，我是選單一專案授權，之後跟著步驟做就會開始自動部署，成功後自己設定一下專屬網址就完成了。</p>
<h2>調整版型</h2>
<p>這個是比較麻煩的部分，要做幾張圖片替換掉原本的預設樣式，還要想一下自己的介紹（寫的很廢 QQ）
之後如果心情不錯的話會再加上分頁功能，Archive 的部分應該會照著日期或是自創標籤排序。</p>
<p>寫了這麼多廢話...好像真的沒有什麼可以做紀錄的耶，可能因為太簡單了，或是有一些步驟教學上網都找得到，好像不需要多寫一篇文章來記錄...</p>
<p>沒關係寫都寫了，要讓未來的自己見證現在有多廢！嗯嗯！</p>
<p>這次 blog 文章搬家最大的好處，應該是寫文章覺得變順手了，因為可以寫在本地端的專案裡面，commit 並 push 上去文章就發布了～增加了寫文章的動力，期待未來自己會有更多產出。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>cookie, localStorage, sessionStorage 之間的差別？ JWT Token 會存在哪裡？</title>
      <link href="https://blog.roroiii.com/posts/javascript/cookie-and-localstorage-and-sessionstorage/"/>
      <updated>2023-04-24T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/javascript/cookie-and-localstorage-and-sessionstorage/</id>
      <content type="html">
        <![CDATA[
      <h2>前言</h2>
<p>記錄一些前端面試經常被問到的觀念題目，因為每次一緊張就會忘記，為了我的金魚腦特別寫下來以後面試複習。
會忘記就是因為平常寫程式很少用到這些觀念，大部分都是實作比較多，但是這些觀念又很重要所以這裡就當作我的腦內海馬迴 ٩(˃̶͈̀௰˂̶͈́)و</p>
<h2>cookie, localStorage, sessionStorage 之間的差別？ JWT Token 會存在哪裡？</h2>
<p>以下分別介紹它們的特性和使用情境</p>
<img src="/images/posts/cookie-and-localstorage-and-sessionstorage01.png" alt="cookie and localStorage and sessionStorage position">
圖為在瀏覽器中工具列的位置
<h3>cookie</h3>
<ul>
<li>Cookie 是<strong>瀏覽器</strong>提供的機制，通常以文字的形式儲存在客戶端(client)。</li>
<li>可以透過 http 在瀏覽器和服務器(Server)之間傳遞，可以在不同網站之間共享。</li>
<li>Cookie 可以設定到特定域名下，有過期時間，可以透過 JavaScript 設置或刪除。</li>
<li>可以用於跨頁面或跨網站維持對話狀態，通常拿來記住使用者的首頁選項、購物車商品、登入訊息與用作網站分析。</li>
<li>儲存容量約 4KB。</li>
</ul>
<p>實作 cookie，使用 document.cookie 設置</p>
<pre class="language-js"><code class="language-js">document<span class="token punctuation">.</span>cookie <span class="token operator">=</span> <span class="token string">'username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/'</span></code></pre>
<blockquote>
<p>cookie 名稱為 username，在 2023 年 12 月 18 日 12:00:00 UTC 過期，指定只能在訪問路徑 &quot;/&quot; 時使用。</p>
</blockquote>
<p>也可以從後端設置 cookie ，以下使用 Node.js 的 express</p>
<pre class="language-js"><code class="language-js">app<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">req<span class="token punctuation">,</span> res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  res<span class="token punctuation">.</span><span class="token function">cookie</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'John Doe'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">maxAge</span><span class="token operator">:</span> <span class="token number">900000</span><span class="token punctuation">,</span> <span class="token literal-property property">httpOnly</span><span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
  res<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token string">'Cookie has been set'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<blockquote>
<p>使用 <code>res.cookie()</code> 設置名稱為 username 的 cookie，並在 900000 毫秒後過期（15 分鐘）。
設定 <code>httpOnly</code> 禁止 JavaScript 直接存取 cookie，只能透過 http 協議訪問，增加安全性。</p>
</blockquote>
<h3>localStorage</h3>
<p>localStorage 是 <strong>HTML5</strong> 提供的 web 儲存方式，在瀏覽器中保存一個 key 與對應值（字串）。</p>
<ul>
<li>只要沒被使用者清除或是清除瀏覽器 cashed（clear browsing data），瀏覽器關閉後這些數據都會一直存在（類似永久儲存）。</li>
<li>與 cookie 最大的不同是不需要每次在 http 中傳送請求（不用一直打 API 確認）。</li>
<li>儲存量約 5MB - 10MB，比 cookie 大一些。</li>
<li>需要注意使用者的資料安全性，避免跨站腳本攻擊（XSS）等安全問題。</li>
</ul>
<img src="/images/posts/cookie-and-localstorage-and-sessionstorage02.png" alt="cookie and localStorage and sessionStorage position">
圖為清除瀏覽器歷史紀錄（清除暫存）
<p>一個簡單的範例：</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// 存儲數據</span>
localStorage<span class="token punctuation">.</span><span class="token function">setItem</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'John Doe'</span><span class="token punctuation">)</span>
localStorage<span class="token punctuation">.</span><span class="token function">setItem</span><span class="token punctuation">(</span><span class="token string">'age'</span><span class="token punctuation">,</span> <span class="token string">'30'</span><span class="token punctuation">)</span>

<span class="token comment">// 檢索數據</span>
<span class="token keyword">const</span> username <span class="token operator">=</span> localStorage<span class="token punctuation">.</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> age <span class="token operator">=</span> localStorage<span class="token punctuation">.</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token string">'age'</span><span class="token punctuation">)</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span> <span class="token comment">// John Doe</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span> <span class="token comment">// 30</span>

<span class="token comment">// 清除數據</span>
localStorage<span class="token punctuation">.</span><span class="token function">removeItem</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">)</span>
localStorage<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
<p>存取的時候需要注意轉換資料格式，使用 <code>JSON.stringify()</code> 轉為字串，使用 <code>JSON.parse()</code> 轉為原始數據。</p>
<h3>sessionStorage</h3>
<ul>
<li>與 localStorage 很像，不同的地方是在當前 session 結束時會刪除資料，不是瀏覽器關閉時刪除（但通常關閉瀏覽器整個 session 也會不見，所以關閉瀏覽器 sessionStorage 也會消失喔）。</li>
</ul>
<p>替換 localStorage 為 sessionStorage 即可，以下是簡單範例：</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// 存儲數據</span>
sessionStorage<span class="token punctuation">.</span><span class="token function">setItem</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'John Doe'</span><span class="token punctuation">)</span>
sessionStorage<span class="token punctuation">.</span><span class="token function">setItem</span><span class="token punctuation">(</span><span class="token string">'age'</span><span class="token punctuation">,</span> <span class="token string">'30'</span><span class="token punctuation">)</span>

<span class="token comment">// 檢索數據</span>
<span class="token keyword">const</span> username <span class="token operator">=</span> sessionStorage<span class="token punctuation">.</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token string">'username'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> age <span class="token operator">=</span> sessionStorage<span class="token punctuation">.</span><span class="token function">getItem</span><span class="token punctuation">(</span><span class="token string">'age'</span><span class="token punctuation">)</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span> <span class="token comment">// John Doe</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span> <span class="token comment">// 30</span></code></pre>
<h2>JWT Token</h2>
<ul>
<li>JWT (JSON Web Token) 是一種網路傳輸安全聲明的開放標準，可以在不同系統中傳輸，通常是 base64 編碼後的 JSON 字符串，常用於身份驗證與授權。</li>
<li>通常由 Header、Payload 與 Signature 組成。
<ul>
<li>Header 包含 token 類型與加密演算法，通常是 JSON 格式，例如：<code>{&quot;alg&quot;: &quot;HS256&quot;, &quot;typ&quot;: &quot;JWT&quot;}</code></li>
<li>Payload 包含傳輸數據，通常是 JSON 格式，例如：<code>{&quot;sub&quot;: &quot;1234567890&quot;, &quot;name&quot;: &quot;John Doe&quot;, &quot;iat&quot;: 1516239022}</code></li>
<li>Signature 用於驗證 token 加密是否被篡改，使用 Header 中指定的加密演算法對 Header 和 Payload 進行加密（如 HMAC、RSA、HS256 等）。</li>
</ul>
</li>
</ul>
<p>JWT Token 一般來說都會經過 Algorithm 加密演算法（例如 HS256），但是並不代表他是安全的，隱私資料建議不要放在這裡儲存。
可以到 <a href="https://jwt.io/">JWT</a> 的網站玩看看。</p>
<h2>結語</h2>
<p>cookie 通常用於在網路上共享數據，localStorage 與 sessionStorage 是在瀏覽器儲存資料。
如何運用這三種儲存資料的技術，可以與後端工程師討論需要怎麼實作，依具體情況而定，沒有一個標準答案。</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>前端面試問題集一</title>
      <link href="https://blog.roroiii.com/posts/javascript/q1/"/>
      <updated>2023-04-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/javascript/q1/</id>
      <content type="html">
        <![CDATA[
      <p>收集面試問題，嘗試自己回答～</p>
<h4>Q: Q: cookie 是怎麼帶上的？</h4>
<blockquote>
<p>server 向瀏覽器發送 http，透過 http 中的 header Set-Cookie 傳給瀏覽器。</p>
</blockquote>
<h4>Q: Q: 瀏覽器對於帶 cookie 的限制還有哪些？如果直接 get cookie 有辦法拿到 cookie 嗎？</h4>
<blockquote>
<p>有限制大小約 4KB，每個網域最多只能設定 20 個。</p>
</blockquote>
<blockquote>
<p>get cookie 要看有沒有寫 httpOnly，如果有寫就無法透過 JavaScript 拿到資料，只能透過 server 拿到資料。</p>
</blockquote>
<h4>Q: 如何用 config 處理 webpack 或 babel 的設定？</h4>
<blockquote>
<p>可以把設定檔單獨抽出來，ex: webpack.config.js 或 babel.config.js ，使用 webpack-marge 的工具合併打包。
其他我忘記ㄌ～發現自己在 2021 年寫了滿滿的筆記，那時候也用的很順手，經過兩年沒用真的是沒什麼印象，之後再把筆記整理出來。</p>
</blockquote>
<h4>Q: Redux 在管理狀態的運作原理？</h4>
<blockquote>
<p>使用 dispatch 去執行 action ，最後再傳給 store
可以共用狀態，在處理共用的資料拿取上會比較方便，但 redux 不是必要的功能，也可以用 useContent 處理，只是 useContent 太多可能會有效能上的隱憂。</p>
</blockquote>
<h4>Q: 為什麼用 Redux 不用 useContext？</h4>
<blockquote>
<p>redux 在資料管理架構上會比較容易維護，但是如果簡單的共用 state ，只用 useContent 也不是不可以。</p>
</blockquote>
<h4>Q: Redux 中的 action 如果是非同步的流程的話怎麼做？</h4>
<blockquote>
<p>Redux 的 action 是同步的，如果要處理非同步，需要透過中間件 （middleware），常見的有 redux-thunk 跟 redux-saga。</p>
</blockquote>
<h4>Q: 為什麼要有框架，框架幫你完成什麼事情？</h4>
<blockquote>
<p>框架帶你飛（誤</p>
</blockquote>
<blockquote>
<p>框架會幫你處理好一些比較麻煩的設定，也可以比較容易上手，但是相對的就要學習框架的運作原理還有處理資料的方式，優點可能是快速方便，缺點可能是被綁住遇到框架要升級或是轉換框架的時候都會有額外的成本，這點需要考量進去。</p>
</blockquote>
<h4>Q: React 的特色是什麼？</h4>
<blockquote>
<p>前端主流三大框架之一，背後金主爸爸是 facebook，是單向流的資料管理模式，LOGO 是一顆原子很讚。
特色是組件化(component)，把 UI 切成 component 來管理。</p>
</blockquote>
<h4>Q: event loop？</h4>
<blockquote>
<p>介紹 JavaScript 怎麼運作單執行緒，牽涉到同步與非同步的問題。</p>
</blockquote>
<blockquote>
<p>這就是一個循環事件～
程式進入 main thread 之後依序執行，遇到非同步的事件就把它丟到 queue（佇列），之後繼續往下執行，等到所有在 main thread 上的事件執行完畢或是 main thread 空閒覺得無聊的時候，他就會自己找事做去 queue 內拿出事件開始依序處理。</p>
</blockquote>
<blockquote>
<p>這又牽涉到了 setTimeout 內設定的秒數並不是實際上真正的秒數，main thread 執行完後去拿 queue 執行完成的時間才是真正的時間，通常都會有個誤差。</p>
</blockquote>
<h4>Q: 非同步的操作執行完後，event loop 會做什麼事？</h4>
<blockquote>
<p>如果 main thread 被清空了， JavaScript 會繼續執行其他代碼，直到跑完全部的程式。</p>
</blockquote>
<h4>Q: 為什麼當初設計 JavaScript 是單執行緒</h4>
<blockquote>
<p>因為比多執行序寫起來簡單，也比較不容易出錯，開發者可以比較快就上手。</p>
</blockquote>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>升級你的專案 Node</title>
      <link href="https://blog.roroiii.com/posts/node/"/>
      <updated>2023-08-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/node/</id>
      <content type="html">
        <![CDATA[
      <p>這次嘗試升級 blog 的 Node 版本，從 16 升級到 18，搭配使用 chatGPT 可以幫助我們減少找文件的時間唷。</p>
<h3>小花，要怎麼把專案 npm 的版本從 node 16 升級到 node 18 ？確保套件沒有問題？</h3>
<p>要將你的專案從 Node.js 16 升級到 Node.js 18，並確保相依的 npm 套件沒有問題，你可以按照以下步驟操作：</p>
<ol>
<li>
<p>升級 Node.js：</p>
<ul>
<li>首先，安裝新版的 Node.js。訪問 Node.js 官方網站 下載並安裝 Node.js 18 的版本。</li>
</ul>
</li>
<li>
<p>驗證 Node.js 和 npm 版本：</p>
<ul>
<li>安裝新版後，在終端檢查 Node.js 和 npm 的版本以確保安裝成功：<pre class="language-bash"><code class="language-bash"><span class="token function">node</span> <span class="token parameter variable">-v</span>
<span class="token function">npm</span> <span class="token parameter variable">-v</span></code></pre>
</li>
</ul>
</li>
<li>
<p>更新專案依賴：</p>
<ul>
<li>
<p>在你的專案資料夾中運行以下命令，更新專案的 npm 套件：</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> update
or
<span class="token function">yarn</span> upgrade</code></pre>
</li>
</ul>
</li>
<li>
<p>檢查過時的依賴：</p>
<ul>
<li>
<p>使用以下命令查看哪些套件已經過時，這可以幫助你確定哪些套件可能需要手動升級：</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> outdated
or
<span class="token function">yarn</span> outdated</code></pre>
</li>
</ul>
</li>
<li>
<p>升級過時的依賴：</p>
<ul>
<li>
<p>對於 npm outdated 列出的過時套件，你可以手動更新它們到新的版本。修改 package.json 文件中的對應版本號，然後執行：</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span>
or
<span class="token function">yarn</span> <span class="token function">install</span></code></pre>
</li>
</ul>
</li>
<li>
<p>解決依賴衝突：</p>
<ul>
<li>升級後，可能會出現一些依賴衝突或者不兼容的情況。這時需要你手動檢查和解決這些問題。這可能涉及更新套件，或者回退到某個與新版 Node.js 兼容的版本。</li>
</ul>
</li>
<li>
<p>運行測試：</p>
<ul>
<li>
<p>如果你的專案中包含自動測試，此時運行它們以確保升級後一切仍然運作正常：</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token builtin class-name">test</span>
or
<span class="token function">yarn</span> <span class="token builtin class-name">test</span></code></pre>
</li>
</ul>
</li>
<li>
<p>手動測試：</p>
<ul>
<li>除了自動測試，也應該手動運行你的應用並進行測試，以確保一切都按照預期工作。</li>
</ul>
</li>
<li>
<p>查看更新日誌和變更日誌：</p>
<ul>
<li>查看你依賴的每個套件的更新日誌或變更日誌，這些文檔會列出新版本中的更改，並指出任何重大變更或潛在的破壞性更改。</li>
</ul>
</li>
<li>
<p>備份你的專案：</p>
<ul>
<li>在升級重要依賴之前，確保你已經備份了整個專案，以便於需要時能夠回滾到之前的狀態。
請記住，在升級 Node.js 和 npm 套件版本時，一定要謹慎。始終確保你的專案有適當的備份，並且充分測試以確保一切都在正常工作。</li>
</ul>
</li>
</ol>
<h3>小花，如果我是使用 yarn 上面的指令要如何更正？</h3>
<p>與 npm 流程相同，我有把指令貼在 npm 下面了。</p>
<hr>
<p>這邊要注意的是手動替換 <code>package.json</code> 的版本不要眼殘貼錯了 XD
<img src="/images/posts/upgrade-the-node-version.png" alt="upgrade the node version"></p>
<p>專案大套件變多的話，可能會更麻煩，但如果 yarn build 也沒問題，就可以放心的 commit 並部署囉！沒有遇到錯誤是不是很快就解決了ＸＤ</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Redux Toolkit Query 管理共用的 API 狀態</title>
      <link href="https://blog.roroiii.com/posts/react/redux-toolkit-query/"/>
      <updated>2023-08-22T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/react/redux-toolkit-query/</id>
      <content type="html">
        <![CDATA[
      <p>使用 Redux Toolkit Query 來管理共用的 API 狀態吧！</p>
<p>說明：</p>
<ul>
<li><code>import.meta.env.VITE_API_URL</code> 這是 vite 獲取環境變數的語法</li>
<li>使用 Redux Toolkit Query 的 <code>createApi</code>, <code>fetchBaseQuery</code></li>
</ul>
<!--

用 Redux Toolkit Query 做一個範例專案
寫下步驟與要注意的地方
做一個 GitHub 開源小專案可以 build 起來的那種
 -->
<pre class="language-ts"><code class="language-ts"><span class="token comment">// auth.ts</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> createApi<span class="token punctuation">,</span> fetchBaseQuery <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@reduxjs/toolkit/query/react'</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> authApi <span class="token operator">=</span> <span class="token function">createApi</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  baseQuery<span class="token operator">:</span> <span class="token function">fetchBaseQuery</span><span class="token punctuation">(</span><span class="token punctuation">{</span> baseUrl<span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">VITE_API_URL</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 這邊替換成自己的API網址</span>
  <span class="token function-variable function">endpoints</span><span class="token operator">:</span> <span class="token punctuation">(</span>builder<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span>
    login<span class="token operator">:</span> builder<span class="token punctuation">.</span><span class="token function">mutation</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
      <span class="token function-variable function">query</span><span class="token operator">:</span> <span class="token punctuation">(</span>credentials<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span>
        url<span class="token operator">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span>
        method<span class="token operator">:</span> <span class="token string">'POST'</span><span class="token punctuation">,</span>
        body<span class="token operator">:</span> credentials<span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> useLoginMutation <span class="token punctuation">}</span> <span class="token operator">=</span> authApi</code></pre>
<p>設定 store</p>
<pre class="language-ts"><code class="language-ts"><span class="token comment">// store.ts</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> configureStore <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@reduxjs/toolkit'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> authApi <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./api/auth'</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> store <span class="token operator">=</span> <span class="token function">configureStore</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  reducer<span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token punctuation">[</span>authApi<span class="token punctuation">.</span>reducerPath<span class="token punctuation">]</span><span class="token operator">:</span> authApi<span class="token punctuation">.</span>reducer<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function-variable function">middleware</span><span class="token operator">:</span> <span class="token punctuation">(</span>getDefaultMiddleware<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">getDefaultMiddleware</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>authApi<span class="token punctuation">.</span>middleware<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<pre class="language-tsx"><code class="language-tsx"><span class="token comment">// main.tsx</span>
<span class="token keyword">import</span> React <span class="token keyword">from</span> <span class="token string">'react'</span>
<span class="token keyword">import</span> ReactDOM <span class="token keyword">from</span> <span class="token string">'react-dom/client'</span>
<span class="token keyword">import</span> App <span class="token keyword">from</span> <span class="token string">'./App.tsx'</span>
<span class="token keyword">import</span> <span class="token string">'./index.css'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> store <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./store.ts'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> Provider <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-redux'</span>

ReactDOM<span class="token punctuation">.</span><span class="token function">createRoot</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'root'</span><span class="token punctuation">)</span><span class="token operator">!</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">React.StrictMode</span></span><span class="token punctuation">></span></span><span class="token plain-text">
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Provider</span></span> <span class="token attr-name">store</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>store<span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">App</span></span> <span class="token punctuation">/></span></span><span class="token plain-text">
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Provider</span></span><span class="token punctuation">></span></span><span class="token plain-text">
  </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">React.StrictMode</span></span><span class="token punctuation">></span></span>
<span class="token punctuation">)</span></code></pre>
<p>使用方式跟 <a href="https://tanstack.com">TanStack Query</a> 類似</p>
<pre class="language-tsx"><code class="language-tsx"><span class="token comment">// App.tsx</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useLoginMutation <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./api/auth'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useState <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>
<span class="token keyword">import</span> <span class="token string">'./App.css'</span>

<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>user<span class="token punctuation">,</span> setUsername<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>password<span class="token punctuation">,</span> setPassword<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token punctuation">[</span>login<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useLoginMutation</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleUsernameChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span>e<span class="token operator">:</span> React<span class="token punctuation">.</span>ChangeEvent<span class="token operator">&lt;</span>HTMLInputElement<span class="token operator">></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setUsername</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handlePasswordChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span>e<span class="token operator">:</span> React<span class="token punctuation">.</span>ChangeEvent<span class="token operator">&lt;</span>HTMLInputElement<span class="token operator">></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">setPassword</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">const</span> <span class="token function-variable function">handleLogin</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">login</span><span class="token punctuation">(</span><span class="token punctuation">{</span> user<span class="token punctuation">,</span> password <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token punctuation">.</span><span class="token function">unwrap</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
      <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
        <span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
        <span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span></span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">></span></span><span class="token plain-text">
        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">></span></span><span class="token plain-text">Login</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">></span></span><span class="token plain-text">
        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">placeholder</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Username<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>user<span class="token punctuation">}</span></span> <span class="token attr-name">onChange</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleUsernameChange<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span><span class="token plain-text">
        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>password<span class="token punctuation">"</span></span> <span class="token attr-name">placeholder</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Password<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>password<span class="token punctuation">}</span></span> <span class="token attr-name">onChange</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handlePasswordChange<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span><span class="token plain-text">
        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">onClick</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleLogin<span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">Login</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span><span class="token plain-text">
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span></span><span class="token punctuation">></span></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> App</code></pre>
<p>參考資料：<a href="https://pjchender.dev/react/redux-rtk-query/">[Redux] Redux Toolkit Query</a></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>使用 JavaScript 腳本或是 tree 自動產出目錄結構吧！</title>
      <link href="https://blog.roroiii.com/posts/others/tree/"/>
      <updated>2023-09-06T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/others/tree/</id>
      <content type="html">
        <![CDATA[
      <p>如果專案越來越龐大，是不是很難了解整個專案結構呢？<br/>
如果有可以自動產出結構的東西，就不用自己一層一層慢慢找了，真的非常方便，減少了手動寫文件出錯的機率，就跟 Swagger 一樣是懶人的福音^^</p>
<p>接下來簡單介紹兩種方法～</p>
<h2>自己寫 JavaScript 腳本產出</h2>
<p>使用 node 18 版本</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// generateReadme.mjs</span>

<span class="token comment">/**
 * 生成專案目錄結構的 ProjectStructure.md 文件
 * 使用 node v18.20.4 以上版本執行 (node -v 檢查版本)
 * 使用方法:
 * 1. 將此文件放在專案根目錄
 * 2. 在終端機中執行指令: node generateReadme.mjs
 * 3. 在專案根目錄下生成 ProjectStructure.md 文件
 */</span>

<span class="token keyword">import</span> fs <span class="token keyword">from</span> <span class="token string">'fs'</span>
<span class="token keyword">import</span> path <span class="token keyword">from</span> <span class="token string">'path'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> fileURLToPath <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'url'</span>

<span class="token keyword">function</span> <span class="token function">generateFolderStructure</span><span class="token punctuation">(</span><span class="token parameter">dir<span class="token punctuation">,</span> depth <span class="token operator">=</span> <span class="token number">0</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">try</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> items <span class="token operator">=</span> fs<span class="token punctuation">.</span><span class="token function">readdirSync</span><span class="token punctuation">(</span>dir<span class="token punctuation">)</span>
    <span class="token keyword">let</span> content <span class="token operator">=</span> <span class="token string">''</span>

    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> item <span class="token keyword">of</span> items<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">try</span> <span class="token punctuation">{</span>
        <span class="token keyword">const</span> itemPath <span class="token operator">=</span> path<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>dir<span class="token punctuation">,</span> item<span class="token punctuation">)</span>
        <span class="token keyword">const</span> stat <span class="token operator">=</span> fs<span class="token punctuation">.</span><span class="token function">statSync</span><span class="token punctuation">(</span>itemPath<span class="token punctuation">)</span>
        <span class="token keyword">const</span> indent <span class="token operator">=</span> <span class="token string">'  '</span><span class="token punctuation">.</span><span class="token function">repeat</span><span class="token punctuation">(</span>depth<span class="token punctuation">)</span>

        <span class="token comment">// 跳過指定的目錄和文件，可自行增減</span>
        <span class="token keyword">const</span> skipList <span class="token operator">=</span> <span class="token punctuation">[</span>
          <span class="token string">'node_modules'</span><span class="token punctuation">,</span>
          <span class="token string">'.git'</span><span class="token punctuation">,</span>
          <span class="token string">'.DS_Store'</span><span class="token punctuation">,</span>
          <span class="token string">'.vscode'</span><span class="token punctuation">,</span>
          <span class="token string">'build'</span><span class="token punctuation">,</span>
          <span class="token string">'dist'</span><span class="token punctuation">,</span>
          <span class="token string">'cpp'</span><span class="token punctuation">,</span>
          <span class="token string">'.husky'</span><span class="token punctuation">,</span>
          <span class="token string">'coverage'</span><span class="token punctuation">,</span>
          <span class="token string">'public'</span><span class="token punctuation">,</span>
        <span class="token punctuation">]</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>skipList<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
          <span class="token keyword">continue</span>
        <span class="token punctuation">}</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>stat<span class="token punctuation">.</span><span class="token function">isDirectory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
          content <span class="token operator">+=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>indent<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">- 📁 </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\n</span><span class="token template-punctuation string">`</span></span>
          content <span class="token operator">+=</span> <span class="token function">generateFolderStructure</span><span class="token punctuation">(</span>itemPath<span class="token punctuation">,</span> depth <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span>
        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
          content <span class="token operator">+=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>indent<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">- 📄 </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\n</span><span class="token template-punctuation string">`</span></span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>itemError<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Error processing item </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">:</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> itemError<span class="token punctuation">)</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> content
  <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Error reading directory </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>dir<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">:</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> error<span class="token punctuation">)</span>
    <span class="token keyword">return</span> <span class="token string">''</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token comment">// 正確獲取當前檔案的目錄路徑</span>
<span class="token keyword">const</span> __filename <span class="token operator">=</span> <span class="token function">fileURLToPath</span><span class="token punctuation">(</span><span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>url<span class="token punctuation">)</span>
<span class="token keyword">const</span> __dirname <span class="token operator">=</span> path<span class="token punctuation">.</span><span class="token function">dirname</span><span class="token punctuation">(</span>__filename<span class="token punctuation">)</span>
<span class="token keyword">const</span> projectRoot <span class="token operator">=</span> __dirname <span class="token comment">// 當前目錄作為根目錄</span>

<span class="token keyword">try</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> folderStructure <span class="token operator">=</span> <span class="token function">generateFolderStructure</span><span class="token punctuation">(</span>projectRoot<span class="token punctuation">)</span>
  <span class="token keyword">const</span> readmeContent <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string"># Project Folder Structure\n\nGenerated on: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toLocaleString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\n\n</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>folderStructure<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span>

  fs<span class="token punctuation">.</span><span class="token function">writeFileSync</span><span class="token punctuation">(</span><span class="token string">'ProjectStructure.md'</span><span class="token punctuation">,</span> readmeContent<span class="token punctuation">)</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'✅ ProjectStructure.md generated successfully.'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'❌ Error generating ProjectStructure.md:'</span><span class="token punctuation">,</span> error<span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>確認電腦有安裝 node ，這邊使用的是 node v18.20.4，然後執行</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">node</span> generateReadme.mjs</code></pre>
<p>產出來的 README.md 結構會像下面這樣</p>
<pre><code># Project Folder Structure

Generated on: 2/19/2025, 2:49:05 PM

- 📄 generateReadme.mjs
- 📄 index.html
- 📄 package.json
- 📄 ProjectStructure.md
- 📄 README.md
- 📁 src
  - 📁 apis
  - 📄 App.tsx
  - 📁 components
    - 📁 button
      - 📄 init-button.tsx
      - 📄 set-button.tsx
    - 📁 chart

  ...Other files

</code></pre>
<p>如果想指定專案目錄，也可以直接修改 <code>projectRoot</code> 的值</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> projectRoot <span class="token operator">=</span> <span class="token string">'D:\vite-react'</span> <span class="token comment">// 使用專案實際路徑</span></code></pre>
<hr>
<h2>tree</h2>
<p>Mac 系統直接安裝：</p>
<pre class="language-bash"><code class="language-bash">brew <span class="token function">install</span> tree</code></pre>
<p>使用就是在專案直接</p>
<pre class="language-bash"><code class="language-bash">tree</code></pre>
<p>如果只想要拿到 src 的結構</p>
<pre class="language-bash"><code class="language-bash">$ <span class="token builtin class-name">cd</span> src  // 切換到 src 的路徑
$ tree</code></pre>
<p>其他指令可以看<a href="https://mama.indstate.edu/users/ice/tree/">tree 文檔</a>或是</p>
<pre class="language-bash"><code class="language-bash">tree <span class="token parameter variable">--help</span></code></pre>
<p>產出來的 README.md 結構會像下面這樣，有著酷酷的線條，是不是比較好閱讀 ^^</p>
<pre><code>.
├── git
│   ├── command-line.md
│   ├── git-and-vim.md
│   └── server-ansyc-gitlab.md
├── javascript
│   ├── cookie-and-localstorage-and-sessionstorage.md
│   ├── debounce-and-memoize.md
│   ├── javascript-note.md
│   ├── lidemyOJ.md
│   ├── q1.md
│   └── upgrade-the-node-version-of-your-project.md
├── lidemy
│   ├── 2020-06-11.md
│   ├── 2020-06-12.md
│   ├── 2020-06-15.md
│   ├── 2020-06-16.md
├── others
│   ├── 11ty-blog.md
│   ├── 2022-work.md
│   ├── 2023-changed-your-name.md
│   └── tree.md
├── php
│   ├── php-change-unicode.md
│   ├── php-member-api.md
│   ├── php-member-cru.md
│   ├── php-member-crud.md
│   ├── php-member-list.md
│   ├── php-member-register.md
│   └── php-replace-str.md
├── posts.json
└── react
    ├── react-change-state.md
    ├── react-controller-component-and-uncontrolled.md
    ├── react-custom-hook.md
    ├── react-delete-todo.md
    ├── react-nextjs-mui.md
    ├── react-render.md
    └── redux-toolkit-query.md
</code></pre>
<p>以後如果遇到交接或是需要解釋檔案位置的時候，就試試看使用這種方式吧^^</p>
<hr>
<p>參考資料：<br/>
小花<br/>
<a href="https://formulae.brew.sh/formula/tree">Homebrew tree</a> <br/>
<a href="https://quietbo.com/2021/11/10/mac-homebrew%E5%AE%89%E8%A3%9Dtree%E6%A8%B9%E7%8B%80%E8%B3%87%E6%96%99%E5%A4%BE%E7%9B%AE%E9%8C%84%E7%B5%90%E6%A7%8B/">[Mac] Homebrew 安裝 tree(樹狀資料夾目錄結構)</a><br/>
<a href="https://tiffrrr.medium.com/to-o-l-s-%E4%BD%BF%E7%94%A8tree%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E7%9B%AE%E9%8C%84%E7%B5%90%E6%A7%8B-ca421a81b009">[Tools]使用 tree 自動生成目錄結構</a></p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>自動產出前端 API 型態與 TanStack Query 方法實例，加速前端開發</title>
      <link href="https://blog.roroiii.com/posts/others/orval/"/>
      <updated>2023-09-18T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/others/orval/</id>
      <content type="html">
        <![CDATA[
      <p>前後端彼此之間溝通，最麻煩的地方大概就是 API 格式、有沒有寫文件，文件有沒有定期更新維護之類的，後端可以妥善運用 Swagger 產出文件，前端只要依照 Swagger 文件就可以看到所有參數與回傳型態。</p>
<p>既然後端可以透過 Swagger 自動產文件，前端想必也一定可以透過某些方式拿到 Swagger 的文件格式，然後自動產出所有型態啦～ wwwww</p>
<p>有很多相關套件可以抓到型態，但我這次想介紹使用的是 <a href="https://orval.dev">Orval</a> ，可以支援 OpenAPI v3 或是 Swagger v2 版本的 <code>yaml</code> 或是 <code>json</code> 格式，可以自動產出常使用到的 axios 或是 TanStack Query (React Query)，不需要再看著文件一個一個寫 API。</p>
<p>作者本身就是因為經常使用到 Swagger editor 跟 Swagger codegen ，但覺得不夠好用所以才自己開發這個套件，因為作者自己會用到表示這個套件應該會一直更新下去（？）</p>
<p>在開發文件上也提供了詳細的官方文檔與 Examples。</p>
<img src="/images/posts/orval-01.png" alt="swagger example">
<p>首先身為前端的你，必須要拿到 <code>swagger.json</code> 或是 <code>yaml</code> 檔案，網址也可以，我們會使用這兩個任一檔案透過 Orval 產出需要的東西。</p>
<h3>1. 安裝</h3>
<pre class="language-bash"><code class="language-bash">$ <span class="token function">npm</span> i orval <span class="token parameter variable">-D</span>
  or
$ <span class="token function">yarn</span> <span class="token function">add</span> orval <span class="token parameter variable">-D</span></code></pre>
<h3>2. 在 package.json 寫入腳本</h3>
<pre class="language-json"><code class="language-json"><span class="token property">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token comment">// ... others scripts</span>

    <span class="token property">"orval"</span><span class="token operator">:</span> <span class="token string">"orval"</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span></code></pre>
<h3>3. 在專案的根目錄新增一個 <code>orval.config.ts</code> 的檔案</h3>
<p>拿出準備好的 <code>swagger.json</code> 我們要開始自動產生 API client 囉！</p>
<p><code>orval.config.ts</code> 為 Orval 的設定檔，可以客製化 axios 與使用 TanStack Query，設定檔內容可參考官方文件 <a href="https://orval.dev">https://orval.dev</a> 。</p>
<pre class="language-ts"><code class="language-ts"><span class="token comment">// orval.config.ts</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'orval'</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineConfig</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  api<span class="token operator">:</span> <span class="token punctuation">{</span>
    output<span class="token operator">:</span> <span class="token punctuation">{</span>
      mode<span class="token operator">:</span> <span class="token string">'split'</span><span class="token punctuation">,</span>
      target<span class="token operator">:</span> <span class="token string">'src/apis/endpoints.ts'</span><span class="token punctuation">,</span>
      <span class="token comment">// schemas: 'src/apis/models',   // 開啟此選項 endpoints.schemas.ts 會拆成多個檔案。</span>
      client<span class="token operator">:</span> <span class="token string">'react-query'</span><span class="token punctuation">,</span>
      prettier<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
      override<span class="token operator">:</span> <span class="token punctuation">{</span>
        <span class="token comment">// 設定自定義的 API client 檔案位置</span>
        mutator<span class="token operator">:</span> <span class="token punctuation">{</span>
          path<span class="token operator">:</span> <span class="token string">'src/apis/custom-client.ts'</span><span class="token punctuation">,</span>
          name<span class="token operator">:</span> <span class="token string">'useCustomInstance'</span><span class="token punctuation">,</span>
        <span class="token punctuation">}</span><span class="token punctuation">,</span>
        <span class="token comment">// 設定 react-query 的參數</span>
        query<span class="token operator">:</span> <span class="token punctuation">{</span>
          useQuery<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
          useInfinite<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
          options<span class="token operator">:</span> <span class="token punctuation">{</span>
            staleTime<span class="token operator">:</span> <span class="token number">10000</span><span class="token punctuation">,</span>
          <span class="token punctuation">}</span><span class="token punctuation">,</span>
        <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token comment">// 設定 swagger.json 的位置 (必填)</span>
    input<span class="token operator">:</span> <span class="token punctuation">{</span>
      target<span class="token operator">:</span> <span class="token string">'http://你的網址/swagger.json'</span><span class="token punctuation">,</span> <span class="token comment">// 也可以直接使用檔案位置</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<h3>4. 設定客製化的 axios 實例</h3>
<pre class="language-ts"><code class="language-ts"><span class="token comment">// custom-client.ts</span>
<span class="token keyword">import</span> Axios<span class="token punctuation">,</span> <span class="token punctuation">{</span> AxiosRequestConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'axios'</span>
<span class="token keyword">import</span> getToken <span class="token keyword">from</span> <span class="token string">'@/utils/getToken'</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token constant">AXIOS_INSTANCE</span> <span class="token operator">=</span> Axios<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">{</span> baseURL<span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">VITE_API_URL</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// vite 拿 env 的用法</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> useCustomInstance <span class="token operator">=</span> <span class="token operator">&lt;</span><span class="token constant">T</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>config<span class="token operator">:</span> AxiosRequestConfig<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token builtin">Promise</span><span class="token operator">&lt;</span><span class="token constant">T</span><span class="token operator">></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> <span class="token punctuation">(</span>config<span class="token operator">:</span> AxiosRequestConfig<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> source <span class="token operator">=</span> Axios<span class="token punctuation">.</span>CancelToken<span class="token punctuation">.</span><span class="token function">source</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token keyword">const</span> token <span class="token operator">=</span> <span class="token punctuation">(</span>Axios<span class="token punctuation">.</span>AxiosHeaders <span class="token operator">=</span> <span class="token function">getToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
    <span class="token keyword">const</span> promise <span class="token operator">=</span> <span class="token constant">AXIOS_INSTANCE</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
      <span class="token operator">...</span>config<span class="token punctuation">,</span>
      cancelToken<span class="token operator">:</span> source<span class="token punctuation">.</span>token<span class="token punctuation">,</span>
      headers<span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token operator">...</span>config<span class="token punctuation">.</span>headers<span class="token punctuation">,</span> Authorization<span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>token<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">{</span> data <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
      <span class="token comment">// 這裡可以自定義回傳格式</span>
      <span class="token keyword">return</span> data<span class="token punctuation">.</span>data
    <span class="token punctuation">}</span><span class="token punctuation">)</span>

    <span class="token comment">// eslint-disable-next-line @typescript-eslint/ban-ts-comment</span>
    <span class="token comment">// @ts-ignore</span>
    promise<span class="token punctuation">.</span><span class="token function-variable function">cancel</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
      source<span class="token punctuation">.</span><span class="token function">cancel</span><span class="token punctuation">(</span><span class="token string">'Query was cancelled by React Query'</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> promise
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> useCustomInstance

<span class="token comment">// 定義你的 ErrorType 與 BodyType</span>
<span class="token keyword">export</span> <span class="token keyword">type</span> <span class="token class-name">ErrorType<span class="token operator">&lt;</span>ErrorData<span class="token operator">></span></span> <span class="token operator">=</span> ErrorData

<span class="token keyword">export</span> <span class="token keyword">type</span> <span class="token class-name">BodyType<span class="token operator">&lt;</span>BodyData<span class="token operator">></span></span> <span class="token operator">=</span> BodyData <span class="token operator">&amp;</span> <span class="token punctuation">{</span>
  headers<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">any</span>
  data<span class="token operator">?</span><span class="token operator">:</span> <span class="token punctuation">{</span> token<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> results<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">;</span> data<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">;</span> userInfo<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">any</span> <span class="token punctuation">}</span>
  code<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">number</span>
  message<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span>
<span class="token punctuation">}</span></code></pre>
<h3>5. 產生檔案</h3>
<p>最後在終端機輸入 <code>yarn orval</code> 就會自動產生 <code>endpoints.ts</code> 與 <code>endpoints.schemas.ts</code> 兩個檔案，不要手動修改這兩個檔案，每次都透過 <code>yarn orval</code> 指令來更新這兩個檔案。</p>
<h3>endpoints.ts</h3>
<p>自動產生 API client 與 react-query 版本，名稱也會幫你取好，註解也會一起寫進來，真心方便(=´∀ ｀)人(´∀ ｀=)。</p>
<pre class="language-ts"><code class="language-ts"><span class="token comment">// endpoints.ts</span>

<span class="token comment">/**
 * Generated by orval v6.17.0 🍺
 * Do not edit manually.
 * Swagger Petstore
 * OpenAPI spec version: 1.0.0
 */</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useQuery<span class="token punctuation">,</span> useMutation <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-query'</span>
<span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span>
  UseQueryOptions<span class="token punctuation">,</span>
  UseMutationOptions<span class="token punctuation">,</span>
  QueryFunction<span class="token punctuation">,</span>
  MutationFunction<span class="token punctuation">,</span>
  UseQueryResult<span class="token punctuation">,</span>
  QueryKey<span class="token punctuation">,</span>
<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-query'</span>
<span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span> Pets<span class="token punctuation">,</span> Error<span class="token punctuation">,</span> ListPetsParams<span class="token punctuation">,</span> Pet<span class="token punctuation">,</span> CreatePetsBody <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../model'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useCustomClient <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../mutator/custom-client'</span>
<span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span> ErrorType<span class="token punctuation">,</span> BodyType <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../mutator/custom-client'</span>

<span class="token keyword">type</span> <span class="token class-name">AwaitedInput<span class="token operator">&lt;</span><span class="token constant">T</span><span class="token operator">></span></span> <span class="token operator">=</span> PromiseLike<span class="token operator">&lt;</span><span class="token constant">T</span><span class="token operator">></span> <span class="token operator">|</span> <span class="token constant">T</span>

<span class="token keyword">type</span> <span class="token class-name">Awaited<span class="token operator">&lt;</span><span class="token constant">O</span><span class="token operator">></span></span> <span class="token operator">=</span> <span class="token constant">O</span> <span class="token keyword">extends</span> <span class="token class-name">AwaitedInput<span class="token operator">&lt;</span><span class="token keyword">infer</span> <span class="token constant">T</span><span class="token operator">></span></span> <span class="token operator">?</span> <span class="token constant">T</span> <span class="token operator">:</span> <span class="token builtin">never</span>

<span class="token comment">/**
 * @summary List all pets
 */</span>
<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token function-variable function">useListPetsHook</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> listPets <span class="token operator">=</span> <span class="token generic-function"><span class="token function">useCustomClient</span><span class="token generic class-name"><span class="token operator">&lt;</span>Pets<span class="token operator">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>params<span class="token operator">?</span><span class="token operator">:</span> ListPetsParams<span class="token punctuation">,</span> version <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> signal<span class="token operator">?</span><span class="token operator">:</span> AbortSignal<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token keyword">return</span> <span class="token function">listPets</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
      url<span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">/v</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>version<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">/pets</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span>
      method<span class="token operator">:</span> <span class="token string">'get'</span><span class="token punctuation">,</span>
      params<span class="token punctuation">,</span>
      signal<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token function-variable function">getListPetsQueryKey</span> <span class="token operator">=</span> <span class="token punctuation">(</span>params<span class="token operator">?</span><span class="token operator">:</span> ListPetsParams<span class="token punctuation">,</span> version <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">/v</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>version<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">/pets</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">(</span>params <span class="token operator">?</span> <span class="token punctuation">[</span>params<span class="token punctuation">]</span> <span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token keyword">as</span> <span class="token keyword">const</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> useListPetsQueryOptions <span class="token operator">=</span> <span class="token operator">&lt;</span>
  TData <span class="token operator">=</span> Awaited<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span><span class="token keyword">typeof</span> useListPetsHook<span class="token operator">>>></span><span class="token punctuation">,</span>
  TError <span class="token operator">=</span> ErrorType<span class="token operator">&lt;</span>Error<span class="token operator">></span>
<span class="token operator">></span><span class="token punctuation">(</span>
  params<span class="token operator">?</span><span class="token operator">:</span> ListPetsParams<span class="token punctuation">,</span>
  version <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span>
  options<span class="token operator">?</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    query<span class="token operator">?</span><span class="token operator">:</span> UseQueryOptions<span class="token operator">&lt;</span>Awaited<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span><span class="token keyword">typeof</span> useListPetsHook<span class="token operator">>>></span><span class="token punctuation">,</span> TError<span class="token punctuation">,</span> TData<span class="token operator">></span>
  <span class="token punctuation">}</span>
<span class="token punctuation">)</span><span class="token operator">:</span> UseQueryOptions<span class="token operator">&lt;</span>Awaited<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span><span class="token keyword">typeof</span> useListPetsHook<span class="token operator">>>></span><span class="token punctuation">,</span> TError<span class="token punctuation">,</span> TData<span class="token operator">></span> <span class="token operator">&amp;</span> <span class="token punctuation">{</span> queryKey<span class="token operator">:</span> QueryKey <span class="token punctuation">}</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span> query<span class="token operator">:</span> queryOptions <span class="token punctuation">}</span> <span class="token operator">=</span> options <span class="token operator">??</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>

  <span class="token keyword">const</span> queryKey <span class="token operator">=</span> queryOptions<span class="token operator">?.</span>queryKey <span class="token operator">??</span> <span class="token function">getListPetsQueryKey</span><span class="token punctuation">(</span>params<span class="token punctuation">,</span> version<span class="token punctuation">)</span>

  <span class="token keyword">const</span> listPets <span class="token operator">=</span> <span class="token function">useListPetsHook</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

  <span class="token keyword">const</span> queryFn<span class="token operator">:</span> QueryFunction<span class="token operator">&lt;</span>Awaited<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span><span class="token keyword">typeof</span> useListPetsHook<span class="token operator">>>></span><span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">{</span> signal <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=></span>
    <span class="token function">listPets</span><span class="token punctuation">(</span>params<span class="token punctuation">,</span> version<span class="token punctuation">,</span> signal<span class="token punctuation">)</span>

  <span class="token keyword">return</span> <span class="token punctuation">{</span> queryKey<span class="token punctuation">,</span> queryFn<span class="token punctuation">,</span> enabled<span class="token operator">:</span> <span class="token operator">!</span><span class="token operator">!</span>version<span class="token punctuation">,</span> <span class="token operator">...</span>queryOptions <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">type</span> <span class="token class-name">ListPetsQueryResult</span> <span class="token operator">=</span> NonNullable<span class="token operator">&lt;</span>Awaited<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span>ReturnType<span class="token operator">&lt;</span><span class="token keyword">typeof</span> useListPetsHook<span class="token operator">>>></span><span class="token operator">></span>
<span class="token keyword">export</span> <span class="token keyword">type</span> <span class="token class-name">ListPetsQueryError</span> <span class="token operator">=</span> ErrorType<span class="token operator">&lt;</span>Error<span class="token operator">></span>

<span class="token comment">// ...以下省略</span></code></pre>
<h3>endpoints.schemas.ts</h3>
<p>這個檔案會自動產生 API 的 TypeScript，直接使用該檔案內 export 的內容即可。
也可以加入 msw 或是 faker 使用唷，因為我這邊沒用到所以方法請參考<a href="https://orval.dev/guides/basics">官方說明文件</a>。</p>
<h3>使用方式</h3>
<p>因為 Orval 只安裝在開發環境上，所以他只是輔助產出檔案，使用方式就跟以前寫 axios 或是 TanStack Query 都一樣。</p>
<pre class="language-tsx"><code class="language-tsx"><span class="token comment">// App.tsx</span>
<span class="token keyword">import</span> React<span class="token punctuation">,</span> <span class="token punctuation">{</span> useEffect <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useListPets <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./apis/endpoints.ts'</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> useAuthDispatch <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./auth.context'</span>
<span class="token keyword">import</span> <span class="token string">'./App.css'</span>

<span class="token keyword">function</span> <span class="token function">App</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> dispatch <span class="token operator">=</span> <span class="token function">useAuthDispatch</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span> data<span class="token operator">:</span> pets<span class="token punctuation">,</span> refetch <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useListPets</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 直接使用</span>

  <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
    <span class="token function">dispatch</span><span class="token punctuation">(</span><span class="token string">'token'</span><span class="token punctuation">)</span>
    <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
      <span class="token function">refetch</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">2000</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>refetch<span class="token punctuation">,</span> dispatch<span class="token punctuation">]</span><span class="token punctuation">)</span>

  <span class="token keyword">return</span> <span class="token punctuation">(</span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">className</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>App<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>header</span> <span class="token attr-name">className</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>App-header<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token plain-text">
        </span><span class="token punctuation">{</span>pets<span class="token operator">?.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>pet<span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>
          <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span> <span class="token attr-name">key</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>pet<span class="token punctuation">.</span>id<span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token punctuation">{</span>pet<span class="token punctuation">.</span>name<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">></span></span>
        <span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token plain-text">
      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>header</span><span class="token punctuation">></span></span><span class="token plain-text">
    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<p>以後只要 API 文件有更新，只要再跑一遍 <code>yarn orval</code> 或是直接寫入你的執行的 dev 腳本內，每次開發時就會自己抓最新 API 文件產出格式了，是不是真的好方便～～（撒花</p>
<p>喜歡這篇文章就讓我們一起加入前端懶人行列吧～～(\ *≧ω≦)</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>跨足 C#：以前端為出發點的學習策略，Mac 上的 C# 學習計畫</title>
      <link href="https://blog.roroiii.com/posts/csharp/getting-started-with-csharp/"/>
      <updated>2023-10-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/csharp/getting-started-with-csharp/</id>
      <content type="html">
        <![CDATA[
      <blockquote>
<p>標題真難想 QQ</p>
</blockquote>
<h2>學習起因</h2>
<p>雖然有一些後端的概念，也使用過 PHP 或 Node.js 之類的語言，但還是想學習有比較完整概念的後端語言，剛好公司後端目前都使用 C# ，就趁這個機會挑戰看看。</p>
<p>學習一門程式語言要了解基礎語法、慣用程式語言、基礎架構還有一些語法糖 ⋯⋯ 總之從零開始學的話，要熟悉這些語言都要花上一段時間（就跟學英文法文德文之類的語言一樣）睡覺睡得夠多(?)才會記在腦袋裡。本篇學習心得是建立在「已經會一門前端框架程式」的基礎上，你已經會使用前端框架開發網站的角度來學習 C#。</p>
<p>因為我的電腦是 Mac ，雖然公司有派發 win 系統的電腦但因為想虐待自己(?)挑戰用 Mac 系統可不可以從頭學會 C#，所以寫了這個心得過程筆記。</p>
<hr>
<h2>學習基礎</h2>
<ul>
<li>作業系統： masOS Ventura 13.3.1</li>
<li>IDE： VS Code (Visual Studio Code) ，搭配使用 Copilot Chat 學習</li>
<li>前端技能：JavaScript、TypeScript、React，會使用 npm，了解 package.json 是什麼</li>
<li>筆記軟體：UpNote</li>
</ul>
<p>VS Code prettier settings 參考：</p>
<pre class="language-json"><code class="language-json">  <span class="token property">"[csharp]"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token property">"editor.defaultFormatter"</span><span class="token operator">:</span> <span class="token string">"ms-dotnettools.csharp"</span><span class="token punctuation">,</span>
    <span class="token property">"editor.tabSize"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>
    <span class="token property">"editor.insertSpaces"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
    <span class="token property">"editor.suggest.showWords"</span><span class="token operator">:</span> <span class="token boolean">true</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token property">"[aspnetcorerazor]"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token property">"editor.defaultFormatter"</span><span class="token operator">:</span> <span class="token string">"ms-dotnettools.blazorwasm-companion"</span><span class="token punctuation">,</span>
    <span class="token property">"editor.tabSize"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>
    <span class="token property">"editor.insertSpaces"</span><span class="token operator">:</span> <span class="token boolean">true</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span></code></pre>
<p>X: 不推薦使用 Visual Studio For Mac，功能太閹割了，且微軟已經宣布將在 2024 年 8 月 31 日淘汰這個產品。</p>
<hr>
<h2>入門 C#</h2>
<p>因為 C# 是一門歷史悠久的程式語言，所以內容包山包海，要從哪個角度切入開始理解慨念真的滿重要的，我是用 FreeCodeCamp 的 <a href="https://www.freecodecamp.org/learn/foundational-c-sharp-with-microsoft/">Foundational C# with Microsoft</a> 開始入門，他是搭配微軟的教學系統 <a href="https://learn.microsoft.com/en-us/training/modules/csharp-write-first/">Write your first C# code</a> 一步一步開始教起。</p>
<p>選擇理由是這個真的最基礎，也會很詳細的講到一些程式慣用語跟概念，課綱 FreeCodeCamp 也都幫你排好了，照著學就對！
微軟也很貼心的有 Mac 作業系統搭配 VS Code 的教學，圖文詳細的教你如何使用 VS Code Debug 工具，也會帶著你做小作品。</p>
<p>小缺點大概就是微軟寫的教學介紹真的滿長的，常常看到想睡覺 QQ<br>
懶得全看的話，已經會的概念可以快速跳過。</p>
<p>學習重點就是不要複製貼上，不可以一直按 tab tab 補完程式，請自己一行行碼字，使用肌肉記憶。
期間搭配使用 Google 與 Copilot Chat，例如各種函數的用途，VS Code 的功能藏在哪裡之類的蠢問題，學習完成時間大概一至二週。</p>
<p>最後課程結束會有個考試，考完就會給你一張證書。
<img src="/images/posts/freecodecamp-certifications-csharp.png" alt=""></p>
<p>這個課程學完的話就會知道怎麼使用 function 寫一隻程式<br>
是的，他沒教你 interface、class 之類的東西，真的是給你學基礎概念 XD</p>
<hr>
<h2>學習 C# 的前端框架 Blazor</h2>
<p>是的，因為我們是從前端往後端 C# 學，不急著一開始就全學會 C# 武功秘笈全集，我們要從擅長的角度切入，所以從 Blazor 開始。</p>
<p>學習搭配教學文章：</p>
<ul>
<li><a href="https://www.huanlintalk.com/2022/12/net-blazor-introduction.html">.NET Blazor 筆記：簡介</a></li>
<li><a href="https://www.cnblogs.com/stulzq/p/12984971.html">Blazor 修仙之旅 - 初尝</a></li>
<li><a href="https://github.com/dotnet-presentations/blazor-workshop/tree/main">Blazor - app building workshop</a></li>
</ul>
<p>Blazor 跟 React 還有 Vue 很像，有類似 npm、yarn 跟 package.json 的東西，只差在指令不同改成 <code>dotnet</code> 開頭，
套件改成使用 NuGet 安裝， Component 的副檔名變成 <code>.razor</code>。</p>
<h3>Blazor Server</h3>
<ul>
<li>程式跑在後端，對伺服器需求量大，不支持 PWA。</li>
<li>需要可執行 C# 的環境。</li>
</ul>
<h3>Blazor WebAssembly</h3>
<ul>
<li>靜態可部署在 GitHub Pages ，支持 PWA</li>
<li>在 Blazor WebAssembly 中，您可以使用 HttpClient 類別或 IHttpService 服務來發送 HTTP 請求。</li>
<li>不需要 C# 執行環境。</li>
</ul>
<p>Component 簡單說明：
<code>@page</code> 就是路由， <code>@Code</code> 的地方寫邏輯，操作 DOM 的地方都改成 <code>@</code> 開頭。</p>
<pre class="language-csharp"><code class="language-csharp">@page <span class="token string">"/myorders"</span>
@inject HttpClient HttpClient

<span class="token operator">&lt;</span>PageTitle<span class="token operator">></span>Blazing Pizza <span class="token operator">-</span> My Orders<span class="token operator">&lt;</span><span class="token operator">/</span>PageTitle<span class="token operator">></span>

<span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"main"</span><span class="token operator">></span>
    @<span class="token keyword">if</span> <span class="token punctuation">(</span>ordersWithStatus <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token operator">&lt;</span>text<span class="token operator">></span>Loading<span class="token range operator">..</span><span class="token punctuation">.</span><span class="token operator">&lt;</span><span class="token operator">/</span>text<span class="token operator">></span>
    <span class="token punctuation">}</span>
    <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>ordersWithStatus<span class="token punctuation">.</span><span class="token function">Any</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token operator">&lt;</span>h2<span class="token operator">></span>No orders placed<span class="token operator">&lt;</span><span class="token operator">/</span>h2<span class="token operator">></span>
        <span class="token operator">&lt;</span>a <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"btn btn-success"</span> href<span class="token operator">=</span><span class="token string">""</span><span class="token operator">></span>Order some pizza<span class="token operator">&lt;</span><span class="token operator">/</span>a<span class="token operator">></span>
    <span class="token punctuation">}</span>
    <span class="token keyword">else</span>
    <span class="token punctuation">{</span>
        <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"list-group orders-list"</span><span class="token operator">></span>
            @<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">var</span></span> item <span class="token keyword">in</span> ordersWithStatus<span class="token punctuation">)</span>
            <span class="token punctuation">{</span>
                <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"list-group-item"</span><span class="token operator">></span>
                    <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"col"</span><span class="token operator">></span>
                        <span class="token operator">&lt;</span>h5<span class="token operator">></span>@item<span class="token punctuation">.</span>Order<span class="token punctuation">.</span>CreatedTime<span class="token punctuation">.</span><span class="token function">ToLongDateString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">&lt;</span><span class="token operator">/</span>h5<span class="token operator">></span>
                        Items<span class="token punctuation">:</span>
                        <span class="token operator">&lt;</span>strong<span class="token operator">></span>@item<span class="token punctuation">.</span>Order<span class="token punctuation">.</span>Pizzas<span class="token punctuation">.</span><span class="token function">Count</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">&lt;</span><span class="token operator">/</span>strong<span class="token operator">></span><span class="token punctuation">;</span>
                        <span class="token class-name">Total</span> price<span class="token punctuation">:</span>
                        <span class="token operator">&lt;</span>strong<span class="token operator">></span>£@item<span class="token punctuation">.</span>Order<span class="token punctuation">.</span><span class="token function">GetFormattedTotalPrice</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">&lt;</span><span class="token operator">/</span>strong<span class="token operator">></span>
                    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
                    <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"col"</span><span class="token operator">></span>
                        Status<span class="token punctuation">:</span> <span class="token operator">&lt;</span>strong<span class="token operator">></span>@item<span class="token punctuation">.</span>StatusText<span class="token operator">&lt;</span><span class="token operator">/</span>strong<span class="token operator">></span>
                    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
                    <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"col flex-grow-0"</span><span class="token operator">></span>
                        <span class="token operator">&lt;</span><span class="token class-name">a</span> href<span class="token operator">=</span><span class="token string">"myorders/@item.Order.OrderId"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"btn btn-success"</span><span class="token operator">></span>
                            Track <span class="token operator">&amp;</span>gt<span class="token punctuation">;</span>
                        <span class="token operator">&lt;</span><span class="token operator">/</span>a<span class="token operator">></span>
                    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
                <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
            <span class="token punctuation">}</span>
        <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>
    <span class="token punctuation">}</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">></span>

@code <span class="token punctuation">{</span>
    <span class="token class-name">IEnumerable<span class="token punctuation">&lt;</span>OrderWithStatus<span class="token punctuation">></span></span> ordersWithStatus<span class="token punctuation">;</span>

   <span class="token keyword">protected</span> <span class="token keyword">override</span> <span class="token keyword">async</span> <span class="token return-type class-name">Task</span> <span class="token function">OnParametersSetAsync</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        ordersWithStatus <span class="token operator">=</span> <span class="token keyword">await</span> HttpClient<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">GetFromJsonAsync</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>List<span class="token punctuation">&lt;</span>OrderWithStatus<span class="token punctuation">></span><span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"orders"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>但是目前 Blazor 在 VS Code 上編輯真的太難 Debug 了，例如錯字會不提示，變數名稱錯誤找不到，語法 highlight 錯誤之類都是家常便飯，所以肌肉學習打字練習就好，接下來就往 ASP.NET Core webAPI 前進吧！</p>
<p>至於 .NET 家族之間的愛恨情仇可以參考這一篇文章：
<a href="https://blog.talllkai.com/ASPNETCoreMVC/2023/02/24/environment">ASP.NET Core MVC 入門教學 - ASP.NET 之開發網站各技術架構簡介</a></p>
<hr>
<h3>學習 ASP.NET Core WEB API</h3>
<p>這部分嘗試開始找網路影片教學，但是會卡在作業系統跟 IDE 的問題，大部分教學都使用 Visual Studio for Windows ，這樣在第一步環境建置專案就會有入門困難，所以還是繞回來從微軟的教學開始 <a href="https://learn.microsoft.com/en-us/training/paths/aspnet-core-web-app/">Build web apps with ASP.NET Core for beginners</a></p>
<hr>
<p>接下來是痛苦的開始～俗話說沒有痛苦沒有成長</p>
<h3>學習 C# 物件導向概念</h3>
<p>雖然我是有點概念但是很難用自己的話講出一套說法，簡而言之就是還不熟 QQ
這裡講解的文章五花八門，我推薦看 伊果的沒人看筆記本的菜雞新訓記 ，講得算清楚也描述的很有趣。</p>
<p><a href="https://igouist.github.io/post/2021/10/newbie-5-3-layer-architecture/">菜雞新訓記 (5): 使用 三層式架構 來切分服務的關注點和職責吧</a></p>
<hr>
<p>其他看影片的部分就使用時間軸 ⋯⋯</p>
<hr>
<h4>Oct 18, 2023, 5:23 PM</h4>
<p>ASP .Net Core WebAPI</p>
<p>Teddy 教學影片
<a href="https://youtu.be/_8nLSsK5NDo?si=NZMaATIbY2lj1HU2">https://youtu.be/_8nLSsK5NDo?si=NZMaATIbY2lj1HU2<br>
</a></p>
<p>學到一半學了 SQL Server for Mac 的安裝與設定</p>
<p>FreeCodeCamp
<a href="https://www.youtube.com/watch?v=hZ1DASYd9rk">Learn ASP.NET Core MVC (.NET 6) - Full Course - YouTube</a></p>
<hr>
<h4>Oct 19, 2023, 9:40 AM</h4>
<p>觀念學習
<a href="https://igouist.github.io/post/2021/10/newbie-5-3-layer-architecture/" title="https://igouist.github.io/post/2021/10/newbie-5-3-layer-architecture/">菜雞新訓記 (5): 使用 三層式架構 來切分服務的關注點和職責吧</a></p>
<hr>
<h4>Oct 22, 2023, 5:20 PM</h4>
<p>系列影片，看到一半有跟著做。後面有點看不下去，所以先去看別的影片。</p>
<p><a href="https://youtu.be/K4WuxwkXrIY?si=cZpIW4SvY8kezZhx&amp;t=1648" title="https://youtu.be/K4WuxwkXrIY?si=cZpIW4SvY8kezZhx&amp;t=1648">ASP.NET Core Web API - 6. GET &amp; Read Methods [PART 1]</a></p>
<hr>
<h4>Oct 24, 2023, 5:16 PM</h4>
<p>這個影片講滿快的，但是講解得滿清楚，理解 .net core 整體架構有跟著做到一半，後面之後再找時間做。</p>
<p>還有講者用 vim 開發真的很快，也促使我開始好好學 vim</p>
<p><a href="https://youtu.be/PmDJIooZjBE?si=MsD9BF208hO3ZaEk" title="https://youtu.be/PmDJIooZjBE?si=MsD9BF208hO3ZaEk">Industry Level REST API using .NET 6 – Tutorial for Beginners</a></p>
<hr>
<h4>Oct 24, 2023, 5:14 PM</h4>
<p>因為用因為英文畢竟不是母語，有一些專有名詞用英文還是不太能理解，所以接下來用母語來補足一些不懂的概念。</p>
<p>著重在後半部，用母語補足一些基本觀念，這個講者真的解釋得很清楚 👍</p>
<p>但是真的講得太基礎了，所以其實沒有再往下學的感覺。</p>
<p><a href="https://www.youtube.com/watch?v=T9BeejD3i0g" title="https://www.youtube.com/watch?v=T9BeejD3i0g">【C#】3 小時初學者教學 ｜ Csharp ｜ C# 教學 ｜ C# 入門 | C++++ - YouTube</a></p>
<hr>
<h4>Oct 24, 2023, 5:18 PM</h4>
<p>凱哥寫程式，影片真的太多了，只看了前面三分之一 QQ</p>
<p>看前面講解 .net 之間的可以了解這個框架之間的愛恨情仇（？</p>
<p><a href="https://youtu.be/dXUfZuf1Wp4?si=hE4kx001czuAJnFH" title="https://youtu.be/dXUfZuf1Wp4?si=hE4kx001czuAJnFH">ASP.NET Core Web API 入門教學</a></p>
<hr>
<h4>Oct 25, 2023, 3:40 PM</h4>
<p>LINQ</p>
<p>查詢資料庫的語法，第一次知道這個東西ＱＱ</p>
<p><a href="https://learn.microsoft.com/zh-tw/dotnet/csharp/linq/">https://learn.microsoft.com/zh-tw/dotnet/csharp/linq/</a></p>
<p><a href="https://jscinin.medium.com/linq-%E6%B7%B1%E5%85%A5%E6%B7%BA%E5%87%BA-%E4%B8%80-%E8%A7%80%E5%BF%B5%E7%AF%87-f43881fa4e5a" title="https://jscinin.medium.com/linq-%E6%B7%B1%E5%85%A5%E6%B7%BA%E5%87%BA-%E4%B8%80-%E8%A7%80%E5%BF%B5%E7%AF%87-f43881fa4e5a">LINQ 深入淺出（一）：觀念篇</a></p>
<hr>
<h4>Oct 26, 2023, 8:57 AM</h4>
<p>本來打算之後找時間跟著做，但是其實官方就有提供範例拉～
<a href="https://learn.microsoft.com/zh-tw/aspnet/core/web-api/advanced/conventions?view=aspnetcore-6.0">使用 Web API 慣例</a></p>
<p><a href="https://www.youtube.com/watch?v=d9WZoH3vYAY&amp;list=PLneJIGUTIItsqHp_8AbKWb7gyWDZ6pQyz&amp;index=14">【SP】ASP.NET Core Web API 示範 - CRUD Database First,GET,POST,PUT,DELETE</a></p>
<hr>
<h4>Oct 26, 2023, 10:33 AM</h4>
<p>從這裡開始看</p>
<p><a href="https://youtu.be/GUjnwK0BsN4?si=gfdlbVikc4HHvKtp" title="https://youtu.be/GUjnwK0BsN4?si=gfdlbVikc4HHvKtp">【3.事前必備知識】ASP.NET Core Web API 入門教學(3_6) - 回應正確的 HTTP 狀態碼？</a></p>
<hr>
<h4>Oct 27, 2023, 15:57 AM</h4>
<p>借了電子書 <a href="https://taichunggov.ebook.hyread.com.tw/bookDetail.jsp?id=325084">C#最強入門邁向頂尖高手之路王者歸來</a> ，這本是今年 2 月出版的，我覺得很適合用來入門 .net6.0，觀念也講得滿清楚的，但是只能借 14 天所以我打算跳著看。</p>
<h4>Oct 30, 2023, 2:49 PM</h4>
<p>跟著影片完成教學專案，有放到我的 <a href="%5Bhttps://github.com/roroiii/dotnet-webapi-net7.0%5D(https://github.com/roroiii/dotnet-webapi-net7.0)">Github</a>，這個教學講解很清楚，跟著做也沒問題。
然後因為我是用 Mac 系統，所以最後面連線資料庫我是換成 SQLite。</p>
<p><a href="https://youtu.be/9zJn3a7L1uE?si=PEdvH9HXQV3ehDH4&amp;t=1648" title="https://youtu.be/9zJn3a7L1uE?si=PEdvH9HXQV3ehDH4&amp;t=1648">.NET 7 Beginner Course 🚀 Web API, Entity Framework 7 &amp; SQL Server</a></p>
<hr>
<p>暫時的結語（？</p>
<p>目前這樣學下來，應該是可以寫簡單的 Web API 了，還要花時間在熟一下語法的部分，還不敢自居已經會使用 C#，筆記總共寫了 28 篇。</p>
<p>其實中間因為作業系統的問題踩了一些坑但都被我順手解決掉了，感覺是工程師的職業生涯裡，已經讓我培養出解決問題的能力，而且現在還有 Copilot 可以問問題，真的縮短滿多踩坑卡住的時間。</p>
<p>大概用了一個月的時間 (09/26 - 10/30) 主管放手讓我自學，是也很希望公司有提供教育訓練啦～但這樣應該會更久才學會怎麼用 C#，我覺得我自學也學得還算滿不錯的嘿嘿 (´･ω･`)</p>
<p>希望之後寫 C# 專案順利～</p>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>輕鬆上手：使用 ExcelJS 在前端產出 Excel 文件</title>
      <link href="https://blog.roroiii.com/posts/exceljs-excel/"/>
      <updated>2024-02-27T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/exceljs-excel/</id>
      <content type="html">
        <![CDATA[
      <h2>寫個 ExcelJS 的小筆記</h2>
<p>ExcelJS 是 JavaScript 的一個 Library，有許多非常方便的功能，可以讓你順利產出漂漂亮亮的 Excel 的版面。</p>
<p>以下是官方的介紹：</p>
<blockquote>
<p>Read, manipulate and write spreadsheet data and styles to XLSX and JSON.
Reverse engineered from Excel spreadsheet files as a project.</p>
</blockquote>
<h3>安裝</h3>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> exceljs</code></pre>
<h3>使用</h3>
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> ExcelJS <span class="token keyword">from</span> <span class="token string">'exceljs'</span>

<span class="token keyword">const</span> workbook <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ExcelJS<span class="token punctuation">.</span>Workbook</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> worksheet <span class="token operator">=</span> workbook<span class="token punctuation">.</span><span class="token function">addWorksheet</span><span class="token punctuation">(</span><span class="token string">'My Sheet'</span><span class="token punctuation">)</span> <span class="token comment">// 這是 Excel 表的名字</span></code></pre>
<p>其實<a href="https://github.com/exceljs/exceljs">ExcelJS 官方文件</a>都寫得相當清楚，下面就舉幾個我自己延伸用過的小範例。</p>
<h3>文字格式設定</h3>
<p>設定文字位置</p>
<pre class="language-js"><code class="language-js">worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token string">'F55'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token string">'Apple'</span>
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token string">'F55'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>alignment <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">vertical</span><span class="token operator">:</span> <span class="token string">'bottom'</span><span class="token punctuation">,</span> <span class="token literal-property property">horizontal</span><span class="token operator">:</span> <span class="token string">'right'</span> <span class="token punctuation">}</span>

worksheet<span class="token punctuation">.</span><span class="token function">addRow</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'第一格'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token string">'第四格'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span>alignment <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">horizontal</span><span class="token operator">:</span> <span class="token string">'left'</span> <span class="token punctuation">}</span></code></pre>
<p>使用 richText 的方式設定粗體、顏色等。</p>
<pre class="language-js"><code class="language-js">worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token string">'A17'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">richText</span><span class="token operator">:</span> <span class="token punctuation">[</span>
    <span class="token punctuation">{</span>
      <span class="token literal-property property">font</span><span class="token operator">:</span> <span class="token punctuation">{</span>
        <span class="token literal-property property">size</span><span class="token operator">:</span> <span class="token number">9</span><span class="token punctuation">,</span>
        <span class="token literal-property property">bold</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token literal-property property">text</span><span class="token operator">:</span> <span class="token string">'Apple'</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span></code></pre>
<h3>設定數字格式</h3>
<p>使用 numFmt 這個函數設定</p>
<pre class="language-js"><code class="language-js">worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token string">'K46'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token number">54106</span>
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token string">'K46'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>numFmt <span class="token operator">=</span> <span class="token string">'"$" #,##0.00'</span></code></pre>
<h3>從瀏覽器中讀取圖片放入 Excel</h3>
<p>搭配 axios 從瀏覽器中讀取圖片，放入 Excel 檔案的指定位置。</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> imageBufferCompany <span class="token operator">=</span> <span class="token keyword">await</span> axios<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">/img/company.png</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">responseType</span><span class="token operator">:</span> <span class="token string">'arraybuffer'</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token keyword">const</span> imageId <span class="token operator">=</span> workbook<span class="token punctuation">.</span><span class="token function">addImage</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  <span class="token literal-property property">buffer</span><span class="token operator">:</span> imageBufferCompany<span class="token punctuation">.</span>data<span class="token punctuation">,</span>
  <span class="token literal-property property">extension</span><span class="token operator">:</span> <span class="token string">'png'</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

worksheet<span class="token punctuation">.</span><span class="token function">addImage</span><span class="token punctuation">(</span>imageId<span class="token punctuation">,</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">tl</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">col</span><span class="token operator">:</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token literal-property property">row</span><span class="token operator">:</span> <span class="token number">57</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// 指定位置</span>
  <span class="token literal-property property">ext</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">width</span><span class="token operator">:</span> <span class="token number">174</span><span class="token punctuation">,</span> <span class="token literal-property property">height</span><span class="token operator">:</span> <span class="token number">118</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// 指定大小</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<h3>底色填色</h3>
<p>寫一個共用的 function ， 之後就可以直接拿來使用。</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">setCellFill</span><span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">worksheet</span><span class="token operator">:</span> ExcelJS<span class="token punctuation">.</span>Worksheet<span class="token punctuation">,</span> <span class="token literal-property property">cellAddress</span><span class="token operator">:</span> string<span class="token punctuation">,</span> <span class="token literal-property property">fillColor</span><span class="token operator">:</span> string</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span>cellAddress<span class="token punctuation">)</span><span class="token punctuation">.</span>fill <span class="token operator">=</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'pattern'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">pattern</span><span class="token operator">:</span> <span class="token string">'solid'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">fgColor</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">argb</span><span class="token operator">:</span> fillColor <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">const</span> columns <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">,</span> <span class="token string">'B'</span><span class="token punctuation">,</span> <span class="token string">'C'</span><span class="token punctuation">,</span> <span class="token string">'D'</span><span class="token punctuation">,</span> <span class="token string">'E'</span><span class="token punctuation">,</span> <span class="token string">'F'</span><span class="token punctuation">,</span> <span class="token string">'G'</span><span class="token punctuation">,</span> <span class="token string">'H'</span><span class="token punctuation">,</span> <span class="token string">'I'</span><span class="token punctuation">,</span> <span class="token string">'J'</span><span class="token punctuation">,</span> <span class="token string">'K'</span><span class="token punctuation">]</span>

<span class="token comment">// 使用</span>
<span class="token function">setCellFill</span><span class="token punctuation">(</span>worksheet<span class="token punctuation">,</span> <span class="token string">'I47'</span><span class="token punctuation">,</span> <span class="token string">'fffe35'</span><span class="token punctuation">)</span>
<span class="token function">setCellFill</span><span class="token punctuation">(</span>worksheet<span class="token punctuation">,</span> <span class="token string">'I48'</span><span class="token punctuation">,</span> <span class="token string">'fffe35'</span><span class="token punctuation">)</span>

columns<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">column<span class="token punctuation">,</span> index</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span>index <span class="token operator">&lt;=</span> <span class="token number">6</span><span class="token punctuation">)</span> <span class="token function">setCellFill</span><span class="token punctuation">(</span>worksheet<span class="token punctuation">,</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>column<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">3</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> <span class="token string">'b8b8b8'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<h3>文字租體 Bold</h3>
<p>這滿常使用的，也是寫成一個共用的 function</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">function</span> <span class="token function">setRichText</span><span class="token punctuation">(</span>
  <span class="token literal-property property">worksheet</span><span class="token operator">:</span> any<span class="token punctuation">,</span>
  <span class="token literal-property property">cellAddress</span><span class="token operator">:</span> string<span class="token punctuation">,</span>
  <span class="token literal-property property">text</span><span class="token operator">:</span> string<span class="token punctuation">,</span>
  vertical <span class="token operator">=</span> <span class="token string">'middle'</span><span class="token punctuation">,</span>
  horizontal <span class="token operator">=</span> <span class="token string">'center'</span><span class="token punctuation">,</span>
  fontSize <span class="token operator">=</span> <span class="token number">9</span><span class="token punctuation">,</span>
  isBold <span class="token operator">=</span> <span class="token boolean">true</span>
<span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> cell <span class="token operator">=</span> worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span>cellAddress<span class="token punctuation">)</span>
  cell<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">richText</span><span class="token operator">:</span> <span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        <span class="token literal-property property">font</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">size</span><span class="token operator">:</span> fontSize<span class="token punctuation">,</span> <span class="token literal-property property">bold</span><span class="token operator">:</span> isBold <span class="token punctuation">}</span><span class="token punctuation">,</span>
        <span class="token literal-property property">text</span><span class="token operator">:</span> text<span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span>
  cell<span class="token punctuation">.</span>alignment <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">vertical</span><span class="token operator">:</span> vertical<span class="token punctuation">,</span> <span class="token literal-property property">horizontal</span><span class="token operator">:</span> horizontal <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token comment">// 使用</span>
<span class="token function">setRichText</span><span class="token punctuation">(</span>worksheet<span class="token punctuation">,</span> <span class="token string">'A47'</span><span class="token punctuation">,</span> <span class="token string">'Country of Origin:'</span><span class="token punctuation">,</span> <span class="token string">'middle'</span><span class="token punctuation">,</span> <span class="token string">'left'</span><span class="token punctuation">)</span>
<span class="token function">setRichText</span><span class="token punctuation">(</span>worksheet<span class="token punctuation">,</span> <span class="token string">'J46'</span><span class="token punctuation">,</span> <span class="token string">'Sub Total'</span><span class="token punctuation">,</span> <span class="token string">'middle'</span><span class="token punctuation">,</span> <span class="token string">'right'</span><span class="token punctuation">)</span></code></pre>
<h3>邊框 Borders</h3>
<p>寫好共用的 border 設定，直接拿來使用。</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderAll</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">top</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">left</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">bottom</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">right</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderTopLeft</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">left</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">top</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderTopRight</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">right</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">top</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderLeftBottom</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">left</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">bottom</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderRightBottom</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">right</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token literal-property property">bottom</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token comment">// 使用</span>
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">A1</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderAll
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">A3</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderTopLeft
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">G3</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderTopRight
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">A10</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderLeftBottom
worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">G10</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderRightBottom</code></pre>
<p>如果要做邊線也可以用 <code>for</code> 迴圈</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderLeft</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">left</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token literal-property property">borderRight</span><span class="token operator">:</span> Partial<span class="token operator">&lt;</span>ExcelJS<span class="token punctuation">.</span>Borders<span class="token operator">></span> <span class="token operator">=</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">right</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'thin'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>

<span class="token comment">// 使用</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> <span class="token number">52</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">A</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>i<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderLeft
  worksheet<span class="token punctuation">.</span><span class="token function">getCell</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">G</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>i<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>border <span class="token operator">=</span> borderRight
<span class="token punctuation">}</span></code></pre>
<h3>產出 Excel 文件</h3>
<p>最後，將做好的資料保存產出為一個文件</p>
<pre class="language-js"><code class="language-js">workbook<span class="token punctuation">.</span>xlsx<span class="token punctuation">.</span><span class="token function">writeBuffer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">content</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> link <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">'a'</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> blobData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>content<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'application/octet-stream;charset=utf-8;'</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span>
  link<span class="token punctuation">.</span>download <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token function">dayjs</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string">'YYYYMMDDHHmmss'</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">.xlsx</span><span class="token template-punctuation string">`</span></span>
  link<span class="token punctuation">.</span>href <span class="token operator">=</span> <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">createObjectURL</span><span class="token punctuation">(</span>blobData<span class="token punctuation">)</span>
  link<span class="token punctuation">.</span><span class="token function">click</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>用 C 寫個 OOXX 小遊戲</title>
      <link href="https://blog.roroiii.com/posts/c/tic-tac-toe-game-by-c/"/>
      <updated>2024-11-26T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/c/tic-tac-toe-game-by-c/</id>
      <content type="html">
        <![CDATA[
      <p>這次學習的資源是 YouTube 上的
<a target="_blank" rel="noopener noreferrer" href="https://youtu.be/87SH2Cn0s9A?si=sIiIBEo0geSrKr1s">C Programming Full Course for free</a>
與 <a target="_blank" rel="noopener noreferrer" href="https://www.youtube.com/playlist?list=PLY_qIufNHc293YnIjVeEwNDuqGo8y2Emx">C 語言公開課</a></p>
<p>第一個影片只有 4 個小時，搭配第二個影片的中文解說，加上實際動手寫程式總共花了一個禮拜的時間學習，相較於上一次學習 C# 需要一個月快了許多。</p>
<p>我在想是那些共通的概念讓自己在學習第三門語言加快了，也可能是這次是使用公司的 Windows 電腦學習所以少了很多奇怪的坑。</p>
<p>但是 C 最麻煩的地方就是指標的應用還有手動記憶體的配置，這個需要靠實作繼續往下延伸。</p>
<blockquote>
<p>花一個禮拜熟悉 C 的語法還有重要的指標(pointer)概念後，就是自己寫一個最簡單的猜拳遊戲啦！相關教學影片可以看 C Programming Full Course for free 影片的最後一個部分。</p>
</blockquote>
<pre class="language-c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdlib.h></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;ctype.h></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;time.h></span></span>

<span class="token comment">// tic tac toe game</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SIZE</span> <span class="token expression"><span class="token number">3</span></span></span>
<span class="token keyword">static</span> <span class="token keyword">char</span> board<span class="token punctuation">[</span>SIZE<span class="token punctuation">]</span><span class="token punctuation">[</span>SIZE<span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> PLAYER <span class="token operator">=</span> <span class="token char">'X'</span><span class="token punctuation">;</span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> COMPUTER <span class="token operator">=</span> <span class="token char">'O'</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">resetBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">printBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">int</span> <span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">playerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">computerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">char</span> <span class="token function">checkWinner</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">printWinner</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">char</span> winner <span class="token operator">=</span> <span class="token char">' '</span><span class="token punctuation">;</span>
    <span class="token keyword">char</span> response <span class="token operator">=</span> <span class="token char">' '</span><span class="token punctuation">;</span>

    <span class="token keyword">do</span>
    <span class="token punctuation">{</span>
        winner <span class="token operator">=</span> <span class="token char">' '</span><span class="token punctuation">;</span>
        response <span class="token operator">=</span> <span class="token char">' '</span><span class="token punctuation">;</span>
        <span class="token function">resetBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token keyword">while</span> <span class="token punctuation">(</span>winner <span class="token operator">==</span> <span class="token char">' '</span> <span class="token operator">&amp;&amp;</span> <span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token function">printBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

            <span class="token function">playerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            winner <span class="token operator">=</span> <span class="token function">checkWinner</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>winner <span class="token operator">!=</span> <span class="token char">' '</span> <span class="token operator">||</span> <span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span>
            <span class="token punctuation">{</span>
                <span class="token keyword">break</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>

            <span class="token function">computerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            winner <span class="token operator">=</span> <span class="token function">checkWinner</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>winner <span class="token operator">!=</span> <span class="token char">' '</span> <span class="token operator">||</span> <span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span>
            <span class="token punctuation">{</span>
                <span class="token keyword">break</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>

        <span class="token function">printBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token function">printWinner</span><span class="token punctuation">(</span>winner<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\nWould you like to play again? (Y/N): "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">" %c"</span><span class="token punctuation">,</span> <span class="token operator">&amp;</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span>
        response <span class="token operator">=</span> <span class="token function">toupper</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token punctuation">}</span> <span class="token keyword">while</span> <span class="token punctuation">(</span>response <span class="token operator">==</span> <span class="token char">'Y'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Thanks for playing!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">resetBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token char">' '</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">printBoard</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %c | %c | %c"</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n---|---|---\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %c | %c | %c"</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n---|---|---\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %c | %c | %c\n"</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">int</span> <span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">int</span> freeSpaces <span class="token operator">=</span> <span class="token number">9</span><span class="token punctuation">;</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token char">' '</span><span class="token punctuation">)</span>
            <span class="token punctuation">{</span>
                freeSpaces<span class="token operator">--</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> freeSpaces<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">playerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">int</span> x<span class="token punctuation">;</span>
    <span class="token keyword">int</span> y<span class="token punctuation">;</span>

    <span class="token keyword">do</span>
    <span class="token punctuation">{</span>
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Enter row #(1-%d): "</span><span class="token punctuation">,</span> SIZE<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> <span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
        x<span class="token operator">--</span><span class="token punctuation">;</span>
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Enter column #(1-%d): "</span><span class="token punctuation">,</span> SIZE<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> <span class="token operator">&amp;</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>
        y<span class="token operator">--</span><span class="token punctuation">;</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token char">' '</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Invalid move!\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">else</span>
        <span class="token punctuation">{</span>
            board<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span> <span class="token operator">=</span> PLAYER<span class="token punctuation">;</span>
            <span class="token keyword">break</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span> <span class="token keyword">while</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token char">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">computerMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// create a seed based on current time</span>
    <span class="token function">srand</span><span class="token punctuation">(</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">int</span> x<span class="token punctuation">;</span>
    <span class="token keyword">int</span> y<span class="token punctuation">;</span>

    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">checkFreeSpaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">do</span>
        <span class="token punctuation">{</span>
            x <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> SIZE<span class="token punctuation">;</span>
            y <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> SIZE<span class="token punctuation">;</span>
        <span class="token punctuation">}</span> <span class="token keyword">while</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token char">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        board<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span> <span class="token operator">=</span> COMPUTER<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">else</span>
    <span class="token punctuation">{</span>
        <span class="token function">printWinner</span><span class="token punctuation">(</span><span class="token char">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">char</span> <span class="token function">checkWinner</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// check rows</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token keyword">return</span> board<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

    <span class="token comment">// check columns</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> SIZE<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token keyword">return</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

    <span class="token comment">// check diagonals</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">return</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">==</span> board<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">return</span> board<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> <span class="token char">' '</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">printWinner</span><span class="token punctuation">(</span><span class="token keyword">char</span> winner<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>winner <span class="token operator">==</span> PLAYER<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Congratulations! You win!\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>winner <span class="token operator">==</span> COMPUTER<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"The computer wins!\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">else</span>
    <span class="token punctuation">{</span>
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"It's a tie!\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<blockquote>
<p>在此做個學習紀錄。
記錄自己今年又學習了一門新的語言，實際了解另一個有趣的程式 :）</p>
</blockquote>

    ]]>
      </content>
    </entry>
  
    
    <entry>
      <title>Web Worker 上身，我的前端變成神了(?</title>
      <link href="https://blog.roroiii.com/posts/javascript/vite-comlink-web-worker/"/>
      <updated>2025-05-13T00:00:00Z</updated>
      <id>https://blog.roroiii.com/posts/javascript/vite-comlink-web-worker/</id>
      <content type="html">
        <![CDATA[
      <p>前端效能的極致展現(?
有神快拜(X)敗(O)
PS.很難供養，請神回家要小心。</p>
<p>這篇文章帶你從 Web Worker 搬磚小弟，一路進階到 WebAssembly 黑道大哥，還有 Comlink 魔法棒，讓你瞬間擁有多執行緒威能。後面也會搭配 Vite 的 plugin 實作，以及一些踩雷警告和實戰技巧。來吧！進香團出發～</p>
<hr>
<h3>🧱 Web Worker 搬磚大哥</h3>
<blockquote>
<p><strong>Web Worker（網頁工作執行緒）</strong> 是一種可以幫 JavaScript 分擔重活的技術，它會在主執行緒（main thread）之外開一條背景執行緒來跑程式，讓畫面不會因為重運算而卡住。</p>
</blockquote>
<p>用白話講：就是有個「搬磚工人」可以幫你處理沉重任務，像是：大量計算、資料處理、影像轉換等等。主角（UI）就可以繼續做他的表演，不會 lag。</p>
<p>✅ 適合做的事：</p>
<ul>
<li>資料解析（例如 CSV、JSON 巨量資料）</li>
<li>圖像處理（ImageData）</li>
<li>長時間計算（例如密碼加解密）</li>
</ul>
<p>❌ 不適合的事：</p>
<ul>
<li>DOM 操作（Worker 裡面碰不到畫面元素）</li>
<li>要即時互動的事件處理</li>
</ul>
<hr>
<h3>🕶️ WebAssembly 黑道老大</h3>
<blockquote>
<p><strong>WebAssembly（Wasm）</strong> 是一種可以讓 C/C++ 或 Rust 寫的原生程式碼在網頁中跑的格式。效能幾乎可以媲美原生 App。</p>
</blockquote>
<p>簡單說，就是你請一位黑道大哥（C++），幫你處理數學運算、音訊處理、或遊戲引擎等超硬核的事。他不多話，但動作快狠準。</p>
<p>跟 Web Worker 合作就像：搬磚大哥拿著黑道老大給的指令，搬磚時飛快效率 max！</p>
<hr>
<h3>🪄 Comlink 魔法棒簡單實作</h3>
<blockquote>
<p><strong>Comlink</strong> 是 Google 推出的一個小工具，可以讓你用「超簡單的方式」呼叫 Web Worker 裡的函式，像在用普通物件一樣。</p>
</blockquote>
<p>通常我們跟 Worker 溝通，要用 <code>postMessage()</code> 傳訊息、然後 <code>onmessage</code> 接收回應，非常麻煩。Comlink 就是幫你「自動打電話＋翻譯＋記錄」的好工具。</p>
<p>原本的 worker 應該要這樣寫:</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// worker.js</span>
self<span class="token punctuation">.</span><span class="token function-variable function">onmessage</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span> a<span class="token punctuation">,</span> b <span class="token punctuation">}</span> <span class="token operator">=</span> event<span class="token punctuation">.</span>data
  <span class="token keyword">const</span> result <span class="token operator">=</span> a <span class="token operator">+</span> b
  self<span class="token punctuation">.</span><span class="token function">postMessage</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span>
<span class="token punctuation">}</span></code></pre>
<pre class="language-js"><code class="language-js"><span class="token comment">// main.js</span>
<span class="token keyword">const</span> worker <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Worker</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">URL</span><span class="token punctuation">(</span><span class="token string">'./worker.js'</span><span class="token punctuation">,</span> <span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>url<span class="token punctuation">)</span><span class="token punctuation">)</span>

worker<span class="token punctuation">.</span><span class="token function">postMessage</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">a</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token literal-property property">b</span><span class="token operator">:</span> <span class="token number">3</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>

worker<span class="token punctuation">.</span><span class="token function-variable function">onmessage</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>event<span class="token punctuation">.</span>data<span class="token punctuation">)</span> <span class="token comment">// 👉 5</span>
<span class="token punctuation">}</span></code></pre>
<p>要手動管理 <code>postMessage()</code> 和 <code>onmessage</code>。</p>
<p>但 Comlink 只要這樣寫:</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// worker.js</span>
<span class="token keyword">import</span> <span class="token operator">*</span> <span class="token keyword">as</span> Comlink <span class="token keyword">from</span> <span class="token string">'comlink'</span>

<span class="token keyword">const</span> <span class="token function-variable function">add</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">+</span> b

<span class="token comment">// 用 Comlink 暴露函式</span>
Comlink<span class="token punctuation">.</span><span class="token function">expose</span><span class="token punctuation">(</span><span class="token punctuation">{</span> add <span class="token punctuation">}</span><span class="token punctuation">)</span></code></pre>
<pre class="language-js"><code class="language-js"><span class="token comment">// main.js</span>
<span class="token keyword">import</span> <span class="token operator">*</span> <span class="token keyword">as</span> Comlink <span class="token keyword">from</span> <span class="token string">'comlink'</span>

<span class="token keyword">const</span> worker <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Worker</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">URL</span><span class="token punctuation">(</span><span class="token string">'./worker.js'</span><span class="token punctuation">,</span> <span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>url<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'module'</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment">// 用 Comlink wrap 起來</span>
<span class="token keyword">const</span> api <span class="token operator">=</span> Comlink<span class="token punctuation">.</span><span class="token function">wrap</span><span class="token punctuation">(</span>worker<span class="token punctuation">)</span>

<span class="token comment">// 呼叫就像平常函式一樣簡單</span>
<span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token keyword">await</span> api<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token comment">// 👉 5</span></code></pre>
<p>Comlink 就像把 worker.js 包裝成一個「遠端物件」，你可以像平常呼叫函式一樣去用它，超級方便！</p>
<h3>vite-plugin-comlink 讓你直接晉升效能魔法大師</h3>
<p>覺得上面的 Comlink 還不夠簡單嗎？ <a href="https://classic.yarnpkg.com/en/package/vite-plugin-comlink">vite-plugin-comlink</a> 讓你就用 ES Module 直接寫 worker，什麼都不需要處理，只要 import 跟 export 就搞定！</p>
<p>使用方法非常簡單：</p>
<ol>
<li>安裝 plugin</li>
</ol>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> vite-plugin-comlink</code></pre>
<ol start="2">
<li>加到 vite.config.ts 裡，注意 <code>comlink()</code> 一定要放在第一個。</li>
</ol>
<pre class="language-ts"><code class="language-ts"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
  plugins<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token function">comlink</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">react</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
  worker<span class="token operator">:</span> <span class="token punctuation">{</span>
    format<span class="token operator">:</span> <span class="token string">'es'</span><span class="token punctuation">,</span>
    plugins<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token function">comlink</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span></code></pre>
<ol start="3">
<li>然後就可以像上面那樣 new ComlinkWorker() 開始用了！</li>
</ol>
<p>官方範例:
Usage</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// worker.js</span>
<span class="token keyword">export</span> <span class="token keyword">const</span> <span class="token function-variable function">add</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">a</span><span class="token operator">:</span> number<span class="token punctuation">,</span> <span class="token literal-property property">b</span><span class="token operator">:</span> number</span><span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">+</span> b

<span class="token comment">// main.ts</span>

<span class="token comment">// Create Worker</span>
<span class="token keyword">const</span> instance <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ComlinkWorker</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">URL</span><span class="token punctuation">(</span><span class="token string">'./worker.js'</span><span class="token punctuation">,</span> <span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>url<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
  <span class="token comment">/* normal Worker options*/</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token keyword">await</span> instance<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>

result <span class="token operator">===</span> <span class="token number">5</span>

<span class="token comment">// Create SharedWorker</span>
<span class="token keyword">const</span> instance <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ComlinkSharedWorker</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">URL</span><span class="token punctuation">(</span><span class="token string">'./worker.js'</span><span class="token punctuation">,</span> <span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>url<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
  <span class="token comment">/* normal Worker options*/</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token keyword">await</span> instance<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>

result <span class="token operator">===</span> <span class="token number">5</span></code></pre>
<p>範例寫得很簡單，但要注意 <code>new ComlinkWorker</code> 這個實例要放在 Vite React component 外面，也不可以放在 hook 內，不然會產生超~~~級多 requests 直到你網頁掛掉為止唷(&gt;.^)/</p>
<blockquote>
<p>💥 注意 ⚠️：ComlinkWorker 不可以寫在 React component 裡，也不能放在 hook 裡！
會產生大量 Worker 實例（超爆炸），導致 memory 滿到掛網！</p>
</blockquote>
<h3>進階傳遞 ArrayBuffer</h3>
<p>如果你要在主執行緒與 Worker 間傳送大量資料（例如：影像、音訊、浮點數陣列），建議使用 ArrayBuffer。</p>
<p>更進階一點，可以使用 Transferable Object 技術，把資料記憶體「搬移」過去，而不是複製（效能差超多）。</p>
<pre class="language-js"><code class="language-js">worker<span class="token punctuation">.</span><span class="token function">postMessage</span><span class="token punctuation">(</span>arrayBuffer<span class="token punctuation">,</span> <span class="token punctuation">[</span>arrayBuffer<span class="token punctuation">]</span><span class="token punctuation">)</span></code></pre>
<p>✅ 用 Transferable 會快非常多，因為不用複製記憶體！</p>
<h3>🤝 好東西一起分享，SharedArrayBuffer 共享記憶體</h3>
<blockquote>
<p>SharedArrayBuffer 讓你可以在多個執行緒（Worker）之間共享一塊記憶體區塊。</p>
</blockquote>
<p>這就像大家共用一塊白板，可以同時讀寫，不用一直 message 傳來傳去。</p>
<p>但小心：需要啟用 Cross-Origin Isolation（跨來源隔離），否則會報錯。</p>
<p>設定方式（Vite dev server）：</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// vite.config.ts</span>
<span class="token literal-property property">server</span><span class="token operator">:</span> <span class="token punctuation">{</span>
  <span class="token literal-property property">headers</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token string-property property">'Cross-Origin-Opener-Policy'</span><span class="token operator">:</span> <span class="token string">'same-origin'</span><span class="token punctuation">,</span>
    <span class="token string-property property">'Cross-Origin-Embedder-Policy'</span><span class="token operator">:</span> <span class="token string">'require-corp'</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h3>🛞 避免山道猴子追逐車禍：Atoms API</h3>
<p>前面提到的共享記憶體會帶來 競爭條件（Race Condition） 問題。</p>
<p>你可能需要一些「原子操作 (Atomic Operations)」確保資料一致，例如用 Atomics.add, Atomics.wait, Atomics.notify 這些 API。</p>
<p>簡單說：大家輪流寫，不要打架。</p>
<h3>🕹️ 實戰運作，加上 WebSocket 傳遞</h3>
<p>當你要處理遊戲、聊天系統、直播彈幕等等即時功能時，WebSocket + Worker 是夢幻組合：</p>
<p>主線程負責畫面和互動</p>
<p>Worker 處理邏輯與計算</p>
<p>WebSocket 傳遞訊息給伺服器／接收他人訊息</p>
<p>可以搭配 SharedWorker 共用同一條連線</p>
<p>最後附上一張 Claude AI 產生的圖
<img src="/images/posts/sharedArrayBuffer_webSocket_webAssembly.png" alt="sharedArrayBuffer with webSocket and webAssembly"></p>
<p>以上就是今天的神明介紹～
前端也能很兇，讓我們拿起工具開始請神上身，打造你的效能怪物吧 🧙‍♂️⚡</p>
<p>如果喜歡這篇，可以幫我分享給更多信徒（前端同好）🙏
讓更多人把神請回家^^</p>
<hr>
<p>與 小花(ChatGPT) 還有 Claude 共同編輯^^</p>

    ]]>
      </content>
    </entry>
  
</feed>