言雅 Elegant TW 開發日記 (I)

前幾天我的 side project —— 言雅 Elegant TW,開發版本 v0.2.0 正式公開程式碼了,順便來簡介一下這個專案緣起、現況、未來目標。

專案緣起

多年前架設 Online Judge 的時候,當時使用 SYZOJ 相關程式去建置,花了大費功夫把前端繁體翻譯跟後端裁判機串接起來,閒暇之餘有發現首頁的右上角寫著「Hitokoto (ヒトコト)」,中文叫做「一言」,隨機產生幾個句子,刷到幾句讓人會心一笑。

Hitokoto 一言 Logo

直到最近我 Discord 周遭朋友撰寫 Bot,收藏了很多自己收集的一些語錄(毒雞湯居多)。我也無意間想起「一言」專案,稍微查詢一下,繁體中文圈目前沒有人做這部分,再加上自己稍微有點時間(其實還是沒有),來寫 side project 的 API 專案,順手練習 Golang 跟 Clean Architecture 架構。

為何不直接使用「一言」專案的框架?根據他們文件敘述,v2 版本 Golang 正在實作,而且只會釋出過往版本的程式碼,並不會包含現行版本(如果過往版本有漏洞沒有修改,伺服器被攻擊的可能性也會越高),再加上「一言」語錄資料都是採用 JSON 格式,我認為大部分內容是可以用結構化資料庫去儲存。

一言開發時程表

一言 Open Source 政策

如果未來最後想要部署在 K8s 上,與其沿用別人的架構修改,不如自己設計直接相容雲原生架構,這樣就不會有這問題。

簡單來說,我有自己想實現的架構,種種原因之下,自己實作還是比較快。

名稱發想

2023/03/11 就開始在自己 Discord 群組徵求專案名稱,借助網友們的想像力。當時柯希跟我隨口一句「言之隨機,雅之名篇。」這句話剛好打中整個專案的核心,取短句的開頭,「言雅」這名字就誕生了!

英文名字相對來說比較簡單,就是「優雅」的英文 —— elegant。《SPY×FAMILY》當中入學考試的舍監,總是把「elegant」掛在嘴邊,代表這詞不難記憶,至於後面的 TW 我也覺得不用多做解釋,於是「Elegant TW」成為專案的英文名字。

《SPY×FAMILY》優雅舍監

建立初始語錄資料庫

語錄資料庫沒有從「一言」網站那裡參考,雖然他們是採用 AGPL 授權,但為了保留繁體中文這項特色,可以算是重新收集。動漫的部分皆採用官方翻譯或代理商的繁體中文(像《輝夜姬想讓人告白》動畫台詞部分,翻譯採用就會以「木棉花」為準。),也加入台灣影視劇的語錄,尤其近幾年台劇精彩程度相信大部分人都有目共睹,這種印象深刻的句子需要被保留下來。

初始語錄資料庫感謝 Niehyi、柯希、啃雞、皮皮Koying 的幫忙,靠眾人協助以及自己佛系收集,一個月內以「手動加入」方式累積 100 句。

專案現況

專案連結:https://elegant.tw
API 串接文件:https://docs.elegant.tw
GitHub Organization:https://github.com/elegant-tw

v0.2.0 為止,加入毒雞湯功能,可以設定某些類別的語錄預設不顯示,全部語錄有 100 句,其中正常語錄有 78 句,毒雞湯語錄有 22 句。

言雅 Elegant TW 前端 Demo 頁面

主機贊助 - CNTUG Infra Labs

CNTUG Logo

去年在 Ted 協助下認識雲原生台灣社群 CNTUG,今年以 Open Source 的名義與 CNTUG Infra Labs 開啟長期合作,在此感謝雲原生台灣社群支持專案。

COSCUP 2023 Kubernetes Community Day 台灣議程軌 🇹🇼 正在徵稿,到 2023/05/22 截止,詳請請上 COSCUP x KCD 議程敘述

這是個蠻大的問題,專案目前沒有 Logo。產品寫出來了但沒有 Logo 真的很奇怪吧!

專業的 Logo 設計要花錢,想要盡量以最少成本來做最高質感,目前請我親戚跟朋友做「無償」的構思設計(畢竟是無償,基本上不會去催案,就是佛系設計。),如果有想法也歡迎找我討論。

「設計」這件事我真的很不在行,這也牽扯到後續一些問題 —— 前端設計,這可以說是我耗時最多的部分。

未來規劃

專案啟動之後其實有不少事情要完成,但只有我一個人自己根本忙不過來,先把規劃藍圖打在這裡。

徵求長期貢獻者

這裡是想徵求長期貢獻者,前端或後端工程師都可以,這部分我細講兩個部分:

後端

後端使用 Golang + Clean Architecture 架構,理想上想要相容其他資料庫(E.g. MySQL, MariaDB 等),想要看看能不能朝 ORM 前進,未來加入使用者功能會比較輕鬆,如果你是新手想要靠專案來練習或是大師想要幫忙改善架構,歡迎直接 Email 詢問。

前端

前端對我來說是最惱人的部分,只有先建構 Next.js + Typescript,UI 框架使用 Chakra UI,目前只有語錄的顯示,但光搞一個 RWD 排版就花掉我 3 個工作天,未來想要加入使用者還有審核語錄的功能,又要花掉更多時間了 @@。

如果有心想要研究看看怎麼跟後端串接,歡迎直接 Email 詢問。

新增語錄功能 & 使用者功能

正如前面所述,現在方式是「手動新增」,也就是直接修改資料庫。正常流程應該要是「使用者投稿」→「審核人員處理」→「加入語錄資料庫」。

要有新增語錄功能,就必須要有使用者,為了使用者方便登入估計也會串上 OAuth,紀錄句子哪一位使用者認證,牽扯範圍廣泛,估計這實作完成也要跳大版本號碼。

App 開發

以 iOS 來說,主要是想玩 Sign in with Apple 的功能,App Store 可以上架小工具,需要付年費 99 美金。雖然自己負擔得起,但主要原因是如果沒有時間實作,花這筆錢也是浪費,至少等前面功能完成再來看看要不要上 App。

結論

這次有 CNTUG Infra Labs 計劃跟專案動機,終於有機會來實現,依照我現在時程大概只能緩慢更新,畢竟目前到收集的語錄還不算太多,以佛系做小眾宣傳形式推廣。

至於討論群組的部分,目前還在規劃中,之前很多討論都在我自己個人 Discord 群組進行,如果有要遷移到外部伺服器的打算,我第一時間會公告在網站上。

感謝各位看到這裡,喜歡的話幫我按下追蹤 RSS 訂閱!


言雅 Elegant TW 開發日記 (I)
https://blog.yangjerry.tw/2023/05/13/elegant-tw-i/
作者
Jerry Yang
發布於
2023年5月13日
許可協議