緣起
我是一個java開發者,幾乎使用了所有主流的部落格系統,包括靜態部落格和php系列,我在看java中有沒有同樣優秀的部落格平臺,我找到了 jpress 和 mblog。
開啟 jpress 的演示站點是這樣的:
於是我分別開啟了它官網的文件和視訊教程,發現文件好像一直沒有寫,教程下面講到《精通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
這個單詞,英文翻譯是 故事
,發音為 [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表情的?
有些開發者處理過應該知道 mysql
的 utf8
編碼的一個字元最多3個位元組,但是一個emoji表情為4個位元組,所以utf8不支援儲存emoji表情。但是utf8的超集utf8mb4一個字元最多能有4位元組,所以能支援emoji表情的儲存。但是我認為讓使用者去修改這個配置太繁瑣了,容易出錯,我們直接用程式處理吧,於是乎找到一個庫 emoji-java,它可以在emoji表情輸入進來的時候被解析為形如 :smile:
這樣的格式,我們在使用的時候再將它轉換回去就好了。
更多細節
開發中往往有無數的細節和程式碼片段,其實都是日常用的,這裡無法一一概述,如果你有疑問可以加入開發者討論群 1013565
討論,當然QQ群並非最好的交流方式,你樂意寫郵件也可以聯絡我 biezhi.me[AT]gmail.com
。
編寫文件
一個好的專案不一定實力多麼強,但是至少要有一個有力的 README
文件和簡單易懂的快速入門說明,這會讓你的專案在短時間內更受關注。我認為一個好的 README
文件可以是這樣:
標題
一句話描述,簡單易懂,說明用意
最好來一張高清無碼有逼格的大圖
特性
- 史上最強瑞文
- 打不死的小強
- balabala
使用/預覽圖
這裡可以根據你的專案型別來安排
開源協議
標註你的開源協議
聯絡方式
- 論壇:如果有的話
- 郵件:biezhi.me[AT]gmail.com
- QQ群:1013565
推廣專案
雖然花了點時間做出了這個東西,但是不知道反響如何於是我在如下幾個平臺釋出了這則訊息:
剛開始的時候應該是因為介面還算美觀,也收到不少開發者的青睞,v2ex和掘金,開發者頭條為它帶來了不少的流量,在釋出後的第二,第三天登上了github的 Trending
榜單,這時候收集到 500
左右的star;於是開始收到有人使用和反饋了,發現活躍度蠻高的,根據大家提出的意見出了簡單的視訊教程,修復了自己沒發現的一些bug。不過在這一週裡也是我打滿雞血的一週,今天專案在github收到了 1k
star。
也讓我對後面的開發更有動力,如果你覺得這個專案還不錯也可以 捐贈 我,該部落格系統面向所有使用者,開源免費。 也有些開發者想聽我談談如何開發這個系統的,於是寫下了本文,還望各位看官輕噴。
反饋
tale在短時間內已經有很多的反饋,我們使用github的issues進行記錄
聯合開發者一起貢獻,有不少開發者向 tale
發起了 PR
有意思的
感謝
非常感謝最近幫助我的小夥伴,感謝大家的反饋和 Pull Request
沒有你們也就沒有更好更優秀的部落格平臺。
我的資訊
順便附帶小尾巴,4年Java,帶過團隊,上海求職,有意者發郵件。