我如何在一週開發出Tale應用獲得1k star

王爵nice發表於2019-03-04

緣起

我是一個java開發者,幾乎使用了所有主流的部落格系統,包括靜態部落格和php系列,我在看java中有沒有同樣優秀的部落格平臺,我找到了 jpressmblog

開啟 jpress 的演示站點是這樣的:

我如何在一週開發出Tale應用獲得1k star
jrepssdemo

於是我分別開啟了它官網的文件和視訊教程,發現文件好像一直沒有寫,教程下面講到《精通JFinal》,omg的。不過看起來功能確實還不錯,但是我沒有打算使用的心情了。

之前在某qq群有別人推薦mblog,我看了一下它的介紹是這樣的:

JDK8
資料庫MySQL
SSH (Spring、SpringMVC、Hibernate)
安全許可權 Shiro
搜尋工具 Lucene
快取 Ehcache
檢視模板 Velocity
其它 Jsoup、fastjson、GraphicsMagick
jQuery、Seajs
Bootstrap 前端框架
UEditor/Markdown編輯器
font-wesome 字型/圖示

可以看到用到了很多企業級開發的技術,搜尋引擎、許可權管理、竟然還有 hibernate。。

我如何在一週開發出Tale應用獲得1k star

顯然這不是我想要的,部署起來的成本太高了。


定位和思考

於是我也自己開發一個部落格系統,我認為每個堅持寫部落格的人都是有故事有分享精神的,專案起名簡單易記住最好,於是找到 tale 這個單詞,英文翻譯是 故事,發音為 [teɪl],用中文讀 塌了 也蠻有趣的,就選它了。

我對個人部落格的想法是這樣的,目前來看它應該是單使用者的,我見過寫部落格文章最多的也就 1000 篇左右,於是 mysql 的 like 完全可以做到查詢搜尋,不用搜尋引擎(當然分詞搜尋另當別論,可以以外掛方式出現);它應該釋出簡單,體積小;它的設計簡潔,易維護;它的UI美觀,顏值高;它的速度很快,高效能。


技術選型

根據我上面所說的開發這樣一個部落格系統,如果還想在短期內完成它,選擇 SSM, SSH 這種企業級框架肯定是有些臃腫了,不是說它做不了,你要用生成器什麼的也可以,但它就是企業級架構,Spring3x 和 Spring4x 都夠一些人折騰了。是 JFinal 嗎?這看起來是個不錯的選擇,社群支援度也很高,但部署的方式不太優雅,還是要用tomcat的方式,我想像 SpringBoot 那樣釋出一個 jar 包執行一行 java -jar tale-1.0.jar 就可以跑起來的,我決定用自己在15年發起的 blade 作為web框架,具體的可以看 這裡 總之它能解決我遇到的那些問題,又是我熟悉的,也因為是自己研發的,想讓它走的更遠些。

後臺編輯器選擇了github上修改自 typecho 的後臺編輯器,也許並不是最酷的,我非專業前端,目前來看夠用,我們可以以後再優化它,資料庫選擇了mysql,tale 是帶後臺的部落格系統,當然我也考慮過用java的一款本地資料庫 mapdb,這樣開發者就不用建立資料庫了,但資料備份是個問題,以後再深究這個。

  • mvc框架:blade
  • 資料庫:mysql
  • 後臺模板:bootstrap
  • 預設主題模板:pingshu
  • 模板引擎:jetbrick template

其實技術也就是我們日常開發的那些技術,只不過看你如何用好它了。


開發細節

markdown如何儲存和解析的?

我將markdown的原始碼儲存在資料庫中,使用了 commonmark 這個庫進行解析,在前臺展示的時候將markdown解析為html即可。

你是如何支援emoji表情的?

有些開發者處理過應該知道 mysqlutf8 編碼的一個字元最多3個位元組,但是一個emoji表情為4個位元組,所以utf8不支援儲存emoji表情。但是utf8的超集utf8mb4一個字元最多能有4位元組,所以能支援emoji表情的儲存。但是我認為讓使用者去修改這個配置太繁瑣了,容易出錯,我們直接用程式處理吧,於是乎找到一個庫 emoji-java,它可以在emoji表情輸入進來的時候被解析為形如 :smile: 這樣的格式,我們在使用的時候再將它轉換回去就好了。

更多細節

開發中往往有無數的細節和程式碼片段,其實都是日常用的,這裡無法一一概述,如果你有疑問可以加入開發者討論群 1013565 討論,當然QQ群並非最好的交流方式,你樂意寫郵件也可以聯絡我 biezhi.me[AT]gmail.com


編寫文件

一個好的專案不一定實力多麼強,但是至少要有一個有力的 README 文件和簡單易懂的快速入門說明,這會讓你的專案在短時間內更受關注。我認為一個好的 README 文件可以是這樣:

標題

一句話描述,簡單易懂,說明用意

我如何在一週開發出Tale應用獲得1k star
fbi-warning.jpg

最好來一張高清無碼有逼格的大圖

特性

  • 史上最強瑞文
  • 打不死的小強
  • balabala

使用/預覽圖

這裡可以根據你的專案型別來安排

開源協議

標註你的開源協議

Apache2

聯絡方式

  • 論壇:如果有的話
  • 郵件:biezhi.me[AT]gmail.com
  • QQ群:1013565

推廣專案

雖然花了點時間做出了這個東西,但是不知道反響如何於是我在如下幾個平臺釋出了這則訊息:

  • v2ex:創意工作者的社群
  • v2mm:看起來也是個不錯的交流社群
  • 掘金:一個只有高手分享的社群
  • 開發者頭條:程式設計師分享平臺

剛開始的時候應該是因為介面還算美觀,也收到不少開發者的青睞,v2ex和掘金,開發者頭條為它帶來了不少的流量,在釋出後的第二,第三天登上了github的 Trending 榜單,這時候收集到 500 左右的star;於是開始收到有人使用和反饋了,發現活躍度蠻高的,根據大家提出的意見出了簡單的視訊教程,修復了自己沒發現的一些bug。不過在這一週裡也是我打滿雞血的一週,今天專案在github收到了 1k star。

我如何在一週開發出Tale應用獲得1k star
star

也讓我對後面的開發更有動力,如果你覺得這個專案還不錯也可以 捐贈 我,該部落格系統面向所有使用者,開源免費。 也有些開發者想聽我談談如何開發這個系統的,於是寫下了本文,還望各位看官輕噴。


反饋

tale在短時間內已經有很多的反饋,我們使用github的issues進行記錄

我如何在一週開發出Tale應用獲得1k star
ar3.png

聯合開發者一起貢獻,有不少開發者向 tale 發起了 PR

我如何在一週開發出Tale應用獲得1k star
ar4.png

有意思的

我如何在一週開發出Tale應用獲得1k star
ar5.png

我如何在一週開發出Tale應用獲得1k star
make.jpg


感謝

非常感謝最近幫助我的小夥伴,感謝大家的反饋和 Pull Request 沒有你們也就沒有更好更優秀的部落格平臺。

我的資訊

順便附帶小尾巴,4年Java,帶過團隊,上海求職,有意者發郵件。

相關文章