banner
DIYgod

Hi, DIYgod

写代码是热爱,写到世界充满爱!
github
twitter
follow
bilibili
telegram
email
steam
playstation
nintendo switch

基於 Obsidian 的生活記錄系統

正如我在 2020 年終總結 中提到,我一直在用 Notion 寫子彈筆記,現在它有了一點點不一樣,現在我們就來重新窺探一下我目前的生活記錄系統

日記

image

周記月記

image

年記

image

原 Notion 子彈筆記

image

受益於 Obsidian 強大的自動化能力和極高的自由度,日 / 周 / 月 / 年筆記通過預設模板自動生成,互相聯動,需要手動處理的部分很少

全部文件已上傳至 GitHub:https://github.com/DIYgod/DIYgod-Obsidian-Starter,包括主題、插件、配置文件、自己定制的樣式、模板文件、示例文件等,只是作為一個示例,請根據自己實際情況修改

這些東西乍一看是有一些複雜,但其實用起來很簡單,自由度和可擴展性也很強,下面我來詳細介紹

結構#

目錄結構如日記圖左側欄所示

├── OKR.md
└── Journal
    └── 2022
        ├── W1
        |   └── 2022-01-01.md
        |   └── 2022-W1.md
        ├── 2022-01.md
        └── 2022.md

每天會自動在本週的文件夾中生成當天的日記文件 YYYY-MM-DD.md,每週會自動新建一個周文件夾 [W]ww 和周記 YYYY-[W]ww.md,每月會自動生成月記 YYYY-MM.md,每年會自動新建一個年文件夾 YYYY 和年記 YYYY.md(更正:不是自動,仍然需要命令面板手動觸發)

這些文件的內容也都是模板預設好的,已經自動填充了日期、本周期 OKR 分數和圖表,甚至當天的位置、天氣、月相等信息,還留出了記錄當天狀態和動態的位置

外面有一個 OKR 文件,大概半年更新一次,裡面記錄這半年的人生目標,其中有一些目標是需要每天持續努力的,日記系統的很大部分就是圍繞這些目標來構建的

目錄結構主要通過 Periodic Notes 實現,模板主要通過 TemplaterDataview 和核心插件 Templates 實現

日記#

image

Info#

Info 是自動生成的當天信息,包括指向年月周記和 OKR 的鏈接,位置、天氣、月相等信息

位置、天氣、月相信息來自 Templater 的調用系統命令功能

獲取位置和天氣

curl wttr.in/"$(curl -s --header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r ".city" | sed 's/ /%20/')"\?format="%l+%c%t"

獲取月相

curl wttr.in/"$(curl -s --header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r ".city" | sed 's/ /%20/')"\?format="%m"

OKR Tracker#

OKR Tracker 跟蹤記錄當天當前階段的 OKR 完成狀況,比如 Sleep:: 10.3 代表今天睡了 10.3 小時,Healthy Eating:: 5 代表今天吃得很健康,:: 是 Dataview 語法,會給當前頁面增加

page = {
    ...
    "Sleep": 10.3,
    "Healthy Eating": 5,
}

這樣的屬性,方便接下來在周月年記中做分析和處理

其中 O1 KR2 下有一個特殊的列表,通過 API 展示了當天 Toggl Track 數據, Toggl Track 是一個時間記錄應用,記錄我每天在各項事務中花費的時間,比如看番時間、刷 B 站時間、工作時間等,這些數據同樣可以反映我今天的生產力是否符合預期

Notes#

這裡是真正寫日記的地方,多數是一些流水帳,來彌補我天生糟糕的記憶力,偶爾也會寫一些想法

周記和月記#

image

Jornal List#

Jornal List 是自動生成的本週 / 月全部日記的列表,通過 Dataview 實現

獲取全部日記

// Week
window.pages = dv.pages(`"${dv.current().file.folder}"`).where(p => p.file.name.match(new RegExp(`${dv.current().file.name.split('-')[0]}-\\d{2}-\\d{2}`))).sort(p => p.file.name);

