DONE

Get graph's island centers

cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd Get graph's island centers _0873a209_b9df_4bf3_b65e_2f425c5a2adc Librarian / Personal Library _71d2dd6c_f559_4591_9fa3_0bbe72066694 NoiseTorch - Noise reduction _826af88a_7ddf_48ca_bc2f_6e8aa4bea45d Math note apps _923355e3_8e39_4262_800f_6fae09f52bcd Power Management _c7c499ad_c678_42a7_afce_88b752c5fe06 Nextflow _ddf1c1ef_ff5a_4b0e_a08c_0faffcaa8c57 📰 Annotation is Now a Web Standard _f0daa053_2787_4eb3_98f0_2951ee7e6b8a Text Indexes _a546d3f1_7087_4498_bbd7_41f79737fd67 Nix _4393a99c_3f1e_4815_9080_6d5bf167edf6 SinOficina _e98d92f7_7014_47c4_920a_7ea9af4012f2 2023 _2d01dbbd_2f9c_4df8_b2cb_5f50871b2375 Using SSH_ASKPASS to enter passwords _fa60ed1c_ba05_4860_b44b_69f3d66143ba 🪧 Web Radios _2f765124_b2af_4c6d_a866_a54b4e2db6aa interfacelift _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95 🪧 Notes index _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_71d2dd6c_f559_4591_9fa3_0bbe72066694 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_826af88a_7ddf_48ca_bc2f_6e8aa4bea45d _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_923355e3_8e39_4262_800f_6fae09f52bcd _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_c7c499ad_c678_42a7_afce_88b752c5fe06 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_ddf1c1ef_ff5a_4b0e_a08c_0faffcaa8c57 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_f0daa053_2787_4eb3_98f0_2951ee7e6b8a _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_a546d3f1_7087_4498_bbd7_41f79737fd67 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_2d01dbbd_2f9c_4df8_b2cb_5f50871b2375 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_fa60ed1c_ba05_4860_b44b_69f3d66143ba _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_2f765124_b2af_4c6d_a866_a54b4e2db6aa _9e8e6cf4_a5d3_464b_b3c6_00a15fdde8da OpenCL _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_9e8e6cf4_a5d3_464b_b3c6_00a15fdde8da _e60d7e74_d928_40aa_a92b_baf498132a7c Data visualization tools _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_e60d7e74_d928_40aa_a92b_baf498132a7c _4994460c_7ec1_4549_b7d3_49626449279e Video _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_4994460c_7ec1_4549_b7d3_49626449279e _a9bdb8e2_0f07_4a6b_a8f3_5efb91885003 Agile _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_a9bdb8e2_0f07_4a6b_a8f3_5efb91885003 _06a565ca_dccc_4c91_97eb_df88411d8c3b Alternativas veganas a ingredientes _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_06a565ca_dccc_4c91_97eb_df88411d8c3b _e0d70001_99e1_40c9_a4c6_45914fa8efdc Tools _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_e0d70001_99e1_40c9_a4c6_45914fa8efdc _2571fba1_f9d7_4e20_b4db_411346de6d94 Toki Pona _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_2571fba1_f9d7_4e20_b4db_411346de6d94 _690c9a2c_68f1_47c9_8aaf_9c2e49ab1624 SystemD _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_690c9a2c_68f1_47c9_8aaf_9c2e49ab1624 _b2d14460_4ac5_4063_9d54_68bbcd7bdf9d Asynchronous Programming _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_b2d14460_4ac5_4063_9d54_68bbcd7bdf9d _179eaad5_7917_4501_b7ce_9c95f23ef72f 📰 Untangling the Tale of Ada Lovelace _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_179eaad5_7917_4501_b7ce_9c95f23ef72f _225fe2a4_d976_4a01_a8e5_8aa87a11b697 Shader school _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_225fe2a4_d976_4a01_a8e5_8aa87a11b697 _1e8d9642_ac82_4032_8c6f_832188262baa Flush Google's public DNS cache _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_1e8d9642_ac82_4032_8c6f_832188262baa _38a63f3b_cab1_44fc_8637_e8d79a4a2eef Joy.js – make happy little programs _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_38a63f3b_cab1_44fc_8637_e8d79a4a2eef _2f74ff0f_b2b6_4c58_9767_fd5bf46a3c6f 📰 Writing an LLM from scratch, part 1 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_2f74ff0f_b2b6_4c58_9767_fd5bf46a3c6f _e00d4151_70fe_41b3_9898_83025e903880 Quantum Games _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->_e00d4151_70fe_41b3_9898_83025e903880 _ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95->__0:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd _ffc5f3aa_853a_4ece_a104_c2348bef66f0 Power _b05005f6_78b4_4524_bfc7_0adb920b3b08 Sub 2 __0:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_ea48ec1d_f9d4_4fb7_b39a_faa7b6e2ba95 __1:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_0873a209_b9df_4bf3_b65e_2f425c5a2adc __2:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_71d2dd6c_f559_4591_9fa3_0bbe72066694 __3:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_826af88a_7ddf_48ca_bc2f_6e8aa4bea45d __4:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_923355e3_8e39_4262_800f_6fae09f52bcd __5:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_c7c499ad_c678_42a7_afce_88b752c5fe06 __6:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_ddf1c1ef_ff5a_4b0e_a08c_0faffcaa8c57 __7:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_f0daa053_2787_4eb3_98f0_2951ee7e6b8a __8:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_a546d3f1_7087_4498_bbd7_41f79737fd67 __9:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_4393a99c_3f1e_4815_9080_6d5bf167edf6 __10:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_e98d92f7_7014_47c4_920a_7ea9af4012f2 __11:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_2d01dbbd_2f9c_4df8_b2cb_5f50871b2375 __12:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_fa60ed1c_ba05_4860_b44b_69f3d66143ba __13:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_2f765124_b2af_4c6d_a866_a54b4e2db6aa __14:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_9e8e6cf4_a5d3_464b_b3c6_00a15fdde8da __15:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_e60d7e74_d928_40aa_a92b_baf498132a7c __16:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_ffc5f3aa_853a_4ece_a104_c2348bef66f0 __17:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_4994460c_7ec1_4549_b7d3_49626449279e __18:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_a9bdb8e2_0f07_4a6b_a8f3_5efb91885003 __19:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_06a565ca_dccc_4c91_97eb_df88411d8c3b __20:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_e0d70001_99e1_40c9_a4c6_45914fa8efdc __21:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_2571fba1_f9d7_4e20_b4db_411346de6d94 __22:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_690c9a2c_68f1_47c9_8aaf_9c2e49ab1624 __23:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_b2d14460_4ac5_4063_9d54_68bbcd7bdf9d __24:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_179eaad5_7917_4501_b7ce_9c95f23ef72f __25:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_225fe2a4_d976_4a01_a8e5_8aa87a11b697 __26:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_1e8d9642_ac82_4032_8c6f_832188262baa __27:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_38a63f3b_cab1_44fc_8637_e8d79a4a2eef __28:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_2f74ff0f_b2b6_4c58_9767_fd5bf46a3c6f __29:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_e00d4151_70fe_41b3_9898_83025e903880 __30:cluster_6eed20c1_d778_4b23_a04e_fc245ad8eccd->_b05005f6_78b4_4524_bfc7_0adb920b3b08
# /// script
# dependencies = [
#     "matplotlib",
#     "networkx",
# ]
# ///
graph_path = '/home/kenkeiras/repos/codigoparallevar/_gen/notes/graph.json'
ignored_nodes = (
    # Index
    'ea48ec1d-f9d4-4fb7-b39a-faa7b6e2ba95',
    '096ddc7b-e98e-40bf-b0d0-0b447d54265c',
    # This note
    '6eed20c1-d778-4b23-a04e-fc245ad8eccd',
)

