sk5s 自主學習Time

110 學年度自主學習

JavaScript 手機 App 自學之路:學習記錄與心得

110 學年度自主學習 新竹高中 柯亮宇

專案網頁:🌐 https://portfolio.sk5s.cyou/self-study/

簡述

這篇報告是關於我自學Javascript並開發手機App,計畫目標是從0開始創造一款日期倒數應用程式,過程中除了學習到程式語言,也學到了設計軟體的操作,經過一年多的研究,最後成功的做出了5個應用程式。

⬆️ 自製 Android 手機 App:Countdate,已上架於 Play StoreGithub

Download Countdate

⬆️ 自製 Android 手機 App:alsoweather,已上架於 Play StoreGithub

目次

計畫說明

⬆️ 計畫執行說明圖

報告內容

這篇報告是關於我如何自學使用 Javascript、Ionic framework 和 capacitorjs 開發手機 App 的過程。因為現在開發手機 App 的成本降低,且想要製作出一款真正適合自己的 App,所以開始了這個自主學習計畫,共長達 30 週,目標是創造一款實用的手機 App,並且透過實作來了解手機應用程式的開發流程,從基本的 Javascript 語法開始,再學習 React、capacitorjs,最後使用 Ionic framework 完成本次計畫的重點:製作日期倒數 App。

計畫執行

雖然過程中經常遇到問題和錯誤,需要耗費很多時間和精力來解決,而且有時候沒有辦法如預期一樣呈現作品,但我相信每一次學習和實踐都是有價值的。不管是尋找學習資源,還是計劃撰寫和實行,這個計畫讓我更深入了解並熟悉手機應用程式開發的基礎知識,我希望未來有機會可以再創造一些更加實用的手機應用程式。

子計畫及預期成果

因為自主學習課程一個學期只有 13 堂,整個計畫無法完成,所以將大計畫分為三大部分。

上學期 下學期 暑假
名稱 Vanilla JavaScript 練習 網頁技術及網頁應用程式實作 手機應用程式實作:
Countdate
預期成果 Javascript 30 練習成果網頁 自製網頁應用程式 Countdate

執行過程

