Issue: For blogs based on the astro framework, the title of the article is not displayed on the dashboard page. #703

Closed
opened 2026-10-05 03:01:04 +02:00 by adam · 15 comments
Owner

For blogs based on the astro framework, the title of the article is not displayed on the dashboard page.

image

{
  "$schema": "https://frontmatter.codes/frontmatter.schema.json",
  "frontMatter.taxonomy.contentTypes": [
    {
      "name": "posts",
      "previewPath": "'posts'",
      "pageBundle": false,
      "clearEmpty": true,
      "fields": [
        {
          "name": "title",
          "type": "string",
          "single": true,
          "required": true
        },
        {
          "name": "description",
          "type": "string",
          "single": true,
          "required": true
        },
        {
          "name": "date",
          "type": "datetime",
          "dateFormat": "yyyy-MM-dd",
          "default": "{{now}}",
          "required": true
        },
        {
          "name": "image",
          "type": "image",
          "default": "/static/blog-placeholder.png",
          "isPreviewImage": true
        }
      ]
    }
  ],
  "frontMatter.framework.id": "astro",
  "frontMatter.preview.host": "http://localhost:4321/posts",
  "frontMatter.content.pageFolders": [
    {
      "title": "posts",
      "path": "[[workspace]]/src/content/posts"
    }
  ],
  "frontMatter.content.publicFolder": "public",
  "frontMatter.git.enabled": true,
  "frontMatter.dashboard.openOnStart": false
}
For blogs based on the astro framework, the title of the article is not displayed on the dashboard page. ![image](https://github.com/user-attachments/assets/7cfc2132-84b3-4ea0-bb09-6069fd5d85d9) ```json { "$schema": "https://frontmatter.codes/frontmatter.schema.json", "frontMatter.taxonomy.contentTypes": [ { "name": "posts", "previewPath": "'posts'", "pageBundle": false, "clearEmpty": true, "fields": [ { "name": "title", "type": "string", "single": true, "required": true }, { "name": "description", "type": "string", "single": true, "required": true }, { "name": "date", "type": "datetime", "dateFormat": "yyyy-MM-dd", "default": "{{now}}", "required": true }, { "name": "image", "type": "image", "default": "/static/blog-placeholder.png", "isPreviewImage": true } ] } ], "frontMatter.framework.id": "astro", "frontMatter.preview.host": "http://localhost:4321/posts", "frontMatter.content.pageFolders": [ { "title": "posts", "path": "[[workspace]]/src/content/posts" } ], "frontMatter.content.publicFolder": "public", "frontMatter.git.enabled": true, "frontMatter.dashboard.openOnStart": false } ``` <!-- github-sync-id:2758448393 -->
adam closed this issue 2026-10-05 03:01:04 +02:00
Author
Owner

Hi @jimicat, that is odd, can you show me what an article's content looks like?

Hi @jimicat, that is odd, can you show me what an article's content looks like? <!-- github-comment-id:2561820477 -->
Author
Owner
---
title: "Garmin API"
description: ""
slug: "garmin-api"
date: 2024-11-29T10:00:05+08:00
tags: ["python", "garmin"]
---

garmin-api

test
```markdown --- title: "Garmin API" description: "" slug: "garmin-api" date: 2024-11-29T10:00:05+08:00 tags: ["python", "garmin"] --- garmin-api test ``` <!-- github-comment-id:2562202845 -->
Author
Owner

Is the same happening on the card view?

Would you be able to invite me to the repo so that I can verify what might be wrong?

Is the same happening on the card view? Would you be able to invite me to the repo so that I can verify what might be wrong? <!-- github-comment-id:2563522458 -->
Author
Owner

I invited you. Card view doesn't show it either.

I invited you. Card view doesn't show it either. <!-- github-comment-id:2563542625 -->
Author
Owner

Thanks, works fine on my end. Need to give it a try on a Windows device.

image

Can you show me the card rendering?

Thanks, works fine on my end. Need to give it a try on a Windows device. <img width="1294" alt="image" src="https://github.com/user-attachments/assets/9cdee469-931c-49e1-8c92-c7f8d34e642a" /> Can you show me the card rendering? <!-- github-comment-id:2563708227 -->
Author
Owner

Haha, why doesn't my mac show it either
Screenshot 2024-12-27 at 23 23 47

Haha, why doesn't my mac show it either <img width="1822" alt="Screenshot 2024-12-27 at 23 23 47" src="https://github.com/user-attachments/assets/595b5137-9fac-493c-9616-0906ede5486c" /> <!-- github-comment-id:2563799726 -->
Author
Owner

Ok, that confuses me. Can you execute the diagnostic logging command and provide the output.

https://frontmatter.codes/docs/troubleshooting#inspecting-configuration-behavior

Ok, that confuses me. Can you execute the diagnostic logging command and provide the output. https://frontmatter.codes/docs/troubleshooting#inspecting-configuration-behavior <!-- github-comment-id:2563803643 -->
Author
Owner

Front Matter CMS - Diagnostics

Beta: false
Version: 10.6.0
OS: darwin
VSCode version: 1.96.2

Project name

miniblog

Workspace folder

/Users/kevin/Documents/opt/miniblog

Total files

Total files found: 90

Folders

Title Path
posts /Users/kevin/Documents/opt/miniblog/src/content/posts

Files in folders

Project start length Search in md mdx markdown
17 src/content/posts/**/*.* 45 0 0

Complete frontmatter.json config

{
  "$schema": "https://frontmatter.codes/frontmatter.schema.json",
  "frontMatter.taxonomy.contentTypes": [
    {
      "name": "posts",
      "previewPath": "'posts'",
      "pageBundle": false,
      "clearEmpty": true,
      "fields": [
        {
          "name": "title",
          "type": "string",
          "single": true,
          "required": true
        },
        {
          "name": "description",
          "type": "string",
          "single": true,
          "required": true
        },
        {
          "name": "date",
          "type": "datetime",
          "dateFormat": "yyyy-MM-dd",
          "default": "{{now}}",
          "required": true
        },
        {
          "name": "image",
          "type": "image",
          "default": "/static/blog-placeholder.png",
          "isPreviewImage": true
        }
      ]
    }
  ],
  "frontMatter.framework.id": "astro",
  "frontMatter.preview.host": "http://localhost:4321/posts",
  "frontMatter.content.pageFolders": [
    {
      "title": "posts",
      "path": "[[workspace]]/src/content/posts"
    }
  ],
  "frontMatter.content.publicFolder": "public",
  "frontMatter.git.enabled": true,
  "frontMatter.dashboard.openOnStart": false
}
There doesn't seem to be a problem. The title used to appear when I initialized it earlier and then disappeared.
# Front Matter CMS - Diagnostics Beta: `false` Version: `10.6.0` OS: `darwin` VSCode version: `1.96.2` ## Project name miniblog ## Workspace folder `/Users/kevin/Documents/opt/miniblog` ## Total files Total files found: 90 ## Folders | Title | Path | | ----- | ---- | | posts | `/Users/kevin/Documents/opt/miniblog/src/content/posts` | ### Files in folders | Project start length | Search in | md | mdx | markdown | |--- | --- | --- | --- | --- | | 17 | `src/content/posts/**/*.*` | 45 | 0 | 0 | ## Complete frontmatter.json config ```json { "$schema": "https://frontmatter.codes/frontmatter.schema.json", "frontMatter.taxonomy.contentTypes": [ { "name": "posts", "previewPath": "'posts'", "pageBundle": false, "clearEmpty": true, "fields": [ { "name": "title", "type": "string", "single": true, "required": true }, { "name": "description", "type": "string", "single": true, "required": true }, { "name": "date", "type": "datetime", "dateFormat": "yyyy-MM-dd", "default": "{{now}}", "required": true }, { "name": "image", "type": "image", "default": "/static/blog-placeholder.png", "isPreviewImage": true } ] } ], "frontMatter.framework.id": "astro", "frontMatter.preview.host": "http://localhost:4321/posts", "frontMatter.content.pageFolders": [ { "title": "posts", "path": "[[workspace]]/src/content/posts" } ], "frontMatter.content.publicFolder": "public", "frontMatter.git.enabled": true, "frontMatter.dashboard.openOnStart": false } ``` There doesn't seem to be a problem. The title used to appear when I initialized it earlier and then disappeared. <!-- github-comment-id:2563846140 -->
Author
Owner

I was thinking that the frontMatter.taxonomy.seoTitleField setting was set, which allows you to change the title field, but that doesn't seem to be the case.

I have added some extra verbose logging to see is we can spot what might go wrong. Could you do the following:

  • Set the frontMatter.logging setting in the frontmatter.json file to "verbose"
  • Disable the Front Matter extension
  • Install the Front Matter Beta extension (version => 10.6.125186929)
  • Open the dashboard
  • If the problem still occurs, open the VS Code Output on the Front Matter CMS log

There should be a record for PagesParser:processPageContent::FrontMatter: ... and PagesParser:processPageContent::Page: .... Can you pass the information from both of these records?

I was thinking that the `frontMatter.taxonomy.seoTitleField` setting was set, which allows you to change the title field, but that doesn't seem to be the case. I have added some extra verbose logging to see is we can spot what might go wrong. Could you do the following: - Set the `frontMatter.logging` setting in the `frontmatter.json` file to "verbose" - Disable the Front Matter extension - Install the Front Matter Beta extension (version => 10.6.125186929) - Open the dashboard - If the problem still occurs, open the VS Code Output on the Front Matter CMS log There should be a record for `PagesParser:processPageContent::FrontMatter: ...` and `PagesParser:processPageContent::Page: ...`. Can you pass the information from both of these records? <!-- github-comment-id:2563883100 -->
Author
Owner

I didn't find any abnormality, thanks for your reply. I'll turn off the issue and check for myself what the problem is.

["INFO" - 11:43:31] VSCODE | Activating Front Matter CMS version 10.6.0...
["INFO" - 11:43:31] VSCODE | Logging level: info
["INFO" - 11:43:31] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 11:43:31] VSCODE | Project config path: /Users/kevin/Documents/opt/miniblog/frontmatter.json
["VERBOSE" - 11:43:31] VSCODE | Folders:get:start
["VERBOSE" - 11:43:31] VSCODE | Folders:get:end
["VERBOSE" - 11:43:31] VSCODE | Trigger page update: main
["VERBOSE" - 11:43:31] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 11:43:31] VSCODE | Folders:clearCached
["VERBOSE" - 11:43:31] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:43:31] VSCODE | Folders:get:start
["VERBOSE" - 11:43:31] VSCODE | Folders:get:end
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md
["VERBOSE" - 11:43:31] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:43:31] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown
["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:43:31] VSCODE | Folders:get:start
["VERBOSE" - 11:43:31] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:43:31] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:43:31] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:43:31] VSCODE | Folders:getInfo:end
["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages: Parsing folder posts - 47
["VERBOSE" - 11:43:31] VSCODE | Folders:clearCached
["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["INFO" - 11:43:33] VSCODE | Triggering listener: settings-init
["INFO" - 11:43:33] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:43:33] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:43:33] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:43:33] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:43:33] VSCODE | Folders:get:start
["VERBOSE" - 11:43:33] VSCODE | Folders:get:end
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown
["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:33] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:43:33] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:43:33] VSCODE | Folders:getInfo:end
["INFO" - 11:43:33] VSCODE | Sending message to panel: folderInfo
["INFO" - 11:43:38] VSCODE | Receiving message from panel: getLocalization
["INFO" - 11:43:38] VSCODE | Sending request result to panel: getLocalization
["INFO" - 11:43:38] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:43:38] VSCODE | Receiving message from panel: get-data
["VERBOSE" - 11:43:38] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:43:38] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:43:38] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:43:38] VSCODE | Folders:get:start
["VERBOSE" - 11:43:38] VSCODE | Folders:get:end - cached folders
["INFO" - 11:43:38] VSCODE | Getting panel settings
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md
["VERBOSE" - 11:43:38] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:43:38] VSCODE | GitListener:getSettings:end:enabled
["INFO" - 11:43:38] VSCODE | Receiving message from panel: get-mode
["INFO" - 11:43:38] VSCODE | Receiving message from panel: getLocalization
["VERBOSE" - 11:43:38] PANEL | Message received: getBranch
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown
["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:43:38] VSCODE | Folders:get:start
["VERBOSE" - 11:43:38] VSCODE | Folders:get:end - cached folders
["INFO" - 11:43:38] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:43:38] PANEL | Message received: settings
["VERBOSE" - 11:43:38] VSCODE | Folders:getInfo:end
["INFO" - 11:43:38] VSCODE | Sending message to panel: folderInfo
["INFO" - 11:43:38] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:43:38] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:43:38] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:43:38] PANEL | Message received: folderInfo
["VERBOSE" - 11:43:38] PANEL | Message received: getBranch
["VERBOSE" - 11:43:38] PANEL | Message received: is-server-started
["INFO" - 11:43:40] VSCODE | Receiving message from panel: open-dashboard
["VERBOSE" - 11:43:40] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:43:40] PANEL | Message received: loading
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getLocalization
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getViewType
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: viewData
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getTheme
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getData
["VERBOSE" - 11:43:40] VSCODE | SettingsListener:getSettings:start - clear: false
["VERBOSE" - 11:43:40] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getMode
["VERBOSE" - 11:43:40] DASHBOARD | Loaded with view contents
["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 11:43:40] DASHBOARD | Message received: viewData
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 11:43:40] DASHBOARD | Message received: settings
["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState
["INFO" - 11:43:40] DASHBOARD | Contents view loaded with 0 pages
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: setTitle
["VERBOSE" - 11:43:40] DASHBOARD | Settings loaded
["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:43:40] DASHBOARD | Message received: pages
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:43:40] VSCODE | Folders:get:start
["VERBOSE" - 11:43:40] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:43:40] DASHBOARD | Settings loaded
["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 47 pages
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getPinnedItems
["VERBOSE" - 11:43:40] DASHBOARD | Message received: pages
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:43:40] VSCODE | Folders:get:start
["VERBOSE" - 11:43:40] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:43:40] DASHBOARD | Message received: searchReady
["VERBOSE" - 11:43:40] DASHBOARD | Message received: loading
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState
["INFO" - 11:43:40] DASHBOARD | Contents view loaded with 47 pages
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getPinnedItems
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState
["VERBOSE" - 11:43:40] DASHBOARD | Message received: getContentLocales
["INFO" - 11:43:41] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:43:41] PANEL | Message received: metadata
["INFO" - 11:43:41] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:43:41] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:43:41] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:43:41] DASHBOARD | Message received: getBranch
["VERBOSE" - 11:43:41] PANEL | Message received: getBranch
["VERBOSE" - 11:43:41] PANEL | Message received: is-server-started
["INFO" - 11:43:49] VSCODE | Sending message to panel: mediaSelectionData
["VERBOSE" - 11:43:49] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:43:49] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:43:49] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:43:49] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:43:49] VSCODE | Folders:get:start
["VERBOSE" - 11:43:49] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:43:49] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:43:49] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:43:49] PANEL | Message received: mediaSelectionData
["VERBOSE" - 11:43:49] PANEL | Message received: loading
["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:43:50] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getSettings:end
["INFO" - 11:43:50] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:43:50] PANEL | Message received: metadata
["INFO" - 11:43:50] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:43:50] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:43:50] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:43:50] PANEL | Message received: getBranch
["VERBOSE" - 11:43:50] PANEL | Message received: is-server-started
["VERBOSE" - 11:43:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:43:55] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:43:55] PANEL | Message received: metadata
["VERBOSE" - 11:43:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:43:58] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json saved
["INFO" - 11:43:58] VSCODE | Reloading config...
["VERBOSE" - 11:43:58] VSCODE | Folders:clearCached
["INFO" - 11:43:58] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 11:43:58] VSCODE | Reloaded config...
["INFO" - 11:43:58] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json changed
["VERBOSE" - 11:43:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:43:58] VSCODE | Triggering listener: settings-init
["INFO" - 11:43:58] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:43:58] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:43:58] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:43:58] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:43:58] VSCODE | Folders:get:start
["VERBOSE" - 11:43:58] VSCODE | Folders:get:end
["INFO" - 11:43:58] VSCODE | Triggering listener: panel-listener
["INFO" - 11:43:58] VSCODE | Getting panel settings
["INFO" - 11:43:58] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:43:58] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md
["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown
["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:43:58] VSCODE | Folders:getInfo:end
["INFO" - 11:43:58] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:43:58] PANEL | Message received: folderInfo
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:43:58] VSCODE | Folders:get:start
["VERBOSE" - 11:43:58] VSCODE | Folders:get:end - cached folders
["INFO" - 11:43:58] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:43:58] PANEL | Message received: settings
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:43:58] VSCODE | Folders:get:start
["VERBOSE" - 11:43:58] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:43:58] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:43:58] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:43:58] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:43:58] VSCODE | Sending message to dashboard: settings
["INFO" - 11:43:59] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:43:59] PANEL | Message received: metadata
["VERBOSE" - 11:44:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:44:00] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json saved
["INFO" - 11:44:00] VSCODE | Reloading config...
["VERBOSE" - 11:44:00] VSCODE | Folders:clearCached
["INFO" - 11:44:00] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 11:44:00] VSCODE | Reloaded config...
["INFO" - 11:44:00] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json changed
["VERBOSE" - 11:44:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:44:01] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:01] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:01] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:01] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:01] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:01] VSCODE | Folders:get:start
["VERBOSE" - 11:44:01] VSCODE | Folders:get:end
["INFO" - 11:44:01] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:01] VSCODE | Getting panel settings
["INFO" - 11:44:01] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:01] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:01] VSCODE | Folders:get:start
["VERBOSE" - 11:44:01] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:01] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:01] PANEL | Message received: settings
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:01] VSCODE | Folders:get:start
["VERBOSE" - 11:44:01] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:01] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:01] VSCODE | Folders:getInfo:end
["INFO" - 11:44:01] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:01] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:01] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:01] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:01] VSCODE | Sending message to dashboard: settings
["INFO" - 11:44:02] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:44:02] PANEL | Message received: metadata
["VERBOSE" - 11:44:13] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:44:13] PANEL | Message received: loading
["INFO" - 11:44:14] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:44:14] PANEL | Message received: metadata
["INFO" - 11:44:14] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:44:14] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:44:14] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:44:14] PANEL | Message received: getBranch
["VERBOSE" - 11:44:14] PANEL | Message received: is-server-started
["INFO" - 11:44:26] VSCODE | Receiving message from panel: toggle-writing-settings
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:26] VSCODE | Getting panel settings
["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["INFO" - 11:44:26] VSCODE | Getting panel settings
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:get:start
["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:26] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:44:26] PANEL | Message received: settings
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end
["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["INFO" - 11:44:27] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:44:27] PANEL | Message received: metadata
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings
["INFO" - 11:44:34] VSCODE | Triggering listener: settings-init
["INFO" - 11:44:34] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:44:34] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:44:34] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:44:34] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:44:34] VSCODE | Folders:get:start
["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:34] VSCODE | Triggering listener: panel-listener
["INFO" - 11:44:34] VSCODE | Getting panel settings
["INFO" - 11:44:34] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:44:34] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:34] VSCODE | Folders:get:start
["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders
["INFO" - 11:44:34] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:44:34] VSCODE | Folders:get:start
["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:44:34] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:44:34] PANEL | Message received: settings
["VERBOSE" - 11:44:34] VSCODE | Folders:getInfo:end
["INFO" - 11:44:34] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:44:34] PANEL | Message received: folderInfo
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:44:34] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:44:34] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:44:34] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:44:34] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:44:38] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:44:38] PANEL | Message received: loading
["INFO" - 11:44:43] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:44:43] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:44:43] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:44:43] PANEL | Message received: getBranch
["VERBOSE" - 11:44:43] PANEL | Message received: is-server-started
["VERBOSE" - 11:44:51] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:44:51] PANEL | Message received: loading
["VERBOSE" - 11:44:53] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:44:54] PANEL | Message received: loading
["VERBOSE" - 11:44:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:44:56] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:44:56] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:44:56] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:44:56] PANEL | Message received: getBranch
["VERBOSE" - 11:44:56] PANEL | Message received: is-server-started
["VERBOSE" - 11:44:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:45:01] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["INFO" - 11:45:01] VSCODE | Reloading config...
["VERBOSE" - 11:45:01] VSCODE | Folders:clearCached
["VERBOSE" - 11:45:01] PANEL | Message received: loading
["INFO" - 11:45:01] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 11:45:01] VSCODE | Reloaded config...
["INFO" - 11:45:01] VSCODE | Triggering listener: settings-init
["INFO" - 11:45:01] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:45:01] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:45:01] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:45:01] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:45:01] VSCODE | Folders:get:start
["VERBOSE" - 11:45:01] VSCODE | Folders:get:end
["INFO" - 11:45:01] VSCODE | Triggering listener: panel-listener
["INFO" - 11:45:01] VSCODE | Getting panel settings
["INFO" - 11:45:01] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:45:01] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 46
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:45:01] VSCODE | Folders:get:start
["VERBOSE" - 11:45:01] VSCODE | Folders:get:end - cached folders
["INFO" - 11:45:01] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:45:01] VSCODE | Folders:get:start
["VERBOSE" - 11:45:01] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:01] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:45:01] PANEL | Message received: settings
["INFO" - 11:45:01] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:45:01] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:45:01] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:45:01] PANEL | Message received: getBranch
["VERBOSE" - 11:45:01] PANEL | Message received: is-server-started
["VERBOSE" - 11:45:01] VSCODE | Folders:getInfo:end
["INFO" - 11:45:01] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:45:01] PANEL | Message received: folderInfo
["INFO" - 11:45:01] VSCODE | File watcher execution for (delete): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:45:01] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:45:01] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:45:01] VSCODE | Sending message to dashboard: settings
["INFO" - 11:45:13] VSCODE | Receiving message from panel: open-dashboard
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getLocalization
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getViewType
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: viewData
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getTheme
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getData
["VERBOSE" - 11:45:13] VSCODE | SettingsListener:getSettings:start - clear: false
["VERBOSE" - 11:45:13] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getMode
["VERBOSE" - 11:45:13] DASHBOARD | Loaded with view contents
["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 11:45:13] DASHBOARD | Message received: viewData
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 11:45:13] DASHBOARD | Message received: settings
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState
["INFO" - 11:45:13] DASHBOARD | Contents view loaded with 0 pages
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: setTitle
["VERBOSE" - 11:45:13] DASHBOARD | Settings loaded
["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:45:13] DASHBOARD | Message received: pages
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:45:13] VSCODE | Folders:get:start
["VERBOSE" - 11:45:13] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:13] DASHBOARD | Settings loaded
["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 47 pages
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getPinnedItems
["VERBOSE" - 11:45:13] DASHBOARD | Message received: pages
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:45:13] VSCODE | Folders:get:start
["VERBOSE" - 11:45:13] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:13] DASHBOARD | Message received: searchReady
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState
["VERBOSE" - 11:45:13] DASHBOARD | Message received: loading
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState
["INFO" - 11:45:13] DASHBOARD | Contents view loaded with 47 pages
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:45:13] DASHBOARD | Message received: getPinnedItems
["VERBOSE" - 11:45:14] DASHBOARD | Message received: getState
["VERBOSE" - 11:45:14] DASHBOARD | Message received: getContentLocales
["INFO" - 11:45:22] VSCODE | Reloading config...
["VERBOSE" - 11:45:22] VSCODE | Folders:clearCached
["INFO" - 11:45:22] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 11:45:22] VSCODE | Reloaded config...
["INFO" - 11:45:22] VSCODE | Front Matter CMS: Settings have been refreshed.
["INFO" - 11:45:23] VSCODE | Triggering listener: settings-init
["INFO" - 11:45:23] VSCODE | Triggering listener: settings-global
["VERBOSE" - 11:45:23] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 11:45:23] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 11:45:23] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:45:23] VSCODE | Folders:get:start
["VERBOSE" - 11:45:23] VSCODE | Folders:get:end
["INFO" - 11:45:23] VSCODE | Triggering listener: panel-listener
["INFO" - 11:45:23] VSCODE | Getting panel settings
["INFO" - 11:45:23] VSCODE | Triggering listener: dashboard-listener
["VERBOSE" - 11:45:23] VSCODE | SettingsListener:getSettings:start - clear: true
["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 46
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:start
["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:45:23] VSCODE | Folders:get:start
["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders
["INFO" - 11:45:23] VSCODE | Sending message to panel: settings
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 11:45:23] PANEL | Message received: settings
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 11:45:23] VSCODE | Folders:get:start
["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:23] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md
["VERBOSE" - 11:45:23] VSCODE | Folders:getInfo:end
["INFO" - 11:45:23] VSCODE | Sending message to panel: folderInfo
["VERBOSE" - 11:45:23] PANEL | Message received: folderInfo
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 2158
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown
["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 12
["VERBOSE" - 11:45:23] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 11:45:23] VSCODE | SettingsListener:getSettings:end - setting keys: 32
["VERBOSE" - 11:45:23] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 11:45:23] DASHBOARD | Message received: settings
["VERBOSE" - 11:45:23] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:45:23] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:45:23] VSCODE | Folders:get:start
["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:23] DASHBOARD | Settings loaded
["VERBOSE" - 11:45:23] DASHBOARD | Pages loaded - 47 pages
["VERBOSE" - 11:45:23] DASHBOARD | Message received: getState
["VERBOSE" - 11:45:23] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:45:48] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:45:48] PANEL | Message received: loading
["INFO" - 11:45:49] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:45:49] PANEL | Message received: metadata
["INFO" - 11:45:49] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:45:49] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:45:49] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:45:49] DASHBOARD | Message received: getBranch
["VERBOSE" - 11:45:49] PANEL | Message received: getBranch
["VERBOSE" - 11:45:49] PANEL | Message received: is-server-started
["VERBOSE" - 11:45:50] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:45:51] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:45:52] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:45:52] PANEL | Message received: metadata
["VERBOSE" - 11:45:56] VSCODE | Receiving message from dashboard: createContent
["VERBOSE" - 11:45:56] VSCODE | Folders:get:start
["VERBOSE" - 11:45:56] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:45:56] VSCODE | Folders:get:start
["VERBOSE" - 11:45:56] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:05] VSCODE | Folders:get:start
["VERBOSE" - 11:46:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:05] VSCODE | Article:formatDate:Start
["VERBOSE" - 11:46:05] VSCODE | Article:formatDate:FieldDateFormat - yyyy-MM-dd
["VERBOSE" - 11:46:06] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["INFO" - 11:46:06] VSCODE | Sending message to panel: mediaSelectionData
["INFO" - 11:46:06] VSCODE | Front Matter CMS: Your new content has been created.
["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 11:46:06] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:06] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:06] PANEL | Message received: loading
["VERBOSE" - 11:46:06] DASHBOARD | Message received: viewData
["INFO" - 11:46:06] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:46:06] PANEL | Message received: mediaSelectionData
["INFO" - 11:46:06] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:46:06] PANEL | Message received: metadata
["INFO" - 11:46:06] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:46:06] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:46:06] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:46:06] DASHBOARD | Message received: getBranch
["VERBOSE" - 11:46:06] PANEL | Message received: metadata
["VERBOSE" - 11:46:06] PANEL | Message received: getBranch
["VERBOSE" - 11:46:06] PANEL | Message received: is-server-started
["INFO" - 11:46:06] VSCODE | Cache cleared
["VERBOSE" - 11:46:06] VSCODE | Folders:getInfo:end
["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages: Parsing folder posts - 47
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:06] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 11:46:06] DASHBOARD | Message received: pages
["VERBOSE" - 11:46:06] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:46:06] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:46:06] VSCODE | Folders:get:start
["VERBOSE" - 11:46:06] VSCODE | Folders:get:end
["VERBOSE" - 11:46:06] DASHBOARD | Settings loaded
["VERBOSE" - 11:46:06] DASHBOARD | Pages loaded - 47 pages
["VERBOSE" - 11:46:06] DASHBOARD | Message received: searchReady
["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 11:46:06] DASHBOARD | Message received: getState
["INFO" - 11:46:06] DASHBOARD | Contents view loaded with 47 pages
["VERBOSE" - 11:46:06] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:46:06] DASHBOARD | Message received: loading
["INFO" - 11:46:07] VSCODE | Sending message to panel: metadata
["VERBOSE" - 11:46:07] PANEL | Message received: metadata
["INFO" - 11:46:34] VSCODE | File watcher execution for (change): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md.git
["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 11:46:34] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:34] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:34] VSCODE | Folders:getInfo:end
["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages: Parsing folder posts - 47
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["INFO" - 11:46:34] VSCODE | Cache cleared
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:34] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 11:46:34] DASHBOARD | Message received: pages
["VERBOSE" - 11:46:34] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:46:34] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:46:34] VSCODE | Folders:get:start
["VERBOSE" - 11:46:34] VSCODE | Folders:get:end
["VERBOSE" - 11:46:34] DASHBOARD | Message received: searchReady
["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 11:46:34] DASHBOARD | Message received: getState
["VERBOSE" - 11:46:35] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:46:35] DASHBOARD | Message received: loading
["INFO" - 11:46:36] VSCODE | File watcher execution for (change): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md.git
["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 11:46:36] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:36] VSCODE | Folders:getInfo:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 47
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown
["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 11:46:36] VSCODE | Folders:getInfo:end
["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages: Parsing folder posts - 47
["INFO" - 11:46:36] VSCODE | Cache cleared
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 11:46:36] VSCODE | Folders:clearCached
["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 11:46:36] DASHBOARD | Message received: pages
["VERBOSE" - 11:46:36] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 11:46:36] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 11:46:36] VSCODE | Folders:get:start
["VERBOSE" - 11:46:36] VSCODE | Folders:get:end
["VERBOSE" - 11:46:36] DASHBOARD | Message received: searchReady
["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 11:46:36] DASHBOARD | Message received: getState
["VERBOSE" - 11:46:36] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 11:46:36] DASHBOARD | Message received: loading
["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:46:52] PANEL | Message received: loading
["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 11:46:52] PANEL | Message received: loading
["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 11:46:57] VSCODE | Receiving message from panel: getBranch
["INFO" - 11:46:57] VSCODE | Receiving message from panel: is-server-started
["INFO" - 11:46:57] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 11:46:57] DASHBOARD | Message received: getBranch
["VERBOSE" - 11:46:57] PANEL | Message received: getBranch
["VERBOSE" - 11:46:57] PANEL | Message received: is-server-started
["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:13] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 11:47:13] VSCODE | Trigger page update: onDidChangeTextEditorSelection
I didn't find any abnormality, thanks for your reply. I'll turn off the issue and check for myself what the problem is. ```bash ["INFO" - 11:43:31] VSCODE | Activating Front Matter CMS version 10.6.0... ["INFO" - 11:43:31] VSCODE | Logging level: info ["INFO" - 11:43:31] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 11:43:31] VSCODE | Project config path: /Users/kevin/Documents/opt/miniblog/frontmatter.json ["VERBOSE" - 11:43:31] VSCODE | Folders:get:start ["VERBOSE" - 11:43:31] VSCODE | Folders:get:end ["VERBOSE" - 11:43:31] VSCODE | Trigger page update: main ["VERBOSE" - 11:43:31] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 11:43:31] VSCODE | Folders:clearCached ["VERBOSE" - 11:43:31] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:43:31] VSCODE | Folders:get:start ["VERBOSE" - 11:43:31] VSCODE | Folders:get:end ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md ["VERBOSE" - 11:43:31] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:43:31] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown ["VERBOSE" - 11:43:31] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:43:31] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:43:31] VSCODE | Folders:get:start ["VERBOSE" - 11:43:31] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:43:31] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:43:31] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:43:31] VSCODE | Folders:getInfo:end ["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages: Parsing folder posts - 47 ["VERBOSE" - 11:43:31] VSCODE | Folders:clearCached ["VERBOSE" - 11:43:31] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:43:32] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["INFO" - 11:43:33] VSCODE | Triggering listener: settings-init ["INFO" - 11:43:33] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:43:33] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:43:33] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:43:33] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:43:33] VSCODE | Folders:get:start ["VERBOSE" - 11:43:33] VSCODE | Folders:get:end ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown ["VERBOSE" - 11:43:33] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:33] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:43:33] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:43:33] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:43:33] VSCODE | Folders:getInfo:end ["INFO" - 11:43:33] VSCODE | Sending message to panel: folderInfo ["INFO" - 11:43:38] VSCODE | Receiving message from panel: getLocalization ["INFO" - 11:43:38] VSCODE | Sending request result to panel: getLocalization ["INFO" - 11:43:38] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:43:38] VSCODE | Receiving message from panel: get-data ["VERBOSE" - 11:43:38] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:43:38] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:43:38] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:43:38] VSCODE | Folders:get:start ["VERBOSE" - 11:43:38] VSCODE | Folders:get:end - cached folders ["INFO" - 11:43:38] VSCODE | Getting panel settings ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md ["VERBOSE" - 11:43:38] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:43:38] VSCODE | GitListener:getSettings:end:enabled ["INFO" - 11:43:38] VSCODE | Receiving message from panel: get-mode ["INFO" - 11:43:38] VSCODE | Receiving message from panel: getLocalization ["VERBOSE" - 11:43:38] PANEL | Message received: getBranch ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown ["VERBOSE" - 11:43:38] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:43:38] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:43:38] VSCODE | Folders:get:start ["VERBOSE" - 11:43:38] VSCODE | Folders:get:end - cached folders ["INFO" - 11:43:38] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:43:38] PANEL | Message received: settings ["VERBOSE" - 11:43:38] VSCODE | Folders:getInfo:end ["INFO" - 11:43:38] VSCODE | Sending message to panel: folderInfo ["INFO" - 11:43:38] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:43:38] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:43:38] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:43:38] PANEL | Message received: folderInfo ["VERBOSE" - 11:43:38] PANEL | Message received: getBranch ["VERBOSE" - 11:43:38] PANEL | Message received: is-server-started ["INFO" - 11:43:40] VSCODE | Receiving message from panel: open-dashboard ["VERBOSE" - 11:43:40] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:43:40] PANEL | Message received: loading ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getLocalization ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getViewType ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: viewData ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getTheme ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getData ["VERBOSE" - 11:43:40] VSCODE | SettingsListener:getSettings:start - clear: false ["VERBOSE" - 11:43:40] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getMode ["VERBOSE" - 11:43:40] DASHBOARD | Loaded with view contents ["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 11:43:40] DASHBOARD | Message received: viewData ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 11:43:40] DASHBOARD | Message received: settings ["VERBOSE" - 11:43:40] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState ["INFO" - 11:43:40] DASHBOARD | Contents view loaded with 0 pages ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: setTitle ["VERBOSE" - 11:43:40] DASHBOARD | Settings loaded ["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:43:40] DASHBOARD | Message received: pages ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:43:40] VSCODE | Folders:get:start ["VERBOSE" - 11:43:40] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:43:40] DASHBOARD | Settings loaded ["VERBOSE" - 11:43:40] DASHBOARD | Pages loaded - 47 pages ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getPinnedItems ["VERBOSE" - 11:43:40] DASHBOARD | Message received: pages ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:43:40] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:43:40] VSCODE | Folders:get:start ["VERBOSE" - 11:43:40] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:43:40] DASHBOARD | Message received: searchReady ["VERBOSE" - 11:43:40] DASHBOARD | Message received: loading ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState ["INFO" - 11:43:40] DASHBOARD | Contents view loaded with 47 pages ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getPinnedItems ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getState ["VERBOSE" - 11:43:40] DASHBOARD | Message received: getContentLocales ["INFO" - 11:43:41] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:43:41] PANEL | Message received: metadata ["INFO" - 11:43:41] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:43:41] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:43:41] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:43:41] DASHBOARD | Message received: getBranch ["VERBOSE" - 11:43:41] PANEL | Message received: getBranch ["VERBOSE" - 11:43:41] PANEL | Message received: is-server-started ["INFO" - 11:43:49] VSCODE | Sending message to panel: mediaSelectionData ["VERBOSE" - 11:43:49] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:43:49] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:43:49] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:43:49] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:43:49] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:43:49] VSCODE | Folders:get:start ["VERBOSE" - 11:43:49] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:43:49] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:43:49] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:43:49] PANEL | Message received: mediaSelectionData ["VERBOSE" - 11:43:49] PANEL | Message received: loading ["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:43:50] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:43:50] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:43:50] VSCODE | DashboardSettings:getSettings:end ["INFO" - 11:43:50] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:43:50] PANEL | Message received: metadata ["INFO" - 11:43:50] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:43:50] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:43:50] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:43:50] PANEL | Message received: getBranch ["VERBOSE" - 11:43:50] PANEL | Message received: is-server-started ["VERBOSE" - 11:43:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:43:55] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:43:55] PANEL | Message received: metadata ["VERBOSE" - 11:43:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:43:58] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json saved ["INFO" - 11:43:58] VSCODE | Reloading config... ["VERBOSE" - 11:43:58] VSCODE | Folders:clearCached ["INFO" - 11:43:58] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 11:43:58] VSCODE | Reloaded config... ["INFO" - 11:43:58] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json changed ["VERBOSE" - 11:43:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:43:58] VSCODE | Triggering listener: settings-init ["INFO" - 11:43:58] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:43:58] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:43:58] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:43:58] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:43:58] VSCODE | Folders:get:start ["VERBOSE" - 11:43:58] VSCODE | Folders:get:end ["INFO" - 11:43:58] VSCODE | Triggering listener: panel-listener ["INFO" - 11:43:58] VSCODE | Getting panel settings ["INFO" - 11:43:58] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:43:58] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.md ["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:43:58] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.mdx ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/**/*.markdown ["VERBOSE" - 11:43:58] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:43:58] VSCODE | Folders:getInfo:end ["INFO" - 11:43:58] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:43:58] PANEL | Message received: folderInfo ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:43:58] VSCODE | Folders:get:start ["VERBOSE" - 11:43:58] VSCODE | Folders:get:end - cached folders ["INFO" - 11:43:58] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:43:58] PANEL | Message received: settings ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:43:58] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:43:58] VSCODE | Folders:get:start ["VERBOSE" - 11:43:58] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:43:58] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:43:58] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:43:58] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:43:58] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:43:58] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:43:58] VSCODE | Sending message to dashboard: settings ["INFO" - 11:43:59] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:43:59] PANEL | Message received: metadata ["VERBOSE" - 11:44:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:44:00] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json saved ["INFO" - 11:44:00] VSCODE | Reloading config... ["VERBOSE" - 11:44:00] VSCODE | Folders:clearCached ["INFO" - 11:44:00] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 11:44:00] VSCODE | Reloaded config... ["INFO" - 11:44:00] VSCODE | Config change detected - /Users/kevin/Documents/opt/miniblog/frontmatter.json changed ["VERBOSE" - 11:44:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:44:01] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:01] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:01] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:01] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:01] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:01] VSCODE | Folders:get:start ["VERBOSE" - 11:44:01] VSCODE | Folders:get:end ["INFO" - 11:44:01] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:01] VSCODE | Getting panel settings ["INFO" - 11:44:01] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:01] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:01] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:01] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:01] VSCODE | Folders:get:start ["VERBOSE" - 11:44:01] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:01] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:01] PANEL | Message received: settings ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:01] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:01] VSCODE | Folders:get:start ["VERBOSE" - 11:44:01] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:01] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:01] VSCODE | Folders:getInfo:end ["INFO" - 11:44:01] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:01] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:01] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:01] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:01] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:01] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:01] VSCODE | Sending message to dashboard: settings ["INFO" - 11:44:02] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:44:02] PANEL | Message received: metadata ["VERBOSE" - 11:44:13] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:44:13] PANEL | Message received: loading ["INFO" - 11:44:14] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:44:14] PANEL | Message received: metadata ["INFO" - 11:44:14] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:44:14] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:44:14] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:44:14] PANEL | Message received: getBranch ["VERBOSE" - 11:44:14] PANEL | Message received: is-server-started ["INFO" - 11:44:26] VSCODE | Receiving message from panel: toggle-writing-settings ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:26] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:26] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:26] VSCODE | Getting panel settings ["INFO" - 11:44:26] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:26] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:26] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["INFO" - 11:44:26] VSCODE | Getting panel settings ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:26] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:26] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:26] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:26] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:get:start ["VERBOSE" - 11:44:26] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:26] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:44:26] PANEL | Message received: settings ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:26] VSCODE | Folders:getInfo:end ["INFO" - 11:44:26] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:26] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["INFO" - 11:44:27] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:44:27] PANEL | Message received: metadata ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:27] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:27] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:27] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:27] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:27] VSCODE | Sending message to dashboard: settings ["INFO" - 11:44:34] VSCODE | Triggering listener: settings-init ["INFO" - 11:44:34] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:44:34] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:44:34] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:44:34] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:44:34] VSCODE | Folders:get:start ["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:34] VSCODE | Triggering listener: panel-listener ["INFO" - 11:44:34] VSCODE | Getting panel settings ["INFO" - 11:44:34] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:44:34] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:44:34] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:44:34] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:34] VSCODE | Folders:get:start ["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders ["INFO" - 11:44:34] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:44:34] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:44:34] VSCODE | Folders:get:start ["VERBOSE" - 11:44:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:44:34] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:44:34] PANEL | Message received: settings ["VERBOSE" - 11:44:34] VSCODE | Folders:getInfo:end ["INFO" - 11:44:34] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:44:34] PANEL | Message received: folderInfo ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:44:34] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:44:34] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:44:34] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:44:34] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:44:34] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:44:34] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:44:38] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:44:38] PANEL | Message received: loading ["INFO" - 11:44:43] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:44:43] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:44:43] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:44:43] PANEL | Message received: getBranch ["VERBOSE" - 11:44:43] PANEL | Message received: is-server-started ["VERBOSE" - 11:44:51] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:44:51] PANEL | Message received: loading ["VERBOSE" - 11:44:53] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:44:54] PANEL | Message received: loading ["VERBOSE" - 11:44:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:44:56] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:44:56] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:44:56] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:44:56] PANEL | Message received: getBranch ["VERBOSE" - 11:44:56] PANEL | Message received: is-server-started ["VERBOSE" - 11:44:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:45:01] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["INFO" - 11:45:01] VSCODE | Reloading config... ["VERBOSE" - 11:45:01] VSCODE | Folders:clearCached ["VERBOSE" - 11:45:01] PANEL | Message received: loading ["INFO" - 11:45:01] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 11:45:01] VSCODE | Reloaded config... ["INFO" - 11:45:01] VSCODE | Triggering listener: settings-init ["INFO" - 11:45:01] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:45:01] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:45:01] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:45:01] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:45:01] VSCODE | Folders:get:start ["VERBOSE" - 11:45:01] VSCODE | Folders:get:end ["INFO" - 11:45:01] VSCODE | Triggering listener: panel-listener ["INFO" - 11:45:01] VSCODE | Getting panel settings ["INFO" - 11:45:01] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:45:01] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:45:01] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 46 ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:45:01] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:45:01] VSCODE | Folders:get:start ["VERBOSE" - 11:45:01] VSCODE | Folders:get:end - cached folders ["INFO" - 11:45:01] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:45:01] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:45:01] VSCODE | Folders:get:start ["VERBOSE" - 11:45:01] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:01] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:45:01] PANEL | Message received: settings ["INFO" - 11:45:01] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:45:01] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:45:01] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:45:01] PANEL | Message received: getBranch ["VERBOSE" - 11:45:01] PANEL | Message received: is-server-started ["VERBOSE" - 11:45:01] VSCODE | Folders:getInfo:end ["INFO" - 11:45:01] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:45:01] PANEL | Message received: folderInfo ["INFO" - 11:45:01] VSCODE | File watcher execution for (delete): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:45:01] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:45:01] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:45:01] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:45:01] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:45:01] VSCODE | Sending message to dashboard: settings ["INFO" - 11:45:13] VSCODE | Receiving message from panel: open-dashboard ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getLocalization ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getViewType ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: viewData ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getTheme ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getData ["VERBOSE" - 11:45:13] VSCODE | SettingsListener:getSettings:start - clear: false ["VERBOSE" - 11:45:13] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getMode ["VERBOSE" - 11:45:13] DASHBOARD | Loaded with view contents ["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 11:45:13] DASHBOARD | Message received: viewData ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 11:45:13] DASHBOARD | Message received: settings ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState ["INFO" - 11:45:13] DASHBOARD | Contents view loaded with 0 pages ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: setTitle ["VERBOSE" - 11:45:13] DASHBOARD | Settings loaded ["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 11:45:13] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:45:13] DASHBOARD | Message received: pages ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:45:13] VSCODE | Folders:get:start ["VERBOSE" - 11:45:13] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:13] DASHBOARD | Settings loaded ["VERBOSE" - 11:45:13] DASHBOARD | Pages loaded - 47 pages ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getPinnedItems ["VERBOSE" - 11:45:13] DASHBOARD | Message received: pages ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:45:13] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:45:13] VSCODE | Folders:get:start ["VERBOSE" - 11:45:13] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:13] DASHBOARD | Message received: searchReady ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState ["VERBOSE" - 11:45:13] DASHBOARD | Message received: loading ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getState ["INFO" - 11:45:13] DASHBOARD | Contents view loaded with 47 pages ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:45:13] DASHBOARD | Message received: getPinnedItems ["VERBOSE" - 11:45:14] DASHBOARD | Message received: getState ["VERBOSE" - 11:45:14] DASHBOARD | Message received: getContentLocales ["INFO" - 11:45:22] VSCODE | Reloading config... ["VERBOSE" - 11:45:22] VSCODE | Folders:clearCached ["INFO" - 11:45:22] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 11:45:22] VSCODE | Reloaded config... ["INFO" - 11:45:22] VSCODE | Front Matter CMS: Settings have been refreshed. ["INFO" - 11:45:23] VSCODE | Triggering listener: settings-init ["INFO" - 11:45:23] VSCODE | Triggering listener: settings-global ["VERBOSE" - 11:45:23] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 11:45:23] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 11:45:23] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:45:23] VSCODE | Folders:get:start ["VERBOSE" - 11:45:23] VSCODE | Folders:get:end ["INFO" - 11:45:23] VSCODE | Triggering listener: panel-listener ["INFO" - 11:45:23] VSCODE | Getting panel settings ["INFO" - 11:45:23] VSCODE | Triggering listener: dashboard-listener ["VERBOSE" - 11:45:23] VSCODE | SettingsListener:getSettings:start - clear: true ["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 46 ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:start ["VERBOSE" - 11:45:23] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:45:23] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:45:23] VSCODE | Folders:get:start ["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders ["INFO" - 11:45:23] VSCODE | Sending message to panel: settings ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 11:45:23] PANEL | Message received: settings ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 11:45:23] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 11:45:23] VSCODE | Folders:get:start ["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:23] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.md ["VERBOSE" - 11:45:23] VSCODE | Folders:getInfo:end ["INFO" - 11:45:23] VSCODE | Sending message to panel: folderInfo ["VERBOSE" - 11:45:23] PANEL | Message received: folderInfo ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 2158 ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.mdx ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:start - /Users/kevin/Documents/opt/miniblog/**/*.markdown ["VERBOSE" - 11:45:23] VSCODE | Folders:findFolders:end - 12 ["VERBOSE" - 11:45:23] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 11:45:23] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 11:45:23] VSCODE | SettingsListener:getSettings:end - setting keys: 32 ["VERBOSE" - 11:45:23] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 11:45:23] DASHBOARD | Message received: settings ["VERBOSE" - 11:45:23] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:45:23] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:45:23] VSCODE | Folders:get:start ["VERBOSE" - 11:45:23] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:23] DASHBOARD | Settings loaded ["VERBOSE" - 11:45:23] DASHBOARD | Pages loaded - 47 pages ["VERBOSE" - 11:45:23] DASHBOARD | Message received: getState ["VERBOSE" - 11:45:23] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:45:48] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:45:48] PANEL | Message received: loading ["INFO" - 11:45:49] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:45:49] PANEL | Message received: metadata ["INFO" - 11:45:49] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:45:49] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:45:49] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:45:49] DASHBOARD | Message received: getBranch ["VERBOSE" - 11:45:49] PANEL | Message received: getBranch ["VERBOSE" - 11:45:49] PANEL | Message received: is-server-started ["VERBOSE" - 11:45:50] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:45:51] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:45:52] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:45:52] PANEL | Message received: metadata ["VERBOSE" - 11:45:56] VSCODE | Receiving message from dashboard: createContent ["VERBOSE" - 11:45:56] VSCODE | Folders:get:start ["VERBOSE" - 11:45:56] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:45:56] VSCODE | Folders:get:start ["VERBOSE" - 11:45:56] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:05] VSCODE | Folders:get:start ["VERBOSE" - 11:46:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:05] VSCODE | Article:formatDate:Start ["VERBOSE" - 11:46:05] VSCODE | Article:formatDate:FieldDateFormat - yyyy-MM-dd ["VERBOSE" - 11:46:06] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["INFO" - 11:46:06] VSCODE | Sending message to panel: mediaSelectionData ["INFO" - 11:46:06] VSCODE | Front Matter CMS: Your new content has been created. ["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 11:46:06] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:06] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:46:06] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:06] PANEL | Message received: loading ["VERBOSE" - 11:46:06] DASHBOARD | Message received: viewData ["INFO" - 11:46:06] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:46:06] PANEL | Message received: mediaSelectionData ["INFO" - 11:46:06] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:46:06] PANEL | Message received: metadata ["INFO" - 11:46:06] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:46:06] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:46:06] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:46:06] DASHBOARD | Message received: getBranch ["VERBOSE" - 11:46:06] PANEL | Message received: metadata ["VERBOSE" - 11:46:06] PANEL | Message received: getBranch ["VERBOSE" - 11:46:06] PANEL | Message received: is-server-started ["INFO" - 11:46:06] VSCODE | Cache cleared ["VERBOSE" - 11:46:06] VSCODE | Folders:getInfo:end ["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages: Parsing folder posts - 47 ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:06] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:06] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 11:46:06] DASHBOARD | Message received: pages ["VERBOSE" - 11:46:06] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:46:06] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:46:06] VSCODE | Folders:get:start ["VERBOSE" - 11:46:06] VSCODE | Folders:get:end ["VERBOSE" - 11:46:06] DASHBOARD | Settings loaded ["VERBOSE" - 11:46:06] DASHBOARD | Pages loaded - 47 pages ["VERBOSE" - 11:46:06] DASHBOARD | Message received: searchReady ["VERBOSE" - 11:46:06] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 11:46:06] DASHBOARD | Message received: getState ["INFO" - 11:46:06] DASHBOARD | Contents view loaded with 47 pages ["VERBOSE" - 11:46:06] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:46:06] DASHBOARD | Message received: loading ["INFO" - 11:46:07] VSCODE | Sending message to panel: metadata ["VERBOSE" - 11:46:07] PANEL | Message received: metadata ["INFO" - 11:46:34] VSCODE | File watcher execution for (change): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md.git ["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 11:46:34] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:34] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:46:34] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:34] VSCODE | Folders:getInfo:end ["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages: Parsing folder posts - 47 ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["INFO" - 11:46:34] VSCODE | Cache cleared ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:34] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:34] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 11:46:34] DASHBOARD | Message received: pages ["VERBOSE" - 11:46:34] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:46:34] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:46:34] VSCODE | Folders:get:start ["VERBOSE" - 11:46:34] VSCODE | Folders:get:end ["VERBOSE" - 11:46:34] DASHBOARD | Message received: searchReady ["VERBOSE" - 11:46:34] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 11:46:34] DASHBOARD | Message received: getState ["VERBOSE" - 11:46:35] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:46:35] DASHBOARD | Message received: loading ["INFO" - 11:46:36] VSCODE | File watcher execution for (change): /Users/kevin/Documents/opt/miniblog/src/content/posts/2024-12-29-markitdown.md.git ["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 11:46:36] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:36] VSCODE | Folders:getInfo:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.md ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 47 ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.mdx ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:start - /Users/kevin/Documents/opt/miniblog/src/content/posts/**/*.markdown ["VERBOSE" - 11:46:36] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 11:46:36] VSCODE | Folders:getInfo:end ["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages: Parsing folder posts - 47 ["INFO" - 11:46:36] VSCODE | Cache cleared ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 11:46:36] VSCODE | Folders:clearCached ["VERBOSE" - 11:46:36] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 11:46:36] DASHBOARD | Message received: pages ["VERBOSE" - 11:46:36] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 11:46:36] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 11:46:36] VSCODE | Folders:get:start ["VERBOSE" - 11:46:36] VSCODE | Folders:get:end ["VERBOSE" - 11:46:36] DASHBOARD | Message received: searchReady ["VERBOSE" - 11:46:36] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 11:46:36] DASHBOARD | Message received: getState ["VERBOSE" - 11:46:36] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 11:46:36] DASHBOARD | Message received: loading ["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:46:52] PANEL | Message received: loading ["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 11:46:52] PANEL | Message received: loading ["VERBOSE" - 11:46:52] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:53] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:54] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:55] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:56] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 11:46:57] VSCODE | Receiving message from panel: getBranch ["INFO" - 11:46:57] VSCODE | Receiving message from panel: is-server-started ["INFO" - 11:46:57] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 11:46:57] DASHBOARD | Message received: getBranch ["VERBOSE" - 11:46:57] PANEL | Message received: getBranch ["VERBOSE" - 11:46:57] PANEL | Message received: is-server-started ["VERBOSE" - 11:46:57] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:58] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:46:59] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:00] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:01] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:02] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:03] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:04] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:05] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:06] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:07] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:08] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:09] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:10] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:11] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:12] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:13] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 11:47:13] VSCODE | Trigger page update: onDidChangeTextEditorSelection ``` <!-- github-comment-id:2564602636 -->
Author
Owner

I also recorded an initialization video for you to see if there are any issues.

https://youtu.be/OqlZmokaybQ

I also recorded an initialization video for you to see if there are any issues. https://youtu.be/OqlZmokaybQ <!-- github-comment-id:2564606689 -->
Author
Owner

You showed the output from the main extension version, could you use the beta version: https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter-beta - it contains a bit more logging during the page parsing. Hope to spot the issue there.

You showed the output from the main extension version, could you use the beta version: https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter-beta - it contains a bit more logging during the page parsing. Hope to spot the issue there. <!-- github-comment-id:2564646378 -->
Author
Owner

beta version logs

["INFO" - 14:24:30] VSCODE | Activating Front Matter CMS version 10.6.125353099...
["INFO" - 14:24:30] VSCODE | No ".frontmatter/config" config files found.
["INFO" - 14:24:30] VSCODE | Logging level: verbose
["INFO" - 14:24:30] VSCODE | Project config path: d:\github\miniblog\frontmatter.json
["VERBOSE" - 14:24:30] VSCODE | Folders:get:start
["VERBOSE" - 14:24:30] VSCODE | Folders:get:end
["VERBOSE" - 14:24:30] VSCODE | Trigger page update: main
["VERBOSE" - 14:24:30] VSCODE | DashboardSettings:getSettings:start
["VERBOSE" - 14:24:30] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 14:24:30] VSCODE | Folders:clearCached
["VERBOSE" - 14:24:30] VSCODE | Folders:getInfo:start
["VERBOSE" - 14:24:30] VSCODE | Folders:get:start
["VERBOSE" - 14:24:30] VSCODE | Folders:get:end
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md
["VERBOSE" - 14:24:30] VSCODE | GitListener:getSettings:start
["VERBOSE" - 14:24:30] VSCODE | GitListener:getSettings:end:enabled
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 49
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown
["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 14:24:31] VSCODE | Folders:get:start
["VERBOSE" - 14:24:31] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:24:31] VSCODE | Folders:getContentFolders:start
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.md
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 2
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.mdx
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.markdown
["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 0
["VERBOSE" - 14:24:31] VSCODE | Folders:getContentFolders:end
["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getDataFiles:start
["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getDataFiles:end
["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getSettings:end
["VERBOSE" - 14:24:31] VSCODE | Folders:getInfo:end
["VERBOSE" - 14:24:31] VSCODE | PagesParser:parsePages: Parsing folder posts - 49
["VERBOSE" - 14:24:31] VSCODE | Folders:clearCached
["VERBOSE" - 14:24:31] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 14:24:32] VSCODE | Folders:get:start
["VERBOSE" - 14:24:32] VSCODE | Folders:get:end
["INFO" - 14:24:40] VSCODE | Sending message to panel: metadata
["INFO" - 14:24:41] VSCODE | Receiving message from panel: getLocalization
["INFO" - 14:24:41] VSCODE | Sending request result to panel: getLocalization
["INFO" - 14:24:41] VSCODE | Receiving message from panel: getBranch
["INFO" - 14:24:41] VSCODE | Receiving message from panel: get-data
["VERBOSE" - 14:24:41] VSCODE | DataListener:getFoldersAndFiles:start
["VERBOSE" - 14:24:41] VSCODE | DataListener:getFoldersAndFiles:end
["VERBOSE" - 14:24:41] VSCODE | Folders:getInfo:start
["VERBOSE" - 14:24:41] VSCODE | Folders:get:start
["VERBOSE" - 14:24:41] VSCODE | Folders:get:end - cached folders
["INFO" - 14:24:41] VSCODE | Getting panel settings
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md
["VERBOSE" - 14:24:41] VSCODE | GitListener:getSettings:start
["VERBOSE" - 14:24:41] VSCODE | GitListener:getSettings:end:enabled
["INFO" - 14:24:41] VSCODE | Receiving message from panel: get-mode
["INFO" - 14:24:41] VSCODE | Receiving message from panel: getLocalization
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 49
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown
["INFO" - 14:24:41] VSCODE | Sending message to panel: metadata
["VERBOSE" - 14:24:41] PANEL | Message received: getBranch
["VERBOSE" - 14:24:41] PANEL | Message received: metadata
["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 0
["INFO" - 14:24:41] VSCODE | Receiving message from panel: getBranch
["VERBOSE" - 14:24:41] PANEL | Message received: getBranch
["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:start:1
["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:end:1
["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:start:2
["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:end:2
["VERBOSE" - 14:24:41] VSCODE | Folders:get:start
["VERBOSE" - 14:24:41] VSCODE | Folders:get:end - cached folders
["INFO" - 14:24:41] VSCODE | Sending message to panel: settings
["VERBOSE" - 14:24:41] PANEL | Message received: settings
["VERBOSE" - 14:24:41] VSCODE | Folders:getInfo:end
["INFO" - 14:24:41] VSCODE | Sending message to panel: folderInfo
["INFO" - 14:24:41] VSCODE | Receiving message from panel: is-server-started
["INFO" - 14:24:41] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 14:24:41] PANEL | Message received: folderInfo
["VERBOSE" - 14:24:41] PANEL | Message received: is-server-started
["VERBOSE" - 14:24:44] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 14:24:44] PANEL | Message received: loading
["INFO" - 14:24:45] VSCODE | Sending message to panel: metadata
["VERBOSE" - 14:24:45] PANEL | Message received: metadata
["INFO" - 14:24:45] VSCODE | Receiving message from panel: getBranch
["INFO" - 14:24:45] VSCODE | Receiving message from panel: is-server-started
["INFO" - 14:24:45] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 14:24:45] PANEL | Message received: getBranch
["VERBOSE" - 14:24:45] PANEL | Message received: is-server-started
["INFO" - 14:24:47] VSCODE | Receiving message from panel: open-dashboard
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getLocalization
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getViewType
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: viewData
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getTheme
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getData
["VERBOSE" - 14:24:47] VSCODE | SettingsListener:getSettings:start - clear: false
["VERBOSE" - 14:24:47] VSCODE | SettingsListener:getSettings:end - setting keys: 33
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: settings
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getMode
["VERBOSE" - 14:24:47] DASHBOARD | Loaded with view contents
["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 14:24:47] DASHBOARD | Message received: viewData
["VERBOSE" - 14:24:47] DASHBOARD | Message received: settings
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState
["INFO" - 14:24:47] DASHBOARD | Contents view loaded with 0 pages
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: setTitle
["VERBOSE" - 14:24:47] DASHBOARD | Settings loaded
["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 0 pages
["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 14:24:47] DASHBOARD | Message received: pages
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 14:24:47] VSCODE | Folders:get:start
["VERBOSE" - 14:24:47] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:24:47] DASHBOARD | Settings loaded
["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 49 pages
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getPinnedItems
["VERBOSE" - 14:24:47] DASHBOARD | Message received: pages
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 14:24:47] VSCODE | Folders:get:start
["VERBOSE" - 14:24:47] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:24:47] DASHBOARD | Message received: searchReady
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState
["VERBOSE" - 14:24:47] DASHBOARD | Message received: loading
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState
["INFO" - 14:24:47] DASHBOARD | Contents view loaded with 49 pages
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getPinnedItems
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState
["VERBOSE" - 14:24:47] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 14:25:05] VSCODE | Receiving message from dashboard: refreshPages
["VERBOSE" - 14:25:05] VSCODE | PagesParser:parsePages:start
["VERBOSE" - 14:25:05] VSCODE | Folders:clearCached
["VERBOSE" - 14:25:05] VSCODE | Folders:getInfo:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 49
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 0
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown
["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 0
["INFO" - 14:25:05] VSCODE | Cache cleared
["VERBOSE" - 14:25:05] VSCODE | Folders:getInfo:end
["VERBOSE" - 14:25:05] VSCODE | PagesParser:parsePages: Parsing folder posts - 49
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Demo","date":"2024-12-30","slug":"demo","description":"This is a demo post","tags":["demo","post"],"fmContentType":"posts"}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Demo","date":"2024-12-30","slug":"demo","description":"This is a demo post","tags":["demo","post"],"fmContentType":"posts","fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-30-demo.md","fmCacheModifiedTime":1735539458561,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-30-demo.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-30-demo.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-30-demo.md","fmFileName":"2024-12-30-demo.md","fmDraft":null,"fmModified":1735539458561,"fmPublished":1735488000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmBody":"\ntest","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"使用 Beancount 复盘自己的一年消费情况","slug":"annual-financial-analysis","date":"2024-12-29T06:00:30.648Z","description":"本文介绍了如何使用 Beancount 复式记账工具对一年的消费情况进行复盘。通过导出支付宝、微信等账户的账单,使用 Beancount-Trans 工具将账单转换为 Beancount 格式,并通过 Fava 查看和分析报表,帮助用户更好地了解自己的消费习惯和财务状况。","tags":["财务","复盘","beancount","fava"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"使用 Beancount 复盘自己的一年消费情况","slug":"annual-financial-analysis","date":"2024-12-29T06:00:30.648Z","description":"本文介绍了如何使用 Beancount 复式记账工具对一年的消费情况进行复盘。通过导出支付宝、微信等账户的账单,使用 Beancount-Trans 工具将账单转换为 Beancount 格式,并通过 Fava 查看和分析报表,帮助用户更好地了解自己的消费习惯和财务状况。","tags":["财务","复盘","beancount","fava"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-29-年度账单复盘.md","fmCacheModifiedTime":1735529686618,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-29-年度账单复盘.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-29-年度账单复盘.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-29-年度账单复盘.md","fmFileName":"2024-12-29-年度账单复盘.md","fmDraft":null,"fmModified":1735529686618,"fmPublished":1735452030648,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 使用 Beancount 复式记账工具需要一定的前置知识,如果你对复式记账不熟悉,可以先学习一下复式记账的基本概念。\n\n### 写在前面\n\n线上支付时代,我们对金钱的感知变得钝感,每次消费掏出手机“刷”的一下十几二十元就出去了,我们的钱就是在没有感知中一笔一笔的的消费掉。一年下来,我们的钱流向了哪里似乎没有多少的概念。我自己也是一个花钱如流水的人,看到想要的东西就会买,似乎只有不停的买才能让自己稍微获得一丝平静和快乐。我也是被消费主义毒害的一员,我想做出改变,复盘自己整年的消费就是改变的开始。\n\n### 本次复盘用到的工具\n\n- Beancount: 一个文本记账工具,可以用来记录每笔消费和收入,生成报表等。\n- Fava: Beancount的 web 界面,可以方便的查看报表。\n- Beancount-Trans: 账单解析器,可以将支付宝、微信、银行等账单转换为beancount 的格式。\n\n> 为什么不用 Excel 或其它记账软件?因为我更倾向于开源的工具,且用文本记账不担心数据丢失,也不用担心数据格式的兼容性。\n\n### 复盘的步骤\n\n1. 导出各个账户的账单,包括支付宝、微信、银行等。\n2. 使用 Beancount-Trans 将账单转换为 Beancount 的格式。\n3. 使用 Fava 查看报表,分析自己的消费情况。\n\n#### 导出账单\n\n这里只演示了支付宝和微信的账单导出,银行账单的导出方法可以参考各个银行的官方文档。\n\n##### 支付宝账单导出\n\n支付宝导出账单的方法:打开支付宝APP -> 我的 -> 我的账单 -> 更多(右上角的三个点)-> 开具交易流水证明 -> 用于个人对账 -> 选择时间范围 -> 填写电子邮箱。\n\n##### 微信账单导出\n\n微信导出账单的方法:打开微信APP -> 我 -> 服务 -> 钱包 -> 账单 -> 常见问题(右上角) -> 下载账单 -> 用于个人对账 -> 选择时间范围 -> 填写电子邮箱。\n\n> 微信比较坑的地方是每次只能导出三个月的账单,如果需要导出一年的账单,需要分四次导出。账单的解压密码会通过 APP 发送。\n\n导出的账单格式如下\n\n```bash\ntree\n.\n├── alipay_record_20241222_204257.csv\n└── 微信支付账单(20240101-20240331)——【解压密码可在微信支付公众号查看】.csv\n```\n\n#### 使用 Beancount-Tran 转换账单\n\n> 方便 csv 格式的账单转换为 beancount 格式的账单可以通过 [Beancount-Tran](https://trans.dhr2333.cn/) 工具来实现。它的用法不单单是进行简单的格式转换,还可以预先配置好一些支出的映射规则,让转换更智能。\n\n1. 打开 [Beancount-Tran](https://trans.dhr2333.cn/) 网站并注册一个自己的账号。\n2. 在`映射管理`菜单下选择`支出映射`,添加一些支出的映射规则。\n\n![支出映射](/images/trans-03.png)\n\n> 这里我添加了一些账单里出现频率较高的关键字,比如`盒马`、`KFC`、`星巴克`等,这样在转换账单的时候就会自动将这些支出映射到对应的支出账户。一些不常见的支出可以在转换后手动修改。\n\n3. 在`映射管理`菜单下选择`资产映射`,添加一些资产的映射规则。\n\n> 每一笔支出都会从这个账户里扣除对应的金额,我平时只用这一张卡消费,所以这里只添加了一条规则。(如果多卡用户可以自行添加映射规则)\n\n![资产映射](/images/trans-01.png)\n\n4. 做好关系映射后,点击格式转换菜单,上传对应的账单文件,等待转换结果。\n\n> 解析成功后,会返回一个 beancount 格式的账单内容,可以直接复制到本地保存。\n\n![格式转换](/images/trans-02.png)\n\n#### 使用 Fava 查看报表\n\n在演示中,我将账单转换后的内容保存到了一个名为`2024.beancount`的文件中,然后使用 Fava 来查看报表。\n\n```bash\nfava 2024.beancount\nStarting Fava on http://127.0.0.1:5000\n```\n\n访问`http://127.0.0.1:5000`即可查看报表。\n\n![fava-web](/images/fava-web.png)\n\n![fava-web](/images/fava-web02.png)\n\n此时,我们的账单已经转换为了 beancount 的格式,可以方便的查看报表,分析自己的消费情况。但是,有些支出对应的分类可能不太准确,可以在 Fava 中手动修改。如果需要重复修改的支出比较多,我们可以回到转换账单的步骤,重新新增支出映射关系,这可以大大减少手动修改的工作量。\n\n### 总结\n\n通过 Beancount 来复盘自己的消费对新手来说或许有难度,需要 Beancount 复式记账的前置知识,对复式记账感兴趣的朋友可以花个半天时间学习一下。在学习了复式记账的基本概念后就可以花点心思来做这件事。\n\n博主本人也是复式记账新手,写这篇文章的目的更多是出于分享的目的,希望能够帮助到有需要的朋友。如果有什么问题或者建议,欢迎在评论区留言。\n\n\n### 参考\n\n- [Beancount](https://github.com/beancount/beancount/)\n- [Fava](https://github.com/beancount/fava/)\n- [Beancount-Tran](https://github.com/dhr2333/Beancount-Trans)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"MarkItDown:文档转换工具","slug":"markitdown","date":"2024-12-29","description":"MarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。","tags":["markdown","python"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"MarkItDown:文档转换工具","slug":"markitdown","date":"2024-12-29","description":"MarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。","tags":["markdown","python"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-29-markdown.md","fmCacheModifiedTime":1735529686618,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-29-markdown.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-29-markdown.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-29-markdown.md","fmFileName":"2024-12-29-markdown.md","fmDraft":null,"fmModified":1735529686618,"fmPublished":1735401600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![markitdown](/images/Screenshot%202024-12-29%20at%2012.32.42.png)\n\n### 介绍\n\nMarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。MarkItDown 支持的文件格式包括:\n\n- PDF\n- Word\n- Excel\n- PowerPoint\n- HTML\n- Text-based formats (CSV, JSON, XML)\n- Images (EXIF metadata and OCR)\n...\n\n### 安装\n\nMarkItDown 是 Python 编写的,可以通过 pip 安装:\n\nwindows or linux:\n\n```bash\npip install markitdown\n```\n\nmacOS:\n\n```bash\nbrew install markitdown\n```\n\n### 使用\n\n使用 MarkItDown 非常简单,只需要在终端中输入以下命令:\n\n```bash\nmarkitdown  test.pdf test.md\n```\n\n或者使用 -o 参数指定输出文件:\n\n```bash\nmarkitdown  test.pdf -o rename.md\n```\n\n### 仓库地址\n\nhttps://github.com/microsoft/markitdown","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Ghostty: 新一代终端工具","slug":"ghostty-introduction","description":"Ghostty 是一款新一代终端工具,它的特点是原生、功能丰富、更快、开源。","date":"2024-12-28","tags":["Ghostty","终端工具"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Ghostty: 新一代终端工具","slug":"ghostty-introduction","description":"Ghostty 是一款新一代终端工具,它的特点是原生、功能丰富、更快、开源。","date":"2024-12-28","tags":["Ghostty","终端工具"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmCacheModifiedTime":1735529686617,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-28-ghostty-新一代终端工具介绍.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmFileName":"2024-12-28-ghostty-新一代终端工具介绍.md","fmDraft":null,"fmModified":1735529686617,"fmPublished":1735315200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![ghostty](/images/ghostty.png)\n\n经过一段时间的内测,Ghostty 在元旦前迎来了自己的正式版本。在发布之前我没有参加测试,但是也通过论坛侧面看到了一些关于 Ghostty 评价的帖子,不少用户都对其抱有较高的期望。我也在第一时间下载了这款工具,下面是我对 Ghostty 的一些介绍。\n\n### 关于 Ghostty\n\n介绍 Ghostty 主要从 4 个方面来说:*原生、功能丰富、更快、开源*。\n\n#### 原生\n\n所谓原生,是指 Ghostty 的外观、交互等行为与系统原生终端一致。这一点在使用过程中可以明显感受到,Ghostty 的界面风格与系统终端几乎一模一样,这对于用户来说是一种很好的体验。\n\n在 Mac 上,用户界面使用 Swift 编写,并且使用了 Appkit 和 SwiftUI。在 Linux 上,用户界面使用 Zig 编写,使用了 GTK4。\n\nGhostty 与运行平台特有功能系统集成。在 Mac 上, Ghostty 支持 `Quick Look`,`force touch`,`macOS secure input API`, 重启时支持内置窗口状态恢复等。这些功能都是 macOS 提供的原生 API。(在 Linux 中没有对应 API)\n\n#### 功能丰富\n\nGhostty 的功能主要分为两大类:终端功能和应用程序功能。\n\n在终端功能上,Ghostty 支持 `Kitty` 图形协议,`light/dark mode notifications`,超链接等。像 Neovim, Zellij 等终端应用程序就能比其它终端模拟器发挥更多的特性。\n\n在应用功能上, `Ghostty supports native tabs`,`splits`,`macOS 下拉终端`、`主题的 明/暗模式`等。\n\n#### 更快\n\nGhostty 的目标是与最快的终端模拟器同级。它的快主要体现在:启动时间、滚动速度、IO 吞吐量、控制序列吞吐量、帧率等方面。\n\n未来,开发者会提供更详细的基准测试,并解释 Ghostty 在不同性能类别中的表现。\n\n#### 开源\n\nGhostty 是开源的,你可以在 [GitHub](https://github.com/ghostty-org/ghostty) 上找到它的源代码。Ghostty 的开发者希望通过开源的方式,让更多的人参与到 Ghostty 的开发中来,共同打造一个更好的终端工具。\n\n### 与 ghostty config 搭配食用\n\nGhostty 默认的配置文件是 `~/.config/ghostty/config.toml`,你可以通过修改这个文件来定制 Ghostty 的外观和行为。但是,如果你不想自己写配置文件,可以使用 [ghostty config](https://ghostty.zerebos.com/)  工具来生成配置文件。\n\n![ghostty-config](/images/ghostty-config.png)\n\nconfig 模版\n\n```toml\n# Config generated by Ghostty Config\ntitle = Ghostty\nclipboard-read = allow\nclipboard-write = allow\nwindow-theme = system\nfont-size = 18\nfont-family = FiraCode Nerd Font Mono\nfont-family-bold = FiraCode Nerd Font Mono\nfont-family-italic = FiraCode Nerd Font Mono\nfont-family-bold-italic = FiraCode Nerd Font Mono\nwindow-title-font-family = FiraCode Nerd Font Mono\ntheme = Everforest Dark - Hard\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"一个月爬楼减脂记录","description":"记录一个月的爬楼梯减脂之旅,分享我的感受与坚持,助你在寒冬中找到健身新方式。","slug":"one-month-stair-climbing-fat-loss-record","date":"2024-12-05","tags":["减脂","运动"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"一个月爬楼减脂记录","description":"记录一个月的爬楼梯减脂之旅,分享我的感受与坚持,助你在寒冬中找到健身新方式。","slug":"one-month-stair-climbing-fat-loss-record","date":"2024-12-05","tags":["减脂","运动"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmCacheModifiedTime":1735529686617,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-05-一个月爬楼减脂记录.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmFileName":"2024-12-05-一个月爬楼减脂记录.md","fmDraft":null,"fmModified":1735529686617,"fmPublished":1733328000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 这里记录了 12 月份的爬楼记录。\n\n到了 12 月份,南京已经降温,再想出去跑步已经需要穿棉服了。考虑到气温低和时不时下雨的天气,就失去外出跑步的动力。既然不想跑步,那也得找个其它的方式来替代,于是就想到了爬楼梯。\n\n> 3 * 30 3次30层楼\n\n 日期 | 楼层 | 感受\n---------|----------|---------\n 2024-12-05 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-06 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-07 | 4 * 30 | ⭐️⭐️⭐️⭐️\n 2024-12-08 | NULL | NULL\n 2024-12-09 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-10 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-11 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-12 | 4 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-13 | NULL | NULL\n 2024-12-14 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-15 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-16 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-17 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-18 | NULL | NULL\n 2024-12-19 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-20 | NULL | NULL\n 2024-12-21 | NULL | NULL\n 2024-12-22 | NULL | NULL\n 2024-12-23 | 4 * 30 | ⭐️⭐️\n 2024-12-24 | NULL | NULL\n 2024-12-25 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-26 | NULL | NULL\n 2024-12-27 | 4 * 30 | ⭐️⭐️","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"使用 VSCode Front Matter 插件管理静态博客","slug":"vscode-front-matter-cms","description":"这篇文章介绍了如何使用 VSCode 插件 Front Matter 来管理静态博客。通过该插件,用户可以在 VSCode 中像在后台一样管理博客文章,包括修改文章的标题、标签和描述等信息。此外,文章还详细讲解了如何通过 FM 插件新建文章,并利用 Copilot 智能生成文章的元数据。","date":"2024-12-23","tags":["blog","Front Matter","VSCode","插件","静态博客","AI"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"使用 VSCode Front Matter 插件管理静态博客","slug":"vscode-front-matter-cms","description":"这篇文章介绍了如何使用 VSCode 插件 Front Matter 来管理静态博客。通过该插件,用户可以在 VSCode 中像在后台一样管理博客文章,包括修改文章的标题、标签和描述等信息。此外,文章还详细讲解了如何通过 FM 插件新建文章,并利用 Copilot 智能生成文章的元数据。","date":"2024-12-23","tags":["blog","Front Matter","VSCode","插件","静态博客","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmCacheModifiedTime":1735024685956,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmFileName":"2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmDraft":null,"fmModified":1735024685956,"fmPublished":1734883200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n许多博客主习惯使用 hexo、hugo 等静态博客生成器,这样无需购买服务器即可通过静态页面托管自己的网站。当然,这类生成器也有一些不足之处,其中最大的缺点可能就是无法像动态博客那样方便地管理文章。今天,我向大家推荐一款 VSCode 插件——Front Matter。通过这款插件,你可以在 VSCode 中轻松地管理自己地博客文章。\n\n## Front Matter 插件(下面简称 FM)\n\n在 vscode 插件市场搜索 `Front Matter`,点击安装即可。\n\n仓库地址:https://github.com/estruyf/vscode-front-matter\n\n安装 FM 插件后,你可以在 vscode 中看到一个新的侧边栏,打开 FM 根据提示初始化一个项目 --> 选择自己的博客框架 --> 选择自己的文章目录,目前经过迭代已经支持市面上主流的静态博客框架,如 hexo、hugo、astro 等。当初始化成功后,打开 `Open dashboard` 可以看到你的文章列表,点击文章后,你可以看到文章的 Front Matter 信息,你可以在这里修改文章的标题、标签、描述等信息。\n\n![dash](/images/dashboard-7.1.0.png)\n\n## 通过 FM 新建一篇文章\n\n点击 `Create content`,输入文章标题,回车确认即可新建一篇文章。新建文章后,你可以在文章的 Front Matter 中看到文章的标题、标签、描述等信息,你可以在这里修改文章的信息。开启 Copilot 后,你还可以通过 Copilot 来智能生成 title、slug、description 等信息。\n\n![new-post](/images/new-post.png)\n\n## Front Matter 优势总结\n\n1. **快速新建文章**:通过 FM 插件,你可以快速新建一篇文章,不用再手动创建文件,修改文件名等操作。\n2. **智能生成文章元数据**:开启 Copilot 后,你可以通过 Copilot 来智能生成文章的元数据,提高工作效率。\n3. **文章信息可视化**:通过 FM 插件,你可以在 vscode 中直观地看到文章的 Front Matter 信息,方便修改文章的信息。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"我的 2024 年度总结","slug":"my-2024-year-summary","description":"2024 年度总结,回顾这一年的工作、运动、健康和财务状况。","date":"2024-12-19","tags":["年终总结"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"我的 2024 年度总结","slug":"my-2024-year-summary","description":"2024 年度总结,回顾这一年的工作、运动、健康和财务状况。","date":"2024-12-19","tags":["年终总结"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmCacheModifiedTime":1734922584000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-19-我的-2024-年度总结.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmFileName":"2024-12-19-我的-2024-年度总结.md","fmDraft":null,"fmModified":1734922584000,"fmPublished":1734537600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n## 第一部分\n\n总结工作、运动、财务状况\n\n### 写在开头\n\n没有反思的总结是赤裸裸的形式主义,诚然我已经做了多年的形式主义。若不是回头翻看去年写的总结,怕是已经忘了当时的豪言壮语。形式不形式先抛开不谈,和往年一样,这个形式得有,得看看这一年又是怎么奇迹般的活过来的。\n\n写今年的总结又不得不从去年写起。2023 年,我荒废了大半年的时间在备考上,终究以相差甚远的成绩与目标扑了个空。成绩未遂人愿,2024 年不得不再次重新找工作,在此之前先去云南大理玩了几天,关于这次旅游的记录也有做过记录:[《云南之旅》](https://blog.chendi.link/posts/yun-nan-zhi-lv)。\n\n前言不必太多,有一个差不多的开场白以至于不那么突兀。下面就近一年来,对工作、生活、运动、学习等多方面进行总结。\n\n### 工作方面\n\n三月底进入一家新公司后一直处于每天摸鱼混日子的状态,要说忙的时候也就是刚进公司时给环境部署了一套监控系统,后续的工作几乎就是围绕监控系统做完善和写一些监控脚本。后面几个月都是没啥事情可忙,闲的时间都用来刷论坛和写一些自己的代码,时间都浪费在了一些无意义的事情上,一年下来没有实际的产出。\n\n项目可谓是写了一个又一个,但是到了年底打开 Github 看一下仓库,又只剩下一些没有用的代码,其它的也都是一边写一边删,似乎在实现了某些功能后,这些代码就变得索然无味,时间就在这种反复中流逝。\n\n> 一句话总结:工作无所建树,薪资停滞不前。看不清前路,也无贵人相助。\n\n### 运动方面\n\n我的运动方式几乎都是跑步,二零二三年因为有几个月处于备考阶段的客观原因总体跑量较少,主观原因就是没有坚持按训练计划执行,今天跑不跑取决于今天的心情状态,运动量的减少直接体现在了体重的增加上。\n\n![2023-runs](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412191606248.png)\n\n二零二四年总体是平稳的一年,没有备考也没有什么需要我用业余时间来完成的事情。按理说今年的运动量会多出不少的,但是看了一下记录后发现其实并不然。虽然每个月都有坚持跑步,但是频率太低了,和我理想的每周维持三次长跑还有很大的差距,只有在四个月份勉强达到了目标,其它月份少则只跑了一次,多的也就平均 7 次。没能按计划执行没有别的理由,就是因为人的惰性和拖延造成的。\n\n![2024-runs](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412191608393.png)\n\n> 一句话总结:人懒不要找理由,论惰性,谁都有,谁都不是大英雄。明年好好再加油,往事不回头。\n\n### 健康方面\n\n人生无非活着,至于怎么活个人有个人的活法,但是健康的活着是普世的标准。所以,生活、工作、爱情、车房...... 在我这里都要排到健康后面,正应了那句老话,健康是 1,它的存在让后面的 0 有了意义。\n\n一年一体检已经第三年了,总的来说身体各项指标都很正常(截至 2024 年体检前)。但是今年 7 月份的体检报道中标出了尿酸偏高(452 umol/L)。不太理解的是,这两年似乎在饮食、运动方面都有刻意去控制,尿酸偏高不知道是哪方面引起的。我只知道自己过去一年不太喝水,不知道是不是一个诱发因素。我把体检报告给医生看,医生似乎并不当回事。\n\n最近感觉到在咽唾沫或打哈气的时候喉咙附近感觉到疼痛,这种疼感觉不到具体的位置。自己感觉还是挺担心的,本月初在医院做了一个彩超,排除了淋巴引起的疼。医生说没什么问题,让我回去自己毛巾热敷一下,不用太担心。后来我也就没有当回事,想着过几天可能会好转。天不遂人愿,这个疼痛一直没有好转似乎还严重了,于是又开始担心起来,计划周六再去医院检查一次。\n\n### 财务方面\n\n微信消费:78875.26\n\n支付宝消费:31760.23\n\n![2024-年度消费报表](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412201700855.png)\n\n财务方面是我一直不想去统计的,害怕面对自己的一些消费账单。作为一个打工人这几年也没能攒下钱,对待金钱的态度似乎有多少花多少,在吃的方面买贵的,在穿着方面买牌子的,在用方面也讲牌子,已经深深陷入资本主义的消费陷阱。\n\n今年买了两台电脑,似乎并没有发挥真正的作用。想用来打游戏发现机器装好后游戏变得没意思了,现在放在家里处于半吃灰状态。另一台 Mac 平时也不常用,工作用的是公司的电脑,自己的笔记本就放在家里看看电视,刷刷网页。\n\n如果当下让我选择一个最想改变的,我就选择改变一下自己的消费观,少买一些不是必须的东西,多一些储蓄。\n\n> 一句话总结:大手大脚把钱花,一看余额傻了吧?辛苦牛马一整年,全给资本做嫁纱。\n\n### 个人成长\n\n这一 part 似乎没什么可写,要说除去工作和一些其它时间,学习在整年中似乎站比很少。没有学习的目标和动力,多次想要把英语学好,每每坚持一段时间就被一些其它的事情影响,最后放弃。要说今年真的学了什么,似乎也就是偶尔看一看西方哲学史,但毕竟西哲里都是一些名词概念,像本原、存在、形式和质料这些,看完也不愿意去深究,不想动脑子。都说看懂西方哲学需要经过长时间的练习,去练习西方人的思维方式并不是一件容易的事情。当然,自己也只是有一点点爱好而已,没指望自己能研究的多么深,只当个打发无聊的方式而已就足够了。在我看来学习西哲是一种无用的知识,它不能给我现实生活带来一些实际的功用,但是却能填补一些精神的空虚。\n\n### Other\n\n原本没有在南京买房的想法,只想工作几年回老家县城买房安度余生,但是看到房价回调外加姐姐的劝说,今年也在姐姐家附近的小区看了几套房子,最近看中了 8 楼的一套,也尝试和房东谈了谈价格,我能给的的价格比房东心理价位低了 8 万,第一次谈判没能成功,后续还能不能谈未知。如果买了房之后,后续的人生可能就是另一种不同的生活,可能不会像现在没有压力的生活。一切都是未知,能做的就是顺其自然。\n\n12.22 日,更新一下买房的进展。\n\n今天约了房东准备至多加两万以总价 162 万的价格成交,但是房东考虑到新房子要等年后四五月份才能搬进去,就和我们协商让他们住到四月底在搬走,我也爽快的答应了。后面就是签合同付定金的流程了,如果不出意外,等贷款下来就按正常程序走了。\n\n## 第二部分\n\n总结一些休闲娱乐、播客等。\n\n### 本年常听的播客节目\n\n- 黑水公园\n- 松鼠大侦探\n- 昭运酒馆\n- 叉点 FM\n- 落日之后\n- 野史下酒\n- 负一楼\n- 肥话连篇\n- 异地登录\n- 黑猫侦探社\n- 怡楽播客\n- 隧道尽头\n- 岩中花述\n- 霓达播客\n\n> 排名不分先后\n\n### Raycast Wrapped 2024\n\n![2024-raycast](https://s1.locimg.com/2024/12/18/a607ec75778bd.jpg)\n\n![2024-raycast](https://s1.locimg.com/2024/12/18/d8947a2c459ce.jpg)\n\n### bilibili\n\n今年 b 站刷的甚少,250h 左右,主要关键词为:西方哲学、公开课、哲学、复旦大学、康德、黑格尔。在 b 站出了暗箱操作抽奖事件后对 b 站没有啥好感了。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"第三方支付平台基础环境部署","slug":"deployment-of-the-base-environment","description":"","date":"2024-12-18","tags":["activemq","redis","zookeeper","mysql"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"第三方支付平台基础环境部署","slug":"deployment-of-the-base-environment","description":"","date":"2024-12-18","tags":["activemq","redis","zookeeper","mysql"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmCacheModifiedTime":1734502406000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-18-第三方支付平台基础环境部署.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmFileName":"2024-12-18-第三方支付平台基础环境部署.md","fmDraft":null,"fmModified":1734502406000,"fmPublished":1734451200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> Centos-7\n\n### mysql-5.7.44\n\n```bash\nyum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\nyum list installed | grep mysql\nyum repolist all | grep -E \"mysql[0-9]+-community/x86\"\nyum-config-manager --disable mysql80-community\nyum-config-manager --enable mysql57-community\nrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022\nyum install -y mysql-community-server\nsystemctl start mysqld\nsystemctl status mysqld.service\ngrep 'temporary password' /var/log/mysqld.log\n\nmysql -u root -p\nUPDATE mysql.user SET host = '%' WHERE user = 'root'; #允许 root 远程登录\nALTER USER 'root'@'%' IDENTIFIED BY 'yourpassword'; #修改密码\nFLUSH PRIVILEGES; #刷新权限\n```\n\n### apache-zookeeper\n\n```bash\nwget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz\n/opt/apache-zookeeper-3.5.7-bin #安装路径\nbin/zkServer.sh start #启动\nbin/zkServer.sh stop  #停止\n```\n\n### apache-activemq\n\n```bash\nwget https://archive.apache.org/dist/activemq/5.15.16/apache-activemq-5.15.16-bin.tar.gz\n\n/opt/apache-activemq-5.15.16 #安装路径\nbin/zkServer.sh start #启动\nbin/zkServer.sh status #查看状态\nhttp://10.0.0.70:8161/admin/ #后台\nadmin admin\n```\n\n### redis\n\n```bash\nyum install -y redis\nsystemctl start redis.service\n\nvim /etc/redis.conf\n...\nbind  0.0.0.0\n...\n```\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"两种生命,三类乐趣","slug":"two-lives-three-kinds-of-fun","description":"","date":"2024-12-17","tags":["叔本华"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"两种生命,三类乐趣","slug":"two-lives-three-kinds-of-fun","description":"","date":"2024-12-17","tags":["叔本华"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmCacheModifiedTime":1734426574000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-17-两种生命,三种乐趣.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmFileName":"2024-12-17-两种生命,三种乐趣.md","fmDraft":null,"fmModified":1734426574000,"fmPublished":1734364800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 两种生命\n\n叔本华在《一个悲观主义者的积极思考》书中引用了伏尔泰的一句话:“没有真正的需要,就没有真正的乐趣。”这些需要可以是自然的、艺术的、文学的,之所以这些乐趣与一部分人无缘,是因为这些人不需要。若把这些乐趣送给那些不需要的人和不会欣赏的人,就好比期望白发苍苍的老朽沉溺于热恋一般。\n\n基于前提,他认为拥有这种天赋的人具有两种生命,一个是自身的生命,一个是睿智的生命。后者被他看作是真实的生命,前者只不过是提升后者的一种手段。缺少这种天赋的人只会把当下这种空虚、肤浅的自身的生命当成生命的目的。\n\n### 三类乐趣\n\n- 第一类是维持和满足“生命力”——诸如从食物、饮料、消化、休息和睡眠所得来的乐趣,世界上有若干种族就以这些作为他们典型的民族性的乐趣。\n- 第二类是从“体力”得来的乐趣,包括步行、跑步、摔跤、跳舞、斗剑、骑马,以及类似的体能活动,有的当作运动,有的成为军事生活或真实战争的一部分。\n- 第三类是满足“感受力”或感性所得来的乐趣,包括观察、思考、体验、欣赏诗文或音乐、学习新事物、阅读、静修、从事发明、搞哲学等等。\n\n他认为第三类感性所带来的乐趣要大于前面两类,其根据是:“我们所运用的能力愈为高尚,它所给我们的乐趣就愈大,因为乐趣总是涉及我们如何运用能力,而快乐就在于乐趣不断地重复。在这方面,感性所带来的乐趣,无疑会超过其他基本的两类。”这句话似乎只能成为假设不能成为根据,我没办法从字面推断出是否成立。\n\n我读到这篇文章的时候,想到艺术是否有高贵低贱之分?我们活在马克思主义的意识形态下,其实不难解释。人类社会是发展的,而发展的实质就是事物的前进、上升,是新事物代替旧事物。那些得到保留甚至发展的是好的事物,一些消失在时代车轮下就是不好的事物。我反对那些用“大俗即大雅”来诡辩的人。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Wave Terminal 目前可能是 Windows 最顺手的终端","description":"","slug":"wave-terminal","date":"2024-12-15T14:51:09+08:00","tags":["Terminal"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Wave Terminal 目前可能是 Windows 最顺手的终端","description":"","slug":"wave-terminal","date":"2024-12-15T14:51:09+08:00","tags":["Terminal"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-15-Wave-Terminal.md","fmCacheModifiedTime":1734414154000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-15-Wave-Terminal.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-15-Wave-Terminal.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-15-Wave-Terminal.md","fmFileName":"2024-12-15-Wave-Terminal.md","fmDraft":null,"fmModified":1734414154000,"fmPublished":1734245469000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![wave-terminal](https://raw.githubusercontent.com/jimicat/image-upload/refs/heads/main/blog-images/wave-terminal.webp)\n\n### 官网\n\n<https://www.waveterm.dev/>\n\n### 作者仓库\n\n<https://github.com/wavetermdev/waveterm>\n\n### Wave Terminal 描述\n\nWave Terminal 是一款功能强大的开源终端,它将传统的终端功能与先进的图形能力相结合,为用户提供高效便捷的工作流体验。Wave Terminal 支持 macOS、Linux 和 Windows 系统,能够让开发者、系统管理员和高级用户在终端环境中同时使用图形化工具,而无需频繁切换应用程序。\n\n### 主要功能\n\n1. 增强的工作流集成:Wave Terminal 将文件预览、网页浏览和 AI 助手等图形工具直接集成到终端中,避免了开发者频繁在终端和其他应用之间切换,提高了生产力。无论是查看文档、预览文件,还是监控系统,都可以在同一个终端界面中完成。\n2. 跨平台支持:Wave Terminal 支持 macOS、Linux 和 Windows 操作系统,确保用户在不同平台上都能享受其强大功能,无论使用哪种操作系统都能保持一致的体验。\n3. 高度可定制化:Wave Terminal 允许用户根据自己的工作需求定制终端环境。用户可以自由设置标签页、组织终端界面以及选择符合自己工作流的布局,从而最大化工作效率,保持专注。\n4. 快捷键绑定:通过自定义快捷键,Wave Terminal 可以加快导航速度,减少对鼠标的依赖,提高操作效率,让用户更快速地完成日常任务。\n5. 布局管理:通过 Wave Terminal 的布局系统,用户可以高效地组织工作空间,支持多个终端窗口并排显示,方便同时处理多个任务。\n6. 远程连接:Wave Terminal 使 SSH 或远程连接变得更加简单,一键即可连接到远程机器,无论是管理服务器还是访问远程开发环境,都能轻松应对。\n7. 小部件支持:通过内置小部件,用户可以扩展 Wave Terminal 的功能,提供更多生产力工具、监控工具和控制功能,直接在终端内使用。\n8. wsh 命令:用户可以通过 wsh 命令直接在命令行中控制 Wave Terminal,快速启动小部件并管理终端的各项功能,无需离开命令行界面。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客新增 Spotify 状态卡片","description":"","slug":"bo-ke-xin-zeng-spotify-zhuang-tai-qia-pian","date":"2024-12-06T14:51:09+08:00","tags":["Spotify","Astro","API"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客新增 Spotify 状态卡片","description":"","slug":"bo-ke-xin-zeng-spotify-zhuang-tai-qia-pian","date":"2024-12-06T14:51:09+08:00","tags":["Spotify","Astro","API"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-06-博客首页新增 Spotify 状态卡片.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmFileName":"2024-12-06-博客首页新增 Spotify 状态卡片.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1733467869000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Get Refresh_Token\n\n```python\nimport base64\nimport requests\nimport webbrowser\n\n# Spotify API 配置\nCLIENT_ID = \"your_client_id\"  # 替换为你的 Client ID\nCLIENT_SECRET = \"your_client_secret\"  # 替换为你的 Client Secret\nREDIRECT_URI = \"http://localhost/callback\"  # 替换为你的重定向 URI\nTOKEN_URL = \"https://accounts.spotify.com/api/token\"\nSPOTIFY_AUTH_URL = \"https://accounts.spotify.com/authorize\"\n\n# 定义需要的权限(Scopes)\nSCOPES = \"user-read-private user-read-email playlist-modify-private playlist-modify-public\"\n\n\n# 获取授权码(Authorization Code)\ndef get_auth_code():\n    auth_url = (\n        f\"{SPOTIFY_AUTH_URL}?client_id={CLIENT_ID}&response_type=code\"\n        f\"&redirect_uri={REDIRECT_URI}&scope={SCOPES}\"\n    )\n    webbrowser.open(auth_url)\n    print(f\"请访问以下链接并授权:\\n{auth_url}\")\n    # 从用户输入中获取重定向后的 code 参数\n    return input(\"请输入重定向后的 URL 中的 code 参数值:\")\n\n\n# 使用授权码获取 Access Token 和 Refresh Token\ndef get_tokens(auth_code):\n    headers = {\n        \"Authorization\": f\"Basic {base64.b64encode(f'{CLIENT_ID}:{CLIENT_SECRET}'.encode()).decode()}\"\n    }\n    data = {\n        \"grant_type\": \"authorization_code\",\n        \"code\": auth_code,\n        \"redirect_uri\": REDIRECT_URI,\n    }\n    response = requests.post(TOKEN_URL, headers=headers, data=data)\n    if response.status_code == 200:\n        return response.json()\n    else:\n        print(\"获取 Token 失败:\", response.json())\n        return None\n\n\n# 使用 Refresh Token 刷新 Access Token\ndef refresh_access_token(refresh_token):\n    headers = {\n        \"Authorization\": f\"Basic {base64.b64encode(f'{CLIENT_ID}:{CLIENT_SECRET}'.encode()).decode()}\"\n    }\n    data = {\n        \"grant_type\": \"refresh_token\",\n        \"refresh_token\": refresh_token,\n    }\n    response = requests.post(TOKEN_URL, headers=headers, data=data)\n    if response.status_code == 200:\n        return response.json().get(\"access_token\")\n    else:\n        print(\"刷新 Token 失败:\", response.json())\n        return None\n\n\n# 主流程\nif __name__ == \"__main__\":\n    # Step 1: 获取 Authorization Code\n    print(\"正在获取 Authorization Code...\")\n    authorization_code = get_auth_code()\n\n    # Step 2: 使用 Authorization Code 获取初始 Tokens\n    print(\"正在获取 Access Token 和 Refresh Token...\")\n    tokens = get_tokens(authorization_code)\n\n    if tokens:\n        access_token = tokens.get(\"access_token\")\n        refresh_token = tokens.get(\"refresh_token\")\n        print(f\"Access Token: {access_token}\")\n        print(f\"Refresh Token: {refresh_token}\")\n\n        # Step 3: 测试刷新 Access Token\n        print(\"测试刷新 Access Token...\")\n        new_access_token = refresh_access_token(refresh_token)\n        if new_access_token:\n            print(f\"新的 Access Token: {new_access_token}\")\n```\n\n### Install `astro-spotify`\n\n```bash\nnpm install astro-spotify\n```\n\n### Create `.env`\n\n```bash\n# Spotify API Configuration\nSPOTIFY_CLIENT_ID=your_client_id_here\nSPOTIFY_CLIENT_SECRET=your_client_secret_here\nSPOTIFY_REFRESH_TOKEN=your_refresh_token_here\n```\n\n### Create `src/components/SpotifyCard.astro`\n\n```astro\n---\nimport { CurrentlyPlaying } from \"astro-spotify\";\n---\n<div class=\"bg-white dark:bg-zinc-900 dark:text-zinc-200 p-4 rounded-lg shadow-md\">\n  <div class=\"flex items-center gap-2 mb-3\">\n    <svg class=\"w-5 h-5 text-[#1DB954]\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n      <path d=\"M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z\"/>\n    </svg>\n    <h2 class=\"text-lg font-bold\">正在收听</h2>\n  </div>\n\n<CurrentlyPlaying\n  clientID={import.meta.env.SPOTIFY_CLIENT_ID}\n  clientSecret={import.meta.env.SPOTIFY_CLIENT_SECRET}\n  refreshToken={import.meta.env.SPOTIFY_REFRESH_TOKEN}\n/>\n```\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客增码字热力图","description":"","slug":"bo-ke-zeng-ma-zi-re-li-tu","date":"2024-12-05T14:13:11+08:00","tags":["Astro","Heatmap"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客增码字热力图","description":"","slug":"bo-ke-zeng-ma-zi-re-li-tu","date":"2024-12-05T14:13:11+08:00","tags":["Astro","Heatmap"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-05-博客增加码字热力图.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-05-博客增加码字热力图.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-05-博客增加码字热力图.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-05-博客增加码字热力图.md","fmFileName":"2024-12-05-博客增加码字热力图.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1733379191000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 在 components 目录下新增 Heatmap.astro 组件\n\n```astro\n---\nimport { format, eachDayOfInterval, startOfYear, endOfYear } from 'date-fns';\nimport { getColorScale } from '../utils/colorscale';\nimport wordCountData from '../data/word-counts.json'\n\n// 格式化数据为字典\nconst wordCountMap = new Map(wordCountData.map(({ date, charCount }) => [date, charCount]));\n// 计算所有日期的字数总和\nconst getTotalWordCount = wordCountData.reduce((total, { charCount }) => {\n  return total + charCount; // 累加每个日期的字数\n}, 0);\n\nconsole.log(getTotalWordCount)\nconst today = new Date();\nconst startDate = startOfYear(today);\nconst endDate = endOfYear(today);\nconst days = eachDayOfInterval({ start: startDate, end: endDate });\n\n\n---\n\n<div class=\"bg-white dark:bg-zinc-900 dark:text-zinc-200 p-4 rounded-lg shadow-md\">\n  <h3 class=\"text-center mb-2\">码字热力图</h3>\n  <div class=\"relative\">\n    <div class=\"grid grid-cols-52 gap-[6px] h-[100px]\">\n      {days.map(day => {\n        const date = format(day, 'yyyy-MM-dd');\n        const wordCount = wordCountMap.get(date) || 0;\n        const bgColor = getColorScale(wordCount);\n                      \n        return (\n          <div\n            class=\"w-[6px] h-[6px] rounded-[1px] tooltip\"\n            style={`background-color: ${bgColor};`}\n            data-tip={`${format(day, 'yyyy-MM-dd')}: ${wordCount} 字符`}\n          />\n        );\n      })}\n    </div>\n  </div>\n  <div class=\"flex items-center justify-end gap-2 mt-2 text-xs text-gray-600\">\n    <span>总字符:{getTotalWordCount}</span>\n  </div>\n</div>\n\n\n\n<style>\n  .grid-cols-52 {\n    grid-template-columns: repeat(52, minmax(0, 1fr));\n  }\n  \n  .tooltip {\n    position: relative;\n  }\n  \n  .tooltip:hover::after {\n    content: attr(data-tip);\n    position: absolute;\n    bottom: 100%;\n    left: 50%;\n    transform: translateX(-50%);\n    padding: 2px 4px;\n    background-color: #333;\n    color: white;\n    border-radius: 2px;\n    font-size: 10px;\n    white-space: nowrap;\n    z-index: 10;\n  }\n</style>\n```\n\n### 在 utils 目录下新增 `colorscale.ts\n\n```ts\nexport function getColorScale(count: number): string {\n  if (count === 0) return '#ebedf0';\n  if (count < 600) return '#A5D6A7';\n  if (count < 900) return '#66BB6A';\n  if (count < 1200) return '#43A047';\n  if (count < 1500) return '#2E7D32';\n  return '#1B5E20';\n}\n```\n\n### 在 types 目录下新增 Article.ts\n\nArticle.ts\n\n> 定义类型\n\n```ts\nexport interface Article {\n    id: string;\n    title: string;\n    content: string;\n    date: Date;\n    wordCount: number;\n  }\n```\n\n### 在 index.astro 文件中引用\n\n```astro\n---\nimport { SITE_DESCRIPTION, SITE_TITLE } from \"../consts\";\nimport Heatmap from '../components/Heatmap.astro';\nimport Layout from \"../layouts/Layout.astro\";\n---\n\n<Layout\n  title={SITE_TITLE}\n  description={SITE_DESCRIPTION}\n  className=\"flex h-svh  flex-col justify-center\"\n>\n  <main class=\"space-y-4\">\n    <p>\n      偶尔想到的一些内容会做记录,题材不限于技术文章,更多的是一些个人的只言片语。博主平时喜欢运动,以糊代码为乐趣,偶尔也靠读些哲学书籍来打发无聊。\n    </p>\n    <Heatmap />\n\n  </main>\n</Layout>\n```\n\n> 注意组件之间的相互引用关系\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Nginx 相关","description":"","slug":"nginx-xiang-guan","date":"2024-11-27T11:01:45+08:00","tags":["nginx","linux"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Nginx 相关","description":"","slug":"nginx-xiang-guan","date":"2024-11-27T11:01:45+08:00","tags":["nginx","linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-27-Nginx 相关.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-27-Nginx 相关.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-27-Nginx 相关.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-27-Nginx 相关.md","fmFileName":"2024-11-27-Nginx 相关.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1732676505000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Nginx 代理 apk 文件下载\n\n```jsx\nserver {\n        listen       80;\n        server_name  app.com.cn;\n\n        location /app {\n            alias /var/www/app;\n            autoindex on;\n            default_type application/octet-stream;\n        }\n    }\n```\n\n### Nginx 过滤某个字段\n\n如果你希望在统计 Nginx 日志中 `Osonkredit.apk` 出现的次数时,考虑去重 IP 地址,只计算每个 IP 地址出现的次数一次,可以使用以下方法。\n\n#### 1. 使用 `grep` 和 `awk` 去重 IP\n\n假设你希望计算每个唯一 IP 地址访问 `Osonkredit.apk` 的次数,可以结合 `grep`、`awk` 和 `sort` 进行操作。\n\n```bash\ngrep 'Osonkredit.apk' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq | wc -l\n```\n\n解释:\n\n- `grep 'Osonkredit.apk' /var/log/nginx/access.log`: 找到包含 `Osonkredit.apk` 的所有行。\n- `awk '{print $1}'`: 从每行中提取出第一个字段,即客户端 IP 地址。\n- `sort`: 对 IP 地址进行排序(`uniq` 需要排序的输入)。\n- `uniq`: 去重,只保留每个 IP 地址的唯一出现。\n- `wc -l`: 统计不同 IP 地址的数量。\n\n#### 2. 使用 `awk` 完全处理\n\n如果你希望使用 `awk` 来完成所有的工作,并避免管道中多个命令的嵌套,可以使用如下的单一 `awk` 命令:\n\n```bash\nawk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}' /var/log/nginx/access.log\n```\n\n解释:\n\n- `awk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}'`: 这个命令做了以下几件事:\n  - `$0 ~ /Osonkredit.apk/`: 只处理包含 `Osonkredit.apk` 的行。\n  - `{ips[$1]}`: 使用 IP 地址(即第一列 `$1`)作为键,存储到 `ips` 数组中。每个唯一的 IP 会存储一次,重复的 IP 会覆盖前一个值。\n  - `END {print length(ips)}`: 在处理完所有行后,打印 `ips` 数组的长度,即唯一 IP 的数量。\n\n#### 3. 使用 `zgrep` (针对压缩日志文件)\n\n如果 Nginx 日志被压缩,你可以使用 `zgrep` 来对 `.gz` 格式的日志进行类似的统计。以下命令会统计压缩日志文件中每个唯一 IP 地址访问 `Osonkredit.apk` 的次数:\n\n```bash\nzgrep 'Osonkredit.apk' /var/log/nginx/access.log*.gz | awk '{print $1}' | sort | uniq | wc -l\n```\n\n总结:\n\n这些方法可以帮助你统计在 Nginx 日志中每个唯一 IP 地址访问 `Osonkredit.apk` 的次数。如果你有多个日志文件(如压缩日志),可以使用 `zgrep` 来处理。\n\n### Nginx 反向代理\n\n1. 路径问题\n\n   - NGINX 默认尝试从文件系统中提供请求的资源。日志显示 NGINX 在 `/usr/share/nginx/html/` 目录中查找请求路径 `/EZLoan/someTypeNillActionBoo/superTimUserniLear`,但找不到文件。\n   - 这是因为没有为 `/EZLoan` 指定一个明确的反向代理规则,或者请求路径被误解为静态文件路径。\n\n2. 代理配置问题\n\n   - 你配置的 `location /EZloan` 中的路径为 `proxy_pass http://backend;`,但你的 URL 请求是 `/EZLoan`(大小写敏感)。\n   - 由于没有匹配到配置规则,NGINX 可能默认将此请求当作静态文件请求处理。\n\n3. 拼写错误或恶意请求\n   - 请求路径 `/EZLoan/someTypeNillActionBoo/superTimUserniLear` 看起来不像预期的路径,可能是用户拼写错误或恶意请求。\n\n解决方案\n\n- 确保路径匹配大小写\n\nNGINX 的 `location` 是大小写敏感的。你的配置中是 `/EZloan`,但日志显示请求路径是 `/EZLoan`。修改配置如下:\n\n```nginx\nlocation ~* ^/EZLoan {\n    proxy_pass http://backend;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}\n```\n\n这里使用了正则表达式 `~*`,使路径匹配大小写不敏感。\n\n- 捕获未知路径并重定向\n\n如果有类似不正确或恶意请求,可以捕获它们并返回合适的响应,比如 404 页面或重定向:\n\n```nginx\nlocation /EZLoan {\n    proxy_pass http://backend;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}\n\n- 捕获不存在的静态文件请求\n\nlocation / {\n    return 404;\n}\n```\n\n- 检查 `proxy_pass` 的后端配置\n\n 确保后端 `http://backend` 配置正确,且能够处理 `/EZLoan/someTypeNillActionBoo/superTimUserniLear` 这样的请求路径。\n\n在后端处理未知路径时返回合适的状态码,比如 404,而不是直接丢给前端。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"数据库相关操作记录","description":"","slug":"shu-ju-ku-xiang-guan-cao-zuo-ji-lu","date":"2024-11-14T13:55:48+08:00","tags":["mysql","AI"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"数据库相关操作记录","description":"","slug":"shu-ju-ku-xiang-guan-cao-zuo-ji-lu","date":"2024-11-14T13:55:48+08:00","tags":["mysql","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-14-数据库相关操作记录.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-14-数据库相关操作记录.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-14-数据库相关操作记录.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-14-数据库相关操作记录.md","fmFileName":"2024-11-14-数据库相关操作记录.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1731563748000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 本文内容部分生成自 ChatGPT\n\n### 导出表结构\n\n```sql\nmysqldump -u 用户名 -p --no-data test > test_structure.sql\n```\n\n### 导入表结构\n\n```sql\nmysql -u 用户名 -p 数据库名 < test_structure.sql\n```\n\n### 新建数据库并指定字符集\n\n```sql\nCREATE DATABASE cash_loan_base \nCHARACTER SET utf8mb4 \nCOLLATE utf8mb4_general_ci;\n\n# CHARACTER SET utf8mb4:指定数据库使用 utf8mb4 字符集,可以支持更多字符(如表情符号)。\n# COLLATE utf8mb4_general_ci:设置排序规则为不区分大小写的 utf8mb4_general_ci,方便中文或多语言应用中排序与查询的兼容性。\n```\n\n### 为新用户赋予权限\n\n\n```sql\n-- 创建用户 risk_user,并设置密码\nCREATE USER 'risk_user'@'localhost' IDENTIFIED BY 'your_password';\n\n-- 赋予增删改查权限\nGRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'risk_user'@'localhost';\n\n-- 刷新权限\nFLUSH PRIVILEGES;\n```\n\n### 函数相关\n\n```sql\n-- 列出函数\nSHOW FUNCTION STATUS WHERE Db = 'database_name';\n\n-- 查看函数创建命令\nSHOW CREATE FUNCTION function_name;\n\n-- 导入函数\nDELIMITER //\nCREATE DEFINER=`root`@`%` FUNCTION `_nextval`(`seq_name_p` varchar(50))  RETURNS bigint(20) READS SQL DATA BEGIN DECLARE _cur INT;   DECLARE _maxvalue BIGINT(20); DECLARE _increment INT; SET _increment = (SELECT increment_val FROM sys_sequence WHERE seq_name = seq_name_p); SET _maxvalue = (SELECT max_val FROM sys_sequence WHERE seq_name = seq_name_p); SET _cur = (SELECT current_val FROM sys_sequence WHERE seq_name = seq_name_p); UPDATE sys_sequence SET current_val = _cur + _increment WHERE seq_name = seq_name_p; IF (_cur + _increment >= _maxvalue) THEN UPDATE sys_sequence SET current_val = min_val WHERE seq_name = seq_name_p; END IF; RETURN _cur;\n\nEND //\n\nDELIMITER ;\n```\n\n### 最大连接数\n\n```sql\nSHOW VARIABLES LIKE 'max_connections';\nSET GLOBAL max_connections = 800;\n```\n\n另一种情况,命令行模式登录 MySQL 提示 too many connections\n\n```sql\n# 在 my.conf 新增最大连接数配置\n\nvim /etc/my.cnf\n\n[mysqld]\n...\nmax_connections=1000000\n```\n\n### sql_mode 相关\n\n在 MySQL 中,`ONLY_FULL_GROUP_BY` 是一种 SQL 模式,它要求 `GROUP BY` 查询中的列必须是聚合函数的一部分,或者明确出现在 `GROUP BY` 子句中。如果你希望关闭这个模式,可以按以下步骤操作:\n\n方法 1:临时关闭(会话级别)\n\n这种方法仅在当前会话有效,适用于短期需求。\n\n1. **登录 MySQL**:\n   ```bash\n   mysql -u root -p\n   ```\n\n2. **检查当前 SQL 模式**:\n   执行以下命令,查看当前启用的 SQL 模式:\n   ```sql\n   SELECT @@sql_mode;\n   ```\n\n3. **移除 `ONLY_FULL_GROUP_BY`**:\n   将 `ONLY_FULL_GROUP_BY` 从当前会话的 SQL 模式中移除:\n   ```sql\n   SET sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');\n   ```\n\n4. **验证设置是否生效**:\n   重新检查 SQL 模式,确认 `ONLY_FULL_GROUP_BY` 已被移除:\n   ```sql\n   SELECT @@sql_mode;\n   ```\n\n方法 2:永久关闭(全局级别)\n\n这种方法适用于需要长期关闭 `ONLY_FULL_GROUP_BY` 的场景。\n\n1. **编辑 MySQL 配置文件**:\n   打开 MySQL 配置文件(通常位于 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`)。\n\n2. **修改 `sql_mode` 配置**:\n   在 `[mysqld]` 部分中,添加或修改 `sql_mode`,确保移除 `ONLY_FULL_GROUP_BY`:\n   ```ini\n   [mysqld]\n   sql_mode=\"STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"\n   ```\n\n   这里列出的模式是一个常见的默认设置,移除了 `ONLY_FULL_GROUP_BY`。\n\n3. **重启 MySQL 服务**:\n   保存配置文件后,重启 MySQL 服务以应用更改:\n   ```bash\n   sudo systemctl restart mysql\n   ```\n\n4. **验证设置**:\n   登录 MySQL,检查全局 SQL 模式:\n   ```sql\n   SELECT @@GLOBAL.sql_mode;\n   ```\n\n---\n\n方法 3:直接修改全局模式(运行时修改)\n\n1. **移除 `ONLY_FULL_GROUP_BY`**:\n   在 MySQL 中运行以下命令,修改全局 SQL 模式:\n   ```sql\n   SET GLOBAL sql_mode = REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', '');\n   ```\n\n2. **验证设置**:\n   检查是否成功移除:\n   ```sql\n   SELECT @@GLOBAL.sql_mode;\n   ```\n\n3. **注意事项**:\n   - 此方法在 MySQL 服务重启后会失效。要永久生效,仍需修改配置文件。\n\n\n### binlog 日志清理\n\n`master-bin.000015` 是 MySQL 的**二进制日志文件**(Binary Log file),它记录了数据库中所有修改数据的事件(如 `INSERT`、`UPDATE`、`DELETE`),以及某些DDL语句(如 `CREATE TABLE`),以供以下用途:\n\n1. **数据恢复**:通过重放二进制日志,恢复因错误或意外删除导致的数据丢失。\n2. **主从复制**:二进制日志是主从复制中主服务器向从服务器传递数据变更的关键部分。\n\n#### 1. **查看当前日志文件列表**\n通过以下命令查看当前的二进制日志文件:\n```sql\nSHOW BINARY LOGS;\n```\n或者查看当前在用的日志文件:\n```sql\nSHOW MASTER STATUS;\n```\n\n---\n\n#### 2. **删除旧的二进制日志**\nMySQL 提供了清理日志的内置命令:\n\n- **清除指定日期之前的日志**:\n  ```sql\n  PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';\n  ```\n  例如:\n  ```sql\n  PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';\n  ```\n  这会删除指定日期之前的所有二进制日志。\n\n- **清除指定日志文件之前的日志**:\n  ```sql\n  PURGE BINARY LOGS TO 'master-bin.000015';\n  ```\n  这会删除 `master-bin.000015` 之前的所有日志文件。\n\n---\n\n#### 3. **自动清理二进制日志(可选)**\n为了避免手动清理,可以在 `my.cnf`(或 `my.ini`)中配置自动删除过期日志:\n```ini\n[mysqld]\nexpire_logs_days = 7  # 自动保留最近7天的二进制日志\n```\n然后重启 MySQL 服务使其生效。\n\n---\n\n#### 4. **确认操作的安全性**\n- **确保备份**:清理之前,确认不再需要这些日志用于恢复或主从复制。\n- **检查主从复制状态**:如果正在使用主从复制,确认从服务器已经完全同步旧日志,以免导致数据不一致。\n\n---\n\n通过以上方法,您可以安全高效地清理 `master-bin.000015` 及其他旧的二进制日志文件。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"wireguard 配置指南","description":"","slug":"wireguard-pei-zhi-zhi-nan","date":"2024-11-29T14:00:53+08:00","tags":["wireguard","linux","vpn"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"wireguard 配置指南","description":"","slug":"wireguard-pei-zhi-zhi-nan","date":"2024-11-29T14:00:53+08:00","tags":["wireguard","linux","vpn"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-29-wireguard 配置指南.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-29-wireguard 配置指南.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-29-wireguard 配置指南.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-29-wireguard 配置指南.md","fmFileName":"2024-11-29-wireguard 配置指南.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732860053000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 基于 ubuntu 24.04.1 LTS\n\n### 服务端配置\n\n```bash\napt install wireguard\necho \"net.ipv4.ip_forward = 1\" >> /etc/sysctl.conf\necho \"net.ipv4.conf.all.proxy_arp = 1\" >> /etc/sysctl.conf\nsysctl -p /etc/sysctl.conf\n\n# 生成密钥对\numask 0077\nwg genkey > private\nwg pubkey < private > public\n\n# 新增配置文件\nvim /etc/wireguard/wg0.conf\n-----------------\n[Interface]\nAddress = 10.10.0.1/24 #本机分配的 IP\nPostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE\nListenPort = 11820 #自定义端口\nPrivateKey = <your server private key>\n-----------------\n\n# 启动\nwg-quick up wg0\n\n# 在服务端添加客户端的公钥\nwg set wg0 peer KWwqR9qfGYrXnNOLa33cKwlgVOH4tAPgg5BWya3EA0o= allowed-ips 10.10.0.2/32\n# 此时在服务器端重启 wg0 会看到客户端公钥和对应 IP 地址被写入 /etc/wireguard/wg0.conf 中\n\n# 重启服务端\nwg-quick down wg0\nwg-quick up wg0\n```\n\n### 客户端配置\n\n```bash\n# 安装\napt install wireguard\n\n# 生成客户端密钥对\numask 0077\nwg genkey > private\nwg pubkey < private > public\n\n# 新增客户端配置文件\nvim /etc/wireguard/wg0.conf\n---------------------------\n[Interface]\nPrivateKey = <your client private key>\nAddress = 10.10.0.2/32\nDNS = 8.8.8.8\n\n[Peer]\nPublicKey = <your server public key>\nAllowedIPs = 10.10.0.0/24\nEndpoint = <your server public ip>:11820\n--------------------------\n\n# 启动客户端\nwg-quick up wg0\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Garmin API","description":"","slug":"garmin-api","date":"2024-11-29T10:00:05+08:00","tags":["python","garmin"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Garmin API","description":"","slug":"garmin-api","date":"2024-11-29T10:00:05+08:00","tags":["python","garmin"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-29-Garmin API.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-29-Garmin API.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-29-Garmin API.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-29-Garmin API.md","fmFileName":"2024-11-29-Garmin API.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732845605000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n```python\nfrom flask import Flask, jsonify, request\nfrom flask_cors import CORS\n\nimport sqlite3\n\napp = Flask(__name__)\n\n# 数据库连接函数\ndef get_db_connection():\n    conn = sqlite3.connect('garmin_activities.db')  # 请确保数据库文件名正确\n    conn.row_factory = sqlite3.Row\n    return conn\n\n# 查询活动的 API\n@app.route('/api/activities', methods=['GET'])\ndef get_activities():\n    conn = get_db_connection()\n    cursor = conn.cursor()\n\n    # 获取查询参数\n    sport = request.args.get('sport')\n    activity_type = request.args.get('type')\n\n    # 构建基本查询\n    query = \"SELECT * FROM activities\"\n    filters = []\n\n    # 添加条件\n    if sport:\n        filters.append(f\"sport = '{sport}'\")\n    if activity_type:\n        filters.append(f\"type = '{activity_type}'\")\n\n    if filters:\n        query += \" WHERE \" + \" AND \".join(filters)\n\n    cursor.execute(query)\n    activities = cursor.fetchall()\n\n    # 关闭连接\n    conn.close()\n\n    # 将查询结果转换为 JSON 格式\n    return jsonify([dict(activity) for activity in activities])\nCORS(app, resources=r'/*')\nif __name__ == '__main__':\n    app.run(debug=True, host=\"0.0.0.0\", port=8080)\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"本地测试证书配置","description":"","slug":"ben-di-ce-shi-zheng-shu-pei-zhi","date":"2024-11-28T18:32:55+08:00","tags":["mkcert","linux","ssl"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"本地测试证书配置","description":"","slug":"ben-di-ce-shi-zheng-shu-pei-zhi","date":"2024-11-28T18:32:55+08:00","tags":["mkcert","linux","ssl"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-28-本地测试证书配置.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-28-本地测试证书配置.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-28-本地测试证书配置.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-28-本地测试证书配置.md","fmFileName":"2024-11-28-本地测试证书配置.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732789975000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 安装\n\n```jsx\n# 安装依赖\napt install libnss3-tools\n\n# 下载 Linux 平台二进制文件\nwget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64\n\n# 重命名\nmv mkcert-v1.4.4-linux-amd64 mkcert\n\n# 移动到 bin 下\nmv mkcert /usr/local/bin/\n\n# 测试命令\nmkcert -help\n```\n\n### 配置证书\n\n```jsx\n# 生成根证书\nroot@ubuntu:~# mkcert -install\nCreated a new local CA 💥\nThe local CA is now installed in the system trust store! ⚡\n\n# 生成域名证书\nroot@ubuntu:~# mkcert *.ubuntu.local ubuntu.local\n\nCreated a new certificate valid for the following names 📜\n - \"*.ubuntu.local\"\n - \"ubuntu.local\"\n\nReminder: X.509 wildcards only go one level deep, so this won't match a.b.ubuntu.local ℹ️\n\nThe certificate is at \"./_wildcard.ubuntu.local+1.pem\" and the key at \"./_wildcard.ubuntu.local+1-key.pem\" ✅\n\nIt will expire on 28 February 2027 🗓\n\n# nginx 配置\nroot@ubuntu:~# mv _wildcard.ubuntu.local+1-key.pem /etc/nginx/cert/key.pem\nroot@ubuntu:~# mv _wildcard.ubuntu.local+1.pem /etc/nginx/cert/cert.pem\n\n# 重新载入配置文件\nsystemctl reload nginx\n```\n\n### 客户端配置\n\n```jsx\n客户端需要将根证书的公钥和ssl证书的公钥 copy 过来,在客户端安装即可。\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"观影片《好东西》有感","description":"","slug":"guan-ying-pian-hao-dong-xi-you-gan","date":"2024-11-26T23:34:59+08:00","tags":["《好东西》","电影"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"观影片《好东西》有感","description":"","slug":"guan-ying-pian-hao-dong-xi-you-gan","date":"2024-11-26T23:34:59+08:00","tags":["《好东西》","电影"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-26-观影片《好东西》有感.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmFileName":"2024-11-26-观影片《好东西》有感.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732635299000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![好东西](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411271101751.jpg)\n\n《好东西》还是挺推荐观看的,可悲的是觉醒的女性太少,意识不到女性失权的男性又是普遍。即便如剧中上海这座大城市,社会对女性的蔑视也是普遍的现象,更别说那些活在农村的女性了。只能说平权之路,任重道远。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"20241125","description":"","slug":"20241125","date":"2024-11-25T23:36:13+08:00","tags":["碎语"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"20241125","description":"","slug":"20241125","date":"2024-11-25T23:36:13+08:00","tags":["碎语"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-26-20241125.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-26-20241125.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-26-20241125.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-26-20241125.md","fmFileName":"2024-11-26-20241125.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732548973000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n总以为换个新环境,认识一批新朋友就能重新开启一段新的人生,但往往事与愿违。在一个没有人认识的地方,我可以重新立起一个自己脑中那个更好的自己——开朗、自信、健谈。我不知道的是要想维护住自己脑中幻想的那个形象,我需要付出很多的能量,一旦某个时刻这种能量消耗殆尽自己又会回到那个不自信的自己,这时伴随着的就是对自己的不认可,过度内耗。\n\n在此之前,我似乎没有意识到这是对自我存在的一种否定,不认可当下的自己。虽然有意识到问题,但是追究问题的根源却让我茫然,不知道自何时起,曾经的自己被逐渐瓦解。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"actual-server 备份脚本","description":"","slug":"actual-server-bei-fen-jiao-ben","date":"2024-11-25T12:46:02+08:00","tags":["actual","shell","AI"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"actual-server 备份脚本","description":"","slug":"actual-server-bei-fen-jiao-ben","date":"2024-11-25T12:46:02+08:00","tags":["actual","shell","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-25-actual-server 备份脚本.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmFileName":"2024-11-25-actual-server 备份脚本.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732509962000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n以下是一个脚本,可以完成每天凌晨1点定时打包 `/opt/actual-server` 目录,并将其传输到远程服务器 `192.168.9.100` 的 `/data/` 目录下。\n\n### 脚本实现步骤\n\n1. **压缩文件**:使用 `tar` 打包和压缩目录。\n2. **远程传输**:通过 `scp` 将压缩包传输到远程服务器。\n3. **设置定时任务**:使用 `cron` 设置每天凌晨1点执行。\n\n### 脚本内容\n\n保存以下脚本为 `/opt/shell/backup_actual_server.sh`:\n\n```bash\n#!/bin/bash\n\n# 设定变量\n\nSOURCE_DIR=\"/opt/actual-server\"\n\nBACKUP_DIR=\"/tmp\"\n\nREMOTE_SERVER=\"192.168.9.103\"\n\nREMOTE_DIR=\"/Users/kevin/actual-data-backup\"\n\nTIMESTAMP=$(date +\"%Y%m%d_%H%M%S\")\n\nBACKUP_FILE=\"actual-server-backup-${TIMESTAMP}.tar.gz\"\n\nREMOTE_USER=\"kevin\" # 替换为远程服务器用户名\n\n# 打包目录\n\necho \"开始打包 ${SOURCE_DIR} ...\"\n\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" -C \"$(dirname \"${SOURCE_DIR}\")\" \"$(basename \"${SOURCE_DIR}\")\"\n\n# 检查是否打包成功\n\nif [ $? -ne 0 ]; then\n\n    echo \"打包失败!\"\n\n    exit 1\n\nfi\n\necho \"打包完成,文件存储在 ${BACKUP_DIR}/${BACKUP_FILE}\"\n\n# 传输到远程服务器\n\necho \"传输文件到 ${REMOTE_SERVER}:${REMOTE_DIR} ...\"\n\nscp \"${BACKUP_DIR}/${BACKUP_FILE}\" \"${REMOTE_USER}@${REMOTE_SERVER}:${REMOTE_DIR}\"\n\n# 检查传输是否成功\n\nif [ $? -ne 0 ]; then\n\n    echo \"文件传输失败!\"\n\n    exit 1\n\nfi\n\necho \"文件传输完成\"\n\n# 删除本地备份文件\n\necho \"清理本地备份文件 ${BACKUP_DIR}/${BACKUP_FILE} ...\"\n\nrm -f \"${BACKUP_DIR}/${BACKUP_FILE}\"\n```\n\n### 配置权限\n\n1. **赋予执行权限**:\n    \n    ```bash\n    chmod +x /opt/shell/backup_actual_server.sh\n    ```\n    \n2. **测试脚本**:\n    \n    ```bash\n    /opt/shell/backup_actual_server.sh\n    ```\n    \n\n### 设置定时任务\n\n1. 编辑定时任务:\n    \n    ```bash\n    crontab -e\n    ```\n    \n2. 添加如下内容,设置每天凌晨1点执行:\n    \n    ```bash\n    0 1 * * * /opt/shell/backup_actual_server.sh >> /var/log/backup_actual_server.log 2>&1\n    ```\n    \n\n### 日志管理\n\n脚本的输出会保存在 `/var/log/backup_actual_server.log` 中,便于日后查看备份日志。\n\n### 注意事项\n\n- 替换 `your_username` 为远程服务器的实际用户名。\n- 确保本机到远程服务器已经配置了免密码登录(使用 `ssh-keygen` 和 `ssh-copy-id` 配置)。\n- 确保本地和远程都有足够的磁盘空间存储备份文件。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"部署自己的记账服务","description":"","slug":"bu-shu-zi-ji-de-ji-zhang-fu-wu","date":"2024-11-24T00:10:50+08:00","tags":["actual","记账"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"部署自己的记账服务","description":"","slug":"bu-shu-zi-ji-de-ji-zhang-fu-wu","date":"2024-11-24T00:10:50+08:00","tags":["actual","记账"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-24-部署自己的记账服务.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-24-部署自己的记账服务.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-24-部署自己的记账服务.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-24-部署自己的记账服务.md","fmFileName":"2024-11-24-部署自己的记账服务.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732378250000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n我用的记账工具叫 Actual, 目前在 Github 开源,开发着提供了跨平台方案,有移动端、PC 端、Web 端。\n\n![actual](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411240239147.png)\n\n部署可以通过 docker 命令直接启动,或直接下载安装文件。\n\ndocker-compose.yml 文件可以在仓库下载 <https://github.com/actualbudget/actual-server/blob/master/docker-compose.yml>\n\n```yml\ndocker-compose.yml\n\nservices:\n  actual_server:\n    image: docker.io/actualbudget/actual-server:latest\n    ports:\n      # This line makes Actual available at port 5006 of the device you run the server on,\n      # i.e. http://localhost:5006. You can change the first number to change the port, if you want.\n      - '5006:5006'\n    environment:\n      # Uncomment any of the lines below to set configuration options.\n      # - ACTUAL_HTTPS_KEY=/data/selfhost.key\n      # - ACTUAL_HTTPS_CERT=/data/selfhost.crt\n      # - ACTUAL_PORT=5006\n      # - ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB=20\n      # - ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB=50\n      # - ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB=20\n      # See all options and more details at https://actualbudget.github.io/docs/Installing/Configuration\n      # !! If you are not using any of these options, remove the 'environment:' tag entirely.\n    volumes:\n      # Change './actual-data' below to the path to the folder you want Actual to store its data in on your server.\n      # '/data' is the path Actual will look for its files in by default, so leave that as-is.\n      - ./actual-data:/data\n    restart: unless-stopped\n```\n\n```bash\ndocker compose up -d\n```\n\n> 服务默认需要 https 才能访问,如果本地启动没有域名,可以自己在启动服务前生成本地证书,在环境变量中指定证书位置。也可以通过nginx 进行反带 5006 端口。\n\n下面是 nginx 的简单配置可供参考。\n\n```bash\nserver {\n    listen 80;\n    server_name default_server;\n    return 301 https://$host$request_uri;\n}\n\nserver {\n    listen              443 ssl http2;\n    listen              [::]:443 ssl http2;\n    server_name         default_server;\n\n    # SSL\n    ssl_certificate     /etc/nginx/cert/code.crt;\n    ssl_certificate_key /etc/nginx/cert/code.key;\n\n\n    # logging\n    access_log          /var/log/nginx/access.log combined buffer=512k flush=1m;\n    error_log           /var/log/nginx/error.log warn;\n\n    location / {\n        proxy_pass http://127.0.0.1:5006;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\n本地证书申请网站 <https://bkssl.com/ssl/selfsign>\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Alacritty Config","description":"","slug":"alacritty-config","date":"2024-11-24T23:51:09+08:00","tags":["alacritty","终端"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Alacritty Config","description":"","slug":"alacritty-config","date":"2024-11-24T23:51:09+08:00","tags":["alacritty","终端"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-24-AlacrittyConfig For Windows.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmFileName":"2024-11-24-AlacrittyConfig For Windows.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732463469000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Windows\n\n```bash\n配置文件路径\nC:\\Users\\Admin\\AppData\\Roaming\\alacritty\\alacritty.toml\n```\n\n```toml\ngeneral.live_config_reload = true\n\ngeneral.import = [\n  #\"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-latte.toml\"\n   \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-frappe.toml\"\n  # \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-macchiato.toml\"\n  # \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-mocha.toml\"\n]\n\n[env]\nTERM = \"xterm-256color\"\n\n[window]\n\ndimensions = { columns = 150, lines = 30 }\ndecorations = \"Full\"\ndynamic_title = false\ndynamic_padding = false\nopacity = 0.98\npadding = { x = 20, y = 10 }\n\n[font]\nsize = 8.0\n\n[font.bold]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Heavy\"\n\n[font.bold_italic]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Heavy Italic\"\n\n[font.italic]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Medium Italic\"\n\n[font.normal]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Medium\"\n\n[terminal]\nshell = { program = \"wsl\" }\nosc52 = \"CopyPaste\"\n\n```\n\n### MacOS\n\n```bash\n# 配置文件位置\n/Users/kevin/.config/alacritty/alacritty.toml\n```\n\n```toml\ngeneral.live_config_reload = true\n\ngeneral.import = [\n  \"~/.config/alacritty/colour/alacritty/catppuccin-latte.toml\"\n  # \"~/.config/alacritty/colour/alacritty/ccatppuccin-frappe.toml\"\n  # \"~/.config/alacritty/colour/alacritty/catppuccin-macchiato.toml\"\n  # \"~/.config/alacritty/colour/alacritty/catppuccin-mocha.toml\"\n]\n\n[env]\nTERM = \"xterm-256color\"\n\n[window]\n\ndimensions = { columns = 150, lines = 30 }\ndecorations = \"Full\"\ndynamic_title = false\ndynamic_padding = false\nopacity = 0.9\nblur = true\npadding = { x = 20, y = 20 }\n\n[font]\nsize = 14.0\n\n[font.bold]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Heavy\"\n\n[font.bold_italic]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Heavy Italic\"\n\n[font.italic]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Medium Italic\"\n\n[font.normal]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Medium\"\n```\n\n### 主题仓库\n\nhttps://github.com/catppuccin/alacritty\n\n### 字体\n\nhttps://www.nerdfonts.com/font-downloads","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"服务器常用配置命令","description":"","slug":"linux-conf","date":"2024-11-22T12:46:23+08:00","tags":["linux"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"服务器常用配置命令","description":"","slug":"linux-conf","date":"2024-11-22T12:46:23+08:00","tags":["linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-22-服务器常用配置命令.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-22-服务器常用配置命令.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-22-服务器常用配置命令.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-22-服务器常用配置命令.md","fmFileName":"2024-11-22-服务器常用配置命令.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732250783000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n## 时区配置\n\n在 Linux 系统中,可以通过以下步骤将服务器时区设置为乌兹别克斯坦(时区名称为 **Asia/Tashkent**)。\n\n---\n\n### 方法 1: 使用 `timedatectl` 命令(推荐)\n1. **查看可用时区列表**\n   ```bash\n   timedatectl list-timezones | grep Tashkent\n   ```\n   输出应包含以下内容:\n   ```\n   Asia/Tashkent\n   ```\n\n2. **设置时区为 Asia/Tashkent**\n   ```bash\n   sudo timedatectl set-timezone Asia/Tashkent\n   ```\n\n3. **验证时区是否已更改**\n   ```bash\n   timedatectl\n   ```\n   输出中应显示:\n   ```\n   Time zone: Asia/Tashkent\n   ```\n\n---\n\n### 方法 2: 手动设置时区文件\n1. **创建符号链接到时区文件**\n   将 `/etc/localtime` 链接到 `Asia/Tashkent` 的时区文件:\n   ```bash\n   sudo ln -sf /usr/share/zoneinfo/Asia/Tashkent /etc/localtime\n   ```\n\n2. **验证时区是否已更改**\n   查看当前时间是否匹配乌兹别克斯坦的时间:\n   ```bash\n   date\n   ```\n\n---\n\n### 方法 3: 设置环境变量 `TZ`(针对特定应用)\n如果只需为某些应用设置时区,可以使用环境变量 `TZ`。\n\n1. 编辑配置文件(如 `.bashrc` 或 `/etc/profile`):\n   ```bash\n   export TZ='Asia/Tashkent'\n   ```\n\n2. 重新加载配置:\n   ```bash\n   source ~/.bashrc\n   ```\n\n3. 验证环境变量:\n   ```bash\n   echo $TZ\n   ```\n   应显示 `Asia/Tashkent`。\n\n---\n\n### 注意事项\n- **重启服务**:某些服务可能需要重启以应用新的时区设置:\n  ```bash\n  sudo systemctl restart some-service\n  ```\n- **NTP 同步**:如果启用了时间同步(NTP),确保时间服务正常运行:\n  ```bash\n  sudo systemctl restart systemd-timesyncd\n  ```\n\n完成上述步骤后,您的服务器时区应已成功设置为乌兹别克斯坦时区。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"西方哲学史串讲","description":"","slug":"xi-fang-zhe-xue-shi-chuan-jiang","date":"2024-11-21T10:08:19+08:00","tags":["哲学"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"西方哲学史串讲","description":"","slug":"xi-fang-zhe-xue-shi-chuan-jiang","date":"2024-11-21T10:08:19+08:00","tags":["哲学"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-21-西方哲学史串讲.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-21-西方哲学史串讲.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-21-西方哲学史串讲.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-21-西方哲学史串讲.md","fmFileName":"2024-11-21-西方哲学史串讲.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732154899000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 泰勒斯\n\n西方哲学起源于泰勒斯。在泰勒斯之前,西方世界的人们对于世界的认识主要来源于神话,用神话来诠释世界的生灭变幻。根据留下的典籍,泰勒斯是第一个将世界本原指向非神话世界的自然界。他说:“水是万物的本原”。根据这句话我们可以推导出,泰勒斯不再通过神话来解释这个世界,而是从自然界选择一个可感物质来解释世界的生灭变幻。这种思考或许是出于当时泰勒斯生活的环境。\n\n### 阿那克西曼德\n\n哲学问题的提出一定是当前哲学已经无法解释一些问题而产生。就像泰勒斯的学生阿纳克西曼德,他沿着泰勒斯从自然寻找本原的路线发现:水是一种可感单一的物质,无法用水来解释世界万物的多种性质,本原也不该归结于某一种具体物质。他把本原规定为“无定”,即无规定性或无限定。与可感的水相比,“无定”是不可感的,只能靠理性把握。除此,阿纳克西曼德还解释了世界是如何运动的,他认为“无定”虽然没有任何规定性,但其内部却包含了冷和热、干与湿等对立条件。由于永恒的运动,这些对立物从“无定”中分离,形成了世界万物。阿纳克西曼德独具一格地提出了一种补偿原则,他认为一些事物的生成必然伴随另外一些事物的消亡。\n\n### 阿那克西美尼\n\n针对阿那克西曼德提出的“无定”本原,阿那克西美尼认为“无定”只能是本原的某一种性质,他不满足于此。他认为世界的本原是“气”,世界万物由气的疏散与凝聚而生成。如,气蒸发转换成火,凝聚变成风...在这里,可以看到他与阿纳克西曼德在运动观上的明显区别。阿那克西曼德是典型的分离生成观,而阿那克西美尼是转换生成观。\n\n>以上三位哲学家又称为米利都三杰,他们的哲学观点都是简单朴素的。但是他们在近乎猜想的前提下将世界从神话拉回到自然中,体现了最根本性的思想变革。他们坚持用自然本身来说明自然万物的生成yu存在,并试图在千变万化的现象中寻求一种不变的东西——即本原。\n\n### 赫拉克利特\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"cf-worker-proxy-docker-hub","description":"","slug":"cf-worker-proxy-docker-hub","date":"2024-11-18T12:54:45+08:00","tags":["docker"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"cf-worker-proxy-docker-hub","description":"","slug":"cf-worker-proxy-docker-hub","date":"2024-11-18T12:54:45+08:00","tags":["docker"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-18-cf-worker-proxy-docker-hub.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmFileName":"2024-11-18-cf-worker-proxy-docker-hub.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731905685000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n在 cloud flare 新建 worker, 下面自定义工作服务器地址替换为自己的域名。\n\n```js\n// _worker.js\n\n // Docker镜像仓库主机地址\n let hub_host = 'registry-1.docker.io';\n // Docker认证服务器地址\n const auth_url = 'https://auth.docker.io';\n // 自定义的工作服务器地址\n let workers_url = 'https://docker.xxxx.cc/';\n\n let 屏蔽爬虫UA = ['netcraft'];\n\n // 根据主机名选择对应的上游地址\n function routeByHosts(host) {\n     // 定义路由表\n     const routes = {\n         // 生产环境\n         \"quay\": \"quay.io\",\n         \"gcr\": \"gcr.io\",\n         \"k8s-gcr\": \"k8s.gcr.io\",\n         \"k8s\": \"registry.k8s.io\",\n         \"ghcr\": \"ghcr.io\",\n         \"cloudsmith\": \"docker.cloudsmith.io\",\n         \"nvcr\": \"nvcr.io\",\n\n         // 测试环境\n         \"test\": \"registry-1.docker.io\",\n     };\n\n     if (host in routes) return [ routes[host], false ];\n     else return [ hub_host, true ];\n }\n\n /** @type {RequestInit} */\n const PREFLIGHT_INIT = {\n     // 预检请求配置\n     headers: new Headers({\n         'access-control-allow-origin': '*', // 允许所有来源\n         'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', // 允许的HTTP方法\n         'access-control-max-age': '1728000', // 预检请求的缓存时间\n     }),\n }\n\n /**\n * 构造响应\n * @param {any} body 响应体\n * @param {number} status 响应状态码\n * @param {Object<string, string>} headers 响应头\n */\n function makeRes(body, status = 200, headers = {}) {\n     headers['access-control-allow-origin'] = '*' // 允许所有来源\n     return new Response(body, { status, headers }) // 返回新构造的响应\n }\n\n /**\n * 构造新的URL对象\n * @param {string} urlStr URL字符串\n */\n function newUrl(urlStr) {\n     try {\n         return new URL(urlStr) // 尝试构造新的URL对象\n     } catch (err) {\n         return null // 构造失败返回null\n     }\n }\n\n function isUUID(uuid) {\n     // 定义一个正则表达式来匹配 UUID 格式\n     const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n     // 使用正则表达式测试 UUID 字符串\n     return uuidRegex.test(uuid);\n }\n\n async function nginx() {\n     const text = `\n     <!DOCTYPE html>\n     <html>\n     <head>\n     <title>Welcome to nginx!</title>\n     <style>\n         body {\n             width: 35em;\n             margin: 0 auto;\n             font-family: Tahoma, Verdana, Arial, sans-serif;\n         }\n     </style>\n     </head>\n     <body>\n     <h1>Welcome to nginx!</h1>\n     <p>If you see this page, the nginx web server is successfully installed and\n     working. Further configuration is required.</p>\n\n     <p>For online documentation and support please refer to\n     <a href=\"http://nginx.org/\">nginx.org</a>.<br/>\n     Commercial support is available at\n     <a href=\"http://nginx.com/\">nginx.com</a>.</p>\n\n     <p><em>Thank you for using nginx.</em></p>\n     </body>\n     </html>\n     `\n     return text;\n }\n\n async function searchInterface() {\n     const text = `\n     <!DOCTYPE html>\n     <html>\n     <head>\n         <title>Docker Hub Search</title>\n         <style>\n         body {\n             font-family: Arial, sans-serif;\n             display: flex;\n             flex-direction: column;\n             align-items: center;\n             justify-content: center;\n             height: 100vh;\n             margin: 0;\n             background: linear-gradient(to right, rgb(28, 143, 237), rgb(29, 99, 237));\n         }\n         .logo {\n             margin-bottom: 20px;\n         }\n         .search-container {\n             display: flex;\n             align-items: center;\n         }\n         #search-input {\n             padding: 10px;\n             font-size: 16px;\n             border: 1px solid #ddd;\n             border-radius: 4px;\n             width: 300px;\n             margin-right: 10px;\n         }\n         #search-button {\n             padding: 10px;\n             background-color: rgba(255, 255, 255, 0.2); /* 设置白色,透明度为10% */\n             border: none;\n             border-radius: 4px;\n             cursor: pointer;\n             width: 44px;\n             height: 44px;\n             display: flex;\n             align-items: center;\n             justify-content: center;\n         }\t\t\t\n         #search-button svg {\n             width: 24px;\n             height: 24px;\n         }\n         </style>\n     </head>\n     <body>\n         <div class=\"logo\">\n         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\" fill=\"#ffffff\" width=\"100\" height=\"75\">\n             <path d=\"M23.763 6.886c-.065-.053-.673-.512-1.954-.512-.32 0-.659.03-1.01.087-.248-1.703-1.651-2.533-1.716-2.57l-.345-.2-.227.328a4.596 4.596 0 0 0-.611 1.433c-.23.972-.09 1.884.403 2.666-.596.331-1.546.418-1.744.42H.752a.753.753 0 0 0-.75.749c-.007 1.456.233 2.864.692 4.07.545 1.43 1.355 2.483 2.409 3.13 1.181.725 3.104 1.14 5.276 1.14 1.016 0 2.03-.092 2.93-.266 1.417-.273 2.705-.742 3.826-1.391a10.497 10.497 0 0 0 2.61-2.14c1.252-1.42 1.998-3.005 2.553-4.408.075.003.148.005.221.005 1.371 0 2.215-.55 2.68-1.01.505-.5.685-.998.704-1.053L24 7.076l-.237-.19Z\"></path>\n             <path d=\"M2.216 8.075h2.119a.186.186 0 0 0 .185-.186V6a.186.186 0 0 0-.185-.186H2.216A.186.186 0 0 0 2.031 6v1.89c0 .103.083.186.185.186Zm2.92 0h2.118a.185.185 0 0 0 .185-.186V6a.185.185 0 0 0-.185-.186H5.136A.185.185 0 0 0 4.95 6v1.89c0 .103.083.186.186.186Zm2.964 0h2.118a.186.186 0 0 0 .185-.186V6a.186.186 0 0 0-.185-.186H8.1A.185.185 0 0 0 7.914 6v1.89c0 .103.083.186.186.186Zm2.928 0h2.119a.185.185 0 0 0 .185-.186V6a.185.185 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm-5.892-2.72h2.118a.185.185 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186H5.136a.186.186 0 0 0-.186.186v1.89c0 .103.083.186.186.186Zm2.964 0h2.118a.186.186 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186H8.1a.186.186 0 0 0-.186.186v1.89c0 .103.083.186.186.186Zm2.928 0h2.119a.185.185 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm0-2.72h2.119a.186.186 0 0 0 .185-.186V.56a.185.185 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm2.955 5.44h2.118a.185.185 0 0 0 .186-.186V6a.185.185 0 0 0-.186-.186h-2.118a.185.185 0 0 0-.185.186v1.89c0 .103.083.186.185.186Z\"></path>\n         </svg>\n         </div>\n         <div class=\"search-container\">\n         <input type=\"text\" id=\"search-input\" placeholder=\"Search Docker Hub\">\n         <button id=\"search-button\">\n             <svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n             <path d=\"M21 21L16.65 16.65M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z\" stroke=\"white\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n             </svg>\n         </button>\n         </div>\n         <script>\n         function performSearch() {\n             const query = document.getElementById('search-input').value;\n             if (query) {\n             window.location.href = '/search?q=' + encodeURIComponent(query);\n             }\n         }\n\n         document.getElementById('search-button').addEventListener('click', performSearch);\n         document.getElementById('search-input').addEventListener('keypress', function(event) {\n             if (event.key === 'Enter') {\n             performSearch();\n             }\n         });\n         </script>\n     </body>\n     </html>\n     `;\n     return text;\n }\n\n export default {\n     async fetch(request, env, ctx) {\n         const getReqHeader = (key) => request.headers.get(key); // 获取请求头\n\n         let url = new URL(request.url); // 解析请求URL\n         const userAgentHeader = request.headers.get('User-Agent');\n         const userAgent = userAgentHeader ? userAgentHeader.toLowerCase() : \"null\";\n         if (env.UA) 屏蔽爬虫UA = 屏蔽爬虫UA.concat(await ADD(env.UA));\n         workers_url = `https://${url.hostname}`;\n         const pathname = url.pathname;\n\n         // 获取请求参数中的 ns\n         const ns = url.searchParams.get('ns'); \n         const hostname = url.searchParams.get('hubhost') || url.hostname;\n         const hostTop = hostname.split('.')[0]; // 获取主机名的第一部分\n\n         let checkHost; // 在这里定义 checkHost 变量\n         // 如果存在 ns 参数,优先使用它来确定 hub_host\n         if (ns) {\n             if (ns === 'docker.io') {\n                 hub_host = 'registry-1.docker.io'; // 设置上游地址为 registry-1.docker.io\n             } else {\n                 hub_host = ns; // 直接使用 ns 作为 hub_host\n             }\n         } else {\n             checkHost = routeByHosts(hostTop);\n             hub_host = checkHost[0]; // 获取上游地址\n         }\n\n         const fakePage = checkHost ? checkHost[1] : false; // 确保 fakePage 不为 undefined\n         console.log(`域名头部: ${hostTop}\\n反代地址: ${hub_host}\\n伪装首页: ${fakePage}`);\n         const isUuid = isUUID(pathname.split('/')[1].split('/')[0]);\n\n         if (屏蔽爬虫UA.some(fxxk => userAgent.includes(fxxk)) && 屏蔽爬虫UA.length > 0) {\n             // 首页改成一个nginx伪装页\n             return new Response(await nginx(), {\n                 headers: {\n                     'Content-Type': 'text/html; charset=UTF-8',\n                 },\n             });\n         }\n\n         const conditions = [\n             isUuid,\n             pathname.includes('/_'),\n             pathname.includes('/r/'),\n             pathname.includes('/v2/user'),\n             pathname.includes('/v2/orgs'),\n             pathname.includes('/v2/_catalog'),\n             pathname.includes('/v2/categories'),\n             pathname.includes('/v2/feature-flags'),\n             pathname.includes('search'),\n             pathname.includes('source'),\n             pathname === '/',\n             pathname === '/favicon.ico',\n             pathname === '/auth/profile',\n         ];\n\n         if (conditions.some(condition => condition) && (fakePage === true || hostTop == 'docker')) {\n             if (env.URL302) {\n                 return Response.redirect(env.URL302, 302);\n             } else if (env.URL) {\n                 if (env.URL.toLowerCase() == 'nginx') {\n                     //首页改成一个nginx伪装页\n                     return new Response(await nginx(), {\n                         headers: {\n                             'Content-Type': 'text/html; charset=UTF-8',\n                         },\n                     });\n                 } else return fetch(new Request(env.URL, request));\n             } else if (url.pathname == '/'){\n                 return new Response(await searchInterface(), {\n                     headers: {\n                     'Content-Type': 'text/html; charset=UTF-8',\n                     },\n                 });\n             }\n\n             const newUrl = new URL(\"https://registry.hub.docker.com\" + pathname + url.search);\n\n             // 复制原始请求的标头\n             const headers = new Headers(request.headers);\n\n             // 确保 Host 头部被替换为 hub.docker.com\n             headers.set('Host', 'registry.hub.docker.com');\n\n             const newRequest = new Request(newUrl, {\n                     method: request.method,\n                     headers: headers,\n                     body: request.method !== 'GET' && request.method !== 'HEAD' ? await request.blob() : null,\n                     redirect: 'follow'\n             });\n\n             return fetch(newRequest);\n         }\n\n         // 修改包含 %2F 和 %3A 的请求\n         if (!/%2F/.test(url.search) && /%3A/.test(url.toString())) {\n             let modifiedUrl = url.toString().replace(/%3A(?=.*?&)/, '%3Alibrary%2F');\n             url = new URL(modifiedUrl);\n             console.log(`handle_url: ${url}`);\n         }\n\n         // 处理token请求\n         if (url.pathname.includes('/token')) {\n             let token_parameter = {\n                 headers: {\n                     'Host': 'auth.docker.io',\n                     'User-Agent': getReqHeader(\"User-Agent\"),\n                     'Accept': getReqHeader(\"Accept\"),\n                     'Accept-Language': getReqHeader(\"Accept-Language\"),\n                     'Accept-Encoding': getReqHeader(\"Accept-Encoding\"),\n                     'Connection': 'keep-alive',\n                     'Cache-Control': 'max-age=0'\n                 }\n             };\n             let token_url = auth_url + url.pathname + url.search;\n             return fetch(new Request(token_url, request), token_parameter);\n         }\n\n         // 修改 /v2/ 请求路径\n         if ( hub_host == 'registry-1.docker.io' && /^\\/v2\\/[^/]+\\/[^/]+\\/[^/]+$/.test(url.pathname) && !/^\\/v2\\/library/.test(url.pathname)) {\n             //url.pathname = url.pathname.replace(/\\/v2\\//, '/v2/library/');\n             url.pathname = '/v2/library/' + url.pathname.split('/v2/')[1];\n             console.log(`modified_url: ${url.pathname}`);\n         }\n\n         // 更改请求的主机名\n         url.hostname = hub_host;\n\n         // 构造请求参数\n         let parameter = {\n             headers: {\n                 'Host': hub_host,\n                 'User-Agent': getReqHeader(\"User-Agent\"),\n                 'Accept': getReqHeader(\"Accept\"),\n                 'Accept-Language': getReqHeader(\"Accept-Language\"),\n                 'Accept-Encoding': getReqHeader(\"Accept-Encoding\"),\n                 'Connection': 'keep-alive',\n                 'Cache-Control': 'max-age=0'\n             },\n             cacheTtl: 3600 // 缓存时间\n         };\n\n         // 添加Authorization头\n         if (request.headers.has(\"Authorization\")) {\n             parameter.headers.Authorization = getReqHeader(\"Authorization\");\n         }\n\n         // 发起请求并处理响应\n         let original_response = await fetch(new Request(url, request), parameter);\n         let original_response_clone = original_response.clone();\n         let original_text = original_response_clone.body;\n         let response_headers = original_response.headers;\n         let new_response_headers = new Headers(response_headers);\n         let status = original_response.status;\n\n         // 修改 Www-Authenticate 头\n         if (new_response_headers.get(\"Www-Authenticate\")) {\n             let auth = new_response_headers.get(\"Www-Authenticate\");\n             let re = new RegExp(auth_url, 'g');\n             new_response_headers.set(\"Www-Authenticate\", response_headers.get(\"Www-Authenticate\").replace(re, workers_url));\n         }\n\n         // 处理重定向\n         if (new_response_headers.get(\"Location\")) {\n             return httpHandler(request, new_response_headers.get(\"Location\"));\n         }\n\n         // 返回修改后的响应\n         let response = new Response(original_text, {\n             status,\n             headers: new_response_headers\n         });\n         return response;\n     }\n };\n\n /**\n * 处理HTTP请求\n * @param {Request} req 请求对象\n * @param {string} pathname 请求路径\n */\n function httpHandler(req, pathname) {\n     const reqHdrRaw = req.headers;\n\n     // 处理预检请求\n     if (req.method === 'OPTIONS' &&\n         reqHdrRaw.has('access-control-request-headers')\n     ) {\n         return new Response(null, PREFLIGHT_INIT);\n     }\n\n     let rawLen = '';\n\n     const reqHdrNew = new Headers(reqHdrRaw);\n\n     const refer = reqHdrNew.get('referer');\n\n     let urlStr = pathname;\n\n     const urlObj = newUrl(urlStr);\n\n     /** @type {RequestInit} */\n     const reqInit = {\n         method: req.method,\n         headers: reqHdrNew,\n         redirect: 'follow',\n         body: req.body\n     };\n     return proxy(urlObj, reqInit, rawLen);\n }\n\n /**\n * 代理请求\n * @param {URL} urlObj URL对象\n * @param {RequestInit} reqInit 请求初始化对象\n * @param {string} rawLen 原始长度\n */\n async function proxy(urlObj, reqInit, rawLen) {\n     const res = await fetch(urlObj.href, reqInit);\n     const resHdrOld = res.headers;\n     const resHdrNew = new Headers(resHdrOld);\n\n     // 验证长度\n     if (rawLen) {\n         const newLen = resHdrOld.get('content-length') || '';\n         const badLen = (rawLen !== newLen);\n\n         if (badLen) {\n             return makeRes(res.body, 400, {\n                 '--error': `bad len: ${newLen}, except: ${rawLen}`,\n                 'access-control-expose-headers': '--error',\n             });\n         }\n     }\n     const status = res.status;\n     resHdrNew.set('access-control-expose-headers', '*');\n     resHdrNew.set('access-control-allow-origin', '*');\n     resHdrNew.set('Cache-Control', 'max-age=1500');\n\n     // 删除不必要的头\n     resHdrNew.delete('content-security-policy');\n     resHdrNew.delete('content-security-policy-report-only');\n     resHdrNew.delete('clear-site-data');\n\n     return new Response(res.body, {\n         status,\n         headers: resHdrNew\n     });\n }\n\n async function ADD(envadd) {\n     var addtext = envadd.replace(/[\t |\"'\\r\\n]+/g, ',').replace(/,+/g, ',');\t// 将空格、双引号、单引号和换行符替换为逗号\n     if (addtext.charAt(0) == ',') addtext = addtext.slice(1);\n     if (addtext.charAt(addtext.length - 1) == ',') addtext = addtext.slice(0, addtext.length - 1);\n     const add = addtext.split(',');\n     return add;\n }\n ```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"python operation s3","description":"","slug":"python-operation-s3","date":"2024-11-15T13:04:50+08:00","tags":["s3","python"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"python operation s3","description":"","slug":"python-operation-s3","date":"2024-11-15T13:04:50+08:00","tags":["s3","python"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-15-python operation s3.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-15-python operation s3.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-15-python operation s3.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-15-python operation s3.md","fmFileName":"2024-11-15-python operation s3.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731647090000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n配置访问凭证\n\n```bash\n~/.aws/credentials\n\n[default]\naws_access_key_id = AKIATXBI6Zxxxxx\naws_secret_access_key = bh4Z5Xq9cM/U/7XZxxxx\n```\n\n`pip install boto3`\n\n```python\nimport boto3\n\nbucket_name = 'prd-uz'\nfile_path = 'test.md'\ns3_key = 'test.md' #上传到 S3 的根目录\n\n# 创建 S3 客户端\ns3 = boto3.client('s3',region_name='me-central-1')\n\n# 上传文件\ns3.upload_file(file_path, bucket_name, s3_key)\nprint(\"File uploaded successfully.\")\n\n\n# 生成预签名 URL\nurl = s3.generate_presigned_url(\n    'get_object',\n    Params={'Bucket': bucket_name, 'Key': s3_key},\n    ExpiresIn=3600\n)\nprint(\"Presigned URL:\", url)\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"AWS-技术指北","description":"","slug":"aws-ji-zhu-zhi-bei","date":"2024-11-15T16:49:42+08:00","tags":["aws","s3"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"AWS-技术指北","description":"","slug":"aws-ji-zhu-zhi-bei","date":"2024-11-15T16:49:42+08:00","tags":["aws","s3"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-15-AWS技术之北.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-15-AWS技术之北.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-15-AWS技术之北.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-15-AWS技术之北.md","fmFileName":"2024-11-15-AWS技术之北.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731660582000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### S3 最佳实践\n\n```bash\n1. 在 ~/.aws/credentials 配置文件中添加密钥\n\n[default]\naws_access_key_id = YOUR_ACCESS_KEY\naws_secret_access_key = YOUR_SECRET_KEY\n\n2. 使用环境变量设置凭证\n\nlinux\n\nexport AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\nexport AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\n\nwindows\n\nset AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\nset AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\n\n3. 基于 IAM\n\n如果代码在 AWS EC2 实例上运行,可以使用 IAM 角色分配访问权限。在这种情况下,boto3 会自动获取 IAM 角色分配的临时凭证,无需手动配置密钥。\n\nawsLinux 默认安装 aws-cli\n\naws configure\n\nAWS Access Key ID [None]: AKIATXBI6ZJCYEQxxxxxx\nAWS Secret Access Key [None]: bh4Z5Xq9cM/U/7XZ5/Dkwqidxxxxxxx\nDefault region name [None]: me-central-1\nDefault output format [None]: json\naws sts get-caller-identity\n{\n    \"UserId\": \"AIDATXBI6ZJCSxxxxx\",\n    \"Account\": \"25563xxxx8053\",\n    \"Arn\": \"arn:aws:iam::2xxx458053:user/prd-uz-s3user\"\n}\n```\n\n### AWS CLI 安装\n\n可以通过 aws-cli 在指定的机器上配置 IAM 凭证\n\n```bash\nwindows 直接官网下载对应平台的安装包\n\nAWS CLI MSI适用于 Windows 的安装程序(64 位):https://s3.amazonaws.com/aws-cli/AWSCLI64PY3.msi\n\nAWS CLI 适用于 Windows 的组合安装文件: https://s3.amazonaws.com/aws-cli/AWSCLISetup.exe\n\nlinux 可以通过 pip 安装\n\npip3 install awscli --upgrade --user\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"MySQL-5.7-主从同步配置","description":"","slug":"mysql-5-7-zhu-cong-tong-bu-pei-zhi","date":"2024-11-13T17:44:18+08:00","tags":["mysql","aws"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"MySQL-5.7-主从同步配置","description":"","slug":"mysql-5-7-zhu-cong-tong-bu-pei-zhi","date":"2024-11-13T17:44:18+08:00","tags":["mysql","aws"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-13-MySQL-5.7-主从同步配置.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmFileName":"2024-11-13-MySQL-5.7-主从同步配置.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731491058000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### MySQL 安装\n\n>主从同步操作,版本为 5.7.44\n\n```bash\nyum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\nyum list installed | grep mysql\nyum repolist all | grep -E \"mysql[0-9]+-community/x86\"\nyum-config-manager --disable mysql80-community\nyum-config-manager --enable mysql57-community\nrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022\nyum install -y mysql-community-server\nsystemctl start mysqld\nsystemctl status mysqld.service\ngrep 'temporary password' /var/log/mysqld.log\n```\n\n### 修改配置文件\n\n主库配置文件\n\n```bash\nvim /etc/my.cnf\n\n[mysqld]\n\nlog-bin=master-bin\nbinlog-format=ROW\nserver-id=1\n```\n\n从库配置文件\n\n```bash\nvim /etc/my.cnf\n\n[mysqld]\n\nlog-bin=master-bin\nbinlog-format=ROW\nserver-id=2\nread-only = 1\n```\n### 修改默认密码\n\n```bash\nmysql -uroot -p\nalter user 'root'@'localhost' identified by 'anyWhere@2024'\nflush privileges;\n```\n\n>重启 MySQL\n\n### 新建同步用户\n\n```bash\ncreate user 'tongbu'@'172.31.%' identified by 'anyWhere@2024';\ngrant replication slave on *.* to 'tongbu'@'172.31.%';\n```\n\n### 准备同步\n\n> 如果不是新建的库,需要在同步前将主库数据导入从库。\n\n\n#### 在主库上执行以下命令导出数据库\n\n```bash\nmysqldump -uroot -p --all-databases --master-data > db_backup.sql\n```\n\n#### 在从库上将 db_backup.sql 文件导入\n\n```bash\nmysql -uroot -p < db_backup.sql\n```\n\n### 配置主库连接信息\n\n```bash\nchange master to master_host='172.31.12.203',master_user='tongbu',master_password='anyWhere@2024',master_log_file='master-bin.000001', master_log_pos=613;\n\n# 在主库SHOW MASTER STATUS获取的File值\n# 在主库SHOW MASTER STATUS获取的Position值\n```\n\n### 启动主从同步\n\n```bash\nSTART SLAVE;\n```\n\n### 可选操作——启用半同步复制\n\n在主库上启用\n\n```sql\nSET GLOBAL rpl_semi_sync_master_enabled = 1;\n```\n\n在从库上启用\n\n```sql\nSET GLOBAL rpl_semi_sync_slave_enabled = 1;\n```\n\n### 检查复制状态\n\n```sql\nSHOW SLAVE STATUS\\G;\n```\n\n确认以下两个状态为 Yes\n\n- Slave_IO_Running: Yes\n- Slave_SQL_Running: Yes","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"歌者文明早期的文艺作品(古歌谣)","description":"","slug":"ge-zhe-wen-ming-song","date":"2024-11-11T23:52:04+08:00","tags":["三体"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"歌者文明早期的文艺作品(古歌谣)","description":"","slug":"ge-zhe-wen-ming-song","date":"2024-11-11T23:52:04+08:00","tags":["三体"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmFileName":"2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731340324000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n我看到了我的爱恋\n\n我飞到她的身边\n\n我捧出给她的礼物\n\n那是一小块凝固的时间\n\n时间上有美丽的条纹\n\n摸起来像浅海的泥一样柔软\n\n她把时间涂满全身\n\n然后拉起我飞向存在的边缘\n\n这是灵态的飞行\n\n我们眼中的星星像幽灵\n\n星星眼中的我们也像幽灵\n\n——刘慈欣《三体》\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"与好友同游南京","description":"","slug":"yu-hao-you-tong-you-nan-jing","date":"2024-11-10T17:53:21+08:00","tags":["栖霞山","中山陵"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"与好友同游南京","description":"","slug":"yu-hao-you-tong-you-nan-jing","date":"2024-11-10T17:53:21+08:00","tags":["栖霞山","中山陵"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-10-与好友同游南京.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-10-与好友同游南京.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-10-与好友同游南京.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-10-与好友同游南京.md","fmFileName":"2024-11-10-与好友同游南京.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731232401000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n听说栖霞山的枫叶红了,上海的三位老友想要我带他们去看一看,利用休息日就带他们先后游玩了中山陵 >> 栖霞山 >> 老门东 >> 玄武湖。\n\n![老友](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101831699.jpeg)\n\n###### 老友合影\n\n![邮政](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101800270.jpeg)\n\n###### 中国邮政\n\n![气势磅礴的陵墓](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101803686.jpeg)\n\n###### 气势磅礴的中山陵\n\n![栖霞山的枫叶](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101804793.jpeg)\n\n###### 栖霞山的枫叶(一)\n\n![栖霞山的枫叶](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101805202.jpeg)\n\n###### 栖霞山的枫叶(二)\n\n![大肉面中的天花板](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101806762.jpeg)\n\n###### 大肉面中的天花板\n\n![紫峰大厦](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101807336.jpeg)\n\n###### 紫峰大厦\n\n栖霞山的枫叶要等到 11 月下旬才会变成红色,这次我们没能赶上最美的时间,稍微有一点遗憾。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"不知道自己想要什么","description":"","slug":"bu-zhi-dao-zi-ji-xiang-yao-shen-me","date":"2024-11-07T00:18:08+08:00","tags":["随笔"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"不知道自己想要什么","description":"","slug":"bu-zhi-dao-zi-ji-xiang-yao-shen-me","date":"2024-11-07T00:18:08+08:00","tags":["随笔"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-07-不知道自己想要什么.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-07-不知道自己想要什么.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-07-不知道自己想要什么.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-07-不知道自己想要什么.md","fmFileName":"2024-11-07-不知道自己想要什么.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730909888000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n不知道自己想要什么。\n\n房子、车子、婚姻似乎于我而言都是可有可无的东西。\n\n租房子除了搬家不便,换来的是想住哪里就住哪里的自由。\n\n打工人的通勤全靠公共交通,没有车子倒也少了停车的烦恼。\n\n婚姻也并非人们的自由选择。\n\n从本质上看,婚姻只是双方的一种特定的社会盟约,无关爱情。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"为了方便发布文章,我写了两个脚本","description":"","slug":"wei-liao-fang-bian-fa-bu-wen-zhang-wo-xie-liao-liang-ge-jiao-ben","date":"2024-11-05T21:51:22+08:00","draft":false,"tags":["python","shell"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"为了方便发布文章,我写了两个脚本","description":"","slug":"wei-liao-fang-bian-fa-bu-wen-zhang-wo-xie-liao-liang-ge-jiao-ben","date":"2024-11-05T21:51:22+08:00","draft":false,"tags":["python","shell"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-05-为了方便发布文章,我写了两个脚本.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmFileName":"2024-11-05-为了方便发布文章,我写了两个脚本.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730814682000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n用了 hugo 一段时间后,感觉每次新建文章都有些不顺手。程序自身的自带的 hugo new 命令创建的文章并不能实现自定义 slug, 于是用 `python-slugify` 库实现了自己的需求。\n\n### 新建文章脚本\n\n> 记得安装库 pip3 install python-slugify\n\n```python\nimport os\nimport datetime\nfrom slugify import slugify\nfrom datetime import timezone, timedelta\n\ndef generate_slug(title):\n    # 将标题转换为slug\n    slug = slugify(title)\n    return slug\n\ndef create_hugo_article(title, content_dir='content'):\n    # 获取当前日期和时间,并设置为北京时间(东八区)\n    now = datetime.datetime.now(timezone(timedelta(hours=8)))\n    date_str = now.strftime(\"%Y-%m-%dT%H:%M:%S%z\")  # 输出带时区的时间格式\n    \n    # 处理时区格式,将 \"+0800\" 转换为 \"+08:00\"\n    date_str = date_str[:-2] + \":\" + date_str[-2:]\n    \n    # 生成 slug\n    slug = generate_slug(title)\n    \n    # 定义文章文件名\n    filename = f\"{now.strftime('%Y-%m-%d')}-{title}.md\"\n    \n    # 定义 Front Matter 模板,添加 slug 字段\n    front_matter = f\"\"\"---\ntitle: \"{title}\"\nslug: \"{slug}\"\ndate: {date_str}\ntags: []\n---\n\n\"\"\"\n    \n    # 获取文件路径\n    file_path = os.path.join(content_dir, filename)\n    \n    # 创建目标文件夹(如果不存在)\n    os.makedirs(content_dir, exist_ok=True)\n    \n    # 写入 Front Matter 和模板内容\n    with open(file_path, 'w', encoding='utf-8') as f:\n        f.write(front_matter)\n        f.write(\"# 文章内容\\n\\n\")\n        f.write(\"这里是文章的正文内容。可以开始写作了。\\n\")\n    \n    print(f\"文章模板已创建:{file_path}\")\n\n# 调用函数创建文章\nif __name__ == \"__main__\":\n    title = input(\"请输入文章标题: \")  # 用户输入标题\n    create_hugo_article(title)\n```\n\n新建文章命令:`python3 create_post.py`\n\n### 发布文章脚本\n\n```shell\n#!/bin/bash\n\n# 开启代理,如果需要\nexport http_proxy=\"http://127.0.0.1:7897\"\nexport https_proxy=\"http://127.0.0.1:7897\"\n\n# 进入 Hugo 项目的目录\ncd /Users/kevin/Documents/github/blog\n\n# 查看当前 Git 状态\necho \"查看当前 Git 状态...\"\ngit status\n\n# 提示用户是否提交\nread -p \"是否提交本次更改?(y/n): \" confirm\n\n# 如果用户输入 y,则继续提交,否则退出脚本\nif [[ \"$confirm\" == \"y\" || \"$confirm\" == \"Y\" ]]; then\n    echo \"添加更改...\"\n    git add .\n\n    echo \"提交更改...\"\n    git commit -m \"update\"\n\n    echo \"推送更改...\"\n    git push\n\n    echo \"发布完成!\"\nelse\n    echo \"操作已取消,未提交更改。\"\nfi\n```\n\n发布文章命令:`sh deploy.sh`\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"\"又论”我们是否应该把婚姻当成任务来完成","description":"","slug":"hun-yin","date":"2024-11-05","tags":["婚姻观"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"\"又论”我们是否应该把婚姻当成任务来完成","description":"","slug":"hun-yin","date":"2024-11-05","tags":["婚姻观"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmFileName":"2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730736000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n有些朋友可能会好奇,为什么标题叫“又论”我们是否应该把婚姻当成任务来完成。翻看博客,似乎之前从未讨论过这个话题,何谈“又”?当然这个又不是指我个人,而是作为普遍的“人”。这个话题,从进入现代社会起就没完没了地被探讨着。它既是人类根本问题,也是关于婚姻最普遍的问题。\n\n我在前天刚过了三十岁的生日,在“而立之年”,婚姻似乎是我一个逃避不了的话题,虽然这个问题已经逃避了好些年年,眼下是应该直面这个问题了。还在我二十多岁的年纪,每每家人要托人给我介绍相亲对象的时候,我都会“炸毛”般抗拒,这种抗拒是没来由的。我不知道自己为何会如此抗拒结婚,在以后的某个夜晚我也曾思考这种抗拒心理的源头来自哪里。也许是父母不幸的婚姻潜移默化地影响了我,或是从父母口中听到了太多“某某婚后不久就离婚”的故事,抑或是性格使然。\n\n然而,人终究是会随着年龄的增长而改变,彼时的心境与此时的心境似乎已经不在一样。也正因此,今天才会再思考“我们是否应该把婚姻当成任务完成”这个话题。以前,我对这个问题的回答是否定的,婚姻的最终目的不过是为了繁衍,因此付出的代价就是将自己与另外一个人进行捆绑。为了繁衍,我们会增加很多额外的金钱成本和精力成本。进入婚姻意味着你自己不在是你自己,也不在只是为了自己而活。你需要考虑如何经营这个家庭才会使家庭生活的更好,因此你又不得不牺牲一些东西,像闲暇、金钱、爱好等一系列自己想要追求的东西。我们付出那么多,最终得到是一段不可靠的婚姻关系,这段关系可能随时都会因为生活中的争吵、背叛、柴米油盐的琐事而中断。这其中还有没有提到的养育孩子的一系列问题。\n\n总之,在某一时刻之前我确实是这么看待婚姻的。我对婚姻是一个悲观主义,不相信自己能把婚姻经营好。在某一刻之后,我对婚姻的想法似乎又慢慢的转变了,当我再谈到婚姻似乎不在那么抗拒,这种改变在不经意间。时间会让你慢慢的去接受一些自己曾经接受不了的东西,丢掉一些自己曾经捍卫的东西。我不知道这究竟是时间改变了自己,还是人类基因延续的使命在作怪。我开始和曾经讨厌的人变得越来越像,我开始着手准备在各个社交平台发布交友信息,开始考虑给自己先付个首付买个房子。那个曾经信誓旦旦说死也不做房奴的他渐渐的消失在了记忆里。取而代之的是那个终究无法逃避命运的“俄狄浦斯”。\n\n回到标题。我们大多数人都逃离不了婚姻,即使再不想结婚的人最后都会走完人生的基本“流程”——结婚、生子、死去。我们常认为婚姻与否是个人的选择,但这更多是一个响亮的口号。现实中,迫于这个社会的压力、父母的期望、亲戚的言语,你都不得不选择进入婚姻,即使百般不愿。更不要忘记还有时间这个东西,它会在毫无察觉间改变你的思想。\n\n既然必须要结婚,那我就要把它当成一项任务来完成。但我不能把婚姻这项任务当成一项普通的任务,我应该高质量地完成。我们可以把婚姻当成任务,但是又要明白婚姻的本质又不只是任务,而是基于彼此的爱、理解、和共同进步。若单纯把婚姻当成任务,那么很容易将其视为一个短期阶段性的目标去完成。\n\n或许,应该尝试将婚姻从完成任务向着如何体验这个过程转变,或许从“任务”心态转向“体验”心态,才可以更从婚姻的关系中体验到美好,也能更珍惜彼此。\n\n写到这里已经凌晨了。尽管写了这么多,但自己对婚姻依然充满迷茫,不知道自己是否能够经营好。希望自己能尽力,以高质量去完成这项艰难的任务。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"南京的秋天","description":"","slug":"nan-jing-de-qiu-tian","date":"2024-11-03","tags":["玄武湖","南京"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"南京的秋天","description":"","slug":"nan-jing-de-qiu-tian","date":"2024-11-03","tags":["玄武湖","南京"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-03-南京的秋天.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-03-南京的秋天.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-03-南京的秋天.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-03-南京的秋天.md","fmFileName":"2024-11-03-南京的秋天.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730563200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n在南京生活了几年,秋天的南京给我的印象如十八岁的少女——美丽且易逝。\n\n今天也是一个普通的周末,光从阳台就感觉到今天是一个很好天气,实在是忍不住不出门看看秋天的南京。要说秋天南京哪里最美,我倒也能说个二三,像栖霞山的枫叶,钟山陵的梧桐大道,明孝陵的石象路,朝天宫的古建筑等都在秋天有着不一样的美。我今天倒没有选择上面的景点,而是去了玄武湖。\n\n在玄武湖散散步,看看湖面划船的游客,再看看湖边垂下的杨柳,不由得感叹,打工人是最苦逼的,平时压根没时间享受这样惬意轻松的时光。\n\n眼前的景象也难免不让人想要拿起手机定格此刻,拍下的照片感觉不用添加滤镜就已经很好看了。\n\n![大黄鸭](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032355227.jpeg)\n\n在湖面划船的人们\n\n![湖边漫步的人](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032356959.jpeg)\n\n湖边漫步的人\n\n![搭帐篷露营的人](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032357244.jpeg)\n\n搭帐篷露营的人\n\n逛完了玄武湖也走了近万步,这时肚子已经感觉到饿了。离新街口比较近的一个叫高庙街的美食街,里面有很多不错的小吃,而我最喜欢的是一家肠粉,几乎每次过去都会进去吃上两份。今天当然也不例外,玄武湖逛饿了就去吃了他家的肠粉,一个人点了两份肠粉和一碗粥,老板给了我两双筷子,看这个份量以为是两人食了吧。\n\n![肠粉](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411040002211.jpeg)\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"给博客增加评论功能","description":"","slug":"gei-bo-ke-zeng-jia-ping-lun-gong-neng","date":"2024-10-31T16:09:16+08:00","tags":["hugo","blog","comment"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"给博客增加评论功能","description":"","slug":"gei-bo-ke-zeng-jia-ping-lun-gong-neng","date":"2024-10-31T16:09:16+08:00","tags":["hugo","blog","comment"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-31-给博客增加评论功能.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-31-给博客增加评论功能.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-31-给博客增加评论功能.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-31-给博客增加评论功能.md","fmFileName":"2024-10-31-给博客增加评论功能.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730362156000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 功能的实现(引用 Giscus 官方的介绍)\n\n利用 [GitHub Discussions](https://docs.github.com/en/discussions) 实现的评论系统,让访客借助 GitHub 在你的网站上留下评论和反应吧!本项目深受 [utterances](https://github.com/utterance/utterances) 的启发。\n\n- [开源](https://github.com/giscus/giscus)。🌏\n- 无跟踪,无广告,永久免费。📡 🚫\n- 无需数据库。所有数据均储存在 GitHub Discussions 中。:octocat:\n- 支持[自定义主题](https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#data-theme)!🌗\n- 支持[多种语言](https://github.com/giscus/giscus/blob/main/CONTRIBUTING.md#adding-localizations)。🌐\n- [高可配置性](https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md)。🔧\n- 自动从 GitHub 拉取新评论与编辑。🔃\n- [可自建服务](https://github.com/giscus/giscus/blob/main/SELF-HOSTING.md)!🤳\n\n### 安装 Giscus\n\n选择静态博客部署的 repo(非源码 repo), 选择 `Settings` >> 勾选 `Discussions`.\n\n访问此链接 `https://github.com/apps/giscus` 安装 Giscus. 点击 `Install` 后,依次选择 `Only select repositories` >> `Select repositories` 选择自己的静态博客 repo, 最后点击 `Install` 完成安装。\n### 配置 Giscus\n\n需要访问 [Giscus](https://giscus.app/zh-CN) 官网来获取相应的配置信息,随后将配置信息写入到主题的对应页面里。\n\n![conf](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311552982.png)\n\n`选择语言` >> `选择 repo`\n\n![](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311555697.png)\n\n使用推荐配置即可。\n\n### 修改 HUGO 模板文件\n\n> 根据博客主题的不同,修改的位置不是固定的,要参考自己的主题进行修改。\n\n### 我的方案\n\n在主题`layouts/partials/` 目录下新建一个 `comment.html` 模板,拷贝  Giscus 生成的 script 脚本。\n\n```html\n<script src=\"https://giscus.app/client.js\"\n        data-repo=\"jimicat/jimicat.github.io\"\n        data-repo-id=\"R_kgDOMxxxxx\"\n        data-category=\"Announcements\"\n        data-category-id=\"DIC_kwDOM5EFCxxxxx\"\n        data-mapping=\"pathname\"\n        data-strict=\"0\"\n        data-reactions-enabled=\"1\"\n        data-emit-metadata=\"0\"\n        data-input-position=\"top\"\n        data-theme=\"preferred_color_scheme\"\n        data-lang=\"zh-CN\"\n        data-loading=\"lazy\"\n        crossorigin=\"anonymous\"\n        async>\n</script>\n```\n\n在 `layouts/_default/single.html` 引用 `comment.html` 模板\n\n```html\n{{ define \"main\" }}\n{{ partial \"back_link.html\" .}}\n<article>\n    <p class=\"post-meta\">\n        <time datetime=\"{{ .Date }}\">\n            {{ .Date | time.Format site.Params.theme_config.date_format }}\n        </time>\n    </p>\n    <h1>{{ .Title }}</h1>\n    {{ if and (or (.Params.toc | default true)) (gt (len .TableOfContents) 80) }}\n        <aside class=\"toc\">\n            {{ .TableOfContents }}\n        </aside>\n    {{ end }}\n    {{ .Content }}\n    \n    {{ partial \"comment.html\" .}} <!-- 这里即是引用模板的块 -->\n</article>\n{{ end }}\n```\n\n### 提交更改\n\n```bash\ngit add .\ngit commit -m \"add comment func\"\ngit push\n```\n\n待 `Github Action` 部署完后进行验证。\n\n### 效果展示\n\n参考本博客的评论区","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"一个获取播客订阅源的网站","description":"","slug":"yi-ge-huo-qu-bo-ke-ding-yue-yuan-de-wang-zhan","date":"2024-10-29","tags":["podcast","rss"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"一个获取播客订阅源的网站","description":"","slug":"yi-ge-huo-qu-bo-ke-ding-yue-yuan-de-wang-zhan","date":"2024-10-29","tags":["podcast","rss"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-29-一个获取播客订阅源的网站.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmFileName":"2024-10-29-一个获取播客订阅源的网站.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730131200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\nhttps://podcastaddict.com/\n\n![podcastaddict](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410291703172.png)\n\n这个网站看似具有年代感,但是通过搜索可以发现包含过国内外大多数的播客订阅源。配合下面的 audiobookshelf 食用更佳。\n\n![audiobookshelf](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410291704013.png)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"简单稳定的组网方案","description":"","slug":"jian-dan-wen-ding-de-zu-wang-fang-an","date":"2024-10-28","tags":["tailscale","组网"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"简单稳定的组网方案","description":"","slug":"jian-dan-wen-ding-de-zu-wang-fang-an","date":"2024-10-28","tags":["tailscale","组网"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-28-简单稳定的组网方案.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmFileName":"2024-10-28-简单稳定的组网方案.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730044800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n如今异地组网工具百花齐放,像 ZeroTier、NetBird、Tailscale、WireGuard 等都是很出色的组网工具,用户随便选择上面的任意一款都能够简单的实现自己的组网需求。从有了组网的需求后,几款主流的软件也曾一一试过,最终选择 Tailscale 的原因只是稳定、简单、够用。\n\n### 安装\n\n在 Linux 平台只需要一条命令就能安装,像 Mac、Window、移动端也都有各自的安装包。\n\n```bash\ncurl -fsSL https://tailscale.com/install.sh | sh\n```\n\n启动 tailscale 也仅需一条命令\n\n```bash\ntailscale up\n```\n\n点击弹出的授权链接,在授权成功后我们的设备就会显示为 `connected`。([控制台](https://login.tailscale.com/admin/machines))\n\n![1729846093585.png](https://image.written.cc/i/2024/10/25/671b5b5454223.png)\n\n至此,所有的客户端都会获得一个由 tailscale 分配的 IP,通过此地址实现异地机器的互通。\n\n```bash\nroot@k7x4d8:~# tailscale ip -4\n100.101.204.77\n```\n\n### 实现 HTTPS 访问\n\n实现异地组网的基础功能后,我们还可能想要通过域名(HTTPS)而非 IP 来访问我们暴露的服务。虽然我们可以认为内网中暴露的服务是可信任的,但是浏览器端却无法感知这一点,由此可能会出现浏览器的不安全警告,甚至拒绝提供服务。为此,tailscale 提供了 acme 功能,可以自动申请 Let's Encrypt 证书。\n\n### 控制台启用 HTTPS  和 MagicDNS\n\n![1729848155835.png](https://image.written.cc/i/2024/10/25/671b635f1fd61.png)\n\nMagicDNS——相对于 tailscale 分配的 ip 地址,tailscale 提供了一个 magicdns 的功能,我们可以直接用 tailscale 分发的域名解析到该 IP。\n\n我们可以从控制台直接看到分发的域名,通过访问下面的域名即可访问到对应的设备。\n\n```bash\nk7x4d8.mau-wahxx.ts.net\n```\n\n如 `ssh root@100.101.204.77` 等同于 `ssh root@k7x4d8.mau-wahxx.ts.net`\n\n`k7x4d8` 一般是自动生成的,一般是设备的主机名(可自定义)。\n`mau-wahoo` 是 tailscale 分配给用户的二级域名,可以通过摇号的方式再次刷新获取。\n`ts.net` 是该 FQDN 的一级域名,为 Tailscale 所有。\n\n### 为域名申请证书\n\n```bash\nroot@k7x4d8:~# tailscale cert --cert-file=/etc/nginx/cert/cert.pem --key-file=/etc/nginx/cert/key.pem k7x4d8.mau-wahxx.ts.net\nWrote public cert to /etc/nginx/cert/cert.pem\nWrote private key to /etc/nginx/cert/key.pem\n```\n\n### 实现反向代理\n\n我的方案是所有的服务通过容器部署,然后 nginx 进行反向代理。因此证书配置在 nginx 的 cert 目录。\n\n```bash\nserver {\n    listen 80;\n    server_name k7x4d8.mau-wahxx.ts.net;\n    return 301 https://$host$request_uri;\n}\n\nserver {\n    listen              443 ssl http2;\n    listen              [::]:443 ssl http2;\n    server_name         k7x4d8.mau-wahxx.ts.net;\n\n    # SSL\n    ssl_certificate     /etc/nginx/cert/cert.pem;\n    ssl_certificate_key /etc/nginx/cert/key.pem;\n\n\n    # logging\n    access_log          /var/log/nginx/access.log combined buffer=512k flush=1m;\n    error_log           /var/log/nginx/error.log warn;\n\n    location / {\n        proxy_pass http://127.0.0.1:5006;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\n在实际操作过程中,发现无法访问部署的服务,经过排查发现是开了梯子的原因。解决方案是:\n\n- 将梯子关了\n- 梯子增加规则,让自己的域名直连。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Debian 12 配置静态 IP","description":"","slug":"debian-12-pei-zhi-jing-tai-ip","date":"2024-10-24","tags":["debian","linux"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Debian 12 配置静态 IP","description":"","slug":"debian-12-pei-zhi-jing-tai-ip","date":"2024-10-24","tags":["debian","linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-24-Debian 12 配置静态 IP.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmFileName":"2024-10-24-Debian 12 配置静态 IP.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729699200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\nDebian 12 的网卡默认配置文件是`/etc/network/interfaces`如不做修改,它会动态获取本机的 IP 地址。\n\n如果想要确保服务器在重启后保持 IP 不变,我们就可以在不修改原有配置文件的前提下,通过在`/etc/network/interfaces.d`目录下新增一个与网卡同名的配置文件来起到覆盖默认配置。\n\n\n\n```bash\nvim /etc/network/interfaces.d/ens33\nauto ens33 #网卡名\niface ens33 inet static\naddress 192.168.9.101 #IP\nnetmask 255.255.255.0 #掩码\ngateway 192.168.9.1 #网关\n\nsystemctl restart networking.service #重启网络服务\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"跑步数据分析","description":"","slug":"pao-bu-shu-ju-fen-xi","date":"2024-10-22","tags":["运动记录"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"跑步数据分析","description":"","slug":"pao-bu-shu-ju-fen-xi","date":"2024-10-22","tags":["运动记录"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-22-跑步数据分析.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-22-跑步数据分析.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-22-跑步数据分析.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-22-跑步数据分析.md","fmFileName":"2024-10-22-跑步数据分析.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729526400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n进入十月份后,天气逐渐开始降温。计划着冬天就要到了,想利用从十月份到来年开春的这段时间训练一下自己的跑步成绩,为来年的南京半马做准备。\n\n训练计划主要借助佳明运动手表生成的,前几天也只是尽力跟上计划,但是中途也因为自己不想跑了就没跟上计划,所以目前的跑步训练就断断续续。今天的 VO2Max 跑也是昨天推迟到了今天的,今天其实也没准备跑,只是临时起意。\n\n首先贴上今天的训练记录,然后稍微分析一下。\n\n![运动记录](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311149266.png)\n\n计划是保持心率在 ZONE5 区间跑满两分钟,这个过程重复跑上七次,每次中间恢复一分钟。我在坚持跑到第四回合的时候体力已经不足以支撑我以 ZONE5 的心率区间跑下去了,后面三个回合就是慢跑了,无法坚持下来。\n\n即使前面四个回合,我的心率也总是上不去,最高心率 160BPM 就到顶了。原因可能就是这一年来几乎没有训练过自己的无氧运动,导致无氧的阈值很低,也由此可见自己的心率能力也有所下降了。\n\n就今天的跑步情况来看,后面还是需要针对性的提升自己的无氧能力以及提升自己的心肺能力。具体做法就是有氧的运动减少一点,每周抽出一次专门针对无氧能力的训练。像今天的这种 VO2Max 跑每周可以训练一次。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"为网站配置免费的域名证书","description":"","slug":"wei-wang-zhan-pei-zhi-mian-fei-de-yu-ming-zheng-shu","date":"2024-10-22","tags":["https","ssl"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"为网站配置免费的域名证书","description":"","slug":"wei-wang-zhan-pei-zhi-mian-fei-de-yu-ming-zheng-shu","date":"2024-10-22","tags":["https","ssl"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-22-为网站配置免费的域名证书.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmFileName":"2024-10-22-为网站配置免费的域名证书.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729526400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![1729565225093.png](https://image.written.cc/i/2024/10/22/67171230ea128.png)\n\n[acme.sh](https://acme.sh) 实现了ACME 协议,它不仅可以为您的域名从 Let's Encrypt 生成免费的证书,而且通过配套的自动更新功能,能够为证书自动续期。\n\n> 基于 CentOS 7\n\n### 安装 acme.sh\n\n```bash\ncurl  <https://get.acme.sh> | sh\n```\n\n### 打开 Godaddy\n\n- 打开Godaddy开发者平台\n- 打开API Keys\n- Create New API Key(创建新的API Key)\n\n### 创建新的 API Key\n\n- 填写API Key的名称(可选)\n- 环境(Environment)选择产品(Production)\n- 保存生成的 Key 和 Secret\n\n### 配置环境变量并生成证书\n\n```bash\nexport GD_Key=\"gHzatxxxf8geRg7UGanJiaKyied2F\"\nexport GD_Secret=\"RMuBD3tRixxxYDkGewPGY\"\nacme.sh --issue --dns dns_gd -d  thongpunchangrc.com -d '*.thongpunchangrc.com'\n```\n### 安装nginx\n\n```bash\nyum install nginx\n```\n### 将证书导出到 nginx 目录(证书会被定期renew)\n\n```bash\nmkdir /etc/nginx/cert\n\nacme.sh --install-cert  -d picokkplus.com -d *.picokkplus.com --key-file /etc/nginx/cert/key.pem --fullchain-file /etc/nginx/cert/cert.pem\n```\n### 配置nginx\n\n```bash\nvim /etc/nginx/conf.d/picokkplus.conf\n\nserver {\n    listen 80;\n    server_name www.picokkplus.com picokkplus.com;\n    rewrite ^/(.*) <http://www.picokkplus.com/$1> permanent;\n    root /data/html/picokkplus;\n    index index.html index.php;\n}\n\nserver {\n    listen 443 ssl;\n    server_name www.picokkplus.com picokkplus.com;\n    ssl_certificate /etc/nginx/cert/cert.pem;\n    #填写证书私钥文件绝对路径\n    ssl_certificate_key /etc/nginx/cert/key.pem;\n    ssl_session_cache shared:SSL:1m;\n    ssl_session_timeout 5m;\n\n    #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)\n    # TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。\n    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;\n\n    #表示优先使用服务端加密套件。默认开启\n    ssl_prefer_server_ciphers on;\n    #将所有HTTP请求通过rewrite指令重定向到HTTPS。\n\n    client_max_body_size 500m;\n\n    location / {\n        root  /data/html/picokkplus;\n        index  index.html index.htm;\n   }\n}\n```\n### 重载 Nginx\n\n```bash\nnginx -t\nnginx -s reload\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客数据库设计规范","description":"","slug":"bo-ke-shu-ju-ku-she-ji-gui-fan","date":"2024-10-19","tags":["AI","数据库设计"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客数据库设计规范","description":"","slug":"bo-ke-shu-ju-ku-she-ji-gui-fan","date":"2024-10-19","tags":["AI","数据库设计"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-19-博客数据库设计规范.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-19-博客数据库设计规范.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-19-博客数据库设计规范.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-19-博客数据库设计规范.md","fmFileName":"2024-10-19-博客数据库设计规范.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729267200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n设计博客系统的数据库架构需要考虑多方面的因素,包括用户管理、文章管理、评论系统、标签分类、权限管理、点赞等功能模块。下面是一个典型的博客数据库设计方案,涵盖了常见的功能模块。\n\n\n\n### 1. 数据库表结构设计\n\n数据库表的设计围绕以下几大核心模块:用户管理、文章管理、分类与标签、评论系统、权限管理等。\n\n#### 1.1 用户表 (Users)\n\n**作用**:存储博客用户的信息。\n\n```sql\nCREATE TABLE Users (\n    user_id        INT AUTO_INCREMENT PRIMARY KEY,\n    username       VARCHAR(50) NOT NULL UNIQUE,\n    email          VARCHAR(100) NOT NULL UNIQUE,\n    password_hash  VARCHAR(255) NOT NULL,\n    bio            TEXT,\n    profile_image  VARCHAR(255),  -- 用户头像\n    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n```\n\n**字段解释**:\n\n- `user_id`: 用户的唯一标识符。\n- `username`: 用户名。\n- `email`: 用户的电子邮箱。\n- `password_hash`: 加密的用户密码。\n- `bio`: 用户的个人简介。\n- `profile_image`: 个人头像的存储路径。\n\n#### 1.2 文章表 (Posts)\n\n**作用**:存储博客的文章内容。\n\n```sql\nCREATE TABLE Posts (\n    post_id        INT AUTO_INCREMENT PRIMARY KEY,\n    user_id        INT NOT NULL,  -- 关联到Users表\n    title          VARCHAR(255) NOT NULL,\n    content        TEXT NOT NULL,\n    slug           VARCHAR(255) UNIQUE,  -- 文章的SEO友好URL\n    is_published   BOOLEAN DEFAULT TRUE,\n    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `post_id`: 文章的唯一标识符。\n- `user_id`: 关联用户,表示文章的作者。\n- `title`: 文章标题。\n- `content`: 文章正文。\n- `slug`: 文章的URL友好标识符(SEO优化)。\n- `is_published`: 标识文章是否已发布。\n- `created_at` 和 `updated_at`: 文章的创建时间和更新时间。\n\n#### 1.3 分类表 (Categories)\n\n**作用**:存储文章分类。\n\n```sql\nCREATE TABLE Categories (\n    category_id    INT AUTO_INCREMENT PRIMARY KEY,\n    name           VARCHAR(50) NOT NULL UNIQUE,\n    description    VARCHAR(255)\n);\n```\n\n**字段解释**:\n\n- `category_id`: 分类的唯一标识符。\n- `name`: 分类名称。\n- `description`: 分类描述。\n\n#### 1.4 标签表 (Tags)\n\n**作用**:存储文章的标签信息,文章可以有多个标签。\n\n```sql\nCREATE TABLE Tags (\n    tag_id         INT AUTO_INCREMENT PRIMARY KEY,\n    name           VARCHAR(50) NOT NULL UNIQUE\n);\n```\n\n**字段解释**:\n\n- `tag_id`: 标签的唯一标识符。\n- `name`: 标签名称。\n\n#### 1.5 文章-标签关联表 (Post_Tags)\n\n**作用**:管理文章和标签之间的多对多关系。\n\n```sql\nCREATE TABLE Post_Tags (\n    post_id        INT,\n    tag_id         INT,\n    PRIMARY KEY (post_id, tag_id),\n    FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n    FOREIGN KEY (tag_id) REFERENCES Tags(tag_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `post_id`: 文章ID,关联到`Posts`表。\n- `tag_id`: 标签ID,关联到`Tags`表。\n\n#### 1.6 评论表 (Comments)\n\n**作用**:存储文章的评论信息。\n\n```sql\nCREATE TABLE Comments (\n    comment_id     INT AUTO_INCREMENT PRIMARY KEY,\n    post_id        INT NOT NULL,  -- 关联到Posts表\n    user_id        INT NOT NULL,  -- 关联到Users表\n    parent_id      INT,  -- 用于管理嵌套评论,如果是顶级评论则为空\n    content        TEXT NOT NULL,\n    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,\n    FOREIGN KEY (parent_id) REFERENCES Comments(comment_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `comment_id`: 评论的唯一标识符。\n- `post_id`: 关联到评论的文章。\n- `user_id`: 发表评论的用户。\n- `parent_id`: 如果是回复评论,这里保存父评论的ID。\n- `content`: 评论的内容。\n- `created_at` 和 `updated_at`: 评论的创建和更新时间。\n\n#### 1.7 点赞表 (Likes)\n\n**作用**:存储用户对文章的点赞信息。\n\n```sql\nCREATE TABLE Likes (\n    like_id        INT AUTO_INCREMENT PRIMARY KEY,\n    post_id        INT NOT NULL,  -- 关联到Posts表\n    user_id        INT NOT NULL,  -- 关联到Users表\n    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `like_id`: 点赞记录的唯一标识符。\n- `post_id`: 关联到点赞的文章。\n- `user_id`: 点赞的用户。\n- `created_at`: 点赞的时间。\n\n#### 1.8 权限表 (Roles)\n\n**作用**:存储系统中的权限角色(如管理员、普通用户等)。\n\n```sql\nCREATE TABLE Roles (\n    role_id        INT AUTO_INCREMENT PRIMARY KEY,\n    role_name      VARCHAR(50) NOT NULL UNIQUE\n);\n```\n\n**字段解释**:\n\n- `role_id`: 角色ID。\n- `role_name`: 角色名称(如\"管理员\"、\"作者\"、\"读者\"等)。\n\n#### 1.9 用户-角色关联表 (User_Roles)\n\n**作用**:管理用户与角色的多对多关系。\n\n```sql\nCREATE TABLE User_Roles (\n    user_id        INT,\n    role_id        INT,\n    PRIMARY KEY (user_id, role_id),\n    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,\n    FOREIGN KEY (role_id) REFERENCES Roles(role_id) ON DELETE CASCADE\n);\n```\n\n### 2. 数据库设计考虑事项\n\n- **索引设计**:在查询频繁的字段上(如 `email`、`post_id`、`slug`)创建索引以提高查询性能。\n- **外键约束**:合理设置外键约束,保证数据的完整性。例如,当一个用户被删除时,自动删除他所创建的文章或评论。\n- **分页与性能优化**:对于大量数据的查询,尤其是文章、评论等表,使用分页查询来减少单次查询返回的数据量。\n- **全文检索**:可以为 `Posts` 表中的 `title` 和 `content` 字段添加全文索引,支持用户在博客中进行关键词搜索。\n\n### 3. 其他功能扩展\n\n- **文件存储**:如果有图片上传需求,可以为 `Posts` 表或 `Users` 表添加图片路径字段,或者引入专门的文件管理表。\n- **浏览统计**:可以为 `Posts` 表增加浏览计数 `view_count` 字段,并通过触发器或应用层逻辑更新文章的浏览次数。\n- **草稿与版本管理**:可以为 `Posts` 表增加一个 `status` 字段,用于区分已发布和草稿的文章;还可以引入版本控制表来保存文章的历史版本。\n\n### 4. 关系图\n\n- **用户** (Users) 创建 **文章** (Posts)\n- **文章** (Posts) 关联 **分类** (Categories) 和 **标签** (Tags)\n- **文章** (Posts) 有 **评论** (Comments)\n- **文章** (Posts) 被 **用户** (Users) 点赞\n- **用户** (Users) 分配 **角色** (Roles)\n\n这种数据库设计能支持博客系统的多种功能,并能方便后期的扩展和性能优化。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"国庆长假","description":"","slug":"guo-qing-chang-jia","date":"2024-10-08","tags":["国庆"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"国庆长假","description":"","slug":"guo-qing-chang-jia","date":"2024-10-08","tags":["国庆"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-08-国庆长假.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-08-国庆长假.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-08-国庆长假.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-08-国庆长假.md","fmFileName":"2024-10-08-国庆长假.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1728316800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### DAY01 归途\n\n吃完午饭,下午一点从南京江北出发, 经过六小时驱车三百公里回到老家。\n\n### DAY02 家庭聚餐\n\n早上睡到七点半醒了,躺着看了一会手机和电脑。中午家庭聚餐,男男女女加上小孩可能有二十个人。下午做司机,带我两个哥去捕鱼,空手而归。\n\n### DAY03 好友相聚\n\n睡到十点半起床洗漱,等中午阿旺接我去县城吃饭。中午和朱成碰面,他比我们先吃了午饭,我和阿旺吃了一碗长鱼面。\n\n下午去了我们当地一个正在开发的景点——桂嘴(宣称泗阳的马尔代夫),开车过去开了一眼,其实就是洪泽湖边上开发的一块地,没有一点商业配套。\n\n晚上,三两好友已经碰头,我们在海鲜市场买了皮皮虾、螃蟹、三文鱼等一些海鲜,晚上拎到阿旺家做。没想到他家因为小区改造,燃气用不了。最终不得不把海鲜带到楼下的饭店给点加工费让饭店的师傅帮忙烧。\n\n### DAY04 看房\n\n上午在县城看了三四个小区的房子。十二点半左右回到家里,下午和姐姐、姐夫一起回南京。\n\n### DAY05 游戏\n\n游戏\n\n### DAY06 游戏\n\n游戏\n\n### DAY07 游戏\n\n游戏","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"关于近期生活的思考","description":"","slug":"guan-yu-jin-qi-sheng-huo-de-si-kao","date":"2024-09-25","tags":["记录","生活","思考"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"关于近期生活的思考","description":"","slug":"guan-yu-jin-qi-sheng-huo-de-si-kao","date":"2024-09-25","tags":["记录","生活","思考"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-25-关于近期生活的思考.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-25-关于近期生活的思考.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-25-关于近期生活的思考.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-25-关于近期生活的思考.md","fmFileName":"2024-09-25-关于近期生活的思考.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1727193600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n想到从八月低开始,一直到本月(9月)的月底以来生活习惯大不如前。如下两个方面可以直观反映问题所在:\n\n### 运动的习惯的瓦解\n\n从买了新的运动手表开始,也算是保持了每周三次的跑步习惯。但从进入八月份开始,这种频率就被打破了,下班后不想动的情绪开始浮现,现在回想起来倒也想不起这种情绪出现的原因。从记录数据的平台上看,八月份仅上传了五次记录。\n\n九月份更是因为配了一台电脑后,导致下班就坐在电脑前,沉迷游戏不可自拔。通常是七点半到家后就开始打开游戏,打到凌晨三点都是常有的事情。虽说不上游戏哪里好玩,但是在做任务升级的路上停不下来。不论是 WOW 还是 FF14,我似乎沉迷的是升级的过程,而非游戏中多元的玩法。就像我给一台电脑安装系统,在安装系统的这个过程中看着进度条从 1 走到 100 的过程就已经得到了巨大的满足。\n\n整个九月份我都没有跑步,直接停摆了一个月。等我回想起来时感觉自己似乎已经又重了几斤,身体也不再轻盈。身材的变化让我有了心理负担,决定重新开始运动,让体重重新回到从前。\n\n### 熬夜变成了常有的事儿\n\n要说以前我也熬夜,但是可以保证自己在 12 点之前放下手机准备入睡,按照正常睡到早晨八点来说,这个睡眠时间是可以得到保证的,而且也很规律。长期这个睡眠习惯坚持下来似乎很是符合自身。\n\n但是,进入九月,我的睡眠时间越来越短,入睡的时间也越来越晚,其中有几天已经到了凌晨三点多才睡觉。\n\n熬夜的罪魁祸首正是因为买的电脑。说也奇怪,注册了 Steam 后也买了四五款游戏,加入了朋友的家庭共享里面的十几款游戏,这些游戏似乎并不能让我沉迷,体验到游戏的乐趣。多数游戏都是在我耗费大量时间下载安装后,进去玩一两个小时之后下次就没有再玩的想法,这或许就是所谓的“电子ED”。\n\n鉴于最近已经认识到生活作息错乱了,想要生活回到正轨就得做出适当的改变。从昨天开始已经做出了一些改变,考虑到一个月没有跑步,一下跑个五千米可能有点压力。所以晚上九点下楼先跑了一个三千米热身。后面会继续保持每周不低于三次的户外跑步,让生活重新回到正轨上来。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"这些年,我听过的播客","description":"","slug":"zhe-xie-nian-wo-ting-guo-de-bo-ke","date":"2024-09-23","tags":["播客"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"这些年,我听过的播客","description":"","slug":"zhe-xie-nian-wo-ting-guo-de-bo-ke","date":"2024-09-23","tags":["播客"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-23-这些年,我听过的播客.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmFileName":"2024-09-23-这些年,我听过的播客.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1727020800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n昨天看到小宇宙发布了用户的年终报告,我看了一眼自己的收听报告,发现这一年有 200 天听播客的记录,累计收听了 570 个小时。这时长还不包括在苹果端的 Podcasts 上的记录,下半年更多的时间都在苹果自家的产品上收听。由于苹果没有年终报告的功能,估算的话整年的收听时间应该在 1000 小时左右。\n\n[霓达播客](https://podcasts.apple.com/cn/podcast/%E9%9C%93%E8%BE%BE%E6%92%AD%E5%AE%A2/id1668626930)\n\n- 简介:\n\n戴上耳机,在霓虹中抵达,霓达播客是一档漫聊类声音节目,旨在打造当前青年人感兴趣的听觉社区,通过案件来漫谈社会、文化、娱乐等多元话题,用播客来陪伴大家的通勤、摸鱼和睡前的碎片时光。\n\n---\n\n[怡楽播客](https://podcasts.apple.com/cn/podcast/%E6%80%A1%E6%A5%BD%E6%92%AD%E5%AE%A2/id1523249117)\n\n- 简介:\n\n怡楽播客是一档以生活漫谈为主的爆米花播客!2016年成立于北京。\n\n---\n\n[叉点FM](https://podcasts.apple.com/cn/podcast/%E5%8F%89%E7%82%B9fm/id1622987484)\n\n- 简介:\n\n欢迎来到_叉点FM_ 这是由资深产品设计-书G,高级影视平面设计-耗子,多年游戏美工-小白,三位主播共同打造的娱乐向漫谈类播客。\n\n---\n\n[黑水公园](https://podcasts.apple.com/cn/podcast/%E9%BB%91%E6%B0%B4%E5%85%AC%E5%9B%AD/id1078007055)\n\n- 简介:\n\n_黑水公园_是一档以电影、剧集、科幻、动漫为载体,畅谈人生的趣谈节目。\n\n---\n\n[肥话连篇](https://podcasts.apple.com/cn/podcast/%E8%82%A5%E8%AF%9D%E8%BF%9E%E7%AF%87/id1603580035)\n\n- 简介:\n\n我是肥杰(微博:@肥杰_Fatay),喜欢讲有趣的故事,这是我的播客,会有很多欢乐。一起聊天的还有惠子(微博:@惠子老师 ),她比我智慧、比我稳重,甚至有时候比我搞笑。每周一更新,偶尔会加更,希望陪你度过美好时光。\n\n---\n\n[负一楼](https://podcasts.apple.com/cn/podcast/%E8%B4%9F%E4%B8%80%E6%A5%BC/id1745316992)\n\n- 简介:\n\n两个南方小城里的普通上班族每个周未窝在自家楼下的自行车库里开心闲聊。虽然叙述和制作能力都很有限,但分享欲却很旺盛。扒点犯罪案件给大家讲讲,希望用来陪伴各位的闲暇时间。\n\n---\n\n[异地登录](https://podcasts.apple.com/cn/podcast/%E5%BC%82%E5%9C%B0%E7%99%BB%E5%BD%95/id1702839331)\n\n- 简介:\n\n欢迎在异地登陆,寻找世界的小漏洞。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"装机","description":"","slug":"zhuang-ji","date":"2024-09-02","tags":["装机"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"装机","description":"","slug":"zhuang-ji","date":"2024-09-02","tags":["装机"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-02-装机.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-02-装机.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-02-装机.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-02-装机.md","fmFileName":"2024-09-02-装机.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1725206400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n最近《黑神话·悟空》的热度可谓是充斥着全网,由此沉寂了几年不玩游戏的心重新被点燃。目前手里只有一台 Mac,想玩游戏就得重新购置一台电脑。想到自己虽然做着 IT 的工作,但是配置一台电脑对我还是有难度。为了少踩坑和能快速配置一台不错的电脑,也用了前前后后半个月的时间来看测评和研究配置。\n\n本来准备购买 B 站知名 UP 主的整机,但是我把配置清单发给网友看后,一致认为这个配置的硬件用的都比较丐,也是价格平民的原因。要想要配一台更进阶一点的主机只能提高自己的预算,从6000 的预算提高到了 7000,到了这个价钱的配置就稍微没那么丐了,综合下来就是配置了一台 i5-12600KF + 4060Ti 的主机。\n\n| 板U套 | 微星 PRO B760M-A WIFI DDR4 + i5 12600KF | 2270.3 |\n| --- | --- | --- |\n| 显卡 | 七彩虹 4060TI 8G | 3231.26 |\n| 内存 | 光威天策 DDR4 3600 | 357.21 |\n| 固态 | WD SN580 1T(PDD) | 399 |\n| 电源 | 航嘉 650W 金牌模组 | 327.24 |\n| 散热 | 利民 AX120R SE 青春版 | 63.68 |\n| 机箱 | 爱国者 | 158.21 |\n| 风扇 | 爱国者 3 x 12mm | 47.16 |\n\n在购买后,我把配置和价钱发给朋友看了一下,不出意外是出了意外。他们都说这套机器配置的有点坑了,不值这个价。我的配件除了固态硬盘,其它都是京东自营上买的,价钱肯定要比其它渠道的要贵,这一点我已经接受了。\n\n关于装机的一个过程感受,我花了应该有三个小时把整套机器组装完,比我想想的其实要简单,不出意外的话最后开机的时候又出了意外。给新机装系统无法从 U 盘启动,在主板 Bios 关闭了安全启动后,再次重启 Bios 会恢复到 Default 配置,重试多次无果。再最后不报希望的时候我把内存调整位置再次开机后又突然可以进入到 U 盘引导模式,然后顺利的装完系统。我知道 Bios 无法保存用户配置可能是主板首次充电,Bios 的电池还未充进电导致无法保存信息的原因。\n\n至此,我的新电脑就全部装机完毕了,借着周末两天时间,在家体验了几款游戏。就目前的配置和游戏的流畅程度和画质来说,总体是对机器满意的,热门的游戏玩起来没有压力。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | Folders:get:start
["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"去无印良品吃个冰淇淋","description":"","slug":"qu-wu-yin-liang-pin-chi-ge-bing-qi-lin","date":"2024-05-05","tags":["玄武湖","无印良品"]}
["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"去无印良品吃个冰淇淋","description":"","slug":"qu-wu-yin-liang-pin-chi-ge-bing-qi-lin","date":"2024-05-05","tags":["玄武湖","无印良品"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-05-05-去无印良品吃个冰淇淋.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmFileName":"2024-05-05-去无印良品吃个冰淇淋.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1714838400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n欢乐的日子总是短暂的,转眼就来到了五一假期的最后一天。假期前计划的短暂旅行因为拖延又或者纠结没有付诸行动,以至于前四天的时间都在床上和咖啡店度过。想到第二天不用早起上班,晚上就放肆的熬夜上网冲浪,等第二天睁开眼已是午饭时间。下午的时间多数都是在星巴克度过,刷刷论坛,写写东西,时间就这样溜走。\n\n下午,我先到了无印良品点了咖啡、冰淇淋、薯条,然后找了个位置坐了下来。其实也无聊,只能一边吃吃东西一边刷刷手机。无印良品的茶卡感觉一般,茶的味道较淡,也喝不出咖啡的味道,看来西方的咖啡和东方的茶终究不该有什么联系。但是他家的冰淇淋一直是我喜欢的,尤其是原味的甜筒吃起来脆脆的,原味的甜筒 12 元一支,价格也不算贵,强烈推荐朋友们去尝一尝。\n\n![无印良品](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051652822.png)\n\n在无印良品吃完了东西后又绕着玄武湖走了一圈,刚开始计划是用 3 个小时走完最外围的环湖路,但是走到一半的时候在一个路口选错了路导致走了里面的一圈,这样总路程可能就短了近 3 公里左右。原本还想返回去重新选择走另一条路的,走了挺远就不想在回去了。等下次有时间在重新走一圈完整的。\n\n虽然不是一个晴朗的天气,但是来玄武湖散步的人其实不少,还有很多跑步爱好者,一个个跑起来都带风。我也喜欢跑步,之前总想着有机会住在玄武湖附近,这样每天下班都能到玄武跑跑步。雨天的玄武湖风景其实也很好看,环湖路边上都是树木,刚下完雨的空气中还散发着泥土的气息,闻起来湿湿的,让心情也舒畅起来。\n\n毕竟是阴雨天气,由于没有蓝天白云,拍出的照片也是雾蒙蒙的,但是自己用眼睛去看,就会发现雾蒙蒙的玄武湖也很美,这种美无法通过手机照片去发现,透露出一种凄凉的美。\n\n![玄武湖](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051654988.png)\n\n这次环湖,一共用了一小时零三十八分钟。前面一个小时都是一边听着音乐一边慢走,后面半个小时改成了慢跑。穿着牛仔裤和一双耐克的运动鞋不大方便我快跑。我之前压根也没准备跑步,但是走了一个小时感觉身体活动开了,不跑一跑浑身不得劲,又或者是受边上一个个跑步爱好者的影响。\n\n![环湖](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051655941.png)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"新工作","description":"","slug":"xin-gong-zuo","date":"2024-03-23","tags":["新工作"]}
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"新工作","description":"","slug":"xin-gong-zuo","date":"2024-03-23","tags":["新工作"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-03-23-新工作.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-03-23-新工作.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-03-23-新工作.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-03-23-新工作.md","fmFileName":"2024-03-23-新工作.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1711123200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n2024-03-19 是我入职新公司的时间,就此结束了长达一年的待业状态。待业的大部分时间是快乐且惬意的,不再需要为了工作上的事情去内耗自己,甚至一天之中很少打开通信工具。但是待业久了又难免地开始焦虑起来,失去固定收入的我开始担心余下的这点存款用完之后怎么办?GAP 一年的时间,到时还能不能在顺利地找到一份工作?这些都是困扰我的问题。\n\n从年前试着投出简历,但当时以至年末,用人单位几乎都不在这个时候招人,所以这段时间投的简历都是已读不回的状态。既然这样,我就索性不投了,再接着躺到过完年。\n\n话接上文,年后市场的行情似乎并没有什么起色,每天投出去的简历也几乎要么是已读不回,要么压根就是未读状态。这种情况一直持续到 3 月中旬,我的简历偶尔会有人看并回复我。不得不感慨一句,中国的用人单位对求职者要求真的多,我简历上写了待业一年,他们看到后基本上就是直接拒绝,不接受 GAP 过的打工人。\n\n在后面的求职历程中我收到了一家做海外金融业务的公司的 offer,我没做过多考虑,薪资符合我的要求还是双休我就接受了,第二天就去办理了入职手续。可能因为待业时间久了,急需一份工作来让自己摆脱那种焦虑感。虽然现在手里是有一份工作了,但是这份工作似乎并不能满足自己对稳定的要求,目前我只能在工作之余提升自己的技能或者拓展自己的第二职业避免在下一次失业风波中能够有个技能托底。\n\n关于第二职业也有考虑过,想过做个咖啡师,又或者朝着前端的方向发展,但是一直处于空想的阶段。做咖啡就得自己买点机器平时下班的时候学习,或者利用周末去咖啡厅兼职学习做咖啡的技术。如果往前端发展,可能更倾向于 WEB 3.0 方向,目前在做的也就是下班后躺在床上学学简单的前端知识。挖个坑,以后可能会专门写一个系列来记录自己第二职业学历经历。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"云南之旅","description":"","slug":"yun-nan-zhi-lv","date":"2024-01-06","tags":["旅行","云南"]}
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"云南之旅","description":"","slug":"yun-nan-zhi-lv","date":"2024-01-06","tags":["旅行","云南"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-01-06-云南之旅.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-01-06-云南之旅.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-01-06-云南之旅.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-01-06-云南之旅.md","fmFileName":"2024-01-06-云南之旅.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1704470400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n原本计划去年三月份的旅行一直拖到了新年的年初,这场旅行并没有做过多攻略,只在网上简单地看了一下别人的攻略,就连机票都是前一天匆匆忙忙的定下来的。这次旅行目的地只有两个——大理的洱海和丽江的玉龙雪山。\n\n### 黄昏时刻的洱海\n\n3 号乘机先抵达成都后转机到大理凤仪机场,下了飞机打车直达大理古城,在古城里找了一家民宿,此时的大理属于旅游淡季,游客并没有很多,所以民宿的价格也都比较便宜。当把行李放到住处时,脑子里似乎有了一个简单的计划,当晚就先去龙龛码头体验一下洱海的日落。从民宿到洱海有近五公里的路程,因为还不熟悉这边的交通方式,就租了一辆电瓶车前往。到达龙龛码头的时候刚好日落已经开始了,洱海确实很美,就没见过这么清澈的湖水,在洱海第一次见到了海鸥。一边欣赏着美景一边寻找可以帮我拍照的游客,在洱海找了两三个路人帮我拍了几张照片。云南这边日出在八点左右,日落也很晚,一直到晚上的八点太阳才落山。\n\n### 洱海的日出\n\n![洱海的造成](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311153183.jpg)\n\n原本的 4 号的计划是环洱海一周,事实上并没有完成。早上天还没亮我就起床了,但是我不知道这个点怎么去四公里之外的洱海,我就一边走一边希望在路边能看到租车的店铺,可能因为太早了,路边的商铺都没有开门,不得已我只能徒步。一路慢跑好在在 8 点的时候赶到了洱海边,此时岸上已经聚集了很多游客,有的游客还拎着行李箱貌似是刚到海边。早晨的洱海成群的海鸥在游客的戏逗下在湖面成群的盘旋觅食。我也一直在湖边看着它们一直到太阳跳出云层。后来环湖一周的计划并没有实现,只是骑着单车骑行了几公里就回去了,没有代步工具,觉得骑车一周会很累,紫外线也很强。洱海就在这样的匆忙中结束,下一站就是玉龙雪山。\n\n### 丽江古城\n\n4 号的下午乘坐动车直达丽江,紧接着打车到了丽江古城。说到古城,大理古城没什么好玩的,如果不是为了住宿,或者离得洱海近都没必要单独去古城玩一趟。丽江的古城要比大理古城大,可以逛的要比大理古城多的多,但是我其实对这种古城没什么兴趣,商业化的意味太浓。无非就是卖些所谓的本地特产,又或者是一些卖具有民族特色的服装和旅途跟拍服务。和刚到大理古城一样,到了民宿简单的休息后就到古镇游玩了一圈,听说古城里有个酒吧一条街,我以为会有啥特色或者故事,但是商业化之后到酒吧在我看来是比较 low 的,很多酒吧都是靠着穿着暴露的女性在舞台上扭动来招揽生意,我在这条街徘徊了好多遍,于是找了个人少的民谣酒馆在里喝了一杯,里面只有三个驻唱一边弹着吉他一边唱着耳熟能详的口水歌。一直到临近深夜,才回到民宿。\n\n### 玉龙雪山看日照金山\n\n![日照金山](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311153215.jpg)\n\n5 号的计划是游玩玉龙雪山,同样是天没亮就随着领队来到景区,这里不管是司机还是什么人,只要带你去商家那里消费就有回扣拿,所以领队的用言语吓唬游客,说山上海拔高需要备上多个氧气罐,一个氧气罐三四十元,不少人在他们的煽动下都买了不止一个,我觉得没必要就没有买。在日出前先看了日出金山,拍出来的照片确实也很漂亮。\n\n看完日照金山就乘坐索道到达雪山海拔 4506 处,到达这里已经有轻微的高反,就是走上几步会有点气喘吁吁的。玉龙雪山游客可达最高海拔是 4680 中间的这段距离需要自己爬上去,大概有千级的阶梯,经过三四次的休息我抵达最高处,并在此拍照打卡。在此实现了人生中第一次观看雪山的成就。\n\n当到达 4680 处时,拍了几张照片后,高反引起的头疼有点不舒服,于是就下山了。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"年终总结","description":"","slug":"nian-zhong-zong-jie","date":"2023-12-30","tags":["年终总结"]}
["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"年终总结","description":"","slug":"nian-zhong-zong-jie","date":"2023-12-30","tags":["年终总结"],"fmCachePath":"d:/github/miniblog/src/content/posts/2023-12-30-年终总结.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2023-12-30-年终总结.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2023-12-30-年终总结.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2023-12-30-年终总结.md","fmFileName":"2023-12-30-年终总结.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1703865600000,"fmYear":2023,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n最近几年其实都有刻意的尝试拽写年终总结,可以说是刻意也能说是矫情。以往的年终总结往往因为电脑重做系统或者资料的整理没有备份从而丢失。即使没有这些原因,那些在年终总结里的忏悔也不会对新的一年产生任何实质性作用。不管是形式主义还是所谓的仪式感,每年这个时候写上一篇年终总结似乎成为了年底一件大事。\n\n回想这一年,似乎并不比去年有哪方面的进步,反而为了备考放弃了当时的工作,或许可以说是毫无收获的一年。好在经历了备考过程中的种种艰难处境,最终在自我和解的路上走的越来越近,也越来越认为追求所谓事业的成功不过是一种欲望的扩张,付出的代价必然是以身体的健康为筹码。因此,现在我更憧憬的是一种不争、随遇而安的精神。\n\n### 运动方面\n\n除去备考,剩下的主要事情就是关于运动方面。一直以来我对自己的身材要求的都很严格,尤其是这两年,更是增加了运动的次数。因为备考,运动的频率和强度必然会降低,以至于到了 9 月之后,我已经不能按照当初的计划每周去健身房慢跑 30 分钟然后做 20 分钟的核心训练。这也就直接导致了我的腹部赘肉以肉眼可见的速度在增长,体重的增加不可避免。原本较为明显的 6 块腹肌如今也只有隐约可现的轮廓了。\n\n### 财务方面\n\n经济基础决定上层建筑,财务问题也是我近两年来想要克服的一个问题。自己深受资本消费陷阱的洗脑,在购物时总是去选择品牌溢价很高的产品,追求所谓的品牌效应,深以为自己用着所谓的名牌就能跻身进当代小资的圈子。这些行为主要体现在购物时,廉价的不买,没有响亮的品牌不买,在曾经我最看不起那些用拼多多的人,不理解为了便宜,尽然加入”砍一刀“的大军,耗费时间不说还惹得人烦。如今,我为自己曾经鄙视用拼多多的一类人道歉。除此我还总是买一些不能产生实际价值的数码产品,这些无用的花费占据了我财务支出的半壁江山。陷入资本陷阱的另一个表现,这两年总是去消费星巴克的咖啡也包括其他品牌。但是自己其实并没有特别需要它,喝与不喝并无差异,主要是在心理上认为,当代小资就应该每天喝上一杯咖啡,喝上一杯 whisky 才能符合当代小资的身份。\n\n### 认知方面的提升\n\n上面说的都是自己存在的问题,当然自己也有进步的地方,这主要体现两个方面的提升,一个是认知方面另一个是心理层次。或许因为慢慢开始接受平庸的自己也或许真的像别人说的那样,经历社会的毒打,一身傲骨已经不在,对自己各方面的短板不在看重,身高、外貌、财富、学历这些不可控的方面都在慢慢的淡化,转而开始追求一些切实可控的东西。\n\n### 奶奶的离开\n\n奶奶今年近95岁高龄,在三月份的某一天突然长眠。或许因为真的是年纪太大了,她的突然离去似乎对她来说是一种解脱,没有遭受一点儿的痛苦。\n\n### 理想\n\n人虽平凡但还是要有理想,理想就像指引巨轮航行的灯塔,正因为有了理想人生的旅程才不会迷路。如果要给自己的理想附着一个实体,最近能想到的就是在 35 岁前,实现从城市逃离,回到老家的县城,谋上一份 remote 岗位,可以拿着一二线的薪资在十八线县城消费。理想是一个长期指引自己的目标,即使无法实现也应该努力向其靠近。\n\n### 目标\n\n为此,也想给 2024 年的自己定上几个目标吧!\n\n- 希望自己在在找到一份相对不错的工作之外,继续保持运动的习惯,将今年增长的肉全部减掉。\n- 坚持一年的英语学习,不功力不急成,稳稳当当的学习一年,看看自己的水平。\n- 今年下半年考虑在县城买房。\n- 改善财务状况。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}}
["VERBOSE" - 14:25:06] VSCODE | Folders:clearCached
["VERBOSE" - 14:25:06] VSCODE | PagesParser:parsePages:end
["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: pages
["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: searchReady
["VERBOSE" - 14:25:06] DASHBOARD | Message received: pages
["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getState
["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getContentLocales
["VERBOSE" - 14:25:06] VSCODE | Folders:get:start
["VERBOSE" - 14:25:06] VSCODE | Folders:get:end
["VERBOSE" - 14:25:06] DASHBOARD | Settings loaded
["VERBOSE" - 14:25:06] DASHBOARD | Pages loaded - 49 pages
["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getPinnedItems
["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: loading - Turn off
["VERBOSE" - 14:25:06] DASHBOARD | Message received: searchReady
["VERBOSE" - 14:25:06] DASHBOARD | Message received: getState
["INFO" - 14:25:06] DASHBOARD | Contents view loaded with 49 pages
["VERBOSE" - 14:25:06] DASHBOARD | Message received: getContentLocales
["VERBOSE" - 14:25:06] DASHBOARD | Message received: loading
["VERBOSE" - 14:25:06] DASHBOARD | Message received: getPinnedItems
["VERBOSE" - 14:25:10] VSCODE | Receiving message from dashboard: setPageViewType
["VERBOSE" - 14:25:11] VSCODE | Receiving message from dashboard: setPageViewType
["VERBOSE" - 14:25:18] VSCODE | Trigger page update: onDidChangeActiveTextEditor
["VERBOSE" - 14:25:18] PANEL | Message received: loading
["VERBOSE" - 14:25:18] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 14:25:19] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 14:25:19] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 14:25:23] VSCODE | Receiving message from panel: getBranch
["INFO" - 14:25:23] VSCODE | Receiving message from panel: is-server-started
["INFO" - 14:25:23] VSCODE | Sending request result to panel: is-server-started
["VERBOSE" - 14:25:23] DASHBOARD | Message received: getBranch
["VERBOSE" - 14:25:23] PANEL | Message received: getBranch
["VERBOSE" - 14:25:23] PANEL | Message received: is-server-started
["VERBOSE" - 14:25:27] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["VERBOSE" - 14:25:29] VSCODE | Trigger page update: onDidChangeTextEditorSelection
["INFO" - 14:25:30] VSCODE | Sending message to panel: metadata
["VERBOSE" - 14:25:30] PANEL | Message received: metadata

beta version logs ```bash ["INFO" - 14:24:30] VSCODE | Activating Front Matter CMS version 10.6.125353099... ["INFO" - 14:24:30] VSCODE | No ".frontmatter/config" config files found. ["INFO" - 14:24:30] VSCODE | Logging level: verbose ["INFO" - 14:24:30] VSCODE | Project config path: d:\github\miniblog\frontmatter.json ["VERBOSE" - 14:24:30] VSCODE | Folders:get:start ["VERBOSE" - 14:24:30] VSCODE | Folders:get:end ["VERBOSE" - 14:24:30] VSCODE | Trigger page update: main ["VERBOSE" - 14:24:30] VSCODE | DashboardSettings:getSettings:start ["VERBOSE" - 14:24:30] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 14:24:30] VSCODE | Folders:clearCached ["VERBOSE" - 14:24:30] VSCODE | Folders:getInfo:start ["VERBOSE" - 14:24:30] VSCODE | Folders:get:start ["VERBOSE" - 14:24:30] VSCODE | Folders:get:end ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md ["VERBOSE" - 14:24:30] VSCODE | GitListener:getSettings:start ["VERBOSE" - 14:24:30] VSCODE | GitListener:getSettings:end:enabled ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 49 ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown ["VERBOSE" - 14:24:30] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 14:24:31] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 14:24:31] VSCODE | Folders:get:start ["VERBOSE" - 14:24:31] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:24:31] VSCODE | Folders:getContentFolders:start ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.md ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 2 ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.mdx ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:start - d:\github\miniblog\**\*.markdown ["VERBOSE" - 14:24:31] VSCODE | Folders:findFolders:end - 0 ["VERBOSE" - 14:24:31] VSCODE | Folders:getContentFolders:end ["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getDataFiles:start ["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getDataFiles:end ["VERBOSE" - 14:24:31] VSCODE | DashboardSettings:getSettings:end ["VERBOSE" - 14:24:31] VSCODE | Folders:getInfo:end ["VERBOSE" - 14:24:31] VSCODE | PagesParser:parsePages: Parsing folder posts - 49 ["VERBOSE" - 14:24:31] VSCODE | Folders:clearCached ["VERBOSE" - 14:24:31] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 14:24:32] VSCODE | Folders:get:start ["VERBOSE" - 14:24:32] VSCODE | Folders:get:end ["INFO" - 14:24:40] VSCODE | Sending message to panel: metadata ["INFO" - 14:24:41] VSCODE | Receiving message from panel: getLocalization ["INFO" - 14:24:41] VSCODE | Sending request result to panel: getLocalization ["INFO" - 14:24:41] VSCODE | Receiving message from panel: getBranch ["INFO" - 14:24:41] VSCODE | Receiving message from panel: get-data ["VERBOSE" - 14:24:41] VSCODE | DataListener:getFoldersAndFiles:start ["VERBOSE" - 14:24:41] VSCODE | DataListener:getFoldersAndFiles:end ["VERBOSE" - 14:24:41] VSCODE | Folders:getInfo:start ["VERBOSE" - 14:24:41] VSCODE | Folders:get:start ["VERBOSE" - 14:24:41] VSCODE | Folders:get:end - cached folders ["INFO" - 14:24:41] VSCODE | Getting panel settings ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md ["VERBOSE" - 14:24:41] VSCODE | GitListener:getSettings:start ["VERBOSE" - 14:24:41] VSCODE | GitListener:getSettings:end:enabled ["INFO" - 14:24:41] VSCODE | Receiving message from panel: get-mode ["INFO" - 14:24:41] VSCODE | Receiving message from panel: getLocalization ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 49 ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown ["INFO" - 14:24:41] VSCODE | Sending message to panel: metadata ["VERBOSE" - 14:24:41] PANEL | Message received: getBranch ["VERBOSE" - 14:24:41] PANEL | Message received: metadata ["VERBOSE" - 14:24:41] VSCODE | Folders:findFiles:end - 0 ["INFO" - 14:24:41] VSCODE | Receiving message from panel: getBranch ["VERBOSE" - 14:24:41] PANEL | Message received: getBranch ["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:start:1 ["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:end:1 ["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:start:2 ["VERBOSE" - 14:24:41] VSCODE | TaxonomyHelper:get:end:2 ["VERBOSE" - 14:24:41] VSCODE | Folders:get:start ["VERBOSE" - 14:24:41] VSCODE | Folders:get:end - cached folders ["INFO" - 14:24:41] VSCODE | Sending message to panel: settings ["VERBOSE" - 14:24:41] PANEL | Message received: settings ["VERBOSE" - 14:24:41] VSCODE | Folders:getInfo:end ["INFO" - 14:24:41] VSCODE | Sending message to panel: folderInfo ["INFO" - 14:24:41] VSCODE | Receiving message from panel: is-server-started ["INFO" - 14:24:41] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 14:24:41] PANEL | Message received: folderInfo ["VERBOSE" - 14:24:41] PANEL | Message received: is-server-started ["VERBOSE" - 14:24:44] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 14:24:44] PANEL | Message received: loading ["INFO" - 14:24:45] VSCODE | Sending message to panel: metadata ["VERBOSE" - 14:24:45] PANEL | Message received: metadata ["INFO" - 14:24:45] VSCODE | Receiving message from panel: getBranch ["INFO" - 14:24:45] VSCODE | Receiving message from panel: is-server-started ["INFO" - 14:24:45] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 14:24:45] PANEL | Message received: getBranch ["VERBOSE" - 14:24:45] PANEL | Message received: is-server-started ["INFO" - 14:24:47] VSCODE | Receiving message from panel: open-dashboard ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getLocalization ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getViewType ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: viewData ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getTheme ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getData ["VERBOSE" - 14:24:47] VSCODE | SettingsListener:getSettings:start - clear: false ["VERBOSE" - 14:24:47] VSCODE | SettingsListener:getSettings:end - setting keys: 33 ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: settings ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getMode ["VERBOSE" - 14:24:47] DASHBOARD | Loaded with view contents ["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 14:24:47] DASHBOARD | Message received: viewData ["VERBOSE" - 14:24:47] DASHBOARD | Message received: settings ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState ["INFO" - 14:24:47] DASHBOARD | Contents view loaded with 0 pages ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: setTitle ["VERBOSE" - 14:24:47] DASHBOARD | Settings loaded ["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 0 pages ["VERBOSE" - 14:24:47] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 14:24:47] DASHBOARD | Message received: pages ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 14:24:47] VSCODE | Folders:get:start ["VERBOSE" - 14:24:47] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:24:47] DASHBOARD | Settings loaded ["VERBOSE" - 14:24:47] DASHBOARD | Pages loaded - 49 pages ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getPinnedItems ["VERBOSE" - 14:24:47] DASHBOARD | Message received: pages ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 14:24:47] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 14:24:47] VSCODE | Folders:get:start ["VERBOSE" - 14:24:47] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:24:47] DASHBOARD | Message received: searchReady ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState ["VERBOSE" - 14:24:47] DASHBOARD | Message received: loading ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState ["INFO" - 14:24:47] DASHBOARD | Contents view loaded with 49 pages ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getPinnedItems ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getState ["VERBOSE" - 14:24:47] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 14:25:05] VSCODE | Receiving message from dashboard: refreshPages ["VERBOSE" - 14:25:05] VSCODE | PagesParser:parsePages:start ["VERBOSE" - 14:25:05] VSCODE | Folders:clearCached ["VERBOSE" - 14:25:05] VSCODE | Folders:getInfo:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.md ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 49 ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.mdx ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 0 ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:start - d:\github\miniblog\src\content\posts\**\*.markdown ["VERBOSE" - 14:25:05] VSCODE | Folders:findFiles:end - 0 ["INFO" - 14:25:05] VSCODE | Cache cleared ["VERBOSE" - 14:25:05] VSCODE | Folders:getInfo:end ["VERBOSE" - 14:25:05] VSCODE | PagesParser:parsePages: Parsing folder posts - 49 ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Demo","date":"2024-12-30","slug":"demo","description":"This is a demo post","tags":["demo","post"],"fmContentType":"posts"} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Demo","date":"2024-12-30","slug":"demo","description":"This is a demo post","tags":["demo","post"],"fmContentType":"posts","fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-30-demo.md","fmCacheModifiedTime":1735539458561,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-30-demo.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-30-demo.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-30-demo.md","fmFileName":"2024-12-30-demo.md","fmDraft":null,"fmModified":1735539458561,"fmPublished":1735488000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmBody":"\ntest","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"使用 Beancount 复盘自己的一年消费情况","slug":"annual-financial-analysis","date":"2024-12-29T06:00:30.648Z","description":"本文介绍了如何使用 Beancount 复式记账工具对一年的消费情况进行复盘。通过导出支付宝、微信等账户的账单,使用 Beancount-Trans 工具将账单转换为 Beancount 格式,并通过 Fava 查看和分析报表,帮助用户更好地了解自己的消费习惯和财务状况。","tags":["财务","复盘","beancount","fava"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"使用 Beancount 复盘自己的一年消费情况","slug":"annual-financial-analysis","date":"2024-12-29T06:00:30.648Z","description":"本文介绍了如何使用 Beancount 复式记账工具对一年的消费情况进行复盘。通过导出支付宝、微信等账户的账单,使用 Beancount-Trans 工具将账单转换为 Beancount 格式,并通过 Fava 查看和分析报表,帮助用户更好地了解自己的消费习惯和财务状况。","tags":["财务","复盘","beancount","fava"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-29-年度账单复盘.md","fmCacheModifiedTime":1735529686618,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-29-年度账单复盘.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-29-年度账单复盘.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-29-年度账单复盘.md","fmFileName":"2024-12-29-年度账单复盘.md","fmDraft":null,"fmModified":1735529686618,"fmPublished":1735452030648,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 使用 Beancount 复式记账工具需要一定的前置知识,如果你对复式记账不熟悉,可以先学习一下复式记账的基本概念。\n\n### 写在前面\n\n线上支付时代,我们对金钱的感知变得钝感,每次消费掏出手机“刷”的一下十几二十元就出去了,我们的钱就是在没有感知中一笔一笔的的消费掉。一年下来,我们的钱流向了哪里似乎没有多少的概念。我自己也是一个花钱如流水的人,看到想要的东西就会买,似乎只有不停的买才能让自己稍微获得一丝平静和快乐。我也是被消费主义毒害的一员,我想做出改变,复盘自己整年的消费就是改变的开始。\n\n### 本次复盘用到的工具\n\n- Beancount: 一个文本记账工具,可以用来记录每笔消费和收入,生成报表等。\n- Fava: Beancount的 web 界面,可以方便的查看报表。\n- Beancount-Trans: 账单解析器,可以将支付宝、微信、银行等账单转换为beancount 的格式。\n\n> 为什么不用 Excel 或其它记账软件?因为我更倾向于开源的工具,且用文本记账不担心数据丢失,也不用担心数据格式的兼容性。\n\n### 复盘的步骤\n\n1. 导出各个账户的账单,包括支付宝、微信、银行等。\n2. 使用 Beancount-Trans 将账单转换为 Beancount 的格式。\n3. 使用 Fava 查看报表,分析自己的消费情况。\n\n#### 导出账单\n\n这里只演示了支付宝和微信的账单导出,银行账单的导出方法可以参考各个银行的官方文档。\n\n##### 支付宝账单导出\n\n支付宝导出账单的方法:打开支付宝APP -> 我的 -> 我的账单 -> 更多(右上角的三个点)-> 开具交易流水证明 -> 用于个人对账 -> 选择时间范围 -> 填写电子邮箱。\n\n##### 微信账单导出\n\n微信导出账单的方法:打开微信APP -> 我 -> 服务 -> 钱包 -> 账单 -> 常见问题(右上角) -> 下载账单 -> 用于个人对账 -> 选择时间范围 -> 填写电子邮箱。\n\n> 微信比较坑的地方是每次只能导出三个月的账单,如果需要导出一年的账单,需要分四次导出。账单的解压密码会通过 APP 发送。\n\n导出的账单格式如下\n\n```bash\ntree\n.\n├── alipay_record_20241222_204257.csv\n└── 微信支付账单(20240101-20240331)——【解压密码可在微信支付公众号查看】.csv\n```\n\n#### 使用 Beancount-Tran 转换账单\n\n> 方便 csv 格式的账单转换为 beancount 格式的账单可以通过 [Beancount-Tran](https://trans.dhr2333.cn/) 工具来实现。它的用法不单单是进行简单的格式转换,还可以预先配置好一些支出的映射规则,让转换更智能。\n\n1. 打开 [Beancount-Tran](https://trans.dhr2333.cn/) 网站并注册一个自己的账号。\n2. 在`映射管理`菜单下选择`支出映射`,添加一些支出的映射规则。\n\n![支出映射](/images/trans-03.png)\n\n> 这里我添加了一些账单里出现频率较高的关键字,比如`盒马`、`KFC`、`星巴克`等,这样在转换账单的时候就会自动将这些支出映射到对应的支出账户。一些不常见的支出可以在转换后手动修改。\n\n3. 在`映射管理`菜单下选择`资产映射`,添加一些资产的映射规则。\n\n> 每一笔支出都会从这个账户里扣除对应的金额,我平时只用这一张卡消费,所以这里只添加了一条规则。(如果多卡用户可以自行添加映射规则)\n\n![资产映射](/images/trans-01.png)\n\n4. 做好关系映射后,点击格式转换菜单,上传对应的账单文件,等待转换结果。\n\n> 解析成功后,会返回一个 beancount 格式的账单内容,可以直接复制到本地保存。\n\n![格式转换](/images/trans-02.png)\n\n#### 使用 Fava 查看报表\n\n在演示中,我将账单转换后的内容保存到了一个名为`2024.beancount`的文件中,然后使用 Fava 来查看报表。\n\n```bash\nfava 2024.beancount\nStarting Fava on http://127.0.0.1:5000\n```\n\n访问`http://127.0.0.1:5000`即可查看报表。\n\n![fava-web](/images/fava-web.png)\n\n![fava-web](/images/fava-web02.png)\n\n此时,我们的账单已经转换为了 beancount 的格式,可以方便的查看报表,分析自己的消费情况。但是,有些支出对应的分类可能不太准确,可以在 Fava 中手动修改。如果需要重复修改的支出比较多,我们可以回到转换账单的步骤,重新新增支出映射关系,这可以大大减少手动修改的工作量。\n\n### 总结\n\n通过 Beancount 来复盘自己的消费对新手来说或许有难度,需要 Beancount 复式记账的前置知识,对复式记账感兴趣的朋友可以花个半天时间学习一下。在学习了复式记账的基本概念后就可以花点心思来做这件事。\n\n博主本人也是复式记账新手,写这篇文章的目的更多是出于分享的目的,希望能够帮助到有需要的朋友。如果有什么问题或者建议,欢迎在评论区留言。\n\n\n### 参考\n\n- [Beancount](https://github.com/beancount/beancount/)\n- [Fava](https://github.com/beancount/fava/)\n- [Beancount-Tran](https://github.com/dhr2333/Beancount-Trans)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"MarkItDown:文档转换工具","slug":"markitdown","date":"2024-12-29","description":"MarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。","tags":["markdown","python"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"MarkItDown:文档转换工具","slug":"markitdown","date":"2024-12-29","description":"MarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。","tags":["markdown","python"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-29-markdown.md","fmCacheModifiedTime":1735529686618,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-29-markdown.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-29-markdown.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-29-markdown.md","fmFileName":"2024-12-29-markdown.md","fmDraft":null,"fmModified":1735529686618,"fmPublished":1735401600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![markitdown](/images/Screenshot%202024-12-29%20at%2012.32.42.png)\n\n### 介绍\n\nMarkItDown 是微软团队开源的一个文档转换工具,它可以将多种格式的文件转换为 Markdown 格式。MarkItDown 支持的文件格式包括:\n\n- PDF\n- Word\n- Excel\n- PowerPoint\n- HTML\n- Text-based formats (CSV, JSON, XML)\n- Images (EXIF metadata and OCR)\n...\n\n### 安装\n\nMarkItDown 是 Python 编写的,可以通过 pip 安装:\n\nwindows or linux:\n\n```bash\npip install markitdown\n```\n\nmacOS:\n\n```bash\nbrew install markitdown\n```\n\n### 使用\n\n使用 MarkItDown 非常简单,只需要在终端中输入以下命令:\n\n```bash\nmarkitdown test.pdf test.md\n```\n\n或者使用 -o 参数指定输出文件:\n\n```bash\nmarkitdown test.pdf -o rename.md\n```\n\n### 仓库地址\n\nhttps://github.com/microsoft/markitdown","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Ghostty: 新一代终端工具","slug":"ghostty-introduction","description":"Ghostty 是一款新一代终端工具,它的特点是原生、功能丰富、更快、开源。","date":"2024-12-28","tags":["Ghostty","终端工具"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Ghostty: 新一代终端工具","slug":"ghostty-introduction","description":"Ghostty 是一款新一代终端工具,它的特点是原生、功能丰富、更快、开源。","date":"2024-12-28","tags":["Ghostty","终端工具"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmCacheModifiedTime":1735529686617,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-28-ghostty-新一代终端工具介绍.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-28-ghostty-新一代终端工具介绍.md","fmFileName":"2024-12-28-ghostty-新一代终端工具介绍.md","fmDraft":null,"fmModified":1735529686617,"fmPublished":1735315200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![ghostty](/images/ghostty.png)\n\n经过一段时间的内测,Ghostty 在元旦前迎来了自己的正式版本。在发布之前我没有参加测试,但是也通过论坛侧面看到了一些关于 Ghostty 评价的帖子,不少用户都对其抱有较高的期望。我也在第一时间下载了这款工具,下面是我对 Ghostty 的一些介绍。\n\n### 关于 Ghostty\n\n介绍 Ghostty 主要从 4 个方面来说:*原生、功能丰富、更快、开源*。\n\n#### 原生\n\n所谓原生,是指 Ghostty 的外观、交互等行为与系统原生终端一致。这一点在使用过程中可以明显感受到,Ghostty 的界面风格与系统终端几乎一模一样,这对于用户来说是一种很好的体验。\n\n在 Mac 上,用户界面使用 Swift 编写,并且使用了 Appkit 和 SwiftUI。在 Linux 上,用户界面使用 Zig 编写,使用了 GTK4。\n\nGhostty 与运行平台特有功能系统集成。在 Mac 上, Ghostty 支持 `Quick Look`,`force touch`,`macOS secure input API`, 重启时支持内置窗口状态恢复等。这些功能都是 macOS 提供的原生 API。(在 Linux 中没有对应 API)\n\n#### 功能丰富\n\nGhostty 的功能主要分为两大类:终端功能和应用程序功能。\n\n在终端功能上,Ghostty 支持 `Kitty` 图形协议,`light/dark mode notifications`,超链接等。像 Neovim, Zellij 等终端应用程序就能比其它终端模拟器发挥更多的特性。\n\n在应用功能上, `Ghostty supports native tabs`,`splits`,`macOS 下拉终端`、`主题的 明/暗模式`等。\n\n#### 更快\n\nGhostty 的目标是与最快的终端模拟器同级。它的快主要体现在:启动时间、滚动速度、IO 吞吐量、控制序列吞吐量、帧率等方面。\n\n未来,开发者会提供更详细的基准测试,并解释 Ghostty 在不同性能类别中的表现。\n\n#### 开源\n\nGhostty 是开源的,你可以在 [GitHub](https://github.com/ghostty-org/ghostty) 上找到它的源代码。Ghostty 的开发者希望通过开源的方式,让更多的人参与到 Ghostty 的开发中来,共同打造一个更好的终端工具。\n\n### 与 ghostty config 搭配食用\n\nGhostty 默认的配置文件是 `~/.config/ghostty/config.toml`,你可以通过修改这个文件来定制 Ghostty 的外观和行为。但是,如果你不想自己写配置文件,可以使用 [ghostty config](https://ghostty.zerebos.com/) 工具来生成配置文件。\n\n![ghostty-config](/images/ghostty-config.png)\n\nconfig 模版\n\n```toml\n# Config generated by Ghostty Config\ntitle = Ghostty\nclipboard-read = allow\nclipboard-write = allow\nwindow-theme = system\nfont-size = 18\nfont-family = FiraCode Nerd Font Mono\nfont-family-bold = FiraCode Nerd Font Mono\nfont-family-italic = FiraCode Nerd Font Mono\nfont-family-bold-italic = FiraCode Nerd Font Mono\nwindow-title-font-family = FiraCode Nerd Font Mono\ntheme = Everforest Dark - Hard\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"一个月爬楼减脂记录","description":"记录一个月的爬楼梯减脂之旅,分享我的感受与坚持,助你在寒冬中找到健身新方式。","slug":"one-month-stair-climbing-fat-loss-record","date":"2024-12-05","tags":["减脂","运动"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"一个月爬楼减脂记录","description":"记录一个月的爬楼梯减脂之旅,分享我的感受与坚持,助你在寒冬中找到健身新方式。","slug":"one-month-stair-climbing-fat-loss-record","date":"2024-12-05","tags":["减脂","运动"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmCacheModifiedTime":1735529686617,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-05-一个月爬楼减脂记录.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-05-一个月爬楼减脂记录.md","fmFileName":"2024-12-05-一个月爬楼减脂记录.md","fmDraft":null,"fmModified":1735529686617,"fmPublished":1733328000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 这里记录了 12 月份的爬楼记录。\n\n到了 12 月份,南京已经降温,再想出去跑步已经需要穿棉服了。考虑到气温低和时不时下雨的天气,就失去外出跑步的动力。既然不想跑步,那也得找个其它的方式来替代,于是就想到了爬楼梯。\n\n> 3 * 30 3次30层楼\n\n 日期 | 楼层 | 感受\n---------|----------|---------\n 2024-12-05 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-06 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-07 | 4 * 30 | ⭐️⭐️⭐️⭐️\n 2024-12-08 | NULL | NULL\n 2024-12-09 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-10 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-11 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-12 | 4 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-13 | NULL | NULL\n 2024-12-14 | 5 * 30 | ⭐️⭐️⭐️⭐️⭐️\n 2024-12-15 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-16 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-17 | 4 * 30 | ⭐️⭐️⭐️\n 2024-12-18 | NULL | NULL\n 2024-12-19 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-20 | NULL | NULL\n 2024-12-21 | NULL | NULL\n 2024-12-22 | NULL | NULL\n 2024-12-23 | 4 * 30 | ⭐️⭐️\n 2024-12-24 | NULL | NULL\n 2024-12-25 | 3 * 30 | ⭐️⭐️⭐️\n 2024-12-26 | NULL | NULL\n 2024-12-27 | 4 * 30 | ⭐️⭐️","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"使用 VSCode Front Matter 插件管理静态博客","slug":"vscode-front-matter-cms","description":"这篇文章介绍了如何使用 VSCode 插件 Front Matter 来管理静态博客。通过该插件,用户可以在 VSCode 中像在后台一样管理博客文章,包括修改文章的标题、标签和描述等信息。此外,文章还详细讲解了如何通过 FM 插件新建文章,并利用 Copilot 智能生成文章的元数据。","date":"2024-12-23","tags":["blog","Front Matter","VSCode","插件","静态博客","AI"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"使用 VSCode Front Matter 插件管理静态博客","slug":"vscode-front-matter-cms","description":"这篇文章介绍了如何使用 VSCode 插件 Front Matter 来管理静态博客。通过该插件,用户可以在 VSCode 中像在后台一样管理博客文章,包括修改文章的标题、标签和描述等信息。此外,文章还详细讲解了如何通过 FM 插件新建文章,并利用 Copilot 智能生成文章的元数据。","date":"2024-12-23","tags":["blog","Front Matter","VSCode","插件","静态博客","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmCacheModifiedTime":1735024685956,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmFileName":"2024-12-23-基于-vscode-的静态博客-cms-管理系统.md","fmDraft":null,"fmModified":1735024685956,"fmPublished":1734883200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n许多博客主习惯使用 hexo、hugo 等静态博客生成器,这样无需购买服务器即可通过静态页面托管自己的网站。当然,这类生成器也有一些不足之处,其中最大的缺点可能就是无法像动态博客那样方便地管理文章。今天,我向大家推荐一款 VSCode 插件——Front Matter。通过这款插件,你可以在 VSCode 中轻松地管理自己地博客文章。\n\n## Front Matter 插件(下面简称 FM)\n\n在 vscode 插件市场搜索 `Front Matter`,点击安装即可。\n\n仓库地址:https://github.com/estruyf/vscode-front-matter\n\n安装 FM 插件后,你可以在 vscode 中看到一个新的侧边栏,打开 FM 根据提示初始化一个项目 --> 选择自己的博客框架 --> 选择自己的文章目录,目前经过迭代已经支持市面上主流的静态博客框架,如 hexo、hugo、astro 等。当初始化成功后,打开 `Open dashboard` 可以看到你的文章列表,点击文章后,你可以看到文章的 Front Matter 信息,你可以在这里修改文章的标题、标签、描述等信息。\n\n![dash](/images/dashboard-7.1.0.png)\n\n## 通过 FM 新建一篇文章\n\n点击 `Create content`,输入文章标题,回车确认即可新建一篇文章。新建文章后,你可以在文章的 Front Matter 中看到文章的标题、标签、描述等信息,你可以在这里修改文章的信息。开启 Copilot 后,你还可以通过 Copilot 来智能生成 title、slug、description 等信息。\n\n![new-post](/images/new-post.png)\n\n## Front Matter 优势总结\n\n1. **快速新建文章**:通过 FM 插件,你可以快速新建一篇文章,不用再手动创建文件,修改文件名等操作。\n2. **智能生成文章元数据**:开启 Copilot 后,你可以通过 Copilot 来智能生成文章的元数据,提高工作效率。\n3. **文章信息可视化**:通过 FM 插件,你可以在 vscode 中直观地看到文章的 Front Matter 信息,方便修改文章的信息。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"我的 2024 年度总结","slug":"my-2024-year-summary","description":"2024 年度总结,回顾这一年的工作、运动、健康和财务状况。","date":"2024-12-19","tags":["年终总结"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"我的 2024 年度总结","slug":"my-2024-year-summary","description":"2024 年度总结,回顾这一年的工作、运动、健康和财务状况。","date":"2024-12-19","tags":["年终总结"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmCacheModifiedTime":1734922584000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-19-我的-2024-年度总结.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-19-我的-2024-年度总结.md","fmFileName":"2024-12-19-我的-2024-年度总结.md","fmDraft":null,"fmModified":1734922584000,"fmPublished":1734537600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n## 第一部分\n\n总结工作、运动、财务状况\n\n### 写在开头\n\n没有反思的总结是赤裸裸的形式主义,诚然我已经做了多年的形式主义。若不是回头翻看去年写的总结,怕是已经忘了当时的豪言壮语。形式不形式先抛开不谈,和往年一样,这个形式得有,得看看这一年又是怎么奇迹般的活过来的。\n\n写今年的总结又不得不从去年写起。2023 年,我荒废了大半年的时间在备考上,终究以相差甚远的成绩与目标扑了个空。成绩未遂人愿,2024 年不得不再次重新找工作,在此之前先去云南大理玩了几天,关于这次旅游的记录也有做过记录:[《云南之旅》](https://blog.chendi.link/posts/yun-nan-zhi-lv)。\n\n前言不必太多,有一个差不多的开场白以至于不那么突兀。下面就近一年来,对工作、生活、运动、学习等多方面进行总结。\n\n### 工作方面\n\n三月底进入一家新公司后一直处于每天摸鱼混日子的状态,要说忙的时候也就是刚进公司时给环境部署了一套监控系统,后续的工作几乎就是围绕监控系统做完善和写一些监控脚本。后面几个月都是没啥事情可忙,闲的时间都用来刷论坛和写一些自己的代码,时间都浪费在了一些无意义的事情上,一年下来没有实际的产出。\n\n项目可谓是写了一个又一个,但是到了年底打开 Github 看一下仓库,又只剩下一些没有用的代码,其它的也都是一边写一边删,似乎在实现了某些功能后,这些代码就变得索然无味,时间就在这种反复中流逝。\n\n> 一句话总结:工作无所建树,薪资停滞不前。看不清前路,也无贵人相助。\n\n### 运动方面\n\n我的运动方式几乎都是跑步,二零二三年因为有几个月处于备考阶段的客观原因总体跑量较少,主观原因就是没有坚持按训练计划执行,今天跑不跑取决于今天的心情状态,运动量的减少直接体现在了体重的增加上。\n\n![2023-runs](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412191606248.png)\n\n二零二四年总体是平稳的一年,没有备考也没有什么需要我用业余时间来完成的事情。按理说今年的运动量会多出不少的,但是看了一下记录后发现其实并不然。虽然每个月都有坚持跑步,但是频率太低了,和我理想的每周维持三次长跑还有很大的差距,只有在四个月份勉强达到了目标,其它月份少则只跑了一次,多的也就平均 7 次。没能按计划执行没有别的理由,就是因为人的惰性和拖延造成的。\n\n![2024-runs](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412191608393.png)\n\n> 一句话总结:人懒不要找理由,论惰性,谁都有,谁都不是大英雄。明年好好再加油,往事不回头。\n\n### 健康方面\n\n人生无非活着,至于怎么活个人有个人的活法,但是健康的活着是普世的标准。所以,生活、工作、爱情、车房...... 在我这里都要排到健康后面,正应了那句老话,健康是 1,它的存在让后面的 0 有了意义。\n\n一年一体检已经第三年了,总的来说身体各项指标都很正常(截至 2024 年体检前)。但是今年 7 月份的体检报道中标出了尿酸偏高(452 umol/L)。不太理解的是,这两年似乎在饮食、运动方面都有刻意去控制,尿酸偏高不知道是哪方面引起的。我只知道自己过去一年不太喝水,不知道是不是一个诱发因素。我把体检报告给医生看,医生似乎并不当回事。\n\n最近感觉到在咽唾沫或打哈气的时候喉咙附近感觉到疼痛,这种疼感觉不到具体的位置。自己感觉还是挺担心的,本月初在医院做了一个彩超,排除了淋巴引起的疼。医生说没什么问题,让我回去自己毛巾热敷一下,不用太担心。后来我也就没有当回事,想着过几天可能会好转。天不遂人愿,这个疼痛一直没有好转似乎还严重了,于是又开始担心起来,计划周六再去医院检查一次。\n\n### 财务方面\n\n微信消费:78875.26\n\n支付宝消费:31760.23\n\n![2024-年度消费报表](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202412201700855.png)\n\n财务方面是我一直不想去统计的,害怕面对自己的一些消费账单。作为一个打工人这几年也没能攒下钱,对待金钱的态度似乎有多少花多少,在吃的方面买贵的,在穿着方面买牌子的,在用方面也讲牌子,已经深深陷入资本主义的消费陷阱。\n\n今年买了两台电脑,似乎并没有发挥真正的作用。想用来打游戏发现机器装好后游戏变得没意思了,现在放在家里处于半吃灰状态。另一台 Mac 平时也不常用,工作用的是公司的电脑,自己的笔记本就放在家里看看电视,刷刷网页。\n\n如果当下让我选择一个最想改变的,我就选择改变一下自己的消费观,少买一些不是必须的东西,多一些储蓄。\n\n> 一句话总结:大手大脚把钱花,一看余额傻了吧?辛苦牛马一整年,全给资本做嫁纱。\n\n### 个人成长\n\n这一 part 似乎没什么可写,要说除去工作和一些其它时间,学习在整年中似乎站比很少。没有学习的目标和动力,多次想要把英语学好,每每坚持一段时间就被一些其它的事情影响,最后放弃。要说今年真的学了什么,似乎也就是偶尔看一看西方哲学史,但毕竟西哲里都是一些名词概念,像本原、存在、形式和质料这些,看完也不愿意去深究,不想动脑子。都说看懂西方哲学需要经过长时间的练习,去练习西方人的思维方式并不是一件容易的事情。当然,自己也只是有一点点爱好而已,没指望自己能研究的多么深,只当个打发无聊的方式而已就足够了。在我看来学习西哲是一种无用的知识,它不能给我现实生活带来一些实际的功用,但是却能填补一些精神的空虚。\n\n### Other\n\n原本没有在南京买房的想法,只想工作几年回老家县城买房安度余生,但是看到房价回调外加姐姐的劝说,今年也在姐姐家附近的小区看了几套房子,最近看中了 8 楼的一套,也尝试和房东谈了谈价格,我能给的的价格比房东心理价位低了 8 万,第一次谈判没能成功,后续还能不能谈未知。如果买了房之后,后续的人生可能就是另一种不同的生活,可能不会像现在没有压力的生活。一切都是未知,能做的就是顺其自然。\n\n12.22 日,更新一下买房的进展。\n\n今天约了房东准备至多加两万以总价 162 万的价格成交,但是房东考虑到新房子要等年后四五月份才能搬进去,就和我们协商让他们住到四月底在搬走,我也爽快的答应了。后面就是签合同付定金的流程了,如果不出意外,等贷款下来就按正常程序走了。\n\n## 第二部分\n\n总结一些休闲娱乐、播客等。\n\n### 本年常听的播客节目\n\n- 黑水公园\n- 松鼠大侦探\n- 昭运酒馆\n- 叉点 FM\n- 落日之后\n- 野史下酒\n- 负一楼\n- 肥话连篇\n- 异地登录\n- 黑猫侦探社\n- 怡楽播客\n- 隧道尽头\n- 岩中花述\n- 霓达播客\n\n> 排名不分先后\n\n### Raycast Wrapped 2024\n\n![2024-raycast](https://s1.locimg.com/2024/12/18/a607ec75778bd.jpg)\n\n![2024-raycast](https://s1.locimg.com/2024/12/18/d8947a2c459ce.jpg)\n\n### bilibili\n\n今年 b 站刷的甚少,250h 左右,主要关键词为:西方哲学、公开课、哲学、复旦大学、康德、黑格尔。在 b 站出了暗箱操作抽奖事件后对 b 站没有啥好感了。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"第三方支付平台基础环境部署","slug":"deployment-of-the-base-environment","description":"","date":"2024-12-18","tags":["activemq","redis","zookeeper","mysql"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"第三方支付平台基础环境部署","slug":"deployment-of-the-base-environment","description":"","date":"2024-12-18","tags":["activemq","redis","zookeeper","mysql"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmCacheModifiedTime":1734502406000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-18-第三方支付平台基础环境部署.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-18-第三方支付平台基础环境部署.md","fmFileName":"2024-12-18-第三方支付平台基础环境部署.md","fmDraft":null,"fmModified":1734502406000,"fmPublished":1734451200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> Centos-7\n\n### mysql-5.7.44\n\n```bash\nyum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\nyum list installed | grep mysql\nyum repolist all | grep -E \"mysql[0-9]+-community/x86\"\nyum-config-manager --disable mysql80-community\nyum-config-manager --enable mysql57-community\nrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022\nyum install -y mysql-community-server\nsystemctl start mysqld\nsystemctl status mysqld.service\ngrep 'temporary password' /var/log/mysqld.log\n\nmysql -u root -p\nUPDATE mysql.user SET host = '%' WHERE user = 'root'; #允许 root 远程登录\nALTER USER 'root'@'%' IDENTIFIED BY 'yourpassword'; #修改密码\nFLUSH PRIVILEGES; #刷新权限\n```\n\n### apache-zookeeper\n\n```bash\nwget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz\n/opt/apache-zookeeper-3.5.7-bin #安装路径\nbin/zkServer.sh start #启动\nbin/zkServer.sh stop #停止\n```\n\n### apache-activemq\n\n```bash\nwget https://archive.apache.org/dist/activemq/5.15.16/apache-activemq-5.15.16-bin.tar.gz\n\n/opt/apache-activemq-5.15.16 #安装路径\nbin/zkServer.sh start #启动\nbin/zkServer.sh status #查看状态\nhttp://10.0.0.70:8161/admin/ #后台\nadmin admin\n```\n\n### redis\n\n```bash\nyum install -y redis\nsystemctl start redis.service\n\nvim /etc/redis.conf\n...\nbind 0.0.0.0\n...\n```\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"两种生命,三类乐趣","slug":"two-lives-three-kinds-of-fun","description":"","date":"2024-12-17","tags":["叔本华"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"两种生命,三类乐趣","slug":"two-lives-three-kinds-of-fun","description":"","date":"2024-12-17","tags":["叔本华"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmCacheModifiedTime":1734426574000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-17-两种生命,三种乐趣.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-17-两种生命,三种乐趣.md","fmFileName":"2024-12-17-两种生命,三种乐趣.md","fmDraft":null,"fmModified":1734426574000,"fmPublished":1734364800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 两种生命\n\n叔本华在《一个悲观主义者的积极思考》书中引用了伏尔泰的一句话:“没有真正的需要,就没有真正的乐趣。”这些需要可以是自然的、艺术的、文学的,之所以这些乐趣与一部分人无缘,是因为这些人不需要。若把这些乐趣送给那些不需要的人和不会欣赏的人,就好比期望白发苍苍的老朽沉溺于热恋一般。\n\n基于前提,他认为拥有这种天赋的人具有两种生命,一个是自身的生命,一个是睿智的生命。后者被他看作是真实的生命,前者只不过是提升后者的一种手段。缺少这种天赋的人只会把当下这种空虚、肤浅的自身的生命当成生命的目的。\n\n### 三类乐趣\n\n- 第一类是维持和满足“生命力”——诸如从食物、饮料、消化、休息和睡眠所得来的乐趣,世界上有若干种族就以这些作为他们典型的民族性的乐趣。\n- 第二类是从“体力”得来的乐趣,包括步行、跑步、摔跤、跳舞、斗剑、骑马,以及类似的体能活动,有的当作运动,有的成为军事生活或真实战争的一部分。\n- 第三类是满足“感受力”或感性所得来的乐趣,包括观察、思考、体验、欣赏诗文或音乐、学习新事物、阅读、静修、从事发明、搞哲学等等。\n\n他认为第三类感性所带来的乐趣要大于前面两类,其根据是:“我们所运用的能力愈为高尚,它所给我们的乐趣就愈大,因为乐趣总是涉及我们如何运用能力,而快乐就在于乐趣不断地重复。在这方面,感性所带来的乐趣,无疑会超过其他基本的两类。”这句话似乎只能成为假设不能成为根据,我没办法从字面推断出是否成立。\n\n我读到这篇文章的时候,想到艺术是否有高贵低贱之分?我们活在马克思主义的意识形态下,其实不难解释。人类社会是发展的,而发展的实质就是事物的前进、上升,是新事物代替旧事物。那些得到保留甚至发展的是好的事物,一些消失在时代车轮下就是不好的事物。我反对那些用“大俗即大雅”来诡辩的人。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Wave Terminal 目前可能是 Windows 最顺手的终端","description":"","slug":"wave-terminal","date":"2024-12-15T14:51:09+08:00","tags":["Terminal"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Wave Terminal 目前可能是 Windows 最顺手的终端","description":"","slug":"wave-terminal","date":"2024-12-15T14:51:09+08:00","tags":["Terminal"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-15-Wave-Terminal.md","fmCacheModifiedTime":1734414154000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-15-Wave-Terminal.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-15-Wave-Terminal.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-15-Wave-Terminal.md","fmFileName":"2024-12-15-Wave-Terminal.md","fmDraft":null,"fmModified":1734414154000,"fmPublished":1734245469000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![wave-terminal](https://raw.githubusercontent.com/jimicat/image-upload/refs/heads/main/blog-images/wave-terminal.webp)\n\n### 官网\n\n<https://www.waveterm.dev/>\n\n### 作者仓库\n\n<https://github.com/wavetermdev/waveterm>\n\n### Wave Terminal 描述\n\nWave Terminal 是一款功能强大的开源终端,它将传统的终端功能与先进的图形能力相结合,为用户提供高效便捷的工作流体验。Wave Terminal 支持 macOS、Linux 和 Windows 系统,能够让开发者、系统管理员和高级用户在终端环境中同时使用图形化工具,而无需频繁切换应用程序。\n\n### 主要功能\n\n1. 增强的工作流集成:Wave Terminal 将文件预览、网页浏览和 AI 助手等图形工具直接集成到终端中,避免了开发者频繁在终端和其他应用之间切换,提高了生产力。无论是查看文档、预览文件,还是监控系统,都可以在同一个终端界面中完成。\n2. 跨平台支持:Wave Terminal 支持 macOS、Linux 和 Windows 操作系统,确保用户在不同平台上都能享受其强大功能,无论使用哪种操作系统都能保持一致的体验。\n3. 高度可定制化:Wave Terminal 允许用户根据自己的工作需求定制终端环境。用户可以自由设置标签页、组织终端界面以及选择符合自己工作流的布局,从而最大化工作效率,保持专注。\n4. 快捷键绑定:通过自定义快捷键,Wave Terminal 可以加快导航速度,减少对鼠标的依赖,提高操作效率,让用户更快速地完成日常任务。\n5. 布局管理:通过 Wave Terminal 的布局系统,用户可以高效地组织工作空间,支持多个终端窗口并排显示,方便同时处理多个任务。\n6. 远程连接:Wave Terminal 使 SSH 或远程连接变得更加简单,一键即可连接到远程机器,无论是管理服务器还是访问远程开发环境,都能轻松应对。\n7. 小部件支持:通过内置小部件,用户可以扩展 Wave Terminal 的功能,提供更多生产力工具、监控工具和控制功能,直接在终端内使用。\n8. wsh 命令:用户可以通过 wsh 命令直接在命令行中控制 Wave Terminal,快速启动小部件并管理终端的各项功能,无需离开命令行界面。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客新增 Spotify 状态卡片","description":"","slug":"bo-ke-xin-zeng-spotify-zhuang-tai-qia-pian","date":"2024-12-06T14:51:09+08:00","tags":["Spotify","Astro","API"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客新增 Spotify 状态卡片","description":"","slug":"bo-ke-xin-zeng-spotify-zhuang-tai-qia-pian","date":"2024-12-06T14:51:09+08:00","tags":["Spotify","Astro","API"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-06-博客首页新增 Spotify 状态卡片.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-06-博客首页新增 Spotify 状态卡片.md","fmFileName":"2024-12-06-博客首页新增 Spotify 状态卡片.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1733467869000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Get Refresh_Token\n\n```python\nimport base64\nimport requests\nimport webbrowser\n\n# Spotify API 配置\nCLIENT_ID = \"your_client_id\" # 替换为你的 Client ID\nCLIENT_SECRET = \"your_client_secret\" # 替换为你的 Client Secret\nREDIRECT_URI = \"http://localhost/callback\" # 替换为你的重定向 URI\nTOKEN_URL = \"https://accounts.spotify.com/api/token\"\nSPOTIFY_AUTH_URL = \"https://accounts.spotify.com/authorize\"\n\n# 定义需要的权限(Scopes)\nSCOPES = \"user-read-private user-read-email playlist-modify-private playlist-modify-public\"\n\n\n# 获取授权码(Authorization Code)\ndef get_auth_code():\n auth_url = (\n f\"{SPOTIFY_AUTH_URL}?client_id={CLIENT_ID}&response_type=code\"\n f\"&redirect_uri={REDIRECT_URI}&scope={SCOPES}\"\n )\n webbrowser.open(auth_url)\n print(f\"请访问以下链接并授权:\\n{auth_url}\")\n # 从用户输入中获取重定向后的 code 参数\n return input(\"请输入重定向后的 URL 中的 code 参数值:\")\n\n\n# 使用授权码获取 Access Token 和 Refresh Token\ndef get_tokens(auth_code):\n headers = {\n \"Authorization\": f\"Basic {base64.b64encode(f'{CLIENT_ID}:{CLIENT_SECRET}'.encode()).decode()}\"\n }\n data = {\n \"grant_type\": \"authorization_code\",\n \"code\": auth_code,\n \"redirect_uri\": REDIRECT_URI,\n }\n response = requests.post(TOKEN_URL, headers=headers, data=data)\n if response.status_code == 200:\n return response.json()\n else:\n print(\"获取 Token 失败:\", response.json())\n return None\n\n\n# 使用 Refresh Token 刷新 Access Token\ndef refresh_access_token(refresh_token):\n headers = {\n \"Authorization\": f\"Basic {base64.b64encode(f'{CLIENT_ID}:{CLIENT_SECRET}'.encode()).decode()}\"\n }\n data = {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": refresh_token,\n }\n response = requests.post(TOKEN_URL, headers=headers, data=data)\n if response.status_code == 200:\n return response.json().get(\"access_token\")\n else:\n print(\"刷新 Token 失败:\", response.json())\n return None\n\n\n# 主流程\nif __name__ == \"__main__\":\n # Step 1: 获取 Authorization Code\n print(\"正在获取 Authorization Code...\")\n authorization_code = get_auth_code()\n\n # Step 2: 使用 Authorization Code 获取初始 Tokens\n print(\"正在获取 Access Token 和 Refresh Token...\")\n tokens = get_tokens(authorization_code)\n\n if tokens:\n access_token = tokens.get(\"access_token\")\n refresh_token = tokens.get(\"refresh_token\")\n print(f\"Access Token: {access_token}\")\n print(f\"Refresh Token: {refresh_token}\")\n\n # Step 3: 测试刷新 Access Token\n print(\"测试刷新 Access Token...\")\n new_access_token = refresh_access_token(refresh_token)\n if new_access_token:\n print(f\"新的 Access Token: {new_access_token}\")\n```\n\n### Install `astro-spotify`\n\n```bash\nnpm install astro-spotify\n```\n\n### Create `.env`\n\n```bash\n# Spotify API Configuration\nSPOTIFY_CLIENT_ID=your_client_id_here\nSPOTIFY_CLIENT_SECRET=your_client_secret_here\nSPOTIFY_REFRESH_TOKEN=your_refresh_token_here\n```\n\n### Create `src/components/SpotifyCard.astro`\n\n```astro\n---\nimport { CurrentlyPlaying } from \"astro-spotify\";\n---\n<div class=\"bg-white dark:bg-zinc-900 dark:text-zinc-200 p-4 rounded-lg shadow-md\">\n <div class=\"flex items-center gap-2 mb-3\">\n <svg class=\"w-5 h-5 text-[#1DB954]\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z\"/>\n </svg>\n <h2 class=\"text-lg font-bold\">正在收听</h2>\n </div>\n\n<CurrentlyPlaying\n clientID={import.meta.env.SPOTIFY_CLIENT_ID}\n clientSecret={import.meta.env.SPOTIFY_CLIENT_SECRET}\n refreshToken={import.meta.env.SPOTIFY_REFRESH_TOKEN}\n/>\n```\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客增码字热力图","description":"","slug":"bo-ke-zeng-ma-zi-re-li-tu","date":"2024-12-05T14:13:11+08:00","tags":["Astro","Heatmap"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客增码字热力图","description":"","slug":"bo-ke-zeng-ma-zi-re-li-tu","date":"2024-12-05T14:13:11+08:00","tags":["Astro","Heatmap"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-12-05-博客增加码字热力图.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-12-05-博客增加码字热力图.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-12-05-博客增加码字热力图.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-12-05-博客增加码字热力图.md","fmFileName":"2024-12-05-博客增加码字热力图.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1733379191000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 在 components 目录下新增 Heatmap.astro 组件\n\n```astro\n---\nimport { format, eachDayOfInterval, startOfYear, endOfYear } from 'date-fns';\nimport { getColorScale } from '../utils/colorscale';\nimport wordCountData from '../data/word-counts.json'\n\n// 格式化数据为字典\nconst wordCountMap = new Map(wordCountData.map(({ date, charCount }) => [date, charCount]));\n// 计算所有日期的字数总和\nconst getTotalWordCount = wordCountData.reduce((total, { charCount }) => {\n return total + charCount; // 累加每个日期的字数\n}, 0);\n\nconsole.log(getTotalWordCount)\nconst today = new Date();\nconst startDate = startOfYear(today);\nconst endDate = endOfYear(today);\nconst days = eachDayOfInterval({ start: startDate, end: endDate });\n\n\n---\n\n<div class=\"bg-white dark:bg-zinc-900 dark:text-zinc-200 p-4 rounded-lg shadow-md\">\n <h3 class=\"text-center mb-2\">码字热力图</h3>\n <div class=\"relative\">\n <div class=\"grid grid-cols-52 gap-[6px] h-[100px]\">\n {days.map(day => {\n const date = format(day, 'yyyy-MM-dd');\n const wordCount = wordCountMap.get(date) || 0;\n const bgColor = getColorScale(wordCount);\n \n return (\n <div\n class=\"w-[6px] h-[6px] rounded-[1px] tooltip\"\n style={`background-color: ${bgColor};`}\n data-tip={`${format(day, 'yyyy-MM-dd')}: ${wordCount} 字符`}\n />\n );\n })}\n </div>\n </div>\n <div class=\"flex items-center justify-end gap-2 mt-2 text-xs text-gray-600\">\n <span>总字符:{getTotalWordCount}</span>\n </div>\n</div>\n\n\n\n<style>\n .grid-cols-52 {\n grid-template-columns: repeat(52, minmax(0, 1fr));\n }\n \n .tooltip {\n position: relative;\n }\n \n .tooltip:hover::after {\n content: attr(data-tip);\n position: absolute;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n padding: 2px 4px;\n background-color: #333;\n color: white;\n border-radius: 2px;\n font-size: 10px;\n white-space: nowrap;\n z-index: 10;\n }\n</style>\n```\n\n### 在 utils 目录下新增 `colorscale.ts\n\n```ts\nexport function getColorScale(count: number): string {\n if (count === 0) return '#ebedf0';\n if (count < 600) return '#A5D6A7';\n if (count < 900) return '#66BB6A';\n if (count < 1200) return '#43A047';\n if (count < 1500) return '#2E7D32';\n return '#1B5E20';\n}\n```\n\n### 在 types 目录下新增 Article.ts\n\nArticle.ts\n\n> 定义类型\n\n```ts\nexport interface Article {\n id: string;\n title: string;\n content: string;\n date: Date;\n wordCount: number;\n }\n```\n\n### 在 index.astro 文件中引用\n\n```astro\n---\nimport { SITE_DESCRIPTION, SITE_TITLE } from \"../consts\";\nimport Heatmap from '../components/Heatmap.astro';\nimport Layout from \"../layouts/Layout.astro\";\n---\n\n<Layout\n title={SITE_TITLE}\n description={SITE_DESCRIPTION}\n className=\"flex h-svh flex-col justify-center\"\n>\n <main class=\"space-y-4\">\n <p>\n 偶尔想到的一些内容会做记录,题材不限于技术文章,更多的是一些个人的只言片语。博主平时喜欢运动,以糊代码为乐趣,偶尔也靠读些哲学书籍来打发无聊。\n </p>\n <Heatmap />\n\n </main>\n</Layout>\n```\n\n> 注意组件之间的相互引用关系\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Nginx 相关","description":"","slug":"nginx-xiang-guan","date":"2024-11-27T11:01:45+08:00","tags":["nginx","linux"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Nginx 相关","description":"","slug":"nginx-xiang-guan","date":"2024-11-27T11:01:45+08:00","tags":["nginx","linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-27-Nginx 相关.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-27-Nginx 相关.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-27-Nginx 相关.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-27-Nginx 相关.md","fmFileName":"2024-11-27-Nginx 相关.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1732676505000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Nginx 代理 apk 文件下载\n\n```jsx\nserver {\n listen 80;\n server_name app.com.cn;\n\n location /app {\n alias /var/www/app;\n autoindex on;\n default_type application/octet-stream;\n }\n }\n```\n\n### Nginx 过滤某个字段\n\n如果你希望在统计 Nginx 日志中 `Osonkredit.apk` 出现的次数时,考虑去重 IP 地址,只计算每个 IP 地址出现的次数一次,可以使用以下方法。\n\n#### 1. 使用 `grep` 和 `awk` 去重 IP\n\n假设你希望计算每个唯一 IP 地址访问 `Osonkredit.apk` 的次数,可以结合 `grep`、`awk` 和 `sort` 进行操作。\n\n```bash\ngrep 'Osonkredit.apk' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq | wc -l\n```\n\n解释:\n\n- `grep 'Osonkredit.apk' /var/log/nginx/access.log`: 找到包含 `Osonkredit.apk` 的所有行。\n- `awk '{print $1}'`: 从每行中提取出第一个字段,即客户端 IP 地址。\n- `sort`: 对 IP 地址进行排序(`uniq` 需要排序的输入)。\n- `uniq`: 去重,只保留每个 IP 地址的唯一出现。\n- `wc -l`: 统计不同 IP 地址的数量。\n\n#### 2. 使用 `awk` 完全处理\n\n如果你希望使用 `awk` 来完成所有的工作,并避免管道中多个命令的嵌套,可以使用如下的单一 `awk` 命令:\n\n```bash\nawk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}' /var/log/nginx/access.log\n```\n\n解释:\n\n- `awk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}'`: 这个命令做了以下几件事:\n - `$0 ~ /Osonkredit.apk/`: 只处理包含 `Osonkredit.apk` 的行。\n - `{ips[$1]}`: 使用 IP 地址(即第一列 `$1`)作为键,存储到 `ips` 数组中。每个唯一的 IP 会存储一次,重复的 IP 会覆盖前一个值。\n - `END {print length(ips)}`: 在处理完所有行后,打印 `ips` 数组的长度,即唯一 IP 的数量。\n\n#### 3. 使用 `zgrep` (针对压缩日志文件)\n\n如果 Nginx 日志被压缩,你可以使用 `zgrep` 来对 `.gz` 格式的日志进行类似的统计。以下命令会统计压缩日志文件中每个唯一 IP 地址访问 `Osonkredit.apk` 的次数:\n\n```bash\nzgrep 'Osonkredit.apk' /var/log/nginx/access.log*.gz | awk '{print $1}' | sort | uniq | wc -l\n```\n\n总结:\n\n这些方法可以帮助你统计在 Nginx 日志中每个唯一 IP 地址访问 `Osonkredit.apk` 的次数。如果你有多个日志文件(如压缩日志),可以使用 `zgrep` 来处理。\n\n### Nginx 反向代理\n\n1. 路径问题\n\n - NGINX 默认尝试从文件系统中提供请求的资源。日志显示 NGINX 在 `/usr/share/nginx/html/` 目录中查找请求路径 `/EZLoan/someTypeNillActionBoo/superTimUserniLear`,但找不到文件。\n - 这是因为没有为 `/EZLoan` 指定一个明确的反向代理规则,或者请求路径被误解为静态文件路径。\n\n2. 代理配置问题\n\n - 你配置的 `location /EZloan` 中的路径为 `proxy_pass http://backend;`,但你的 URL 请求是 `/EZLoan`(大小写敏感)。\n - 由于没有匹配到配置规则,NGINX 可能默认将此请求当作静态文件请求处理。\n\n3. 拼写错误或恶意请求\n - 请求路径 `/EZLoan/someTypeNillActionBoo/superTimUserniLear` 看起来不像预期的路径,可能是用户拼写错误或恶意请求。\n\n解决方案\n\n- 确保路径匹配大小写\n\nNGINX 的 `location` 是大小写敏感的。你的配置中是 `/EZloan`,但日志显示请求路径是 `/EZLoan`。修改配置如下:\n\n```nginx\nlocation ~* ^/EZLoan {\n proxy_pass http://backend;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n```\n\n这里使用了正则表达式 `~*`,使路径匹配大小写不敏感。\n\n- 捕获未知路径并重定向\n\n如果有类似不正确或恶意请求,可以捕获它们并返回合适的响应,比如 404 页面或重定向:\n\n```nginx\nlocation /EZLoan {\n proxy_pass http://backend;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n\n- 捕获不存在的静态文件请求\n\nlocation / {\n return 404;\n}\n```\n\n- 检查 `proxy_pass` 的后端配置\n\n 确保后端 `http://backend` 配置正确,且能够处理 `/EZLoan/someTypeNillActionBoo/superTimUserniLear` 这样的请求路径。\n\n在后端处理未知路径时返回合适的状态码,比如 404,而不是直接丢给前端。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"数据库相关操作记录","description":"","slug":"shu-ju-ku-xiang-guan-cao-zuo-ji-lu","date":"2024-11-14T13:55:48+08:00","tags":["mysql","AI"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"数据库相关操作记录","description":"","slug":"shu-ju-ku-xiang-guan-cao-zuo-ji-lu","date":"2024-11-14T13:55:48+08:00","tags":["mysql","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-14-数据库相关操作记录.md","fmCacheModifiedTime":1734056354000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-14-数据库相关操作记录.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-14-数据库相关操作记录.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-14-数据库相关操作记录.md","fmFileName":"2024-11-14-数据库相关操作记录.md","fmDraft":null,"fmModified":1734056354000,"fmPublished":1731563748000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 本文内容部分生成自 ChatGPT\n\n### 导出表结构\n\n```sql\nmysqldump -u 用户名 -p --no-data test > test_structure.sql\n```\n\n### 导入表结构\n\n```sql\nmysql -u 用户名 -p 数据库名 < test_structure.sql\n```\n\n### 新建数据库并指定字符集\n\n```sql\nCREATE DATABASE cash_loan_base \nCHARACTER SET utf8mb4 \nCOLLATE utf8mb4_general_ci;\n\n# CHARACTER SET utf8mb4:指定数据库使用 utf8mb4 字符集,可以支持更多字符(如表情符号)。\n# COLLATE utf8mb4_general_ci:设置排序规则为不区分大小写的 utf8mb4_general_ci,方便中文或多语言应用中排序与查询的兼容性。\n```\n\n### 为新用户赋予权限\n\n\n```sql\n-- 创建用户 risk_user,并设置密码\nCREATE USER 'risk_user'@'localhost' IDENTIFIED BY 'your_password';\n\n-- 赋予增删改查权限\nGRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'risk_user'@'localhost';\n\n-- 刷新权限\nFLUSH PRIVILEGES;\n```\n\n### 函数相关\n\n```sql\n-- 列出函数\nSHOW FUNCTION STATUS WHERE Db = 'database_name';\n\n-- 查看函数创建命令\nSHOW CREATE FUNCTION function_name;\n\n-- 导入函数\nDELIMITER //\nCREATE DEFINER=`root`@`%` FUNCTION `_nextval`(`seq_name_p` varchar(50)) RETURNS bigint(20) READS SQL DATA BEGIN DECLARE _cur INT; DECLARE _maxvalue BIGINT(20); DECLARE _increment INT; SET _increment = (SELECT increment_val FROM sys_sequence WHERE seq_name = seq_name_p); SET _maxvalue = (SELECT max_val FROM sys_sequence WHERE seq_name = seq_name_p); SET _cur = (SELECT current_val FROM sys_sequence WHERE seq_name = seq_name_p); UPDATE sys_sequence SET current_val = _cur + _increment WHERE seq_name = seq_name_p; IF (_cur + _increment >= _maxvalue) THEN UPDATE sys_sequence SET current_val = min_val WHERE seq_name = seq_name_p; END IF; RETURN _cur;\n\nEND //\n\nDELIMITER ;\n```\n\n### 最大连接数\n\n```sql\nSHOW VARIABLES LIKE 'max_connections';\nSET GLOBAL max_connections = 800;\n```\n\n另一种情况,命令行模式登录 MySQL 提示 too many connections\n\n```sql\n# 在 my.conf 新增最大连接数配置\n\nvim /etc/my.cnf\n\n[mysqld]\n...\nmax_connections=1000000\n```\n\n### sql_mode 相关\n\n在 MySQL 中,`ONLY_FULL_GROUP_BY` 是一种 SQL 模式,它要求 `GROUP BY` 查询中的列必须是聚合函数的一部分,或者明确出现在 `GROUP BY` 子句中。如果你希望关闭这个模式,可以按以下步骤操作:\n\n方法 1:临时关闭(会话级别)\n\n这种方法仅在当前会话有效,适用于短期需求。\n\n1. **登录 MySQL**:\n ```bash\n mysql -u root -p\n ```\n\n2. **检查当前 SQL 模式**:\n 执行以下命令,查看当前启用的 SQL 模式:\n ```sql\n SELECT @@sql_mode;\n ```\n\n3. **移除 `ONLY_FULL_GROUP_BY`**:\n 将 `ONLY_FULL_GROUP_BY` 从当前会话的 SQL 模式中移除:\n ```sql\n SET sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');\n ```\n\n4. **验证设置是否生效**:\n 重新检查 SQL 模式,确认 `ONLY_FULL_GROUP_BY` 已被移除:\n ```sql\n SELECT @@sql_mode;\n ```\n\n方法 2:永久关闭(全局级别)\n\n这种方法适用于需要长期关闭 `ONLY_FULL_GROUP_BY` 的场景。\n\n1. **编辑 MySQL 配置文件**:\n 打开 MySQL 配置文件(通常位于 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`)。\n\n2. **修改 `sql_mode` 配置**:\n 在 `[mysqld]` 部分中,添加或修改 `sql_mode`,确保移除 `ONLY_FULL_GROUP_BY`:\n ```ini\n [mysqld]\n sql_mode=\"STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"\n ```\n\n 这里列出的模式是一个常见的默认设置,移除了 `ONLY_FULL_GROUP_BY`。\n\n3. **重启 MySQL 服务**:\n 保存配置文件后,重启 MySQL 服务以应用更改:\n ```bash\n sudo systemctl restart mysql\n ```\n\n4. **验证设置**:\n 登录 MySQL,检查全局 SQL 模式:\n ```sql\n SELECT @@GLOBAL.sql_mode;\n ```\n\n---\n\n方法 3:直接修改全局模式(运行时修改)\n\n1. **移除 `ONLY_FULL_GROUP_BY`**:\n 在 MySQL 中运行以下命令,修改全局 SQL 模式:\n ```sql\n SET GLOBAL sql_mode = REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', '');\n ```\n\n2. **验证设置**:\n 检查是否成功移除:\n ```sql\n SELECT @@GLOBAL.sql_mode;\n ```\n\n3. **注意事项**:\n - 此方法在 MySQL 服务重启后会失效。要永久生效,仍需修改配置文件。\n\n\n### binlog 日志清理\n\n`master-bin.000015` 是 MySQL 的**二进制日志文件**(Binary Log file),它记录了数据库中所有修改数据的事件(如 `INSERT`、`UPDATE`、`DELETE`),以及某些DDL语句(如 `CREATE TABLE`),以供以下用途:\n\n1. **数据恢复**:通过重放二进制日志,恢复因错误或意外删除导致的数据丢失。\n2. **主从复制**:二进制日志是主从复制中主服务器向从服务器传递数据变更的关键部分。\n\n#### 1. **查看当前日志文件列表**\n通过以下命令查看当前的二进制日志文件:\n```sql\nSHOW BINARY LOGS;\n```\n或者查看当前在用的日志文件:\n```sql\nSHOW MASTER STATUS;\n```\n\n---\n\n#### 2. **删除旧的二进制日志**\nMySQL 提供了清理日志的内置命令:\n\n- **清除指定日期之前的日志**:\n ```sql\n PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';\n ```\n 例如:\n ```sql\n PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';\n ```\n 这会删除指定日期之前的所有二进制日志。\n\n- **清除指定日志文件之前的日志**:\n ```sql\n PURGE BINARY LOGS TO 'master-bin.000015';\n ```\n 这会删除 `master-bin.000015` 之前的所有日志文件。\n\n---\n\n#### 3. **自动清理二进制日志(可选)**\n为了避免手动清理,可以在 `my.cnf`(或 `my.ini`)中配置自动删除过期日志:\n```ini\n[mysqld]\nexpire_logs_days = 7 # 自动保留最近7天的二进制日志\n```\n然后重启 MySQL 服务使其生效。\n\n---\n\n#### 4. **确认操作的安全性**\n- **确保备份**:清理之前,确认不再需要这些日志用于恢复或主从复制。\n- **检查主从复制状态**:如果正在使用主从复制,确认从服务器已经完全同步旧日志,以免导致数据不一致。\n\n---\n\n通过以上方法,您可以安全高效地清理 `master-bin.000015` 及其他旧的二进制日志文件。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"wireguard 配置指南","description":"","slug":"wireguard-pei-zhi-zhi-nan","date":"2024-11-29T14:00:53+08:00","tags":["wireguard","linux","vpn"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"wireguard 配置指南","description":"","slug":"wireguard-pei-zhi-zhi-nan","date":"2024-11-29T14:00:53+08:00","tags":["wireguard","linux","vpn"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-29-wireguard 配置指南.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-29-wireguard 配置指南.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-29-wireguard 配置指南.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-29-wireguard 配置指南.md","fmFileName":"2024-11-29-wireguard 配置指南.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732860053000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n> 基于 ubuntu 24.04.1 LTS\n\n### 服务端配置\n\n```bash\napt install wireguard\necho \"net.ipv4.ip_forward = 1\" >> /etc/sysctl.conf\necho \"net.ipv4.conf.all.proxy_arp = 1\" >> /etc/sysctl.conf\nsysctl -p /etc/sysctl.conf\n\n# 生成密钥对\numask 0077\nwg genkey > private\nwg pubkey < private > public\n\n# 新增配置文件\nvim /etc/wireguard/wg0.conf\n-----------------\n[Interface]\nAddress = 10.10.0.1/24 #本机分配的 IP\nPostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE\nListenPort = 11820 #自定义端口\nPrivateKey = <your server private key>\n-----------------\n\n# 启动\nwg-quick up wg0\n\n# 在服务端添加客户端的公钥\nwg set wg0 peer KWwqR9qfGYrXnNOLa33cKwlgVOH4tAPgg5BWya3EA0o= allowed-ips 10.10.0.2/32\n# 此时在服务器端重启 wg0 会看到客户端公钥和对应 IP 地址被写入 /etc/wireguard/wg0.conf 中\n\n# 重启服务端\nwg-quick down wg0\nwg-quick up wg0\n```\n\n### 客户端配置\n\n```bash\n# 安装\napt install wireguard\n\n# 生成客户端密钥对\numask 0077\nwg genkey > private\nwg pubkey < private > public\n\n# 新增客户端配置文件\nvim /etc/wireguard/wg0.conf\n---------------------------\n[Interface]\nPrivateKey = <your client private key>\nAddress = 10.10.0.2/32\nDNS = 8.8.8.8\n\n[Peer]\nPublicKey = <your server public key>\nAllowedIPs = 10.10.0.0/24\nEndpoint = <your server public ip>:11820\n--------------------------\n\n# 启动客户端\nwg-quick up wg0\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Garmin API","description":"","slug":"garmin-api","date":"2024-11-29T10:00:05+08:00","tags":["python","garmin"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Garmin API","description":"","slug":"garmin-api","date":"2024-11-29T10:00:05+08:00","tags":["python","garmin"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-29-Garmin API.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-29-Garmin API.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-29-Garmin API.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-29-Garmin API.md","fmFileName":"2024-11-29-Garmin API.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732845605000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n```python\nfrom flask import Flask, jsonify, request\nfrom flask_cors import CORS\n\nimport sqlite3\n\napp = Flask(__name__)\n\n# 数据库连接函数\ndef get_db_connection():\n conn = sqlite3.connect('garmin_activities.db') # 请确保数据库文件名正确\n conn.row_factory = sqlite3.Row\n return conn\n\n# 查询活动的 API\n@app.route('/api/activities', methods=['GET'])\ndef get_activities():\n conn = get_db_connection()\n cursor = conn.cursor()\n\n # 获取查询参数\n sport = request.args.get('sport')\n activity_type = request.args.get('type')\n\n # 构建基本查询\n query = \"SELECT * FROM activities\"\n filters = []\n\n # 添加条件\n if sport:\n filters.append(f\"sport = '{sport}'\")\n if activity_type:\n filters.append(f\"type = '{activity_type}'\")\n\n if filters:\n query += \" WHERE \" + \" AND \".join(filters)\n\n cursor.execute(query)\n activities = cursor.fetchall()\n\n # 关闭连接\n conn.close()\n\n # 将查询结果转换为 JSON 格式\n return jsonify([dict(activity) for activity in activities])\nCORS(app, resources=r'/*')\nif __name__ == '__main__':\n app.run(debug=True, host=\"0.0.0.0\", port=8080)\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"本地测试证书配置","description":"","slug":"ben-di-ce-shi-zheng-shu-pei-zhi","date":"2024-11-28T18:32:55+08:00","tags":["mkcert","linux","ssl"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"本地测试证书配置","description":"","slug":"ben-di-ce-shi-zheng-shu-pei-zhi","date":"2024-11-28T18:32:55+08:00","tags":["mkcert","linux","ssl"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-28-本地测试证书配置.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-28-本地测试证书配置.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-28-本地测试证书配置.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-28-本地测试证书配置.md","fmFileName":"2024-11-28-本地测试证书配置.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732789975000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 安装\n\n```jsx\n# 安装依赖\napt install libnss3-tools\n\n# 下载 Linux 平台二进制文件\nwget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64\n\n# 重命名\nmv mkcert-v1.4.4-linux-amd64 mkcert\n\n# 移动到 bin 下\nmv mkcert /usr/local/bin/\n\n# 测试命令\nmkcert -help\n```\n\n### 配置证书\n\n```jsx\n# 生成根证书\nroot@ubuntu:~# mkcert -install\nCreated a new local CA 💥\nThe local CA is now installed in the system trust store! ⚡\n\n# 生成域名证书\nroot@ubuntu:~# mkcert *.ubuntu.local ubuntu.local\n\nCreated a new certificate valid for the following names 📜\n - \"*.ubuntu.local\"\n - \"ubuntu.local\"\n\nReminder: X.509 wildcards only go one level deep, so this won't match a.b.ubuntu.local ℹ️\n\nThe certificate is at \"./_wildcard.ubuntu.local+1.pem\" and the key at \"./_wildcard.ubuntu.local+1-key.pem\" ✅\n\nIt will expire on 28 February 2027 🗓\n\n# nginx 配置\nroot@ubuntu:~# mv _wildcard.ubuntu.local+1-key.pem /etc/nginx/cert/key.pem\nroot@ubuntu:~# mv _wildcard.ubuntu.local+1.pem /etc/nginx/cert/cert.pem\n\n# 重新载入配置文件\nsystemctl reload nginx\n```\n\n### 客户端配置\n\n```jsx\n客户端需要将根证书的公钥和ssl证书的公钥 copy 过来,在客户端安装即可。\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"观影片《好东西》有感","description":"","slug":"guan-ying-pian-hao-dong-xi-you-gan","date":"2024-11-26T23:34:59+08:00","tags":["《好东西》","电影"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"观影片《好东西》有感","description":"","slug":"guan-ying-pian-hao-dong-xi-you-gan","date":"2024-11-26T23:34:59+08:00","tags":["《好东西》","电影"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-26-观影片《好东西》有感.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-26-观影片《好东西》有感.md","fmFileName":"2024-11-26-观影片《好东西》有感.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732635299000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![好东西](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411271101751.jpg)\n\n《好东西》还是挺推荐观看的,可悲的是觉醒的女性太少,意识不到女性失权的男性又是普遍。即便如剧中上海这座大城市,社会对女性的蔑视也是普遍的现象,更别说那些活在农村的女性了。只能说平权之路,任重道远。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"20241125","description":"","slug":"20241125","date":"2024-11-25T23:36:13+08:00","tags":["碎语"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"20241125","description":"","slug":"20241125","date":"2024-11-25T23:36:13+08:00","tags":["碎语"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-26-20241125.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-26-20241125.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-26-20241125.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-26-20241125.md","fmFileName":"2024-11-26-20241125.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732548973000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n总以为换个新环境,认识一批新朋友就能重新开启一段新的人生,但往往事与愿违。在一个没有人认识的地方,我可以重新立起一个自己脑中那个更好的自己——开朗、自信、健谈。我不知道的是要想维护住自己脑中幻想的那个形象,我需要付出很多的能量,一旦某个时刻这种能量消耗殆尽自己又会回到那个不自信的自己,这时伴随着的就是对自己的不认可,过度内耗。\n\n在此之前,我似乎没有意识到这是对自我存在的一种否定,不认可当下的自己。虽然有意识到问题,但是追究问题的根源却让我茫然,不知道自何时起,曾经的自己被逐渐瓦解。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"actual-server 备份脚本","description":"","slug":"actual-server-bei-fen-jiao-ben","date":"2024-11-25T12:46:02+08:00","tags":["actual","shell","AI"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"actual-server 备份脚本","description":"","slug":"actual-server-bei-fen-jiao-ben","date":"2024-11-25T12:46:02+08:00","tags":["actual","shell","AI"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-25-actual-server 备份脚本.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-25-actual-server 备份脚本.md","fmFileName":"2024-11-25-actual-server 备份脚本.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732509962000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n以下是一个脚本,可以完成每天凌晨1点定时打包 `/opt/actual-server` 目录,并将其传输到远程服务器 `192.168.9.100` 的 `/data/` 目录下。\n\n### 脚本实现步骤\n\n1. **压缩文件**:使用 `tar` 打包和压缩目录。\n2. **远程传输**:通过 `scp` 将压缩包传输到远程服务器。\n3. **设置定时任务**:使用 `cron` 设置每天凌晨1点执行。\n\n### 脚本内容\n\n保存以下脚本为 `/opt/shell/backup_actual_server.sh`:\n\n```bash\n#!/bin/bash\n\n# 设定变量\n\nSOURCE_DIR=\"/opt/actual-server\"\n\nBACKUP_DIR=\"/tmp\"\n\nREMOTE_SERVER=\"192.168.9.103\"\n\nREMOTE_DIR=\"/Users/kevin/actual-data-backup\"\n\nTIMESTAMP=$(date +\"%Y%m%d_%H%M%S\")\n\nBACKUP_FILE=\"actual-server-backup-${TIMESTAMP}.tar.gz\"\n\nREMOTE_USER=\"kevin\" # 替换为远程服务器用户名\n\n# 打包目录\n\necho \"开始打包 ${SOURCE_DIR} ...\"\n\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" -C \"$(dirname \"${SOURCE_DIR}\")\" \"$(basename \"${SOURCE_DIR}\")\"\n\n# 检查是否打包成功\n\nif [ $? -ne 0 ]; then\n\n echo \"打包失败!\"\n\n exit 1\n\nfi\n\necho \"打包完成,文件存储在 ${BACKUP_DIR}/${BACKUP_FILE}\"\n\n# 传输到远程服务器\n\necho \"传输文件到 ${REMOTE_SERVER}:${REMOTE_DIR} ...\"\n\nscp \"${BACKUP_DIR}/${BACKUP_FILE}\" \"${REMOTE_USER}@${REMOTE_SERVER}:${REMOTE_DIR}\"\n\n# 检查传输是否成功\n\nif [ $? -ne 0 ]; then\n\n echo \"文件传输失败!\"\n\n exit 1\n\nfi\n\necho \"文件传输完成\"\n\n# 删除本地备份文件\n\necho \"清理本地备份文件 ${BACKUP_DIR}/${BACKUP_FILE} ...\"\n\nrm -f \"${BACKUP_DIR}/${BACKUP_FILE}\"\n```\n\n### 配置权限\n\n1. **赋予执行权限**:\n \n ```bash\n chmod +x /opt/shell/backup_actual_server.sh\n ```\n \n2. **测试脚本**:\n \n ```bash\n /opt/shell/backup_actual_server.sh\n ```\n \n\n### 设置定时任务\n\n1. 编辑定时任务:\n \n ```bash\n crontab -e\n ```\n \n2. 添加如下内容,设置每天凌晨1点执行:\n \n ```bash\n 0 1 * * * /opt/shell/backup_actual_server.sh >> /var/log/backup_actual_server.log 2>&1\n ```\n \n\n### 日志管理\n\n脚本的输出会保存在 `/var/log/backup_actual_server.log` 中,便于日后查看备份日志。\n\n### 注意事项\n\n- 替换 `your_username` 为远程服务器的实际用户名。\n- 确保本机到远程服务器已经配置了免密码登录(使用 `ssh-keygen` 和 `ssh-copy-id` 配置)。\n- 确保本地和远程都有足够的磁盘空间存储备份文件。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"部署自己的记账服务","description":"","slug":"bu-shu-zi-ji-de-ji-zhang-fu-wu","date":"2024-11-24T00:10:50+08:00","tags":["actual","记账"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"部署自己的记账服务","description":"","slug":"bu-shu-zi-ji-de-ji-zhang-fu-wu","date":"2024-11-24T00:10:50+08:00","tags":["actual","记账"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-24-部署自己的记账服务.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-24-部署自己的记账服务.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-24-部署自己的记账服务.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-24-部署自己的记账服务.md","fmFileName":"2024-11-24-部署自己的记账服务.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732378250000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n我用的记账工具叫 Actual, 目前在 Github 开源,开发着提供了跨平台方案,有移动端、PC 端、Web 端。\n\n![actual](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411240239147.png)\n\n部署可以通过 docker 命令直接启动,或直接下载安装文件。\n\ndocker-compose.yml 文件可以在仓库下载 <https://github.com/actualbudget/actual-server/blob/master/docker-compose.yml>\n\n```yml\ndocker-compose.yml\n\nservices:\n actual_server:\n image: docker.io/actualbudget/actual-server:latest\n ports:\n # This line makes Actual available at port 5006 of the device you run the server on,\n # i.e. http://localhost:5006. You can change the first number to change the port, if you want.\n - '5006:5006'\n environment:\n # Uncomment any of the lines below to set configuration options.\n # - ACTUAL_HTTPS_KEY=/data/selfhost.key\n # - ACTUAL_HTTPS_CERT=/data/selfhost.crt\n # - ACTUAL_PORT=5006\n # - ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB=20\n # - ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB=50\n # - ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB=20\n # See all options and more details at https://actualbudget.github.io/docs/Installing/Configuration\n # !! If you are not using any of these options, remove the 'environment:' tag entirely.\n volumes:\n # Change './actual-data' below to the path to the folder you want Actual to store its data in on your server.\n # '/data' is the path Actual will look for its files in by default, so leave that as-is.\n - ./actual-data:/data\n restart: unless-stopped\n```\n\n```bash\ndocker compose up -d\n```\n\n> 服务默认需要 https 才能访问,如果本地启动没有域名,可以自己在启动服务前生成本地证书,在环境变量中指定证书位置。也可以通过nginx 进行反带 5006 端口。\n\n下面是 nginx 的简单配置可供参考。\n\n```bash\nserver {\n listen 80;\n server_name default_server;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n server_name default_server;\n\n # SSL\n ssl_certificate /etc/nginx/cert/code.crt;\n ssl_certificate_key /etc/nginx/cert/code.key;\n\n\n # logging\n access_log /var/log/nginx/access.log combined buffer=512k flush=1m;\n error_log /var/log/nginx/error.log warn;\n\n location / {\n proxy_pass http://127.0.0.1:5006;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n```\n\n本地证书申请网站 <https://bkssl.com/ssl/selfsign>\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Alacritty Config","description":"","slug":"alacritty-config","date":"2024-11-24T23:51:09+08:00","tags":["alacritty","终端"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Alacritty Config","description":"","slug":"alacritty-config","date":"2024-11-24T23:51:09+08:00","tags":["alacritty","终端"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-24-AlacrittyConfig For Windows.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-24-AlacrittyConfig For Windows.md","fmFileName":"2024-11-24-AlacrittyConfig For Windows.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732463469000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### Windows\n\n```bash\n配置文件路径\nC:\\Users\\Admin\\AppData\\Roaming\\alacritty\\alacritty.toml\n```\n\n```toml\ngeneral.live_config_reload = true\n\ngeneral.import = [\n #\"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-latte.toml\"\n \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-frappe.toml\"\n # \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-macchiato.toml\"\n # \"C:\\\\Users\\\\Admin\\\\AppData\\\\Roaming\\\\alacritty\\\\colour\\\\catppuccin-mocha.toml\"\n]\n\n[env]\nTERM = \"xterm-256color\"\n\n[window]\n\ndimensions = { columns = 150, lines = 30 }\ndecorations = \"Full\"\ndynamic_title = false\ndynamic_padding = false\nopacity = 0.98\npadding = { x = 20, y = 10 }\n\n[font]\nsize = 8.0\n\n[font.bold]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Heavy\"\n\n[font.bold_italic]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Heavy Italic\"\n\n[font.italic]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Medium Italic\"\n\n[font.normal]\nfamily = \"JetBrainsMono Nerd Font\"\nstyle = \"Medium\"\n\n[terminal]\nshell = { program = \"wsl\" }\nosc52 = \"CopyPaste\"\n\n```\n\n### MacOS\n\n```bash\n# 配置文件位置\n/Users/kevin/.config/alacritty/alacritty.toml\n```\n\n```toml\ngeneral.live_config_reload = true\n\ngeneral.import = [\n \"~/.config/alacritty/colour/alacritty/catppuccin-latte.toml\"\n # \"~/.config/alacritty/colour/alacritty/ccatppuccin-frappe.toml\"\n # \"~/.config/alacritty/colour/alacritty/catppuccin-macchiato.toml\"\n # \"~/.config/alacritty/colour/alacritty/catppuccin-mocha.toml\"\n]\n\n[env]\nTERM = \"xterm-256color\"\n\n[window]\n\ndimensions = { columns = 150, lines = 30 }\ndecorations = \"Full\"\ndynamic_title = false\ndynamic_padding = false\nopacity = 0.9\nblur = true\npadding = { x = 20, y = 20 }\n\n[font]\nsize = 14.0\n\n[font.bold]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Heavy\"\n\n[font.bold_italic]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Heavy Italic\"\n\n[font.italic]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Medium Italic\"\n\n[font.normal]\nfamily = \"FiraCode Nerd Font\"\nstyle = \"Medium\"\n```\n\n### 主题仓库\n\nhttps://github.com/catppuccin/alacritty\n\n### 字体\n\nhttps://www.nerdfonts.com/font-downloads","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"服务器常用配置命令","description":"","slug":"linux-conf","date":"2024-11-22T12:46:23+08:00","tags":["linux"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"服务器常用配置命令","description":"","slug":"linux-conf","date":"2024-11-22T12:46:23+08:00","tags":["linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-22-服务器常用配置命令.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-22-服务器常用配置命令.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-22-服务器常用配置命令.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-22-服务器常用配置命令.md","fmFileName":"2024-11-22-服务器常用配置命令.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732250783000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n## 时区配置\n\n在 Linux 系统中,可以通过以下步骤将服务器时区设置为乌兹别克斯坦(时区名称为 **Asia/Tashkent**)。\n\n---\n\n### 方法 1: 使用 `timedatectl` 命令(推荐)\n1. **查看可用时区列表**\n ```bash\n timedatectl list-timezones | grep Tashkent\n ```\n 输出应包含以下内容:\n ```\n Asia/Tashkent\n ```\n\n2. **设置时区为 Asia/Tashkent**\n ```bash\n sudo timedatectl set-timezone Asia/Tashkent\n ```\n\n3. **验证时区是否已更改**\n ```bash\n timedatectl\n ```\n 输出中应显示:\n ```\n Time zone: Asia/Tashkent\n ```\n\n---\n\n### 方法 2: 手动设置时区文件\n1. **创建符号链接到时区文件**\n 将 `/etc/localtime` 链接到 `Asia/Tashkent` 的时区文件:\n ```bash\n sudo ln -sf /usr/share/zoneinfo/Asia/Tashkent /etc/localtime\n ```\n\n2. **验证时区是否已更改**\n 查看当前时间是否匹配乌兹别克斯坦的时间:\n ```bash\n date\n ```\n\n---\n\n### 方法 3: 设置环境变量 `TZ`(针对特定应用)\n如果只需为某些应用设置时区,可以使用环境变量 `TZ`。\n\n1. 编辑配置文件(如 `.bashrc` 或 `/etc/profile`):\n ```bash\n export TZ='Asia/Tashkent'\n ```\n\n2. 重新加载配置:\n ```bash\n source ~/.bashrc\n ```\n\n3. 验证环境变量:\n ```bash\n echo $TZ\n ```\n 应显示 `Asia/Tashkent`。\n\n---\n\n### 注意事项\n- **重启服务**:某些服务可能需要重启以应用新的时区设置:\n ```bash\n sudo systemctl restart some-service\n ```\n- **NTP 同步**:如果启用了时间同步(NTP),确保时间服务正常运行:\n ```bash\n sudo systemctl restart systemd-timesyncd\n ```\n\n完成上述步骤后,您的服务器时区应已成功设置为乌兹别克斯坦时区。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"西方哲学史串讲","description":"","slug":"xi-fang-zhe-xue-shi-chuan-jiang","date":"2024-11-21T10:08:19+08:00","tags":["哲学"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"西方哲学史串讲","description":"","slug":"xi-fang-zhe-xue-shi-chuan-jiang","date":"2024-11-21T10:08:19+08:00","tags":["哲学"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-21-西方哲学史串讲.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-21-西方哲学史串讲.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-21-西方哲学史串讲.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-21-西方哲学史串讲.md","fmFileName":"2024-11-21-西方哲学史串讲.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1732154899000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 泰勒斯\n\n西方哲学起源于泰勒斯。在泰勒斯之前,西方世界的人们对于世界的认识主要来源于神话,用神话来诠释世界的生灭变幻。根据留下的典籍,泰勒斯是第一个将世界本原指向非神话世界的自然界。他说:“水是万物的本原”。根据这句话我们可以推导出,泰勒斯不再通过神话来解释这个世界,而是从自然界选择一个可感物质来解释世界的生灭变幻。这种思考或许是出于当时泰勒斯生活的环境。\n\n### 阿那克西曼德\n\n哲学问题的提出一定是当前哲学已经无法解释一些问题而产生。就像泰勒斯的学生阿纳克西曼德,他沿着泰勒斯从自然寻找本原的路线发现:水是一种可感单一的物质,无法用水来解释世界万物的多种性质,本原也不该归结于某一种具体物质。他把本原规定为“无定”,即无规定性或无限定。与可感的水相比,“无定”是不可感的,只能靠理性把握。除此,阿纳克西曼德还解释了世界是如何运动的,他认为“无定”虽然没有任何规定性,但其内部却包含了冷和热、干与湿等对立条件。由于永恒的运动,这些对立物从“无定”中分离,形成了世界万物。阿纳克西曼德独具一格地提出了一种补偿原则,他认为一些事物的生成必然伴随另外一些事物的消亡。\n\n### 阿那克西美尼\n\n针对阿那克西曼德提出的“无定”本原,阿那克西美尼认为“无定”只能是本原的某一种性质,他不满足于此。他认为世界的本原是“气”,世界万物由气的疏散与凝聚而生成。如,气蒸发转换成火,凝聚变成风...在这里,可以看到他与阿纳克西曼德在运动观上的明显区别。阿那克西曼德是典型的分离生成观,而阿那克西美尼是转换生成观。\n\n>以上三位哲学家又称为米利都三杰,他们的哲学观点都是简单朴素的。但是他们在近乎猜想的前提下将世界从神话拉回到自然中,体现了最根本性的思想变革。他们坚持用自然本身来说明自然万物的生成yu存在,并试图在千变万化的现象中寻求一种不变的东西——即本原。\n\n### 赫拉克利特\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"cf-worker-proxy-docker-hub","description":"","slug":"cf-worker-proxy-docker-hub","date":"2024-11-18T12:54:45+08:00","tags":["docker"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"cf-worker-proxy-docker-hub","description":"","slug":"cf-worker-proxy-docker-hub","date":"2024-11-18T12:54:45+08:00","tags":["docker"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-18-cf-worker-proxy-docker-hub.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-18-cf-worker-proxy-docker-hub.md","fmFileName":"2024-11-18-cf-worker-proxy-docker-hub.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731905685000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n在 cloud flare 新建 worker, 下面自定义工作服务器地址替换为自己的域名。\n\n```js\n// _worker.js\n\n // Docker镜像仓库主机地址\n let hub_host = 'registry-1.docker.io';\n // Docker认证服务器地址\n const auth_url = 'https://auth.docker.io';\n // 自定义的工作服务器地址\n let workers_url = 'https://docker.xxxx.cc/';\n\n let 屏蔽爬虫UA = ['netcraft'];\n\n // 根据主机名选择对应的上游地址\n function routeByHosts(host) {\n // 定义路由表\n const routes = {\n // 生产环境\n \"quay\": \"quay.io\",\n \"gcr\": \"gcr.io\",\n \"k8s-gcr\": \"k8s.gcr.io\",\n \"k8s\": \"registry.k8s.io\",\n \"ghcr\": \"ghcr.io\",\n \"cloudsmith\": \"docker.cloudsmith.io\",\n \"nvcr\": \"nvcr.io\",\n\n // 测试环境\n \"test\": \"registry-1.docker.io\",\n };\n\n if (host in routes) return [ routes[host], false ];\n else return [ hub_host, true ];\n }\n\n /** @type {RequestInit} */\n const PREFLIGHT_INIT = {\n // 预检请求配置\n headers: new Headers({\n 'access-control-allow-origin': '*', // 允许所有来源\n 'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', // 允许的HTTP方法\n 'access-control-max-age': '1728000', // 预检请求的缓存时间\n }),\n }\n\n /**\n * 构造响应\n * @param {any} body 响应体\n * @param {number} status 响应状态码\n * @param {Object<string, string>} headers 响应头\n */\n function makeRes(body, status = 200, headers = {}) {\n headers['access-control-allow-origin'] = '*' // 允许所有来源\n return new Response(body, { status, headers }) // 返回新构造的响应\n }\n\n /**\n * 构造新的URL对象\n * @param {string} urlStr URL字符串\n */\n function newUrl(urlStr) {\n try {\n return new URL(urlStr) // 尝试构造新的URL对象\n } catch (err) {\n return null // 构造失败返回null\n }\n }\n\n function isUUID(uuid) {\n // 定义一个正则表达式来匹配 UUID 格式\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n // 使用正则表达式测试 UUID 字符串\n return uuidRegex.test(uuid);\n }\n\n async function nginx() {\n const text = `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Welcome to nginx!</title>\n <style>\n body {\n width: 35em;\n margin: 0 auto;\n font-family: Tahoma, Verdana, Arial, sans-serif;\n }\n </style>\n </head>\n <body>\n <h1>Welcome to nginx!</h1>\n <p>If you see this page, the nginx web server is successfully installed and\n working. Further configuration is required.</p>\n\n <p>For online documentation and support please refer to\n <a href=\"http://nginx.org/\">nginx.org</a>.<br/>\n Commercial support is available at\n <a href=\"http://nginx.com/\">nginx.com</a>.</p>\n\n <p><em>Thank you for using nginx.</em></p>\n </body>\n </html>\n `\n return text;\n }\n\n async function searchInterface() {\n const text = `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Docker Hub Search</title>\n <style>\n body {\n font-family: Arial, sans-serif;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100vh;\n margin: 0;\n background: linear-gradient(to right, rgb(28, 143, 237), rgb(29, 99, 237));\n }\n .logo {\n margin-bottom: 20px;\n }\n .search-container {\n display: flex;\n align-items: center;\n }\n #search-input {\n padding: 10px;\n font-size: 16px;\n border: 1px solid #ddd;\n border-radius: 4px;\n width: 300px;\n margin-right: 10px;\n }\n #search-button {\n padding: 10px;\n background-color: rgba(255, 255, 255, 0.2); /* 设置白色,透明度为10% */\n border: none;\n border-radius: 4px;\n cursor: pointer;\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\t\t\t\n #search-button svg {\n width: 24px;\n height: 24px;\n }\n </style>\n </head>\n <body>\n <div class=\"logo\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\" fill=\"#ffffff\" width=\"100\" height=\"75\">\n <path d=\"M23.763 6.886c-.065-.053-.673-.512-1.954-.512-.32 0-.659.03-1.01.087-.248-1.703-1.651-2.533-1.716-2.57l-.345-.2-.227.328a4.596 4.596 0 0 0-.611 1.433c-.23.972-.09 1.884.403 2.666-.596.331-1.546.418-1.744.42H.752a.753.753 0 0 0-.75.749c-.007 1.456.233 2.864.692 4.07.545 1.43 1.355 2.483 2.409 3.13 1.181.725 3.104 1.14 5.276 1.14 1.016 0 2.03-.092 2.93-.266 1.417-.273 2.705-.742 3.826-1.391a10.497 10.497 0 0 0 2.61-2.14c1.252-1.42 1.998-3.005 2.553-4.408.075.003.148.005.221.005 1.371 0 2.215-.55 2.68-1.01.505-.5.685-.998.704-1.053L24 7.076l-.237-.19Z\"></path>\n <path d=\"M2.216 8.075h2.119a.186.186 0 0 0 .185-.186V6a.186.186 0 0 0-.185-.186H2.216A.186.186 0 0 0 2.031 6v1.89c0 .103.083.186.185.186Zm2.92 0h2.118a.185.185 0 0 0 .185-.186V6a.185.185 0 0 0-.185-.186H5.136A.185.185 0 0 0 4.95 6v1.89c0 .103.083.186.186.186Zm2.964 0h2.118a.186.186 0 0 0 .185-.186V6a.186.186 0 0 0-.185-.186H8.1A.185.185 0 0 0 7.914 6v1.89c0 .103.083.186.186.186Zm2.928 0h2.119a.185.185 0 0 0 .185-.186V6a.185.185 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm-5.892-2.72h2.118a.185.185 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186H5.136a.186.186 0 0 0-.186.186v1.89c0 .103.083.186.186.186Zm2.964 0h2.118a.186.186 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186H8.1a.186.186 0 0 0-.186.186v1.89c0 .103.083.186.186.186Zm2.928 0h2.119a.185.185 0 0 0 .185-.186V3.28a.186.186 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm0-2.72h2.119a.186.186 0 0 0 .185-.186V.56a.185.185 0 0 0-.185-.186h-2.119a.186.186 0 0 0-.185.186v1.89c0 .103.083.186.185.186Zm2.955 5.44h2.118a.185.185 0 0 0 .186-.186V6a.185.185 0 0 0-.186-.186h-2.118a.185.185 0 0 0-.185.186v1.89c0 .103.083.186.185.186Z\"></path>\n </svg>\n </div>\n <div class=\"search-container\">\n <input type=\"text\" id=\"search-input\" placeholder=\"Search Docker Hub\">\n <button id=\"search-button\">\n <svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21 21L16.65 16.65M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z\" stroke=\"white\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n </div>\n <script>\n function performSearch() {\n const query = document.getElementById('search-input').value;\n if (query) {\n window.location.href = '/search?q=' + encodeURIComponent(query);\n }\n }\n\n document.getElementById('search-button').addEventListener('click', performSearch);\n document.getElementById('search-input').addEventListener('keypress', function(event) {\n if (event.key === 'Enter') {\n performSearch();\n }\n });\n </script>\n </body>\n </html>\n `;\n return text;\n }\n\n export default {\n async fetch(request, env, ctx) {\n const getReqHeader = (key) => request.headers.get(key); // 获取请求头\n\n let url = new URL(request.url); // 解析请求URL\n const userAgentHeader = request.headers.get('User-Agent');\n const userAgent = userAgentHeader ? userAgentHeader.toLowerCase() : \"null\";\n if (env.UA) 屏蔽爬虫UA = 屏蔽爬虫UA.concat(await ADD(env.UA));\n workers_url = `https://${url.hostname}`;\n const pathname = url.pathname;\n\n // 获取请求参数中的 ns\n const ns = url.searchParams.get('ns'); \n const hostname = url.searchParams.get('hubhost') || url.hostname;\n const hostTop = hostname.split('.')[0]; // 获取主机名的第一部分\n\n let checkHost; // 在这里定义 checkHost 变量\n // 如果存在 ns 参数,优先使用它来确定 hub_host\n if (ns) {\n if (ns === 'docker.io') {\n hub_host = 'registry-1.docker.io'; // 设置上游地址为 registry-1.docker.io\n } else {\n hub_host = ns; // 直接使用 ns 作为 hub_host\n }\n } else {\n checkHost = routeByHosts(hostTop);\n hub_host = checkHost[0]; // 获取上游地址\n }\n\n const fakePage = checkHost ? checkHost[1] : false; // 确保 fakePage 不为 undefined\n console.log(`域名头部: ${hostTop}\\n反代地址: ${hub_host}\\n伪装首页: ${fakePage}`);\n const isUuid = isUUID(pathname.split('/')[1].split('/')[0]);\n\n if (屏蔽爬虫UA.some(fxxk => userAgent.includes(fxxk)) && 屏蔽爬虫UA.length > 0) {\n // 首页改成一个nginx伪装页\n return new Response(await nginx(), {\n headers: {\n 'Content-Type': 'text/html; charset=UTF-8',\n },\n });\n }\n\n const conditions = [\n isUuid,\n pathname.includes('/_'),\n pathname.includes('/r/'),\n pathname.includes('/v2/user'),\n pathname.includes('/v2/orgs'),\n pathname.includes('/v2/_catalog'),\n pathname.includes('/v2/categories'),\n pathname.includes('/v2/feature-flags'),\n pathname.includes('search'),\n pathname.includes('source'),\n pathname === '/',\n pathname === '/favicon.ico',\n pathname === '/auth/profile',\n ];\n\n if (conditions.some(condition => condition) && (fakePage === true || hostTop == 'docker')) {\n if (env.URL302) {\n return Response.redirect(env.URL302, 302);\n } else if (env.URL) {\n if (env.URL.toLowerCase() == 'nginx') {\n //首页改成一个nginx伪装页\n return new Response(await nginx(), {\n headers: {\n 'Content-Type': 'text/html; charset=UTF-8',\n },\n });\n } else return fetch(new Request(env.URL, request));\n } else if (url.pathname == '/'){\n return new Response(await searchInterface(), {\n headers: {\n 'Content-Type': 'text/html; charset=UTF-8',\n },\n });\n }\n\n const newUrl = new URL(\"https://registry.hub.docker.com\" + pathname + url.search);\n\n // 复制原始请求的标头\n const headers = new Headers(request.headers);\n\n // 确保 Host 头部被替换为 hub.docker.com\n headers.set('Host', 'registry.hub.docker.com');\n\n const newRequest = new Request(newUrl, {\n method: request.method,\n headers: headers,\n body: request.method !== 'GET' && request.method !== 'HEAD' ? await request.blob() : null,\n redirect: 'follow'\n });\n\n return fetch(newRequest);\n }\n\n // 修改包含 %2F 和 %3A 的请求\n if (!/%2F/.test(url.search) && /%3A/.test(url.toString())) {\n let modifiedUrl = url.toString().replace(/%3A(?=.*?&)/, '%3Alibrary%2F');\n url = new URL(modifiedUrl);\n console.log(`handle_url: ${url}`);\n }\n\n // 处理token请求\n if (url.pathname.includes('/token')) {\n let token_parameter = {\n headers: {\n 'Host': 'auth.docker.io',\n 'User-Agent': getReqHeader(\"User-Agent\"),\n 'Accept': getReqHeader(\"Accept\"),\n 'Accept-Language': getReqHeader(\"Accept-Language\"),\n 'Accept-Encoding': getReqHeader(\"Accept-Encoding\"),\n 'Connection': 'keep-alive',\n 'Cache-Control': 'max-age=0'\n }\n };\n let token_url = auth_url + url.pathname + url.search;\n return fetch(new Request(token_url, request), token_parameter);\n }\n\n // 修改 /v2/ 请求路径\n if ( hub_host == 'registry-1.docker.io' && /^\\/v2\\/[^/]+\\/[^/]+\\/[^/]+$/.test(url.pathname) && !/^\\/v2\\/library/.test(url.pathname)) {\n //url.pathname = url.pathname.replace(/\\/v2\\//, '/v2/library/');\n url.pathname = '/v2/library/' + url.pathname.split('/v2/')[1];\n console.log(`modified_url: ${url.pathname}`);\n }\n\n // 更改请求的主机名\n url.hostname = hub_host;\n\n // 构造请求参数\n let parameter = {\n headers: {\n 'Host': hub_host,\n 'User-Agent': getReqHeader(\"User-Agent\"),\n 'Accept': getReqHeader(\"Accept\"),\n 'Accept-Language': getReqHeader(\"Accept-Language\"),\n 'Accept-Encoding': getReqHeader(\"Accept-Encoding\"),\n 'Connection': 'keep-alive',\n 'Cache-Control': 'max-age=0'\n },\n cacheTtl: 3600 // 缓存时间\n };\n\n // 添加Authorization头\n if (request.headers.has(\"Authorization\")) {\n parameter.headers.Authorization = getReqHeader(\"Authorization\");\n }\n\n // 发起请求并处理响应\n let original_response = await fetch(new Request(url, request), parameter);\n let original_response_clone = original_response.clone();\n let original_text = original_response_clone.body;\n let response_headers = original_response.headers;\n let new_response_headers = new Headers(response_headers);\n let status = original_response.status;\n\n // 修改 Www-Authenticate 头\n if (new_response_headers.get(\"Www-Authenticate\")) {\n let auth = new_response_headers.get(\"Www-Authenticate\");\n let re = new RegExp(auth_url, 'g');\n new_response_headers.set(\"Www-Authenticate\", response_headers.get(\"Www-Authenticate\").replace(re, workers_url));\n }\n\n // 处理重定向\n if (new_response_headers.get(\"Location\")) {\n return httpHandler(request, new_response_headers.get(\"Location\"));\n }\n\n // 返回修改后的响应\n let response = new Response(original_text, {\n status,\n headers: new_response_headers\n });\n return response;\n }\n };\n\n /**\n * 处理HTTP请求\n * @param {Request} req 请求对象\n * @param {string} pathname 请求路径\n */\n function httpHandler(req, pathname) {\n const reqHdrRaw = req.headers;\n\n // 处理预检请求\n if (req.method === 'OPTIONS' &&\n reqHdrRaw.has('access-control-request-headers')\n ) {\n return new Response(null, PREFLIGHT_INIT);\n }\n\n let rawLen = '';\n\n const reqHdrNew = new Headers(reqHdrRaw);\n\n const refer = reqHdrNew.get('referer');\n\n let urlStr = pathname;\n\n const urlObj = newUrl(urlStr);\n\n /** @type {RequestInit} */\n const reqInit = {\n method: req.method,\n headers: reqHdrNew,\n redirect: 'follow',\n body: req.body\n };\n return proxy(urlObj, reqInit, rawLen);\n }\n\n /**\n * 代理请求\n * @param {URL} urlObj URL对象\n * @param {RequestInit} reqInit 请求初始化对象\n * @param {string} rawLen 原始长度\n */\n async function proxy(urlObj, reqInit, rawLen) {\n const res = await fetch(urlObj.href, reqInit);\n const resHdrOld = res.headers;\n const resHdrNew = new Headers(resHdrOld);\n\n // 验证长度\n if (rawLen) {\n const newLen = resHdrOld.get('content-length') || '';\n const badLen = (rawLen !== newLen);\n\n if (badLen) {\n return makeRes(res.body, 400, {\n '--error': `bad len: ${newLen}, except: ${rawLen}`,\n 'access-control-expose-headers': '--error',\n });\n }\n }\n const status = res.status;\n resHdrNew.set('access-control-expose-headers', '*');\n resHdrNew.set('access-control-allow-origin', '*');\n resHdrNew.set('Cache-Control', 'max-age=1500');\n\n // 删除不必要的头\n resHdrNew.delete('content-security-policy');\n resHdrNew.delete('content-security-policy-report-only');\n resHdrNew.delete('clear-site-data');\n\n return new Response(res.body, {\n status,\n headers: resHdrNew\n });\n }\n\n async function ADD(envadd) {\n var addtext = envadd.replace(/[\t |\"'\\r\\n]+/g, ',').replace(/,+/g, ',');\t// 将空格、双引号、单引号和换行符替换为逗号\n if (addtext.charAt(0) == ',') addtext = addtext.slice(1);\n if (addtext.charAt(addtext.length - 1) == ',') addtext = addtext.slice(0, addtext.length - 1);\n const add = addtext.split(',');\n return add;\n }\n ```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"python operation s3","description":"","slug":"python-operation-s3","date":"2024-11-15T13:04:50+08:00","tags":["s3","python"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"python operation s3","description":"","slug":"python-operation-s3","date":"2024-11-15T13:04:50+08:00","tags":["s3","python"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-15-python operation s3.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-15-python operation s3.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-15-python operation s3.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-15-python operation s3.md","fmFileName":"2024-11-15-python operation s3.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731647090000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n配置访问凭证\n\n```bash\n~/.aws/credentials\n\n[default]\naws_access_key_id = AKIATXBI6Zxxxxx\naws_secret_access_key = bh4Z5Xq9cM/U/7XZxxxx\n```\n\n`pip install boto3`\n\n```python\nimport boto3\n\nbucket_name = 'prd-uz'\nfile_path = 'test.md'\ns3_key = 'test.md' #上传到 S3 的根目录\n\n# 创建 S3 客户端\ns3 = boto3.client('s3',region_name='me-central-1')\n\n# 上传文件\ns3.upload_file(file_path, bucket_name, s3_key)\nprint(\"File uploaded successfully.\")\n\n\n# 生成预签名 URL\nurl = s3.generate_presigned_url(\n 'get_object',\n Params={'Bucket': bucket_name, 'Key': s3_key},\n ExpiresIn=3600\n)\nprint(\"Presigned URL:\", url)\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"AWS-技术指北","description":"","slug":"aws-ji-zhu-zhi-bei","date":"2024-11-15T16:49:42+08:00","tags":["aws","s3"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"AWS-技术指北","description":"","slug":"aws-ji-zhu-zhi-bei","date":"2024-11-15T16:49:42+08:00","tags":["aws","s3"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-15-AWS技术之北.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-15-AWS技术之北.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-15-AWS技术之北.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-15-AWS技术之北.md","fmFileName":"2024-11-15-AWS技术之北.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731660582000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### S3 最佳实践\n\n```bash\n1. 在 ~/.aws/credentials 配置文件中添加密钥\n\n[default]\naws_access_key_id = YOUR_ACCESS_KEY\naws_secret_access_key = YOUR_SECRET_KEY\n\n2. 使用环境变量设置凭证\n\nlinux\n\nexport AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\nexport AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\n\nwindows\n\nset AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\nset AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\n\n3. 基于 IAM\n\n如果代码在 AWS EC2 实例上运行,可以使用 IAM 角色分配访问权限。在这种情况下,boto3 会自动获取 IAM 角色分配的临时凭证,无需手动配置密钥。\n\nawsLinux 默认安装 aws-cli\n\naws configure\n\nAWS Access Key ID [None]: AKIATXBI6ZJCYEQxxxxxx\nAWS Secret Access Key [None]: bh4Z5Xq9cM/U/7XZ5/Dkwqidxxxxxxx\nDefault region name [None]: me-central-1\nDefault output format [None]: json\naws sts get-caller-identity\n{\n \"UserId\": \"AIDATXBI6ZJCSxxxxx\",\n \"Account\": \"25563xxxx8053\",\n \"Arn\": \"arn:aws:iam::2xxx458053:user/prd-uz-s3user\"\n}\n```\n\n### AWS CLI 安装\n\n可以通过 aws-cli 在指定的机器上配置 IAM 凭证\n\n```bash\nwindows 直接官网下载对应平台的安装包\n\nAWS CLI MSI适用于 Windows 的安装程序(64 位):https://s3.amazonaws.com/aws-cli/AWSCLI64PY3.msi\n\nAWS CLI 适用于 Windows 的组合安装文件: https://s3.amazonaws.com/aws-cli/AWSCLISetup.exe\n\nlinux 可以通过 pip 安装\n\npip3 install awscli --upgrade --user\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"MySQL-5.7-主从同步配置","description":"","slug":"mysql-5-7-zhu-cong-tong-bu-pei-zhi","date":"2024-11-13T17:44:18+08:00","tags":["mysql","aws"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"MySQL-5.7-主从同步配置","description":"","slug":"mysql-5-7-zhu-cong-tong-bu-pei-zhi","date":"2024-11-13T17:44:18+08:00","tags":["mysql","aws"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-13-MySQL-5.7-主从同步配置.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-13-MySQL-5.7-主从同步配置.md","fmFileName":"2024-11-13-MySQL-5.7-主从同步配置.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731491058000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### MySQL 安装\n\n>主从同步操作,版本为 5.7.44\n\n```bash\nyum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\nyum list installed | grep mysql\nyum repolist all | grep -E \"mysql[0-9]+-community/x86\"\nyum-config-manager --disable mysql80-community\nyum-config-manager --enable mysql57-community\nrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022\nyum install -y mysql-community-server\nsystemctl start mysqld\nsystemctl status mysqld.service\ngrep 'temporary password' /var/log/mysqld.log\n```\n\n### 修改配置文件\n\n主库配置文件\n\n```bash\nvim /etc/my.cnf\n\n[mysqld]\n\nlog-bin=master-bin\nbinlog-format=ROW\nserver-id=1\n```\n\n从库配置文件\n\n```bash\nvim /etc/my.cnf\n\n[mysqld]\n\nlog-bin=master-bin\nbinlog-format=ROW\nserver-id=2\nread-only = 1\n```\n### 修改默认密码\n\n```bash\nmysql -uroot -p\nalter user 'root'@'localhost' identified by 'anyWhere@2024'\nflush privileges;\n```\n\n>重启 MySQL\n\n### 新建同步用户\n\n```bash\ncreate user 'tongbu'@'172.31.%' identified by 'anyWhere@2024';\ngrant replication slave on *.* to 'tongbu'@'172.31.%';\n```\n\n### 准备同步\n\n> 如果不是新建的库,需要在同步前将主库数据导入从库。\n\n\n#### 在主库上执行以下命令导出数据库\n\n```bash\nmysqldump -uroot -p --all-databases --master-data > db_backup.sql\n```\n\n#### 在从库上将 db_backup.sql 文件导入\n\n```bash\nmysql -uroot -p < db_backup.sql\n```\n\n### 配置主库连接信息\n\n```bash\nchange master to master_host='172.31.12.203',master_user='tongbu',master_password='anyWhere@2024',master_log_file='master-bin.000001', master_log_pos=613;\n\n# 在主库SHOW MASTER STATUS获取的File值\n# 在主库SHOW MASTER STATUS获取的Position值\n```\n\n### 启动主从同步\n\n```bash\nSTART SLAVE;\n```\n\n### 可选操作——启用半同步复制\n\n在主库上启用\n\n```sql\nSET GLOBAL rpl_semi_sync_master_enabled = 1;\n```\n\n在从库上启用\n\n```sql\nSET GLOBAL rpl_semi_sync_slave_enabled = 1;\n```\n\n### 检查复制状态\n\n```sql\nSHOW SLAVE STATUS\\G;\n```\n\n确认以下两个状态为 Yes\n\n- Slave_IO_Running: Yes\n- Slave_SQL_Running: Yes","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"歌者文明早期的文艺作品(古歌谣)","description":"","slug":"ge-zhe-wen-ming-song","date":"2024-11-11T23:52:04+08:00","tags":["三体"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"歌者文明早期的文艺作品(古歌谣)","description":"","slug":"ge-zhe-wen-ming-song","date":"2024-11-11T23:52:04+08:00","tags":["三体"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmFileName":"2024-11-11-歌者文明早期的文艺作品(古歌谣).md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731340324000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n我看到了我的爱恋\n\n我飞到她的身边\n\n我捧出给她的礼物\n\n那是一小块凝固的时间\n\n时间上有美丽的条纹\n\n摸起来像浅海的泥一样柔软\n\n她把时间涂满全身\n\n然后拉起我飞向存在的边缘\n\n这是灵态的飞行\n\n我们眼中的星星像幽灵\n\n星星眼中的我们也像幽灵\n\n——刘慈欣《三体》\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"与好友同游南京","description":"","slug":"yu-hao-you-tong-you-nan-jing","date":"2024-11-10T17:53:21+08:00","tags":["栖霞山","中山陵"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"与好友同游南京","description":"","slug":"yu-hao-you-tong-you-nan-jing","date":"2024-11-10T17:53:21+08:00","tags":["栖霞山","中山陵"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-10-与好友同游南京.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-10-与好友同游南京.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-10-与好友同游南京.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-10-与好友同游南京.md","fmFileName":"2024-11-10-与好友同游南京.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1731232401000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n听说栖霞山的枫叶红了,上海的三位老友想要我带他们去看一看,利用休息日就带他们先后游玩了中山陵 >> 栖霞山 >> 老门东 >> 玄武湖。\n\n![老友](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101831699.jpeg)\n\n###### 老友合影\n\n![邮政](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101800270.jpeg)\n\n###### 中国邮政\n\n![气势磅礴的陵墓](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101803686.jpeg)\n\n###### 气势磅礴的中山陵\n\n![栖霞山的枫叶](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101804793.jpeg)\n\n###### 栖霞山的枫叶(一)\n\n![栖霞山的枫叶](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101805202.jpeg)\n\n###### 栖霞山的枫叶(二)\n\n![大肉面中的天花板](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101806762.jpeg)\n\n###### 大肉面中的天花板\n\n![紫峰大厦](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411101807336.jpeg)\n\n###### 紫峰大厦\n\n栖霞山的枫叶要等到 11 月下旬才会变成红色,这次我们没能赶上最美的时间,稍微有一点遗憾。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"不知道自己想要什么","description":"","slug":"bu-zhi-dao-zi-ji-xiang-yao-shen-me","date":"2024-11-07T00:18:08+08:00","tags":["随笔"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"不知道自己想要什么","description":"","slug":"bu-zhi-dao-zi-ji-xiang-yao-shen-me","date":"2024-11-07T00:18:08+08:00","tags":["随笔"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-07-不知道自己想要什么.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-07-不知道自己想要什么.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-07-不知道自己想要什么.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-07-不知道自己想要什么.md","fmFileName":"2024-11-07-不知道自己想要什么.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730909888000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n不知道自己想要什么。\n\n房子、车子、婚姻似乎于我而言都是可有可无的东西。\n\n租房子除了搬家不便,换来的是想住哪里就住哪里的自由。\n\n打工人的通勤全靠公共交通,没有车子倒也少了停车的烦恼。\n\n婚姻也并非人们的自由选择。\n\n从本质上看,婚姻只是双方的一种特定的社会盟约,无关爱情。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"为了方便发布文章,我写了两个脚本","description":"","slug":"wei-liao-fang-bian-fa-bu-wen-zhang-wo-xie-liao-liang-ge-jiao-ben","date":"2024-11-05T21:51:22+08:00","draft":false,"tags":["python","shell"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"为了方便发布文章,我写了两个脚本","description":"","slug":"wei-liao-fang-bian-fa-bu-wen-zhang-wo-xie-liao-liang-ge-jiao-ben","date":"2024-11-05T21:51:22+08:00","draft":false,"tags":["python","shell"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-05-为了方便发布文章,我写了两个脚本.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-05-为了方便发布文章,我写了两个脚本.md","fmFileName":"2024-11-05-为了方便发布文章,我写了两个脚本.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730814682000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n用了 hugo 一段时间后,感觉每次新建文章都有些不顺手。程序自身的自带的 hugo new 命令创建的文章并不能实现自定义 slug, 于是用 `python-slugify` 库实现了自己的需求。\n\n### 新建文章脚本\n\n> 记得安装库 pip3 install python-slugify\n\n```python\nimport os\nimport datetime\nfrom slugify import slugify\nfrom datetime import timezone, timedelta\n\ndef generate_slug(title):\n # 将标题转换为slug\n slug = slugify(title)\n return slug\n\ndef create_hugo_article(title, content_dir='content'):\n # 获取当前日期和时间,并设置为北京时间(东八区)\n now = datetime.datetime.now(timezone(timedelta(hours=8)))\n date_str = now.strftime(\"%Y-%m-%dT%H:%M:%S%z\") # 输出带时区的时间格式\n \n # 处理时区格式,将 \"+0800\" 转换为 \"+08:00\"\n date_str = date_str[:-2] + \":\" + date_str[-2:]\n \n # 生成 slug\n slug = generate_slug(title)\n \n # 定义文章文件名\n filename = f\"{now.strftime('%Y-%m-%d')}-{title}.md\"\n \n # 定义 Front Matter 模板,添加 slug 字段\n front_matter = f\"\"\"---\ntitle: \"{title}\"\nslug: \"{slug}\"\ndate: {date_str}\ntags: []\n---\n\n\"\"\"\n \n # 获取文件路径\n file_path = os.path.join(content_dir, filename)\n \n # 创建目标文件夹(如果不存在)\n os.makedirs(content_dir, exist_ok=True)\n \n # 写入 Front Matter 和模板内容\n with open(file_path, 'w', encoding='utf-8') as f:\n f.write(front_matter)\n f.write(\"# 文章内容\\n\\n\")\n f.write(\"这里是文章的正文内容。可以开始写作了。\\n\")\n \n print(f\"文章模板已创建:{file_path}\")\n\n# 调用函数创建文章\nif __name__ == \"__main__\":\n title = input(\"请输入文章标题: \") # 用户输入标题\n create_hugo_article(title)\n```\n\n新建文章命令:`python3 create_post.py`\n\n### 发布文章脚本\n\n```shell\n#!/bin/bash\n\n# 开启代理,如果需要\nexport http_proxy=\"http://127.0.0.1:7897\"\nexport https_proxy=\"http://127.0.0.1:7897\"\n\n# 进入 Hugo 项目的目录\ncd /Users/kevin/Documents/github/blog\n\n# 查看当前 Git 状态\necho \"查看当前 Git 状态...\"\ngit status\n\n# 提示用户是否提交\nread -p \"是否提交本次更改?(y/n): \" confirm\n\n# 如果用户输入 y,则继续提交,否则退出脚本\nif [[ \"$confirm\" == \"y\" || \"$confirm\" == \"Y\" ]]; then\n echo \"添加更改...\"\n git add .\n\n echo \"提交更改...\"\n git commit -m \"update\"\n\n echo \"推送更改...\"\n git push\n\n echo \"发布完成!\"\nelse\n echo \"操作已取消,未提交更改。\"\nfi\n```\n\n发布文章命令:`sh deploy.sh`\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"\"又论”我们是否应该把婚姻当成任务来完成","description":"","slug":"hun-yin","date":"2024-11-05","tags":["婚姻观"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"\"又论”我们是否应该把婚姻当成任务来完成","description":"","slug":"hun-yin","date":"2024-11-05","tags":["婚姻观"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmFileName":"2024-11-05-“又论”我们是否应该把婚姻当成任务来完成.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730736000000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n有些朋友可能会好奇,为什么标题叫“又论”我们是否应该把婚姻当成任务来完成。翻看博客,似乎之前从未讨论过这个话题,何谈“又”?当然这个又不是指我个人,而是作为普遍的“人”。这个话题,从进入现代社会起就没完没了地被探讨着。它既是人类根本问题,也是关于婚姻最普遍的问题。\n\n我在前天刚过了三十岁的生日,在“而立之年”,婚姻似乎是我一个逃避不了的话题,虽然这个问题已经逃避了好些年年,眼下是应该直面这个问题了。还在我二十多岁的年纪,每每家人要托人给我介绍相亲对象的时候,我都会“炸毛”般抗拒,这种抗拒是没来由的。我不知道自己为何会如此抗拒结婚,在以后的某个夜晚我也曾思考这种抗拒心理的源头来自哪里。也许是父母不幸的婚姻潜移默化地影响了我,或是从父母口中听到了太多“某某婚后不久就离婚”的故事,抑或是性格使然。\n\n然而,人终究是会随着年龄的增长而改变,彼时的心境与此时的心境似乎已经不在一样。也正因此,今天才会再思考“我们是否应该把婚姻当成任务完成”这个话题。以前,我对这个问题的回答是否定的,婚姻的最终目的不过是为了繁衍,因此付出的代价就是将自己与另外一个人进行捆绑。为了繁衍,我们会增加很多额外的金钱成本和精力成本。进入婚姻意味着你自己不在是你自己,也不在只是为了自己而活。你需要考虑如何经营这个家庭才会使家庭生活的更好,因此你又不得不牺牲一些东西,像闲暇、金钱、爱好等一系列自己想要追求的东西。我们付出那么多,最终得到是一段不可靠的婚姻关系,这段关系可能随时都会因为生活中的争吵、背叛、柴米油盐的琐事而中断。这其中还有没有提到的养育孩子的一系列问题。\n\n总之,在某一时刻之前我确实是这么看待婚姻的。我对婚姻是一个悲观主义,不相信自己能把婚姻经营好。在某一刻之后,我对婚姻的想法似乎又慢慢的转变了,当我再谈到婚姻似乎不在那么抗拒,这种改变在不经意间。时间会让你慢慢的去接受一些自己曾经接受不了的东西,丢掉一些自己曾经捍卫的东西。我不知道这究竟是时间改变了自己,还是人类基因延续的使命在作怪。我开始和曾经讨厌的人变得越来越像,我开始着手准备在各个社交平台发布交友信息,开始考虑给自己先付个首付买个房子。那个曾经信誓旦旦说死也不做房奴的他渐渐的消失在了记忆里。取而代之的是那个终究无法逃避命运的“俄狄浦斯”。\n\n回到标题。我们大多数人都逃离不了婚姻,即使再不想结婚的人最后都会走完人生的基本“流程”——结婚、生子、死去。我们常认为婚姻与否是个人的选择,但这更多是一个响亮的口号。现实中,迫于这个社会的压力、父母的期望、亲戚的言语,你都不得不选择进入婚姻,即使百般不愿。更不要忘记还有时间这个东西,它会在毫无察觉间改变你的思想。\n\n既然必须要结婚,那我就要把它当成一项任务来完成。但我不能把婚姻这项任务当成一项普通的任务,我应该高质量地完成。我们可以把婚姻当成任务,但是又要明白婚姻的本质又不只是任务,而是基于彼此的爱、理解、和共同进步。若单纯把婚姻当成任务,那么很容易将其视为一个短期阶段性的目标去完成。\n\n或许,应该尝试将婚姻从完成任务向着如何体验这个过程转变,或许从“任务”心态转向“体验”心态,才可以更从婚姻的关系中体验到美好,也能更珍惜彼此。\n\n写到这里已经凌晨了。尽管写了这么多,但自己对婚姻依然充满迷茫,不知道自己是否能够经营好。希望自己能尽力,以高质量去完成这项艰难的任务。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"南京的秋天","description":"","slug":"nan-jing-de-qiu-tian","date":"2024-11-03","tags":["玄武湖","南京"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"南京的秋天","description":"","slug":"nan-jing-de-qiu-tian","date":"2024-11-03","tags":["玄武湖","南京"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-11-03-南京的秋天.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-11-03-南京的秋天.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-11-03-南京的秋天.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-11-03-南京的秋天.md","fmFileName":"2024-11-03-南京的秋天.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730563200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n在南京生活了几年,秋天的南京给我的印象如十八岁的少女——美丽且易逝。\n\n今天也是一个普通的周末,光从阳台就感觉到今天是一个很好天气,实在是忍不住不出门看看秋天的南京。要说秋天南京哪里最美,我倒也能说个二三,像栖霞山的枫叶,钟山陵的梧桐大道,明孝陵的石象路,朝天宫的古建筑等都在秋天有着不一样的美。我今天倒没有选择上面的景点,而是去了玄武湖。\n\n在玄武湖散散步,看看湖面划船的游客,再看看湖边垂下的杨柳,不由得感叹,打工人是最苦逼的,平时压根没时间享受这样惬意轻松的时光。\n\n眼前的景象也难免不让人想要拿起手机定格此刻,拍下的照片感觉不用添加滤镜就已经很好看了。\n\n![大黄鸭](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032355227.jpeg)\n\n在湖面划船的人们\n\n![湖边漫步的人](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032356959.jpeg)\n\n湖边漫步的人\n\n![搭帐篷露营的人](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411032357244.jpeg)\n\n搭帐篷露营的人\n\n逛完了玄武湖也走了近万步,这时肚子已经感觉到饿了。离新街口比较近的一个叫高庙街的美食街,里面有很多不错的小吃,而我最喜欢的是一家肠粉,几乎每次过去都会进去吃上两份。今天当然也不例外,玄武湖逛饿了就去吃了他家的肠粉,一个人点了两份肠粉和一碗粥,老板给了我两双筷子,看这个份量以为是两人食了吧。\n\n![肠粉](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411040002211.jpeg)\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"给博客增加评论功能","description":"","slug":"gei-bo-ke-zeng-jia-ping-lun-gong-neng","date":"2024-10-31T16:09:16+08:00","tags":["hugo","blog","comment"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"给博客增加评论功能","description":"","slug":"gei-bo-ke-zeng-jia-ping-lun-gong-neng","date":"2024-10-31T16:09:16+08:00","tags":["hugo","blog","comment"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-31-给博客增加评论功能.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-31-给博客增加评论功能.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-31-给博客增加评论功能.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-31-给博客增加评论功能.md","fmFileName":"2024-10-31-给博客增加评论功能.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730362156000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### 功能的实现(引用 Giscus 官方的介绍)\n\n利用 [GitHub Discussions](https://docs.github.com/en/discussions) 实现的评论系统,让访客借助 GitHub 在你的网站上留下评论和反应吧!本项目深受 [utterances](https://github.com/utterance/utterances) 的启发。\n\n- [开源](https://github.com/giscus/giscus)。🌏\n- 无跟踪,无广告,永久免费。📡 🚫\n- 无需数据库。所有数据均储存在 GitHub Discussions 中。:octocat:\n- 支持[自定义主题](https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#data-theme)!🌗\n- 支持[多种语言](https://github.com/giscus/giscus/blob/main/CONTRIBUTING.md#adding-localizations)。🌐\n- [高可配置性](https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md)。🔧\n- 自动从 GitHub 拉取新评论与编辑。🔃\n- [可自建服务](https://github.com/giscus/giscus/blob/main/SELF-HOSTING.md)!🤳\n\n### 安装 Giscus\n\n选择静态博客部署的 repo(非源码 repo), 选择 `Settings` >> 勾选 `Discussions`.\n\n访问此链接 `https://github.com/apps/giscus` 安装 Giscus. 点击 `Install` 后,依次选择 `Only select repositories` >> `Select repositories` 选择自己的静态博客 repo, 最后点击 `Install` 完成安装。\n### 配置 Giscus\n\n需要访问 [Giscus](https://giscus.app/zh-CN) 官网来获取相应的配置信息,随后将配置信息写入到主题的对应页面里。\n\n![conf](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311552982.png)\n\n`选择语言` >> `选择 repo`\n\n![](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311555697.png)\n\n使用推荐配置即可。\n\n### 修改 HUGO 模板文件\n\n> 根据博客主题的不同,修改的位置不是固定的,要参考自己的主题进行修改。\n\n### 我的方案\n\n在主题`layouts/partials/` 目录下新建一个 `comment.html` 模板,拷贝 Giscus 生成的 script 脚本。\n\n```html\n<script src=\"https://giscus.app/client.js\"\n        data-repo=\"jimicat/jimicat.github.io\"\n        data-repo-id=\"R_kgDOMxxxxx\"\n        data-category=\"Announcements\"\n        data-category-id=\"DIC_kwDOM5EFCxxxxx\"\n        data-mapping=\"pathname\"\n        data-strict=\"0\"\n        data-reactions-enabled=\"1\"\n        data-emit-metadata=\"0\"\n        data-input-position=\"top\"\n        data-theme=\"preferred_color_scheme\"\n        data-lang=\"zh-CN\"\n        data-loading=\"lazy\"\n        crossorigin=\"anonymous\"\n        async>\n</script>\n```\n\n在 `layouts/_default/single.html` 引用 `comment.html` 模板\n\n```html\n{{ define \"main\" }}\n{{ partial \"back_link.html\" .}}\n<article>\n    <p class=\"post-meta\">\n        <time datetime=\"{{ .Date }}\">\n            {{ .Date | time.Format site.Params.theme_config.date_format }}\n        </time>\n    </p>\n    <h1>{{ .Title }}</h1>\n    {{ if and (or (.Params.toc | default true)) (gt (len .TableOfContents) 80) }}\n        <aside class=\"toc\">\n            {{ .TableOfContents }}\n        </aside>\n    {{ end }}\n    {{ .Content }}\n    \n    {{ partial \"comment.html\" .}} <!-- 这里即是引用模板的块 -->\n</article>\n{{ end }}\n```\n\n### 提交更改\n\n```bash\ngit add .\ngit commit -m \"add comment func\"\ngit push\n```\n\n待 `Github Action` 部署完后进行验证。\n\n### 效果展示\n\n参考本博客的评论区","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"一个获取播客订阅源的网站","description":"","slug":"yi-ge-huo-qu-bo-ke-ding-yue-yuan-de-wang-zhan","date":"2024-10-29","tags":["podcast","rss"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"一个获取播客订阅源的网站","description":"","slug":"yi-ge-huo-qu-bo-ke-ding-yue-yuan-de-wang-zhan","date":"2024-10-29","tags":["podcast","rss"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-29-一个获取播客订阅源的网站.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-29-一个获取播客订阅源的网站.md","fmFileName":"2024-10-29-一个获取播客订阅源的网站.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730131200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\nhttps://podcastaddict.com/\n\n![podcastaddict](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410291703172.png)\n\n这个网站看似具有年代感,但是通过搜索可以发现包含过国内外大多数的播客订阅源。配合下面的 audiobookshelf 食用更佳。\n\n![audiobookshelf](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410291704013.png)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"简单稳定的组网方案","description":"","slug":"jian-dan-wen-ding-de-zu-wang-fang-an","date":"2024-10-28","tags":["tailscale","组网"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"简单稳定的组网方案","description":"","slug":"jian-dan-wen-ding-de-zu-wang-fang-an","date":"2024-10-28","tags":["tailscale","组网"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-28-简单稳定的组网方案.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-28-简单稳定的组网方案.md","fmFileName":"2024-10-28-简单稳定的组网方案.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1730044800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n如今异地组网工具百花齐放,像 ZeroTier、NetBird、Tailscale、WireGuard 等都是很出色的组网工具,用户随便选择上面的任意一款都能够简单的实现自己的组网需求。从有了组网的需求后,几款主流的软件也曾一一试过,最终选择 Tailscale 的原因只是稳定、简单、够用。\n\n### 安装\n\n在 Linux 平台只需要一条命令就能安装,像 Mac、Window、移动端也都有各自的安装包。\n\n```bash\ncurl -fsSL https://tailscale.com/install.sh | sh\n```\n\n启动 tailscale 也仅需一条命令\n\n```bash\ntailscale up\n```\n\n点击弹出的授权链接,在授权成功后我们的设备就会显示为 `connected`。([控制台](https://login.tailscale.com/admin/machines))\n\n![1729846093585.png](https://image.written.cc/i/2024/10/25/671b5b5454223.png)\n\n至此,所有的客户端都会获得一个由 tailscale 分配的 IP,通过此地址实现异地机器的互通。\n\n```bash\nroot@k7x4d8:~# tailscale ip -4\n100.101.204.77\n```\n\n### 实现 HTTPS 访问\n\n实现异地组网的基础功能后,我们还可能想要通过域名(HTTPS)而非 IP 来访问我们暴露的服务。虽然我们可以认为内网中暴露的服务是可信任的,但是浏览器端却无法感知这一点,由此可能会出现浏览器的不安全警告,甚至拒绝提供服务。为此,tailscale 提供了 acme 功能,可以自动申请 Let's Encrypt 证书。\n\n### 控制台启用 HTTPS 和 MagicDNS\n\n![1729848155835.png](https://image.written.cc/i/2024/10/25/671b635f1fd61.png)\n\nMagicDNS——相对于 tailscale 分配的 ip 地址,tailscale 提供了一个 magicdns 的功能,我们可以直接用 tailscale 分发的域名解析到该 IP。\n\n我们可以从控制台直接看到分发的域名,通过访问下面的域名即可访问到对应的设备。\n\n```bash\nk7x4d8.mau-wahxx.ts.net\n```\n\n如 `ssh root@100.101.204.77` 等同于 `ssh root@k7x4d8.mau-wahxx.ts.net`\n\n`k7x4d8` 一般是自动生成的,一般是设备的主机名(可自定义)。\n`mau-wahoo` 是 tailscale 分配给用户的二级域名,可以通过摇号的方式再次刷新获取。\n`ts.net` 是该 FQDN 的一级域名,为 Tailscale 所有。\n\n### 为域名申请证书\n\n```bash\nroot@k7x4d8:~# tailscale cert --cert-file=/etc/nginx/cert/cert.pem --key-file=/etc/nginx/cert/key.pem k7x4d8.mau-wahxx.ts.net\nWrote public cert to /etc/nginx/cert/cert.pem\nWrote private key to /etc/nginx/cert/key.pem\n```\n\n### 实现反向代理\n\n我的方案是所有的服务通过容器部署,然后 nginx 进行反向代理。因此证书配置在 nginx 的 cert 目录。\n\n```bash\nserver {\n listen 80;\n server_name k7x4d8.mau-wahxx.ts.net;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n server_name k7x4d8.mau-wahxx.ts.net;\n\n # SSL\n ssl_certificate /etc/nginx/cert/cert.pem;\n ssl_certificate_key /etc/nginx/cert/key.pem;\n\n\n # logging\n access_log /var/log/nginx/access.log combined buffer=512k flush=1m;\n error_log /var/log/nginx/error.log warn;\n\n location / {\n proxy_pass http://127.0.0.1:5006;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n```\n\n在实际操作过程中,发现无法访问部署的服务,经过排查发现是开了梯子的原因。解决方案是:\n\n- 将梯子关了\n- 梯子增加规则,让自己的域名直连。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"Debian 12 配置静态 IP","description":"","slug":"debian-12-pei-zhi-jing-tai-ip","date":"2024-10-24","tags":["debian","linux"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"Debian 12 配置静态 IP","description":"","slug":"debian-12-pei-zhi-jing-tai-ip","date":"2024-10-24","tags":["debian","linux"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-24-Debian 12 配置静态 IP.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-24-Debian 12 配置静态 IP.md","fmFileName":"2024-10-24-Debian 12 配置静态 IP.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729699200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\nDebian 12 的网卡默认配置文件是`/etc/network/interfaces`如不做修改,它会动态获取本机的 IP 地址。\n\n如果想要确保服务器在重启后保持 IP 不变,我们就可以在不修改原有配置文件的前提下,通过在`/etc/network/interfaces.d`目录下新增一个与网卡同名的配置文件来起到覆盖默认配置。\n\n\n\n```bash\nvim /etc/network/interfaces.d/ens33\nauto ens33 #网卡名\niface ens33 inet static\naddress 192.168.9.101 #IP\nnetmask 255.255.255.0 #掩码\ngateway 192.168.9.1 #网关\n\nsystemctl restart networking.service #重启网络服务\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"跑步数据分析","description":"","slug":"pao-bu-shu-ju-fen-xi","date":"2024-10-22","tags":["运动记录"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"跑步数据分析","description":"","slug":"pao-bu-shu-ju-fen-xi","date":"2024-10-22","tags":["运动记录"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-22-跑步数据分析.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-22-跑步数据分析.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-22-跑步数据分析.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-22-跑步数据分析.md","fmFileName":"2024-10-22-跑步数据分析.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729526400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n进入十月份后,天气逐渐开始降温。计划着冬天就要到了,想利用从十月份到来年开春的这段时间训练一下自己的跑步成绩,为来年的南京半马做准备。\n\n训练计划主要借助佳明运动手表生成的,前几天也只是尽力跟上计划,但是中途也因为自己不想跑了就没跟上计划,所以目前的跑步训练就断断续续。今天的 VO2Max 跑也是昨天推迟到了今天的,今天其实也没准备跑,只是临时起意。\n\n首先贴上今天的训练记录,然后稍微分析一下。\n\n![运动记录](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311149266.png)\n\n计划是保持心率在 ZONE5 区间跑满两分钟,这个过程重复跑上七次,每次中间恢复一分钟。我在坚持跑到第四回合的时候体力已经不足以支撑我以 ZONE5 的心率区间跑下去了,后面三个回合就是慢跑了,无法坚持下来。\n\n即使前面四个回合,我的心率也总是上不去,最高心率 160BPM 就到顶了。原因可能就是这一年来几乎没有训练过自己的无氧运动,导致无氧的阈值很低,也由此可见自己的心率能力也有所下降了。\n\n就今天的跑步情况来看,后面还是需要针对性的提升自己的无氧能力以及提升自己的心肺能力。具体做法就是有氧的运动减少一点,每周抽出一次专门针对无氧能力的训练。像今天的这种 VO2Max 跑每周可以训练一次。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"为网站配置免费的域名证书","description":"","slug":"wei-wang-zhan-pei-zhi-mian-fei-de-yu-ming-zheng-shu","date":"2024-10-22","tags":["https","ssl"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"为网站配置免费的域名证书","description":"","slug":"wei-wang-zhan-pei-zhi-mian-fei-de-yu-ming-zheng-shu","date":"2024-10-22","tags":["https","ssl"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-22-为网站配置免费的域名证书.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-22-为网站配置免费的域名证书.md","fmFileName":"2024-10-22-为网站配置免费的域名证书.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729526400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n![1729565225093.png](https://image.written.cc/i/2024/10/22/67171230ea128.png)\n\n[acme.sh](https://acme.sh) 实现了ACME 协议,它不仅可以为您的域名从 Let's Encrypt 生成免费的证书,而且通过配套的自动更新功能,能够为证书自动续期。\n\n> 基于 CentOS 7\n\n### 安装 acme.sh\n\n```bash\ncurl <https://get.acme.sh> | sh\n```\n\n### 打开 Godaddy\n\n- 打开Godaddy开发者平台\n- 打开API Keys\n- Create New API Key(创建新的API Key)\n\n### 创建新的 API Key\n\n- 填写API Key的名称(可选)\n- 环境(Environment)选择产品(Production)\n- 保存生成的 Key 和 Secret\n\n### 配置环境变量并生成证书\n\n```bash\nexport GD_Key=\"gHzatxxxf8geRg7UGanJiaKyied2F\"\nexport GD_Secret=\"RMuBD3tRixxxYDkGewPGY\"\nacme.sh --issue --dns dns_gd -d thongpunchangrc.com -d '*.thongpunchangrc.com'\n```\n### 安装nginx\n\n```bash\nyum install nginx\n```\n### 将证书导出到 nginx 目录(证书会被定期renew)\n\n```bash\nmkdir /etc/nginx/cert\n\nacme.sh --install-cert -d picokkplus.com -d *.picokkplus.com --key-file /etc/nginx/cert/key.pem --fullchain-file /etc/nginx/cert/cert.pem\n```\n### 配置nginx\n\n```bash\nvim /etc/nginx/conf.d/picokkplus.conf\n\nserver {\n listen 80;\n server_name www.picokkplus.com picokkplus.com;\n rewrite ^/(.*) <http://www.picokkplus.com/$1> permanent;\n root /data/html/picokkplus;\n index index.html index.php;\n}\n\nserver {\n listen 443 ssl;\n server_name www.picokkplus.com picokkplus.com;\n ssl_certificate /etc/nginx/cert/cert.pem;\n #填写证书私钥文件绝对路径\n ssl_certificate_key /etc/nginx/cert/key.pem;\n ssl_session_cache shared:SSL:1m;\n ssl_session_timeout 5m;\n\n #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)\n # TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。\n ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;\n\n #表示优先使用服务端加密套件。默认开启\n ssl_prefer_server_ciphers on;\n #将所有HTTP请求通过rewrite指令重定向到HTTPS。\n\n client_max_body_size 500m;\n\n location / {\n root /data/html/picokkplus;\n index index.html index.htm;\n }\n}\n```\n### 重载 Nginx\n\n```bash\nnginx -t\nnginx -s reload\n```","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"博客数据库设计规范","description":"","slug":"bo-ke-shu-ju-ku-she-ji-gui-fan","date":"2024-10-19","tags":["AI","数据库设计"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"博客数据库设计规范","description":"","slug":"bo-ke-shu-ju-ku-she-ji-gui-fan","date":"2024-10-19","tags":["AI","数据库设计"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-19-博客数据库设计规范.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-19-博客数据库设计规范.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-19-博客数据库设计规范.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-19-博客数据库设计规范.md","fmFileName":"2024-10-19-博客数据库设计规范.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1729267200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n设计博客系统的数据库架构需要考虑多方面的因素,包括用户管理、文章管理、评论系统、标签分类、权限管理、点赞等功能模块。下面是一个典型的博客数据库设计方案,涵盖了常见的功能模块。\n\n\n\n### 1. 数据库表结构设计\n\n数据库表的设计围绕以下几大核心模块:用户管理、文章管理、分类与标签、评论系统、权限管理等。\n\n#### 1.1 用户表 (Users)\n\n**作用**:存储博客用户的信息。\n\n```sql\nCREATE TABLE Users (\n user_id INT AUTO_INCREMENT PRIMARY KEY,\n username VARCHAR(50) NOT NULL UNIQUE,\n email VARCHAR(100) NOT NULL UNIQUE,\n password_hash VARCHAR(255) NOT NULL,\n bio TEXT,\n profile_image VARCHAR(255), -- 用户头像\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n```\n\n**字段解释**:\n\n- `user_id`: 用户的唯一标识符。\n- `username`: 用户名。\n- `email`: 用户的电子邮箱。\n- `password_hash`: 加密的用户密码。\n- `bio`: 用户的个人简介。\n- `profile_image`: 个人头像的存储路径。\n\n#### 1.2 文章表 (Posts)\n\n**作用**:存储博客的文章内容。\n\n```sql\nCREATE TABLE Posts (\n post_id INT AUTO_INCREMENT PRIMARY KEY,\n user_id INT NOT NULL, -- 关联到Users表\n title VARCHAR(255) NOT NULL,\n content TEXT NOT NULL,\n slug VARCHAR(255) UNIQUE, -- 文章的SEO友好URL\n is_published BOOLEAN DEFAULT TRUE,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `post_id`: 文章的唯一标识符。\n- `user_id`: 关联用户,表示文章的作者。\n- `title`: 文章标题。\n- `content`: 文章正文。\n- `slug`: 文章的URL友好标识符(SEO优化)。\n- `is_published`: 标识文章是否已发布。\n- `created_at` 和 `updated_at`: 文章的创建时间和更新时间。\n\n#### 1.3 分类表 (Categories)\n\n**作用**:存储文章分类。\n\n```sql\nCREATE TABLE Categories (\n category_id INT AUTO_INCREMENT PRIMARY KEY,\n name VARCHAR(50) NOT NULL UNIQUE,\n description VARCHAR(255)\n);\n```\n\n**字段解释**:\n\n- `category_id`: 分类的唯一标识符。\n- `name`: 分类名称。\n- `description`: 分类描述。\n\n#### 1.4 标签表 (Tags)\n\n**作用**:存储文章的标签信息,文章可以有多个标签。\n\n```sql\nCREATE TABLE Tags (\n tag_id INT AUTO_INCREMENT PRIMARY KEY,\n name VARCHAR(50) NOT NULL UNIQUE\n);\n```\n\n**字段解释**:\n\n- `tag_id`: 标签的唯一标识符。\n- `name`: 标签名称。\n\n#### 1.5 文章-标签关联表 (Post_Tags)\n\n**作用**:管理文章和标签之间的多对多关系。\n\n```sql\nCREATE TABLE Post_Tags (\n post_id INT,\n tag_id INT,\n PRIMARY KEY (post_id, tag_id),\n FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES Tags(tag_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `post_id`: 文章ID,关联到`Posts`表。\n- `tag_id`: 标签ID,关联到`Tags`表。\n\n#### 1.6 评论表 (Comments)\n\n**作用**:存储文章的评论信息。\n\n```sql\nCREATE TABLE Comments (\n comment_id INT AUTO_INCREMENT PRIMARY KEY,\n post_id INT NOT NULL, -- 关联到Posts表\n user_id INT NOT NULL, -- 关联到Users表\n parent_id INT, -- 用于管理嵌套评论,如果是顶级评论则为空\n content TEXT NOT NULL,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,\n FOREIGN KEY (parent_id) REFERENCES Comments(comment_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `comment_id`: 评论的唯一标识符。\n- `post_id`: 关联到评论的文章。\n- `user_id`: 发表评论的用户。\n- `parent_id`: 如果是回复评论,这里保存父评论的ID。\n- `content`: 评论的内容。\n- `created_at` 和 `updated_at`: 评论的创建和更新时间。\n\n#### 1.7 点赞表 (Likes)\n\n**作用**:存储用户对文章的点赞信息。\n\n```sql\nCREATE TABLE Likes (\n like_id INT AUTO_INCREMENT PRIMARY KEY,\n post_id INT NOT NULL, -- 关联到Posts表\n user_id INT NOT NULL, -- 关联到Users表\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (post_id) REFERENCES Posts(post_id) ON DELETE CASCADE,\n FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE\n);\n```\n\n**字段解释**:\n\n- `like_id`: 点赞记录的唯一标识符。\n- `post_id`: 关联到点赞的文章。\n- `user_id`: 点赞的用户。\n- `created_at`: 点赞的时间。\n\n#### 1.8 权限表 (Roles)\n\n**作用**:存储系统中的权限角色(如管理员、普通用户等)。\n\n```sql\nCREATE TABLE Roles (\n role_id INT AUTO_INCREMENT PRIMARY KEY,\n role_name VARCHAR(50) NOT NULL UNIQUE\n);\n```\n\n**字段解释**:\n\n- `role_id`: 角色ID。\n- `role_name`: 角色名称(如\"管理员\"、\"作者\"、\"读者\"等)。\n\n#### 1.9 用户-角色关联表 (User_Roles)\n\n**作用**:管理用户与角色的多对多关系。\n\n```sql\nCREATE TABLE User_Roles (\n user_id INT,\n role_id INT,\n PRIMARY KEY (user_id, role_id),\n FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,\n FOREIGN KEY (role_id) REFERENCES Roles(role_id) ON DELETE CASCADE\n);\n```\n\n### 2. 数据库设计考虑事项\n\n- **索引设计**:在查询频繁的字段上(如 `email`、`post_id`、`slug`)创建索引以提高查询性能。\n- **外键约束**:合理设置外键约束,保证数据的完整性。例如,当一个用户被删除时,自动删除他所创建的文章或评论。\n- **分页与性能优化**:对于大量数据的查询,尤其是文章、评论等表,使用分页查询来减少单次查询返回的数据量。\n- **全文检索**:可以为 `Posts` 表中的 `title` 和 `content` 字段添加全文索引,支持用户在博客中进行关键词搜索。\n\n### 3. 其他功能扩展\n\n- **文件存储**:如果有图片上传需求,可以为 `Posts` 表或 `Users` 表添加图片路径字段,或者引入专门的文件管理表。\n- **浏览统计**:可以为 `Posts` 表增加浏览计数 `view_count` 字段,并通过触发器或应用层逻辑更新文章的浏览次数。\n- **草稿与版本管理**:可以为 `Posts` 表增加一个 `status` 字段,用于区分已发布和草稿的文章;还可以引入版本控制表来保存文章的历史版本。\n\n### 4. 关系图\n\n- **用户** (Users) 创建 **文章** (Posts)\n- **文章** (Posts) 关联 **分类** (Categories) 和 **标签** (Tags)\n- **文章** (Posts) 有 **评论** (Comments)\n- **文章** (Posts) 被 **用户** (Users) 点赞\n- **用户** (Users) 分配 **角色** (Roles)\n\n这种数据库设计能支持博客系统的多种功能,并能方便后期的扩展和性能优化。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"国庆长假","description":"","slug":"guo-qing-chang-jia","date":"2024-10-08","tags":["国庆"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"国庆长假","description":"","slug":"guo-qing-chang-jia","date":"2024-10-08","tags":["国庆"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-10-08-国庆长假.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-10-08-国庆长假.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-10-08-国庆长假.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-10-08-国庆长假.md","fmFileName":"2024-10-08-国庆长假.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1728316800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n### DAY01 归途\n\n吃完午饭,下午一点从南京江北出发, 经过六小时驱车三百公里回到老家。\n\n### DAY02 家庭聚餐\n\n早上睡到七点半醒了,躺着看了一会手机和电脑。中午家庭聚餐,男男女女加上小孩可能有二十个人。下午做司机,带我两个哥去捕鱼,空手而归。\n\n### DAY03 好友相聚\n\n睡到十点半起床洗漱,等中午阿旺接我去县城吃饭。中午和朱成碰面,他比我们先吃了午饭,我和阿旺吃了一碗长鱼面。\n\n下午去了我们当地一个正在开发的景点——桂嘴(宣称泗阳的马尔代夫),开车过去开了一眼,其实就是洪泽湖边上开发的一块地,没有一点商业配套。\n\n晚上,三两好友已经碰头,我们在海鲜市场买了皮皮虾、螃蟹、三文鱼等一些海鲜,晚上拎到阿旺家做。没想到他家因为小区改造,燃气用不了。最终不得不把海鲜带到楼下的饭店给点加工费让饭店的师傅帮忙烧。\n\n### DAY04 看房\n\n上午在县城看了三四个小区的房子。十二点半左右回到家里,下午和姐姐、姐夫一起回南京。\n\n### DAY05 游戏\n\n游戏\n\n### DAY06 游戏\n\n游戏\n\n### DAY07 游戏\n\n游戏","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"关于近期生活的思考","description":"","slug":"guan-yu-jin-qi-sheng-huo-de-si-kao","date":"2024-09-25","tags":["记录","生活","思考"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"关于近期生活的思考","description":"","slug":"guan-yu-jin-qi-sheng-huo-de-si-kao","date":"2024-09-25","tags":["记录","生活","思考"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-25-关于近期生活的思考.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-25-关于近期生活的思考.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-25-关于近期生活的思考.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-25-关于近期生活的思考.md","fmFileName":"2024-09-25-关于近期生活的思考.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1727193600000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n想到从八月低开始,一直到本月(9月)的月底以来生活习惯大不如前。如下两个方面可以直观反映问题所在:\n\n### 运动的习惯的瓦解\n\n从买了新的运动手表开始,也算是保持了每周三次的跑步习惯。但从进入八月份开始,这种频率就被打破了,下班后不想动的情绪开始浮现,现在回想起来倒也想不起这种情绪出现的原因。从记录数据的平台上看,八月份仅上传了五次记录。\n\n九月份更是因为配了一台电脑后,导致下班就坐在电脑前,沉迷游戏不可自拔。通常是七点半到家后就开始打开游戏,打到凌晨三点都是常有的事情。虽说不上游戏哪里好玩,但是在做任务升级的路上停不下来。不论是 WOW 还是 FF14,我似乎沉迷的是升级的过程,而非游戏中多元的玩法。就像我给一台电脑安装系统,在安装系统的这个过程中看着进度条从 1 走到 100 的过程就已经得到了巨大的满足。\n\n整个九月份我都没有跑步,直接停摆了一个月。等我回想起来时感觉自己似乎已经又重了几斤,身体也不再轻盈。身材的变化让我有了心理负担,决定重新开始运动,让体重重新回到从前。\n\n### 熬夜变成了常有的事儿\n\n要说以前我也熬夜,但是可以保证自己在 12 点之前放下手机准备入睡,按照正常睡到早晨八点来说,这个睡眠时间是可以得到保证的,而且也很规律。长期这个睡眠习惯坚持下来似乎很是符合自身。\n\n但是,进入九月,我的睡眠时间越来越短,入睡的时间也越来越晚,其中有几天已经到了凌晨三点多才睡觉。\n\n熬夜的罪魁祸首正是因为买的电脑。说也奇怪,注册了 Steam 后也买了四五款游戏,加入了朋友的家庭共享里面的十几款游戏,这些游戏似乎并不能让我沉迷,体验到游戏的乐趣。多数游戏都是在我耗费大量时间下载安装后,进去玩一两个小时之后下次就没有再玩的想法,这或许就是所谓的“电子ED”。\n\n鉴于最近已经认识到生活作息错乱了,想要生活回到正轨就得做出适当的改变。从昨天开始已经做出了一些改变,考虑到一个月没有跑步,一下跑个五千米可能有点压力。所以晚上九点下楼先跑了一个三千米热身。后面会继续保持每周不低于三次的户外跑步,让生活重新回到正轨上来。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"这些年,我听过的播客","description":"","slug":"zhe-xie-nian-wo-ting-guo-de-bo-ke","date":"2024-09-23","tags":["播客"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"这些年,我听过的播客","description":"","slug":"zhe-xie-nian-wo-ting-guo-de-bo-ke","date":"2024-09-23","tags":["播客"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-23-这些年,我听过的播客.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-23-这些年,我听过的播客.md","fmFileName":"2024-09-23-这些年,我听过的播客.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1727020800000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n昨天看到小宇宙发布了用户的年终报告,我看了一眼自己的收听报告,发现这一年有 200 天听播客的记录,累计收听了 570 个小时。这时长还不包括在苹果端的 Podcasts 上的记录,下半年更多的时间都在苹果自家的产品上收听。由于苹果没有年终报告的功能,估算的话整年的收听时间应该在 1000 小时左右。\n\n[霓达播客](https://podcasts.apple.com/cn/podcast/%E9%9C%93%E8%BE%BE%E6%92%AD%E5%AE%A2/id1668626930)\n\n- 简介:\n\n戴上耳机,在霓虹中抵达,霓达播客是一档漫聊类声音节目,旨在打造当前青年人感兴趣的听觉社区,通过案件来漫谈社会、文化、娱乐等多元话题,用播客来陪伴大家的通勤、摸鱼和睡前的碎片时光。\n\n---\n\n[怡楽播客](https://podcasts.apple.com/cn/podcast/%E6%80%A1%E6%A5%BD%E6%92%AD%E5%AE%A2/id1523249117)\n\n- 简介:\n\n怡楽播客是一档以生活漫谈为主的爆米花播客!2016年成立于北京。\n\n---\n\n[叉点FM](https://podcasts.apple.com/cn/podcast/%E5%8F%89%E7%82%B9fm/id1622987484)\n\n- 简介:\n\n欢迎来到_叉点FM_ 这是由资深产品设计-书G,高级影视平面设计-耗子,多年游戏美工-小白,三位主播共同打造的娱乐向漫谈类播客。\n\n---\n\n[黑水公园](https://podcasts.apple.com/cn/podcast/%E9%BB%91%E6%B0%B4%E5%85%AC%E5%9B%AD/id1078007055)\n\n- 简介:\n\n_黑水公园_是一档以电影、剧集、科幻、动漫为载体,畅谈人生的趣谈节目。\n\n---\n\n[肥话连篇](https://podcasts.apple.com/cn/podcast/%E8%82%A5%E8%AF%9D%E8%BF%9E%E7%AF%87/id1603580035)\n\n- 简介:\n\n我是肥杰(微博:@肥杰_Fatay),喜欢讲有趣的故事,这是我的播客,会有很多欢乐。一起聊天的还有惠子(微博:@惠子老师 ),她比我智慧、比我稳重,甚至有时候比我搞笑。每周一更新,偶尔会加更,希望陪你度过美好时光。\n\n---\n\n[负一楼](https://podcasts.apple.com/cn/podcast/%E8%B4%9F%E4%B8%80%E6%A5%BC/id1745316992)\n\n- 简介:\n\n两个南方小城里的普通上班族每个周未窝在自家楼下的自行车库里开心闲聊。虽然叙述和制作能力都很有限,但分享欲却很旺盛。扒点犯罪案件给大家讲讲,希望用来陪伴各位的闲暇时间。\n\n---\n\n[异地登录](https://podcasts.apple.com/cn/podcast/%E5%BC%82%E5%9C%B0%E7%99%BB%E5%BD%95/id1702839331)\n\n- 简介:\n\n欢迎在异地登陆,寻找世界的小漏洞。\n","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"装机","description":"","slug":"zhuang-ji","date":"2024-09-02","tags":["装机"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"装机","description":"","slug":"zhuang-ji","date":"2024-09-02","tags":["装机"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-09-02-装机.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-09-02-装机.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-09-02-装机.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-09-02-装机.md","fmFileName":"2024-09-02-装机.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1725206400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n最近《黑神话·悟空》的热度可谓是充斥着全网,由此沉寂了几年不玩游戏的心重新被点燃。目前手里只有一台 Mac,想玩游戏就得重新购置一台电脑。想到自己虽然做着 IT 的工作,但是配置一台电脑对我还是有难度。为了少踩坑和能快速配置一台不错的电脑,也用了前前后后半个月的时间来看测评和研究配置。\n\n本来准备购买 B 站知名 UP 主的整机,但是我把配置清单发给网友看后,一致认为这个配置的硬件用的都比较丐,也是价格平民的原因。要想要配一台更进阶一点的主机只能提高自己的预算,从6000 的预算提高到了 7000,到了这个价钱的配置就稍微没那么丐了,综合下来就是配置了一台 i5-12600KF + 4060Ti 的主机。\n\n| 板U套 | 微星 PRO B760M-A WIFI DDR4 + i5 12600KF | 2270.3 |\n| --- | --- | --- |\n| 显卡 | 七彩虹 4060TI 8G | 3231.26 |\n| 内存 | 光威天策 DDR4 3600 | 357.21 |\n| 固态 | WD SN580 1T(PDD) | 399 |\n| 电源 | 航嘉 650W 金牌模组 | 327.24 |\n| 散热 | 利民 AX120R SE 青春版 | 63.68 |\n| 机箱 | 爱国者 | 158.21 |\n| 风扇 | 爱国者 3 x 12mm | 47.16 |\n\n在购买后,我把配置和价钱发给朋友看了一下,不出意外是出了意外。他们都说这套机器配置的有点坑了,不值这个价。我的配件除了固态硬盘,其它都是京东自营上买的,价钱肯定要比其它渠道的要贵,这一点我已经接受了。\n\n关于装机的一个过程感受,我花了应该有三个小时把整套机器组装完,比我想想的其实要简单,不出意外的话最后开机的时候又出了意外。给新机装系统无法从 U 盘启动,在主板 Bios 关闭了安全启动后,再次重启 Bios 会恢复到 Default 配置,重试多次无果。再最后不报希望的时候我把内存调整位置再次开机后又突然可以进入到 U 盘引导模式,然后顺利的装完系统。我知道 Bios 无法保存用户配置可能是主板首次充电,Bios 的电池还未充进电导致无法保存信息的原因。\n\n至此,我的新电脑就全部装机完毕了,借着周末两天时间,在家体验了几款游戏。就目前的配置和游戏的流畅程度和画质来说,总体是对机器满意的,热门的游戏玩起来没有压力。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | Folders:get:start ["VERBOSE" - 14:25:05] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"去无印良品吃个冰淇淋","description":"","slug":"qu-wu-yin-liang-pin-chi-ge-bing-qi-lin","date":"2024-05-05","tags":["玄武湖","无印良品"]} ["VERBOSE" - 14:25:05] VSCODE | PagesParser:processPageContent::Page: {"title":"去无印良品吃个冰淇淋","description":"","slug":"qu-wu-yin-liang-pin-chi-ge-bing-qi-lin","date":"2024-05-05","tags":["玄武湖","无印良品"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-05-05-去无印良品吃个冰淇淋.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-05-05-去无印良品吃个冰淇淋.md","fmFileName":"2024-05-05-去无印良品吃个冰淇淋.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1714838400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n欢乐的日子总是短暂的,转眼就来到了五一假期的最后一天。假期前计划的短暂旅行因为拖延又或者纠结没有付诸行动,以至于前四天的时间都在床上和咖啡店度过。想到第二天不用早起上班,晚上就放肆的熬夜上网冲浪,等第二天睁开眼已是午饭时间。下午的时间多数都是在星巴克度过,刷刷论坛,写写东西,时间就这样溜走。\n\n下午,我先到了无印良品点了咖啡、冰淇淋、薯条,然后找了个位置坐了下来。其实也无聊,只能一边吃吃东西一边刷刷手机。无印良品的茶卡感觉一般,茶的味道较淡,也喝不出咖啡的味道,看来西方的咖啡和东方的茶终究不该有什么联系。但是他家的冰淇淋一直是我喜欢的,尤其是原味的甜筒吃起来脆脆的,原味的甜筒 12 元一支,价格也不算贵,强烈推荐朋友们去尝一尝。\n\n![无印良品](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051652822.png)\n\n在无印良品吃完了东西后又绕着玄武湖走了一圈,刚开始计划是用 3 个小时走完最外围的环湖路,但是走到一半的时候在一个路口选错了路导致走了里面的一圈,这样总路程可能就短了近 3 公里左右。原本还想返回去重新选择走另一条路的,走了挺远就不想在回去了。等下次有时间在重新走一圈完整的。\n\n虽然不是一个晴朗的天气,但是来玄武湖散步的人其实不少,还有很多跑步爱好者,一个个跑起来都带风。我也喜欢跑步,之前总想着有机会住在玄武湖附近,这样每天下班都能到玄武跑跑步。雨天的玄武湖风景其实也很好看,环湖路边上都是树木,刚下完雨的空气中还散发着泥土的气息,闻起来湿湿的,让心情也舒畅起来。\n\n毕竟是阴雨天气,由于没有蓝天白云,拍出的照片也是雾蒙蒙的,但是自己用眼睛去看,就会发现雾蒙蒙的玄武湖也很美,这种美无法通过手机照片去发现,透露出一种凄凉的美。\n\n![玄武湖](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051654988.png)\n\n这次环湖,一共用了一小时零三十八分钟。前面一个小时都是一边听着音乐一边慢走,后面半个小时改成了慢跑。穿着牛仔裤和一双耐克的运动鞋不大方便我快跑。我之前压根也没准备跑步,但是走了一个小时感觉身体活动开了,不跑一跑浑身不得劲,又或者是受边上一个个跑步爱好者的影响。\n\n![环湖](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202411051655941.png)","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"新工作","description":"","slug":"xin-gong-zuo","date":"2024-03-23","tags":["新工作"]} ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"新工作","description":"","slug":"xin-gong-zuo","date":"2024-03-23","tags":["新工作"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-03-23-新工作.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-03-23-新工作.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-03-23-新工作.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-03-23-新工作.md","fmFileName":"2024-03-23-新工作.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1711123200000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n2024-03-19 是我入职新公司的时间,就此结束了长达一年的待业状态。待业的大部分时间是快乐且惬意的,不再需要为了工作上的事情去内耗自己,甚至一天之中很少打开通信工具。但是待业久了又难免地开始焦虑起来,失去固定收入的我开始担心余下的这点存款用完之后怎么办?GAP 一年的时间,到时还能不能在顺利地找到一份工作?这些都是困扰我的问题。\n\n从年前试着投出简历,但当时以至年末,用人单位几乎都不在这个时候招人,所以这段时间投的简历都是已读不回的状态。既然这样,我就索性不投了,再接着躺到过完年。\n\n话接上文,年后市场的行情似乎并没有什么起色,每天投出去的简历也几乎要么是已读不回,要么压根就是未读状态。这种情况一直持续到 3 月中旬,我的简历偶尔会有人看并回复我。不得不感慨一句,中国的用人单位对求职者要求真的多,我简历上写了待业一年,他们看到后基本上就是直接拒绝,不接受 GAP 过的打工人。\n\n在后面的求职历程中我收到了一家做海外金融业务的公司的 offer,我没做过多考虑,薪资符合我的要求还是双休我就接受了,第二天就去办理了入职手续。可能因为待业时间久了,急需一份工作来让自己摆脱那种焦虑感。虽然现在手里是有一份工作了,但是这份工作似乎并不能满足自己对稳定的要求,目前我只能在工作之余提升自己的技能或者拓展自己的第二职业避免在下一次失业风波中能够有个技能托底。\n\n关于第二职业也有考虑过,想过做个咖啡师,又或者朝着前端的方向发展,但是一直处于空想的阶段。做咖啡就得自己买点机器平时下班的时候学习,或者利用周末去咖啡厅兼职学习做咖啡的技术。如果往前端发展,可能更倾向于 WEB 3.0 方向,目前在做的也就是下班后躺在床上学学简单的前端知识。挖个坑,以后可能会专门写一个系列来记录自己第二职业学历经历。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"云南之旅","description":"","slug":"yun-nan-zhi-lv","date":"2024-01-06","tags":["旅行","云南"]} ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"云南之旅","description":"","slug":"yun-nan-zhi-lv","date":"2024-01-06","tags":["旅行","云南"],"fmCachePath":"d:/github/miniblog/src/content/posts/2024-01-06-云南之旅.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2024-01-06-云南之旅.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2024-01-06-云南之旅.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2024-01-06-云南之旅.md","fmFileName":"2024-01-06-云南之旅.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1704470400000,"fmYear":2024,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n原本计划去年三月份的旅行一直拖到了新年的年初,这场旅行并没有做过多攻略,只在网上简单地看了一下别人的攻略,就连机票都是前一天匆匆忙忙的定下来的。这次旅行目的地只有两个——大理的洱海和丽江的玉龙雪山。\n\n### 黄昏时刻的洱海\n\n3 号乘机先抵达成都后转机到大理凤仪机场,下了飞机打车直达大理古城,在古城里找了一家民宿,此时的大理属于旅游淡季,游客并没有很多,所以民宿的价格也都比较便宜。当把行李放到住处时,脑子里似乎有了一个简单的计划,当晚就先去龙龛码头体验一下洱海的日落。从民宿到洱海有近五公里的路程,因为还不熟悉这边的交通方式,就租了一辆电瓶车前往。到达龙龛码头的时候刚好日落已经开始了,洱海确实很美,就没见过这么清澈的湖水,在洱海第一次见到了海鸥。一边欣赏着美景一边寻找可以帮我拍照的游客,在洱海找了两三个路人帮我拍了几张照片。云南这边日出在八点左右,日落也很晚,一直到晚上的八点太阳才落山。\n\n### 洱海的日出\n\n![洱海的造成](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311153183.jpg)\n\n原本的 4 号的计划是环洱海一周,事实上并没有完成。早上天还没亮我就起床了,但是我不知道这个点怎么去四公里之外的洱海,我就一边走一边希望在路边能看到租车的店铺,可能因为太早了,路边的商铺都没有开门,不得已我只能徒步。一路慢跑好在在 8 点的时候赶到了洱海边,此时岸上已经聚集了很多游客,有的游客还拎着行李箱貌似是刚到海边。早晨的洱海成群的海鸥在游客的戏逗下在湖面成群的盘旋觅食。我也一直在湖边看着它们一直到太阳跳出云层。后来环湖一周的计划并没有实现,只是骑着单车骑行了几公里就回去了,没有代步工具,觉得骑车一周会很累,紫外线也很强。洱海就在这样的匆忙中结束,下一站就是玉龙雪山。\n\n### 丽江古城\n\n4 号的下午乘坐动车直达丽江,紧接着打车到了丽江古城。说到古城,大理古城没什么好玩的,如果不是为了住宿,或者离得洱海近都没必要单独去古城玩一趟。丽江的古城要比大理古城大,可以逛的要比大理古城多的多,但是我其实对这种古城没什么兴趣,商业化的意味太浓。无非就是卖些所谓的本地特产,又或者是一些卖具有民族特色的服装和旅途跟拍服务。和刚到大理古城一样,到了民宿简单的休息后就到古镇游玩了一圈,听说古城里有个酒吧一条街,我以为会有啥特色或者故事,但是商业化之后到酒吧在我看来是比较 low 的,很多酒吧都是靠着穿着暴露的女性在舞台上扭动来招揽生意,我在这条街徘徊了好多遍,于是找了个人少的民谣酒馆在里喝了一杯,里面只有三个驻唱一边弹着吉他一边唱着耳熟能详的口水歌。一直到临近深夜,才回到民宿。\n\n### 玉龙雪山看日照金山\n\n![日照金山](https://raw.githubusercontent.com/jimicat/image-upload/main/blog-images/202410311153215.jpg)\n\n5 号的计划是游玩玉龙雪山,同样是天没亮就随着领队来到景区,这里不管是司机还是什么人,只要带你去商家那里消费就有回扣拿,所以领队的用言语吓唬游客,说山上海拔高需要备上多个氧气罐,一个氧气罐三四十元,不少人在他们的煽动下都买了不止一个,我觉得没必要就没有买。在日出前先看了日出金山,拍出来的照片确实也很漂亮。\n\n看完日照金山就乘坐索道到达雪山海拔 4506 处,到达这里已经有轻微的高反,就是走上几步会有点气喘吁吁的。玉龙雪山游客可达最高海拔是 4680 中间的这段距离需要自己爬上去,大概有千级的阶梯,经过三四次的休息我抵达最高处,并在此拍照打卡。在此实现了人生中第一次观看雪山的成就。\n\n当到达 4680 处时,拍了几张照片后,高反引起的头疼有点不舒服,于是就下山了。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end - cached folders ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::FrontMatter: {"title":"年终总结","description":"","slug":"nian-zhong-zong-jie","date":"2023-12-30","tags":["年终总结"]} ["VERBOSE" - 14:25:06] VSCODE | PagesParser:processPageContent::Page: {"title":"年终总结","description":"","slug":"nian-zhong-zong-jie","date":"2023-12-30","tags":["年终总结"],"fmCachePath":"d:/github/miniblog/src/content/posts/2023-12-30-年终总结.md","fmCacheModifiedTime":1733463316000,"fmFolder":"posts","fmFilePath":"d:\\github\\miniblog\\src\\content\\posts\\2023-12-30-年终总结.md","fmRelFileWsPath":"[[workspace]]/src/content/posts/2023-12-30-年终总结.md","fmRelFilePath":"d:/github/miniblog/src/content/posts/2023-12-30-年终总结.md","fmFileName":"2023-12-30-年终总结.md","fmDraft":null,"fmModified":1733463316000,"fmPublished":1703865600000,"fmYear":2023,"fmPreviewImage":"","fmTags":[],"fmCategories":[],"fmContentType":"posts","fmBody":"\n最近几年其实都有刻意的尝试拽写年终总结,可以说是刻意也能说是矫情。以往的年终总结往往因为电脑重做系统或者资料的整理没有备份从而丢失。即使没有这些原因,那些在年终总结里的忏悔也不会对新的一年产生任何实质性作用。不管是形式主义还是所谓的仪式感,每年这个时候写上一篇年终总结似乎成为了年底一件大事。\n\n回想这一年,似乎并不比去年有哪方面的进步,反而为了备考放弃了当时的工作,或许可以说是毫无收获的一年。好在经历了备考过程中的种种艰难处境,最终在自我和解的路上走的越来越近,也越来越认为追求所谓事业的成功不过是一种欲望的扩张,付出的代价必然是以身体的健康为筹码。因此,现在我更憧憬的是一种不争、随遇而安的精神。\n\n### 运动方面\n\n除去备考,剩下的主要事情就是关于运动方面。一直以来我对自己的身材要求的都很严格,尤其是这两年,更是增加了运动的次数。因为备考,运动的频率和强度必然会降低,以至于到了 9 月之后,我已经不能按照当初的计划每周去健身房慢跑 30 分钟然后做 20 分钟的核心训练。这也就直接导致了我的腹部赘肉以肉眼可见的速度在增长,体重的增加不可避免。原本较为明显的 6 块腹肌如今也只有隐约可现的轮廓了。\n\n### 财务方面\n\n经济基础决定上层建筑,财务问题也是我近两年来想要克服的一个问题。自己深受资本消费陷阱的洗脑,在购物时总是去选择品牌溢价很高的产品,追求所谓的品牌效应,深以为自己用着所谓的名牌就能跻身进当代小资的圈子。这些行为主要体现在购物时,廉价的不买,没有响亮的品牌不买,在曾经我最看不起那些用拼多多的人,不理解为了便宜,尽然加入”砍一刀“的大军,耗费时间不说还惹得人烦。如今,我为自己曾经鄙视用拼多多的一类人道歉。除此我还总是买一些不能产生实际价值的数码产品,这些无用的花费占据了我财务支出的半壁江山。陷入资本陷阱的另一个表现,这两年总是去消费星巴克的咖啡也包括其他品牌。但是自己其实并没有特别需要它,喝与不喝并无差异,主要是在心理上认为,当代小资就应该每天喝上一杯咖啡,喝上一杯 whisky 才能符合当代小资的身份。\n\n### 认知方面的提升\n\n上面说的都是自己存在的问题,当然自己也有进步的地方,这主要体现两个方面的提升,一个是认知方面另一个是心理层次。或许因为慢慢开始接受平庸的自己也或许真的像别人说的那样,经历社会的毒打,一身傲骨已经不在,对自己各方面的短板不在看重,身高、外貌、财富、学历这些不可控的方面都在慢慢的淡化,转而开始追求一些切实可控的东西。\n\n### 奶奶的离开\n\n奶奶今年近95岁高龄,在三月份的某一天突然长眠。或许因为真的是年纪太大了,她的突然离去似乎对她来说是一种解脱,没有遭受一点儿的痛苦。\n\n### 理想\n\n人虽平凡但还是要有理想,理想就像指引巨轮航行的灯塔,正因为有了理想人生的旅程才不会迷路。如果要给自己的理想附着一个实体,最近能想到的就是在 35 岁前,实现从城市逃离,回到老家的县城,谋上一份 remote 岗位,可以拿着一二线的薪资在十八线县城消费。理想是一个长期指引自己的目标,即使无法实现也应该努力向其靠近。\n\n### 目标\n\n为此,也想给 2024 年的自己定上几个目标吧!\n\n- 希望自己在在找到一份相对不错的工作之外,继续保持运动的习惯,将今年增长的肉全部减掉。\n- 坚持一年的英语学习,不功力不急成,稳稳当当的学习一年,看看自己的水平。\n- 今年下半年考虑在县城买房。\n- 改善财务状况。","fmDateFormat":"","fmDefaultLocale":false,"fmTranslations":{}} ["VERBOSE" - 14:25:06] VSCODE | Folders:clearCached ["VERBOSE" - 14:25:06] VSCODE | PagesParser:parsePages:end ["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: pages ["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: searchReady ["VERBOSE" - 14:25:06] DASHBOARD | Message received: pages ["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getState ["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getContentLocales ["VERBOSE" - 14:25:06] VSCODE | Folders:get:start ["VERBOSE" - 14:25:06] VSCODE | Folders:get:end ["VERBOSE" - 14:25:06] DASHBOARD | Settings loaded ["VERBOSE" - 14:25:06] DASHBOARD | Pages loaded - 49 pages ["VERBOSE" - 14:25:06] VSCODE | Receiving message from dashboard: getPinnedItems ["VERBOSE" - 14:25:06] VSCODE | Sending message to dashboard: loading - Turn off ["VERBOSE" - 14:25:06] DASHBOARD | Message received: searchReady ["VERBOSE" - 14:25:06] DASHBOARD | Message received: getState ["INFO" - 14:25:06] DASHBOARD | Contents view loaded with 49 pages ["VERBOSE" - 14:25:06] DASHBOARD | Message received: getContentLocales ["VERBOSE" - 14:25:06] DASHBOARD | Message received: loading ["VERBOSE" - 14:25:06] DASHBOARD | Message received: getPinnedItems ["VERBOSE" - 14:25:10] VSCODE | Receiving message from dashboard: setPageViewType ["VERBOSE" - 14:25:11] VSCODE | Receiving message from dashboard: setPageViewType ["VERBOSE" - 14:25:18] VSCODE | Trigger page update: onDidChangeActiveTextEditor ["VERBOSE" - 14:25:18] PANEL | Message received: loading ["VERBOSE" - 14:25:18] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 14:25:19] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 14:25:19] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 14:25:23] VSCODE | Receiving message from panel: getBranch ["INFO" - 14:25:23] VSCODE | Receiving message from panel: is-server-started ["INFO" - 14:25:23] VSCODE | Sending request result to panel: is-server-started ["VERBOSE" - 14:25:23] DASHBOARD | Message received: getBranch ["VERBOSE" - 14:25:23] PANEL | Message received: getBranch ["VERBOSE" - 14:25:23] PANEL | Message received: is-server-started ["VERBOSE" - 14:25:27] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["VERBOSE" - 14:25:29] VSCODE | Trigger page update: onDidChangeTextEditorSelection ["INFO" - 14:25:30] VSCODE | Sending message to panel: metadata ["VERBOSE" - 14:25:30] PANEL | Message received: metadata ``` <!-- github-comment-id:2565077227 -->
Author
Owner

haha Followed the documentation tutorial and added "frontMatter.dashboard.content.card.fields.title": "", which worked.

haha Followed the documentation tutorial and added `"frontMatter.dashboard.content.card.fields.title": ""`, which worked. <!-- github-comment-id:2565215208 -->
Author
Owner

haha Followed the documentation tutorial and added "frontMatter.dashboard.content.card.fields.title": "", which worked.

Had you set this somewhere? As by default, it is not defined.

Good you got it working!

> haha Followed the documentation tutorial and added `"frontMatter.dashboard.content.card.fields.title": ""`, which worked. Had you set this somewhere? As by default, it is not defined. Good you got it working! <!-- github-comment-id:2565274654 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/vscode-front-matter#703