zettelkasten card and blog static website generator

時隔好幾年,終於又開始寫blog了,這篇主要是初步記錄自己寫了一個zettelkastenemacs org mode的部落格靜態網站生成工具。

前言

最近成爲有閒之人,花了一段時間,好好的回顧自己的過往,也回味了自己好久以前寫的部落格(用github page部署的),從下面這張圖,可以看到內容基本上已經六年多以上沒更新了~

仔細想想以前剛出社會的時候,都有不少的動力去追新知和寫部落格! 這讓我不禁思考這幾年是什麼讓我停滯撰寫部落格這麼久呢? 這幾年發生了好多事情,我不會說是因爲工作佔據了大多時間跟下班好累的關係(其實似乎也是主因?XD) 好啦,認真講確實工作的確佔了不小因素,想想一天通勤加上班時間,你還剩下多少時間可以用來做自己的事情? 不過你大概也會聽到有些人會說,只要你想,都有辦法擠出時間來做的,我不否認這個說法,只是你的人生不會只應付工作而已,像是有些人還要處理家務事、人際關係有的沒的,家家有本難唸的經,或是像是想著下間公司要去哪裡? 該準備什麼能力,當個職場渣男渣女,總歸一句,大概是心累了吧?

總之呢最近閒暇後,決定好好聆聽自己的聲音,暫時撇除追求這個職場給予我們的框架,不再因爲各種因素把我以前各種天馬星空想做的todo list繼續改成pending,然後就這樣默默一直pending下去,就像這次打造自己的static website generator 這件事情一樣。 仔細一看我默默pending了一大堆事項,都不知道要花多少時間把他們消耗掉,雖然事情本來就有輕重緩急,人的時間本來就有限,無法什麼事情都做,所以必須有所取捨。

Everything is a trade off

但是你捨棄的事物是對的嗎?? 最近不禁開始思考這類事情。

還有同時也把好多擺放已久線上課程消耗掉80堂了,其實有好多概念都在我工作中踩過的地雷學到了,如果當初我是先看了課程或許就不用花時間踩地雷了?另外還有看課外讀物(這其實一直都有固定一個月看一本,只是想看的書一直增加,消耗不完)~

補充一下,其實會想寫這篇部落格,部分原因也有因爲看到以前寫的文章github page with travis ci,都差點忘記自己一直想要打造自己static website generator而不是用別人寫好的。 可能有些人會覺得,幹嘛自討苦吃,用現成的套模板不就好了?大不了改他的主題,這樣就有自己的風格,或許是這樣吧,不過看你追求的是什麼,若是單純目的取向,你就是產生靜態部落格而已,那就這麼做是最簡單暴力,對於我來講,這是個體驗,一個打造自己的工具滿足需求的體驗。就像玩遊戲一樣,有些人喜歡看攻略快速通關遊戲,有些人喜歡不依賴攻略自己慢慢破,一樣是玩遊戲,每個人想要的體驗就是不一樣。

講到遊戲,最近把塵封已久買了沒玩的遊戲拿出來玩(這也是被我pending了好久的東西),目前剛破完女神異聞錄5(P5S)當初會買他主要就因爲遊戲UI看起來超潮!!然後買了就放著了。。沒有然後,我的遊戲似乎就默默變成蒐集遊戲而不是玩遊戲。。 總之呢,關於劇情其中對於善吉覺醒的片段滿有感觸的,因爲社會和權力規則下,對於很多事情不得不選擇妥協!很多事情不是不想做而是不能做,但是真的只能這樣嗎? 你是不是因爲外在環境而把自己真實內心的聲音塵封起來!

以下是youtube找到的遊戲覺醒片段,不想被雷的就不要點去看,十分推薦去買來玩一下。 https://youtu.be/ARSlQP8dHCU?si=3LjMa3PBPIrExhMu&t=1099

整個遊戲玩到覺醒這邊,整個超有fu,加上音樂真的配的很好! 雖然劇情就是個王道遊戲沒有很神,通篇我覺得大概就是圍繞在「反抗」、「追求自由」,但是人物刻畫加上音樂,就是莫名有個帶入感,大概真的是天下第一無雙系列的遊戲了(其實也沒有無雙那樣割草,如果沒刻意農的話)。

總之呢,我打算開始重新拾回撰寫的動力!! 首先就從這個工具開始吧。

用到的技術簡介