大綱

    1. 學習內容決定

    國中時我閱讀圖書館中關於網頁設計的書,學習並且實際練習了 HTML5 網頁的基礎使用,並且對網頁相關技術開始進行更深入的研究。後來因為自學 RWD 網頁設計,也知道了 Javascript 這個程式語言,慢慢的我發現 Javascript 的應用不只侷限於網頁前端,有 Node.js 的幫忙就可以使用 Javascript 來寫出後端程式,也發現了 Javascript 的多元應用以及其豐富的網路資源,所以決定要學習 Javascript。

    把 Javascript 和後來學的 Python 做一下比較:

    特性 Javascript Python
    類型 動態型別(可以用 Typescript 來添加型別系統) 動態型別
    設計目的 網頁開發 通用
    語言風格 函數式 物件導向
    常用領域 網頁開發、前端開發 資料科學、機器學習
    開發難易度 容易 容易
    運行環境 網頁瀏覽器、Node.js、Deno 通用
    跨平台支援
    主要缺點 執行效率目前較低 小規模開發時比較繁瑣
    受歡迎程度 高(Stackoverflow 最受歡迎科技調查排名第一)
    2021 survey

    2. 學習計畫撰寫

    計畫撰寫時進度的安排主要是依據以前的經驗,去衡量一次課程可以完成多少內容,再依照主題來分類,使用漸進的進度來學習這個技術。

    3. 尋找學習資源

    因為 Javascript 是現在很受歡迎的程式語言之一,所以除了看實體書之外,我也使用搜尋引擎來搜尋 Javascript 教學影片,以及教學文章,後來就有找到像是 Javascript 30 這樣的課程,所以就決定要跟著此課程學習。為了要完成一個 App ,LOGO 的部份也需要自行製作,所以我也學習了 Canva 這個軟體,來做出一些 Icon 設計。

    學習成果

    實作成果

    Github

    手機 App

    Countdate alsoweather
    主要功用說明 需要段考學測倒數?用 Countdate 就可以簡單的計算剩下幾天。 有時候想要馬上知道當下某地的天氣狀況,這時就可以用 Alsoweather ,取用氣象局的氣象預報資料,以簡易的方式呈現,可以快速取得有用的資料。
    下載連結 Play StoreGithub Play StoreGithub
    詳細使用教學 https://s.sk5s.cyou/usj https://s.sk5s.cyou/gmm
    主要使用技術 Ionic React Vanilla Javascript + HTML + Bulma + Capacitorjs

    網頁應用程式練習作品

    Duodan Web Parking Go Web Chineseoo Web
    主要功用說明 使用者可以快速的搜尋到不同的英文字典網站,因為不同網站的字詞解釋有時不同,有時這個比較易懂,有時那個比較清楚等等,因此透過 Duodan 就不用為了要看到不同資訊而在不同網站間跳來跳去。 有時候出去大賣場或者是出去玩,如果開車或騎車去就必須要停車,但有時候會忘記車停在哪裡,透過儲存一張車子的照片,如果真的忘記了可以有比較多的線索可以回想。 日常生活中,常常會遇到不會的中文英文字詞,如果把這些字詞隨手記下,不久就可以累積很多單字,這時複習字的寫法,成語的意思,就會更有效果。
    網頁連結 https://duodan.surge.sh/ https://parking-go.surge.sh/ https://chineseoo.surge.sh/
    詳細使用教學 https://s.sk5s.cyou/bqg https://s.sk5s.cyou/mlt https://s.sk5s.cyou/bbo
    主要使用技術 Vanilla Javascript + HTML + Bootstrap + Lottie React + Bootstrap Svelte + Bootstrap

    Vanilla Javascript 練習

    https://sk5s.cyou/JavaScript30/

    主題 線上展示
    01 - JavaScript Drum Kit https://sk5s.cyou/JavaScript30/01-JavaScript-Drum-Kit/
    02 - JS and CSS Clock https://sk5s.cyou/JavaScript30/02-JS-and-CSS-Clock/
    03 - CSS Variables https://sk5s.cyou/JavaScript30/03-CSS-Variables/
    04 - Array Cardio Day 1 https://sk5s.cyou/JavaScript30/04-Array-Cardio-Day-1/
    05 - Flex Panel Gallery https://sk5s.cyou/JavaScript30/05-Flex-Panel-Gallery/
    06 - Type Ahead https://sk5s.cyou/JavaScript30/06-Type-Ahead/
    07 - Array Cardio Day 2 https://sk5s.cyou/JavaScript30/07-Array-Cardio-Day-2/
    08 - Fun with HTML5 Canvas https://sk5s.cyou/JavaScript30/08-Fun-with-HTML5-Canvas/

    成果展示影片

    🔗 https://portfolio.sk5s.cyou/self-study/

    心得

    Vanilla JavaScript 練習

    剛開始想要做這個主題,是因為 Javascript 可以使用的範圍非常的廣,凡是網頁,伺服器,前後端的應用,全部都有 Javascript 的蹤影,可以見得 Javascript 應用之廣泛。以前實際操作練習的過程中,會發現有時候發生問題並花最多的時間的部分並不是程式邏輯,而是使用的套件有一些問題,或者是前端美化上的問題,所以這一學期就決定只專注於 Vanilla Javascript 的練習,所以不需要去擔心 CSS 或 framework,單除的學習 Javascript,而且學習 Vanilla Javascript 能讓我更了解一些原始的 API 並實際操作。 本學期根據網路課程「Javascript 30」共完成了八個 Javascript 主題練習。 經過了這一次的 Javascript 基礎課程,我學到了一些原始的 Javascript 操作方法,以後如果是要建立一些基本的網站,就沒有一定要使用 jQuery、React 或 Svelte 等工具,可以使網頁得到更快的執行速度。之後也可以運用 Javascript 來製作一些小工具,或者是進行人工智慧領域的開發。

    網頁技術及網頁應用程式實作

    剛開始想要做這個主題,是因為在圖書館有看到相關書籍,而且在日常生活中,幾乎每天都會用到網頁應用程式,像是 Google 的服務或是 Office ,因為網站方便免安裝的特性,受很多使用者歡迎,現在有很多正在發展中的相關項目,甚至已經有很多網頁瀏覽器還加進了 PWA 的功能,使網頁應用可以像一般的電腦、手機應用程式一樣,可以安裝或離線使用。我覺得自己如果可以製作出自製的網頁應用,對網頁的了解一定會增加不少,所以就決定要用「網頁應用程式」作為主題。 這次的自主學習成功做出了一個簡易的天氣應用程式,還有 Javascript 短連結(三個版本),停車快找網頁應用,及簡易英文單字快速搜尋網頁應用。在製作的過程中,會發現完成一個網頁有很多我不知道的細節,這時候就要更深入的研究其他主題,才有辦法完成整個專案,雖然這次的作品和原先計劃的不太一樣,不過在過程中有成功做出一些練習的網頁應用,也算是不錯的嘗試,像是天氣網頁、單字本網頁、壓縮照片的練習,就不在原本的計畫內。

    附錄一:每週計畫、學習紀錄與心得

    子計畫一:Vanilla JavaScript 練習

    計畫名稱 Vanilla JavaScript 練習
    相關學科/領域 科技領域
    對應大學學群 資訊學群
    內容說明 學習主題是 Vanilla JavaScript 的練習,跟著網路上的 30 Day Vanilla JS Challenge (https://s.sk5s.cyou/js30) 做練習,它是由加拿大的全端工程師Wes Bos建立的一系列課程,主旨在不使用任何外部框架與函式庫來完成30個純JavaScript的練習,本次預計做前8個。
    預期成果 8個 30 Day Vanilla JS Challenge 中的專案網站,及製作紀錄。
    週次 自學內容 學習心得
    2 - 班上學習計劃填寫 計畫修正,於第一週計畫將開始時,先進行計畫可行性評估,修改計畫至可以執行。
    3 01 - JavaScript Drum Kit 這周完成了第一堂課、第二堂課和第三堂課。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-01/
    4 02 - JS and CSS Clock 今日完成了第四堂課,因為第四堂課的內容多出了一些新的東西,所以用了較多的時間。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-02/
    5 03 - CSS Variables 今日完成第五堂課。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-03/
    6 01~03改進及緩衝、心得撰寫 前三個練習作業是鼓組、指針時鐘、Javascript 操縱 css 變數,雖然比較簡單,但都是很重要的 Javascript 功能運用。這些看似簡單的內容其實也出現不少問題,不過主要是 CSS 問題。
    8 04 - Array Cardio Day 1、07 - Array Cardio Day 2 今日完成第七堂課和第八堂課。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-04/
    10 05 - Flex Panel Gallery 今日完成第六堂課。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-05/
    11 06 - Type Ahead Svelte練習,雖然和這次的主題好像沒什麼關係,不過也能練習Javascript。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-06/
    13 彈性調整、心得撰寫 雖然按照原來的課程,第四課和第七課的練習在觀看成果時是使用者需要手動打開瀏覽器 console 的設計,但是為了能更簡易的關看輸出內容,後來花了一些時間找到了可以直接把輸出內容顯示在畫面的方法。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-07/
    14 08 - Fun with HTML5 Canvas 製作所有練習的主頁選單,插入介紹影片。
    【作品連結網址】
    https://self-study.sk5s.cyou/vanilla-js/day-08/
    15 04~08改進及緩衝、心得撰寫 為了能讓使用者可以快速的在不同的課次練習間切換,所以本週製作一個統一的導覽列。
    17 圖文處理、心得撰寫 製作介紹用圖文。
    20 - 期末考週 簡述填寫,因為下星期為學校期末考,所以暫停一週,就只執行心得填寫。

    子計畫二:網頁技術及網頁應用程式實作

    計畫名稱 網頁技術及網頁應用程式實作
    相關學科/領域 科技領域
    對應大學學群 資訊學群
    內容說明 用bulma、bootstrap css,JavaScript 等來製作 RWD 網頁應用程式,使用 capacitor 來製作手機 App,完成一個完整的開源專案。
    預期成果 製作出天氣網頁應用程式,Android 的程式安裝檔,應用程式介紹、使用教學網站,並且讓大家可以下載安裝此軟體。
    週次 自學內容 學習心得
    3 建立開發環境(vscode、nodejs、android studio、linux、hugo、git),網路服務帳號註冊,熟悉編輯器及CLI操作,測試電腦開發環境,建立Hugo Site 今天因為是第一天,所以不確定自主學習上課要做什麼,所以我就沒有帶電腦到學校,第一天的進度改成閱讀有關於UI/UX的書,還有看Hugo的教學影片,希望下一次可以照著預定好的進度繼續執行,不要拖延。
    【作品連結網址】
    https://self-study.sk5s.cyou/web/day-001/
    4 html、css、javascript練習,紀錄於Hugo,opensource研究,capacitor、electron、網頁瀏覽器附加元件(chrome)、Bookmarklets製作練習 今天要用freecodecamp練習,它是一個免費的平台,上面有很多教學和範例,如果完成一整個課程,應該可以獲得證書之類的證明文件,所以我選擇用它來練習。
    【作品連結網址】
    https://self-study.sk5s.cyou/web/day-002/
    5 javascript、nodejs、npm使用練習,試寫簡單網站,紀錄於Hugo,github pages、gitlab pages、heroku、vercel 架設靜態網站並綁定已購買之網域 本次學習建立docsify的網站,雖然已比其他方法好上手,但是也還是要花上不少時間,以後安排計畫要再多預留時間。
    【作品連結網址】
    https://self-study.sk5s.cyou/web/day-003/
    6 做出英文單字搜尋網頁應用程式(操作介面:中、英),決定主題色(簡易),Logo繪製(完整),測試程式並上傳至 github pages repository 製作一個簡單的天氣app,雖然功能不多,但是光是如此也已經花了不少時間,不過最後還是把成品做出來了,並且將網站上傳github。
    【作品連結網址】
    https://git.io/alsoweather
    8 單字搜尋程式製作,增加應用程式功能及問題修正,UI/UX、PWA加強 因為之前製作天氣app時,有一些非同步程式上的問題,所以這一節課改進行promise、async、await和非同步的文章閱讀,雖然還是沒有完全了解,但是至少有比較清楚。
    【作品連結網址】
    https://self-study.sk5s.cyou/web/day-005/
    10 單字搜尋程式製作,增加應用程式功能及問題修正,將製作好的網頁應用程式改做成capacitor app、electron app、網頁瀏覽器附加元件(chrome),製作Bookmarklets,上傳github release 有一些功能看似很容易可以完成,在實際操作後會發現比想像中困難。不過一步步,慢慢找到方向,也是會越來越好的。
    【作品連結網址】
    https://sk5s.cyou/alsoweather/
    11 單字搜尋程式問題修正,將製作好的網頁應用程式改做成capacitor app、electron app、網頁瀏覽器附加元件(chrome),製作Bookmarklets,上傳github release 今天進行英文搜尋應用製作,最後做出了一個簡易的測試,證明此方法可行,之後有時間,可以考慮重新再用比較好維護的javascript框架來重寫。
    【作品連結網址】
    https://s.sk5s.cyou/duodan
    12 建立英文單字搜尋應用程式各平台的使用教學網頁(簡易,語言:繁中)或使用教學影片,更新Hugo Site,上傳github pages repository 用javascript製作短連結,運用找不到網站頁面時會導向404頁面的特性,用簡單的方法來縮短連結,之後還要再測試相容性。
    【作品連結網址】
    https://git.io/404shortjs
    13 應用程式使用教學文件更新,改作現有開源android選字搜尋軟體 因為今天是第二次期中考(上午考試後的自主學習),因為明天要考試,所以這一次改成段考複習,這周原本的進度是使用文件撰寫,因不影響後面的計畫,所以就先跳過這個部分。
    15 建立fdroid repository,上傳gitlab pages repository 因為alsoweather持續發現問題,因此再次進行檢視,而且這次還有製作404shortjs,雖然不在計畫內,但是因為在其他專案可以用到,所以先製作。
    【作品連結網址】
    https://git.io/404shortjs
    16 fdroid、app、hugo、capacitor、electron、github、gitlab之問題解決,更新使用文件網站,建立應用程式介紹主要功能(簡易動畫) 練習翻譯網路上的開源應用程式或專案。
    18 fdroid、app、hugo、capacitor、electron、github、gitlab之問題解決,更新使用文件網站 製作快找車app,因為功能較簡單,所以可以較快完成,並且這次試著使用react框架,使專案更容易維護。
    【作品連結網址】
    https://s.sk5s.cyou/parking-go
    19 測試所有製作的軟體、網頁、軟體庫,opensource研究 因為假日要考APCS,而APCS不能用javascript考試,所以這次的自主學習改成python學習。