#2020 鐵人賽主題「以 Kotlin 為主要語言建構基本的 Online Judge 系統」Day 30:結語與心得

灆洢 2020-09-30 09:35:51

Day 30:結語與心得

漫長的九月終於過去了,終於成功地將這三十天的專案和文章都寫完了!明天正好就是連假,可以好好休息了。

首先要在這裡跟大家提到的是,如果在看前面天數的文章中,程式碼的部分有任何不清楚的地方,我已經將這次鐵人賽系列中處理的三個專案都開源出來了,專案網址分別在底下的地方:

關於如何執行這些專案的部分,在伺服器上沒有 intelliJ IDEA 的環境下,可以嘗試在專案根目錄利用 gradlew run 來執行專案,當然前提是伺服器上要有可以執行 Kotlin 的環境就是了。

對於專案之後還可以繼續往哪些方向改進,這裡提供了一些方向讓大家參考:

  1. PostgreSQL 資料庫目前都是使用最高權限的管理員去進行資料操作,這其實有點危險,盡量還是為每個專案去分別生一個限制操作的管理員,讓這些資料操作的權限能夠被侷限住,避免專案會動到資料庫中不該動到的部分。
  2. 我們在製作網頁專案的時候,常常會讓資料管理系統所使用的 RESTful API 都要隨之更動其回傳的資料,有點不是那麼便利。這裡其實有個技術叫做 GraphQL,它是一個可以讓前端網頁對後端資料做 Query 的技術,這樣就不用一直不停去調整 RESTful API 要回傳的內容了。
  3. 製作程式專案的時候可以試著導入像是 Git 之類的版本控制系統,這樣就不怕改壞專案,在改壞的時候就可以回朔專案的狀態。
  4. 這 30 天所完成的專案,其結構並沒有設計得很好,可以根據你的需求再重新設計專案,讓專案的結構可以更好維護。
  5. 目前網頁專案在操作成功的時候不會有提示,試著將 component 結合 Redux 去撰寫看看跨頁的成功提示。
  6. 在伺服器上試著建立起真正安全的 HTTPS 連線,可以利用像是 Let's Encrypt 這樣的服務去設定。
  7. 如果你有學過其他的語言的話,也可以嘗試改成其他語言的版本看看,理論上會了這些觀念後,應該不管用哪個語言來實作都可以做得出來了。
  8. 在資料管理系統的部分,我們使用了 Exposed 這個套件中的 SQL DSL 的形式去實作,它其實還有另外一個可以使用的方式,叫做 DAO(Data Access Object),可以嘗試把它將專案中用到 Exposed 的部分改寫進去看看。
  9. 讓審核程式可以支援更多的程式語言批改作業。
  10. 可以試著增加其他 Online Judge 有的功能,像是題目討論、比賽等等之類的功能。
  11. 其他你想做的事情都可以嘗試做進去看看。

結語與心得

最後就是要來寫一下這 30 天鐵人賽挑戰下來的心得了。完整地製作一份簡單的 Online Judge 一直是我很想嘗試的內容,雖然大學的時候曾經嘗試設計過其架構,然後碩士班的時候有幫忙實作了第二版的批改娘,但一直以來就是沒有很完整地從頭開始實作這一整個系統。

今年參加 COSCUP 完後,腦子裡突然又開始想要做做看這個專案,但是一直下定不了決心。就在這時,我剛好開始嘗試使用 Kotlin 語言,又剛好開始嘗試玩玩 Ktor 這個套件,又剛好開始嘗試玩玩官網上 Kotlin-React 的教學,又剛好這個鐵人賽要開賽,所以我就將這些東西結合起來成為一個主題,就帶著這個主題跑來參賽了。

開賽前其實專案的部分我什麼都沒寫,在這 30 天裡面,其實我在撰寫專案的過程中碰到了很多問題,每次都讓我蠻擔心專案會寫不下去、文章會沒法寫出來。最可怕的幾次大概就是在不知道該用 Ktor 的哪種驗證機制的部分、不知道該怎麼讓 Docker 執行程式的部分,以及前後端對接後卻發現一定得要使用 HTTPS 連線的問題等等,最後幸好都有找到資料並克服了這些問題,真是萬幸。下次如果還有機會參賽的話,我會想要至少先把專案做完,再來參加 30 天鐵人賽去撰寫文章,這種邊寫專案邊寫文章的過程,還是不要再體驗第二次比較好,太可怕了。

在這 30 天的結尾我想要感謝一些人。首先是要感謝「Kotlin 鐵人陣」團隊,雖然我因為開始得早,沒有與他們團隊一起開始比賽,但是他們還是讓我在他們的 Line 群裡面跟大家一起交流、一起寫文章,在裡面真的很開心,也成為了我能夠一直將這系列寫下去的動力之一。再來要感謝我的同事們,雖然常常說我每天經歷趕稿地獄根本是自作自受,但是還是很鼓勵我繼續寫下去。第三,要感謝我的 Facebook 和 Plurk 好友群,常常會按讚或是在底下留言跟我交流,讓我能夠了解到我不足的地方。最後要感謝我的家人,必須要忍受我平日和假日得拼命在家裡趕稿,導致我不能跟著大家一起出門去吃飯。

這三十天下來我在寫稿的期間都是聽著森口博子的「鳥籠の少年」和新版的「君を見つめて -The time I’m seeing you-」在寫的,真的是兩首很棒的音樂,陪伴我度過煎熬的鐵人賽寫稿時光,在這裡順便推薦這兩首歌給大家。最後宣傳一下我的個人網站–翼世界夢想領域,這個系列預計應該會在我的網站和 Kotlin.tips 上轉載,期待之後還能與大家有更多的交流,感謝大家!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料