diff --git a/plugins/builders/backlink_builder.rb b/plugins/builders/backlink_builder.rb index 81b58fcb..5f5ea681 100644 --- a/plugins/builders/backlink_builder.rb +++ b/plugins/builders/backlink_builder.rb @@ -5,6 +5,7 @@ def build wiki_documents = collect_wiki_resources(site) nodes = Set.new + node_groups = Set.new links = [] wiki_documents.each do |wiki_document| pathname = wiki_document.relative_path.to_s @@ -16,6 +17,18 @@ def build nodes << source wiki_content = wiki_document.content + + tags = wiki_document.data.tags + tags.each do |tag| + group_name = "##{tag}" + node_groups << group_name + links << { + "source": group_name, + "target": source, + "value": 100, + } + end + internal_links = wiki_content.scan(/\[\[([\w\-\/\_\s\.]+)\]\]/) internal_links&.each do |link| link = link[0] @@ -29,7 +42,10 @@ def build end reference_graph = { - "nodes": nodes.to_a.map { |name| ({ id: name, group: 1 }) }, + "nodes": [ + *nodes.to_a.map { |name| ({ id: name, group: 1 }) }, + *node_groups.to_a.map { |name| ({ id: name, group: 2 }) } + ], "links": links, } diff --git a/src/_data/wiki_datasets.json b/src/_data/wiki_datasets.json index 2a490aa8..ebffe5d9 100644 --- a/src/_data/wiki_datasets.json +++ b/src/_data/wiki_datasets.json @@ -147,9 +147,44 @@ { "id": "daily/2023-01-19", "group": 1 + }, + { + "id": "#archive", + "group": 2 + }, + { + "id": "#productivity", + "group": 2 + }, + { + "id": "#vim", + "group": 2 + }, + { + "id": "#cli", + "group": 2 + }, + { + "id": "#project", + "group": 2 } ], "links": [ + { + "source": "#archive", + "target": "quarterly/2023-Q3", + "value": 100 + }, + { + "source": "#productivity", + "target": "workbench/cheatsheet", + "value": 100 + }, + { + "source": "#archive", + "target": "archive", + "value": 100 + }, { "source": "archive", "target": "quarterly/2023-Q1", @@ -165,11 +200,36 @@ "target": "quarterly/2023-Q3", "value": 1 }, + { + "source": "#archive", + "target": "quarterly/2023-Q2", + "value": 100 + }, { "source": "quarterly/2023-Q2", "target": "appendix/excelcon-2nd", "value": 1 }, + { + "source": "#archive", + "target": "appendix/excelcon-2nd", + "value": 100 + }, + { + "source": "#productivity", + "target": "appendix/excelcon-2nd", + "value": 100 + }, + { + "source": "#vim", + "target": "appendix/excelcon-2nd", + "value": 100 + }, + { + "source": "#archive", + "target": "appendix", + "value": 100 + }, { "source": "appendix", "target": "appendix/excelcon-2nd", @@ -180,6 +240,11 @@ "target": "rfc/2616", "value": 1 }, + { + "source": "#archive", + "target": "quarterly/2023-Q1", + "value": 100 + }, { "source": "quarterly/2023-Q1", "target": "projects/neural-bridge", @@ -190,6 +255,11 @@ "target": "mastodon/recommendations", "value": 1 }, + { + "source": "#vim", + "target": "vim-plugin/flutter-tools.nvim", + "value": 100 + }, { "source": "vim-plugin/flutter-tools.nvim", "target": "flutter", @@ -210,6 +280,11 @@ "target": "vim-plugin/telekasten.nvim", "value": 1 }, + { + "source": "#productivity", + "target": "improving-productivity", + "value": 100 + }, { "source": "improving-productivity", "target": "tmuxinator", @@ -230,6 +305,16 @@ "target": "prompt-engineering", "value": 1 }, + { + "source": "#cli", + "target": "cli/diff", + "value": 100 + }, + { + "source": "#cli", + "target": "cli", + "value": 100 + }, { "source": "cli", "target": "cli/diff", @@ -260,6 +345,11 @@ "target": "neovim", "value": 1 }, + { + "source": "#productivity", + "target": "workbench", + "value": 100 + }, { "source": "workbench", "target": "wezterm", @@ -285,6 +375,21 @@ "target": "workbench/cheatsheet", "value": 1 }, + { + "source": "#cli", + "target": "wezterm", + "value": 100 + }, + { + "source": "#productivity", + "target": "wezterm", + "value": 100 + }, + { + "source": "#vim", + "target": "vim-plugin/telekasten.nvim", + "value": 100 + }, { "source": "vim-plugin/telekasten.nvim", "target": "vim-plugin/telescope.nvim", @@ -335,6 +440,26 @@ "target": "vim-plugin/mind.nvim", "value": 1 }, + { + "source": "#cli", + "target": "tmuxinator", + "value": 100 + }, + { + "source": "#productivity", + "target": "tmuxinator", + "value": 100 + }, + { + "source": "#cli", + "target": "neovim", + "value": 100 + }, + { + "source": "#project", + "target": "projects/neural-bridge", + "value": 100 + }, { "source": "projects/neural-bridge", "target": "vim-plugin/telekasten.nvim", diff --git a/src/_wiki/appendix.md b/src/_wiki/appendix.md index 60c7582c..636d2fcc 100644 --- a/src/_wiki/appendix.md +++ b/src/_wiki/appendix.md @@ -2,6 +2,7 @@ title: 부록 date: 2023-05-19 layout: wiki +tags: archive --- 이 문서의 하위 문서들은 외부 강연 혹은 스터디에서 참고자료로 활용했던 것들을 기록으로 남기기 위해 사용될 예정이다. diff --git a/src/_wiki/appendix/excelcon-2nd.md b/src/_wiki/appendix/excelcon-2nd.md index a7e84409..8ad1d042 100644 --- a/src/_wiki/appendix/excelcon-2nd.md +++ b/src/_wiki/appendix/excelcon-2nd.md @@ -2,6 +2,7 @@ title: 제 2회 EXCELCON - Neovim으로 생산성 퀀텀점프하기 date: 2023-05-19 layout: wiki +tags: archive productivity vim --- > Q&A는 취합해서 6월 중순 쯤에 업데이트해서 공유하겠습니다. diff --git a/src/_wiki/archive.md b/src/_wiki/archive.md index 504c9e38..1b716e74 100644 --- a/src/_wiki/archive.md +++ b/src/_wiki/archive.md @@ -2,6 +2,7 @@ title: Archive date: 2023-06-17 layout: wiki +tags: archive --- ## 2023 diff --git a/src/_wiki/cli.md b/src/_wiki/cli.md index 25eb7faf..cceceb22 100644 --- a/src/_wiki/cli.md +++ b/src/_wiki/cli.md @@ -2,6 +2,7 @@ title: CLI date: 2023-01-25 layout: wiki +tags: cli --- 이 문서에서는 주로 사용하는 CLI 도구를 다룰 것이고, 적당히 쓸만했던 CLI 명령어 조합을 나열하게 될 것이다. diff --git a/src/_wiki/cli/diff.md b/src/_wiki/cli/diff.md index caec54ea..6f5b8a18 100644 --- a/src/_wiki/cli/diff.md +++ b/src/_wiki/cli/diff.md @@ -2,6 +2,7 @@ title: CLI/diff date: 2023-01-25 layout: wiki +tags: cli --- [diff](https://en.wikipedia.org/wiki/Diff) 명령어는 겉으로 보기에 비슷해보이는 두 개의 파일이 있을때, 어떤 부분이 다른지 파악하기 쉽게 해주는 유닉스 명령어이다. ~~운영체제 과제를 하면서 친해질 수 밖에 없는 친구이다~~ diff --git a/src/_wiki/improving-productivity.md b/src/_wiki/improving-productivity.md index 8c6f1e66..c4a62a7e 100644 --- a/src/_wiki/improving-productivity.md +++ b/src/_wiki/improving-productivity.md @@ -2,6 +2,7 @@ title: 생산성 개선 date: 2023-01-27 layout: wiki +tags: productivity --- 이 문서에서는 개인적으로 생산성 개선에 큰 도움이 되었던 도구들을 소개한다. diff --git a/src/_wiki/neovim.md b/src/_wiki/neovim.md index 922f641c..30c95f37 100644 --- a/src/_wiki/neovim.md +++ b/src/_wiki/neovim.md @@ -2,6 +2,7 @@ title: neovim date: 2023-01-20 layout: wiki +tags: cli --- WIP diff --git a/src/_wiki/projects/neural-bridge.md b/src/_wiki/projects/neural-bridge.md index ec082113..d4c46109 100644 --- a/src/_wiki/projects/neural-bridge.md +++ b/src/_wiki/projects/neural-bridge.md @@ -2,6 +2,7 @@ title: Neural Bridge date: 2023-01-19 layout: wiki +tags: project --- 이름의 유래는 `neural network` + `bridgetown`. diff --git a/src/_wiki/quarterly/2023-Q1.md b/src/_wiki/quarterly/2023-Q1.md index 000b8821..66696f76 100644 --- a/src/_wiki/quarterly/2023-Q1.md +++ b/src/_wiki/quarterly/2023-Q1.md @@ -2,6 +2,7 @@ title: 2023 Q1 Review date: 2023-03-29 layout: wiki +tags: archive --- 주기적으로 회고를 해야지하고 다짐만 하다가 2022년 회고도 못쓰고 월간 회고도 못쓰고 주간 회고는 어림도 없는 상황이 다가왔다. diff --git a/src/_wiki/quarterly/2023-Q2.md b/src/_wiki/quarterly/2023-Q2.md index ed6ac73c..26c2b35b 100644 --- a/src/_wiki/quarterly/2023-Q2.md +++ b/src/_wiki/quarterly/2023-Q2.md @@ -2,6 +2,7 @@ title: 2023 Q2 Review date: 2023-06-09 layout: wiki +tags: archive --- # Timeline diff --git a/src/_wiki/quarterly/2023-Q3.md b/src/_wiki/quarterly/2023-Q3.md index b21cf287..00182a14 100644 --- a/src/_wiki/quarterly/2023-Q3.md +++ b/src/_wiki/quarterly/2023-Q3.md @@ -2,6 +2,7 @@ title: 2023 Q3 Review date: 2023-10-02 layout: wiki +tags: archive --- 번아웃이 심하게 오기도 했고, 지난 분기에 비해서는 이렇다할 큼지막한 이벤트도 별로 없다. 그나마 떠올릴 만한 것이라면, Rust 기반으로 CLI 도구를 만들기 시작했다는 것 정도겠고, 한 번 제대로 미쳐서 Vim 스티커를 600장 정도 주문제작해서 여기저기 뿌리고 다니고, 프롬프트 엔지니어링에 꽂혔다는 것 말고는 없을 것이다. 이번 분기는 비교적 지루하게 보냈다. diff --git a/src/_wiki/tmuxinator.md b/src/_wiki/tmuxinator.md index 97002bf1..7b006169 100644 --- a/src/_wiki/tmuxinator.md +++ b/src/_wiki/tmuxinator.md @@ -2,6 +2,7 @@ title: tmuxinator date: 2023-01-20 layout: wiki +tags: cli productivity --- 터미널에서 벗어나지 못하게 해준 장본인 중 하나라고 볼 수 있을 정도로 쓸만하다. diff --git a/src/_wiki/vim-plugin/flutter-tools.nvim.md b/src/_wiki/vim-plugin/flutter-tools.nvim.md index fd95c10d..c8e16420 100644 --- a/src/_wiki/vim-plugin/flutter-tools.nvim.md +++ b/src/_wiki/vim-plugin/flutter-tools.nvim.md @@ -2,6 +2,7 @@ title: akinsho/flutter-tools.nvim date: 2023-02-05 layout: wiki +tags: vim --- > Build flutter and dart applications in neovim using the native LSP. It adds the ability to easily launch flutter applications, debug them, as well as extending/exposing LSP functionality such as the widget guides, an outline view of your widgets, and hot reloading. diff --git a/src/_wiki/vim-plugin/telekasten.nvim.md b/src/_wiki/vim-plugin/telekasten.nvim.md index def4c2d7..2bb59aa0 100644 --- a/src/_wiki/vim-plugin/telekasten.nvim.md +++ b/src/_wiki/vim-plugin/telekasten.nvim.md @@ -2,6 +2,7 @@ title: Telekasten.nvim date: 2023-01-20 layout: wiki +tags: vim --- ~~Neovim에 강력한 검색 기능을 제공하는 킹갓제네럴엠퍼러~~ [[vim-plugin/telescope.nvim]] 기반으로 동작하는 zettelkasten management plugin diff --git a/src/_wiki/wezterm.md b/src/_wiki/wezterm.md index 7be4d6c5..e37b0d95 100644 --- a/src/_wiki/wezterm.md +++ b/src/_wiki/wezterm.md @@ -2,6 +2,7 @@ title: wezterm date: 2023-01-20 layout: wiki +tags: cli productivity --- diff --git a/src/_wiki/workbench.md b/src/_wiki/workbench.md index d89a180a..3e7cd7d3 100644 --- a/src/_wiki/workbench.md +++ b/src/_wiki/workbench.md @@ -2,6 +2,7 @@ title: kodingwarrior's workbench date: 2023-01-20 layout: wiki +tags: productivity --- 이 문서에서는 작업 환경을 어떻게 구성하고 있는지 기록할 것이다. diff --git a/src/_wiki/workbench/cheatsheet.md b/src/_wiki/workbench/cheatsheet.md index 480e7771..e8f886b8 100644 --- a/src/_wiki/workbench/cheatsheet.md +++ b/src/_wiki/workbench/cheatsheet.md @@ -2,6 +2,7 @@ title: 오로지 키보드로만 모든 것을 해결하기 위한 Cheatsheet date: 2023-09-18 layout: wiki +tags: productivity --- 사용하기 편한 단축키를 그 중 일부는 머슬메모리로서 체화할 필요가 있는 것들이다. diff --git a/src/neural-network.md b/src/neural-network.md index ee4f5e09..4559413e 100644 --- a/src/neural-network.md +++ b/src/neural-network.md @@ -30,61 +30,121 @@ window.addEventListener('load', function(e) { .width(targetElement.offsetWidth) .height(targetElement.offsetWidth) .nodeCanvasObject(function(node, ctx) { - const path = node.id; - const fontSize = 8; - - const hierarchyNodes = path.split("/"); - const category = hierarchyNodes[0]; - const label = hierarchyNodes[hierarchyNodes.length - 1]; - - // Rendering Text - ctx.font = `${fontSize}px Sans-Serif`; - const textWidth = ctx.measureText(label).width; - const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = 'black'; - ctx.fillText(label, node.x, node.y + 12); - - ctx.beginPath() - ctx.fillStyle = "rgba(0, 0, 0, 0.05)" - ctx.roundRect( - node.x - textWidth / 2 - 6, - node.y + fontSize / 2 + 2, - textWidth + 12, - fontSize + 4, - 5 - ); - ctx.fill() - - const hasIcon = ['vim-plugin'].includes(category); - const size = 12; - - // Rendering Circle - if (hasIcon) { - const img = icons[category]; - ctx.drawImage(img, node.x - size / 2, node.y - size / 2, size, size); - } else { - const radius = size / 2; - ctx.fillStyle = "rgba(0, 0, 0, 0.2)" - ctx.beginPath(); - ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false) + if (node.group == 1) { + const path = node.id; + const fontSize = 8; + + const hierarchyNodes = path.split("/"); + const category = hierarchyNodes[0]; + const label = hierarchyNodes[hierarchyNodes.length - 1]; + + // Rendering Text + ctx.font = `${fontSize}px Sans-Serif`; + const textWidth = ctx.measureText(label).width; + const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = 'black'; + ctx.fillText(label, node.x, node.y + 12); + + ctx.beginPath() + ctx.fillStyle = "rgba(0, 0, 0, 0.05)" + ctx.roundRect( + node.x - textWidth / 2 - 6, + node.y + fontSize / 2 + 2, + textWidth + 12, + fontSize + 4, + 5 + ); ctx.fill() + + const hasIcon = ['vim-plugin'].includes(category); + const size = 12; + + // Rendering Circle + if (hasIcon) { + const img = icons[category]; + ctx.drawImage(img, node.x - size / 2, node.y - size / 2, size, size); + } else { + const radius = size / 2; + ctx.fillStyle = "rgba(0, 0, 0, 0.2)" + ctx.beginPath(); + ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false) + ctx.fill() + } + + node.__bckgDimensions = bckgDimensions; } - node.__bckgDimensions = bckgDimensions; + if (node.group == 2) { + const tagName = node.id; + const fontSize = 12; + + const label = tagName; + + // Rendering Text + ctx.font = `700 ${fontSize}px Sans-Serif`; + const textWidth = ctx.measureText(label).width; + const bckgDimensions = [textWidth * 1.2, fontSize].map(n => n + fontSize * 0.3); // some padding + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = 'black'; + ctx.fillText(label, node.x, node.y); + + const groupNodeWidth = textWidth + 20 + const groupNodeHeight = fontSize + 10 + ctx.beginPath() + ctx.fillStyle = "rgb(128, 203, 196, 0.2)" + ctx.roundRect( + node.x - groupNodeWidth / 2, + node.y - groupNodeHeight / 2, + groupNodeWidth, + groupNodeHeight, + 10 + ); + ctx.fill() + + node.__bckgDimensions = bckgDimensions; + } }) .nodePointerAreaPaint(function(node, color, ctx) { - const size = 12; - const radius = size / 2; - ctx.fillStyle = color - ctx.beginPath(); - ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false) - ctx.fill() + console.log(color) + if (node.group == 1) { + const size = 12; + const radius = size / 2; + ctx.fillStyle = color + ctx.beginPath(); + ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false) + ctx.fill() + } + + if (node.group == 2) { + const tagName = node.id; + const fontSize = 12; + + const label = tagName; + + const textWidth = ctx.measureText(label).width; + const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding + const groupNodeWidth = textWidth + 20 + const groupNodeHeight = fontSize + 10 + ctx.beginPath() + ctx.fillStyle = color + ctx.roundRect( + node.x - groupNodeWidth / 2, + node.y - groupNodeHeight / 2, + groupNodeWidth, + groupNodeHeight, + 10 + ); + ctx.fill() + } }) .onNodeClick(function(node, event) { - const path = node.id - window.location.assign("/wiki/" + path) + if (node.group == 1) { + const path = node.id + window.location.assign("/wiki/" + path) + } }) })