來講講技術的選擇,因爲現在我的筆記都是仰賴於 emacs org mode 跟 emacs org roam,之前的部落格都是用 markdown 語法其實系統差異有點大,所以我必須考量兼容問題,其實我有考慮過乾脆舊的文章,就不理他了,就放在那邊,但是後來想想畢竟那也是曾經的努力跟過往的點點滴滴,還是一起把他們挪過來好了。

兼容的做法有

  1. 把舊的 markdown 文章轉換格式到 org-roam 的形式

  2. 是我的這次要寫的工具同時支持org mode跟markdown mode

經過一番考量,畢竟我以前用到 markdown 額外插件,要轉換到org mode會遇到很多鳥事,所以我打算同時支持兩個模式。

爲了這個需求,所以打算主軸是圍繞於 https://unifiedjs.com/ 這個套件,大概現今有名的 markdown static website generator 都是基於這套,所以要打造支持markdown的並不難,生態系太完整了~ 接著就是要來找支援 parse org mode 的套件,畢竟要自己寫 org mode parser 功夫太大,經過各種比較,我決定用 https://github.com/rasendubi/uniorg 雖然有一些小問題,但是可以自己擴充功能所以倒是還好,最後主要的 framework 就是選擇了 https://nextjs.org/ ,畢竟 SSR、SSG大概next.js算是支援數一數二好的吧。

部署就用github action了,以前是用travis ci(我最近登入才發現太久沒用帳號被砍了 lol),畢竟7年前還沒有github action,現在有內建的就直接用~

設計考量跟實作過程

整個網站設計寫完加部署大概兩個禮拜吧,其實主要都花在設計頁面到底要長怎樣,畢竟以前工作都是拿到設計好的,直接照刻其實並沒有很難,這次光是想 wireframe 跟 內容大概要長怎樣就超過一個禮拜的時間,找靈感的部分花很久! 下面是殘缺的wireframe XD 比較像是我腦力激盪的draft吧,跟一些靈感記錄的地方!

其實整個網站樣貌並不是一氣呵成,有幾個地方,是實作下去後,才突然來的靈感,有的則是看了一些技術blog意外有些元素想要試試看,隨著時間慢慢迭代來的。 這次的部落格有些文章並不是blog性質,而是偏向筆記性質,就像是下面這張左邊沒有日期,他就只是個筆記,右邊的就是以前的部落格文章有日期,另外以前寫blog都沒有習慣幫他加封面圖,所以就幫這些文章加上一個統一的圖~

還有就是這次有加入雙向筆記軟體(現今有名的大概是 https://obsidian.md/https://logseq.com/ )的特性,會顯示有backlinks,像下面這張圖一樣

另外有時候會有連結點下去是 404 not found 的狀況,就是因爲不是每個筆記我想公開,畢竟有些內容太私人~ 就像是我的讀書心得不是每一個都開放的 https://blog.jingkindom.com/blog?tag=book

關於技術的坑,倒是沒遇到啥特別的,畢竟 next.js 也夠成熟了內建的image、font、seo的部分都算好用,主要大概就是要兼容 org-roam 跟 makrdown 文章需要做額外的功能撰寫,還有必須要融合我現在使用 emacs 的習慣,所以算是高度客製化的工具。 唯一大概就是 next.js 的 cache handler 。。。 有被搞到,他在 npm run dev mode ,每次在新的route都會被清掉,這邊花了不少時間在看問題出在哪,因爲內建是 inmemory, 有發現不同page 是不同process id ,所以除了會被清掉,還有就是memory無法跨process,除非用 mmap (memory-mapped file) ,如果你不想要有這個問題的話,可能要自己寫一個符合規範的cache handler,並且用file cache來做比較方便,另外一個比較詭異的是 next run build ,不知道他優化的時候做了什麼,有時候會得到怪怪的效果(我是遇到部落格文章部分文字被chunk到其他地方去。。),這邊我是把 .next 這個資料夾砍掉,重新執行就好了。

未來

目前還有CV page,還沒設計,因爲一直還沒拿定主意,初步是想要做一個比較有特效的頁面,只是對於沒有練過設計的工程師,真的是一個不知道從何下手的領域,這邊會繼續找靈感中~ 之後也打算持續寫文章,不過還沒決定多久寫一篇就是了 :p

另外就是開始把以前想做的清單工具們都開始規劃跟實作。

If you like my content,

feel free to buy me a coffee

Enjoy crafting new things

Never stop learning.

Life is the sum of your daily habits.

Find things that you enjoy and please

Doit.

Feel free to connect with me.

Created by potrace 1.16, written by Peter Selinger 2001-2019

© Jing 2024. All rights reserved.