// Month
window.pages = dv.pages().where(p => p.file.name.match(new RegExp(`${dv.current().file.name}-\\d{2}`))).sort(p => p.file.name);

渲染列表

dv.paragraph(window.pages.file.link.join(', '))

Summary#

這裡是月末做總結和反思的地方,對應日記裡的 Notes

OKR Tracker#

在這裡處理和分析全部日記裡的 OKR 數據,最後生成分數,對應日記裡的 OKR Tracker

它通過 Dataview 實現,以睡眠為例,≥ 6.5 小時且 ≤ 8.5 小時計為有效睡眠,有效睡眠天數占總天數的百分比即為得分

let count = 0;
let total = 0;
for (let page of window.pages) {
    if (page['Sleep']) {
        count++;
        if (page['Sleep'] >= 6.5 && page['Sleep'] <= 8.5) {
            total++;
        }
    }
}
const score = (total / count * 100).toFixed(2);
dv.el('div', score + '%', {
    cls: score > 80 ? 'score-class1' : score > 50 ? 'score-class2' : 'score-class3'
});

再自己加一點 CSS,> 80 分顯示為綠色,50-80 分顯示為黃色,< 50 分顯示為紅色,這樣就可以很清楚看出本週 / 月的睡覺情況,圖裡是黃色區間,不太好但還可以接受,下個月需要多留意

Statistics#

在這裡把睡眠和運動數據生成統計圖,可以清楚看出睡眠時長還是挺不穩定的,運動天數和時長都很少

統計圖通過 Obsidian Charts 繪製,睡眠統計圖代碼如下

const times = [];
for (let page of window.pages) {
    times.push(page['Sleep']);
}

const chartData = {
    type: 'line',
    data: {
        labels: window.pages.file.name.array(),
        datasets: [{
            label: 'Sleep Time',
            data: times,
            pointBackgroundColor: '#6c40d6',
            borderColor: '#6c40d65c',
            tension: 0.4,
            spanGaps: true,
        }],
    },
    options: {
        scales: {
            y: {
                type: 'linear',
                min: 2,
                max: 13
            }
        }
    }
}

window.renderChart(chartData, this.container);

Finance#

本月的財務數據餅狀圖,通過 MoneyWiz 生成

年記#

image

年記與周記月記相似度也很高,但通過擴大時間尺度,可以得出很多新的有用結論

比如同樣的睡眠和運動統計圖,在年的尺度裡就可以看出我是在 5 月底睡眠開始失控,在這期間運動也中斷了,又從 6 月中旬得到緩解

還有新的體重體脂統計圖,可以看出我的體重和體脂都在穩步下降,健康狀況有明顯改善

年記還出現了一種新的熱圖,記錄達到目標的日子,通過 Heatmap Calendar 繪製,以睡眠為例

const calendarData = { 
    entries: [],
}

const pages = window.pages
    .where(p => p.Sleep && p.Sleep >= 6.5 && p.Sleep <= 8.5)
    .sort(p => p.file.name);

for(let page of pages){ 
    calendarData.entries.push({
        date: page.file.name,
        intensity: page.Sleep,
    })
}

renderHeatmapCalendar(this.container, calendarData);

局限#

子彈筆記有一個很重要的任務清單模塊,如上面子彈筆記截圖所示,我之前會把一週的任務清單都提前寫在筆記裡,但現在日記都是當天自動生成,無法提前計劃,所以我把任務清單都改用了滴答清單來管理,滴答清單當然也很好用,但是這樣就少了與日記的聯動,手動添加又會造成很多重複工作,就不是很爽

最後需要注意的是,即使有這樣的生活管理系統也不意味著生活就會一切按照預期,就像上面舉例的 5 月底睡眠失控事件,一旦放鬆失控仍會發生,筆記會告訴我生活正在失控,但如何回到正軌和追趕上 OKR 還是要靠自控力和堅持的定期總結、反思和改進

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。