import matplotlib.pyplot as plt, json, networkx

data = json.load(open(graph_path))

graph = networkx.DiGraph()
for k, v in data.items():
    for l in v['links']:
        graph.add_edge(k, l['target'].split(':')[-1])

for node_id in ignored_nodes:
    graph.remove_node(node_id)

subgraphs = list(networkx.connected_components(graph.to_undirected()))

centers = []
for subgraph in subgraphs:
    sg = networkx.DiGraph()
    any_found = False
    for k in subgraph:
        if k not in data:
            continue
        v = data[k]
        for l in v['links']:
            sg.add_edge(k, l['target'].split(':')[-1])
            any_found = True

    if not any_found:
        continue
    sg_centers = networkx.center(sg.to_undirected())
    if data.get(sg_centers[0], {}).get('title'):
        centers.append(f'[[id:{sg_centers[0]}][{data.get(sg_centers[0], {})["title"]}]]')
return '\n'.join(centers)

- [[id:f0daa053-2787-4eb3-98f0-2951ee7e6b8a][Text Indexes]]
- [[id:a546d3f1-7087-4498-bbd7-41f79737fd67][Nix]]
- [[id:4994460c-7ec1-4549-b7d3-49626449279e][Video]]
- [[id:b2d14460-4ac5-4063-9d54-68bbcd7bdf9d][Asynchronous Programming]]
- [[id:71d2dd6c-f559-4591-9fa3-0bbe72066694][NoiseTorch - Noise reduction]]
- [[id:e0d70001-99e1-40c9-a4c6-45914fa8efdc][Tools]]
- [[id:826af88a-7ddf-48ca-bc2f-6e8aa4bea45d][Math note apps]]
- [[id:923355e3-8e39-4262-800f-6fae09f52bcd][Power Management]]
- [[id:c7c499ad-c678-42a7-afce-88b752c5fe06][Nextflow]]
- [[id:ddf1c1ef-ff5a-4b0e-a08c-0faffcaa8c57][Annotation is Now a Web Standard]]
- [[id:a9bdb8e2-0f07-4a6b-a8f3-5efb91885003][Agile]]
- [[id:4393a99c-3f1e-4815-9080-6d5bf167edf6][SinOficina]]
- [[id:e98d92f7-7014-47c4-920a-7ea9af4012f2][2023]]
- [[id:2d01dbbd-2f9c-4df8-b2cb-5f50871b2375][Using SSH_ASKPASS to enter passwords]]
- [[id:fa60ed1c-ba05-4860-b44b-69f3d66143ba][Web Radios]]
- [[id:2f765124-b2af-4c6d-a866-a54b4e2db6aa][interfacelift]]
- [[id:e60d7e74-d928-40aa-a92b-baf498132a7c][Data visualization tools]]
- [[id:ffc5f3aa-853a-4ece-a104-c2348bef66f0][Power]]
- [[id:9e8e6cf4-a5d3-464b-b3c6-00a15fdde8da][OpenCL]]
- [[id:179eaad5-7917-4501-b7ce-9c95f23ef72f][Untangling the Tale of Ada Lovelace]]
- [[id:1e8d9642-ac82-4032-8c6f-832188262baa][Flush Google's public DNS cache]]
- [[id:225fe2a4-d976-4a01-a8e5-8aa87a11b697][Shader school]]
- [[id:e00d4151-70fe-41b3-9898-83025e903880][Quantum Games]]
- [[id:38a63f3b-cab1-44fc-8637-e8d79a4a2eef][Joy.js – make happy little programs]]
- [[id:06a565ca-dccc-4c91-97eb-df88411d8c3b][Alternativas veganas a ingredientes]]
- [[id:2571fba1-f9d7-4e20-b4db-411346de6d94][Toki Pona]]
- [[id:690c9a2c-68f1-47c9-8aaf-9c2e49ab1624][SystemD]]
- [[id:2f74ff0f-b2b6-4c58-9767-fd5bf46a3c6f][Writing an LLM from scratch, part 1]]
- [[id:b05005f6-78b4-4524-bfc7-0adb920b3b08][Sub 2]]