[–] [S] 1 point 2 months ago (1 child)

To me it looked like this command just copies provided .desktop file to ~/.local/share/applications/ directory. Also, there's xdg-desktop-menu uninstall whatever.dekstop which is effectively the same as removing .desktop file from this directory. Probably just copying and removing files is more natural.

  • source
  • parent
  • context
  • [–] [S] 48 points 2 months ago (4 children)

    Ok, finally I've found solution! Obviously I found it 0.0001 seconds after I publicly asked this question.

    Problem is that "Games" menu in mentioned /home/user/.config/menus/applications-kmenuedit.menu XML file does not contain a <Merge type="files"/> tag, that's why KDE Kickoff Application Menu was ignoring .desktop files if they belong to this category. And every sample .desktop file I've created probably belonged to Games category.

    I changed this XML file to be like this:

    <Menu>
      <Name>Games</Name>
      <Include/>
      <Exclude>
       <Filename>Quake.desktop</Filename>
      </Exclude>
      <Layout>
       <Merge type="menus"/>
       <Merge type="files"/>
    

    Now it seems like everything works as expected. I don't understand why it doesn't work by default.

  • source
  •  

    How do you add new application to this "All Applications" menu (and optionally to some of categories) without using GUI "Edit Applications" menu (named "KDE Menu Editor")?

    It may sound like a simple task but I've already spent several hours on this with no success.

    When you download an app instead of getting it from package manager, you may want to add it to Application Launcher so it will not get lost.

    I have myapp.AppImage file, it's working, I've created .desktop file and tried to place it into some system directories (e.g. ~/.local/share/applications/myapp.desktop) or calling xdg-desktop-menu install myfile.desktop but to no avail. New app doesn't appear in All Applications or specified category, it appears only as a search result, when you start typing its name.

    Creating new menu items with GUI "KDE Menu Editor" affects "/home/user/.config/menus/applications-kmenuedit.menu" XML file, but this file doesn't look like it should be edited manually.

    Can you please try adding custom executable to this menu yourself and see if you will succeed? Am I trying to do something quirky and is wrong about expecting this task to be simple?

    My system is Kubuntu 26.04, KDE Plasma 6.6.6.

     

    cross-posted from: https://mander.xyz/post/54891525

    Interactive map: https://podbrushkin.github.io/col-tree-of-life.html

    Images: Phylums, Classes, Orders.

    It's a full Eukaryota domain (2,631,744 taxa) from Catalogue of Life database. Taxonomic hierarchy represented as a set of nested polygons generated by Voronoi Treemap algorithm written by Arlind Nocaj. At each zoom level polygons of certain rank (e.g. phylum) are filled with glass pebble effect and black labels are applied to them.

    Dataset overview

    Catalogue of Life - is a taxonomy database, you can download it's data here.

    ColDP Base release is a 1gb ZIP archive. Among other files it contains NameUsage.tsv text file, which is 1.7gb uncompressed, here are first lines of it:

    col:ID	col:alternativeID	col:nameAlternativeID	col:sourceID	col:parentID	col:basionymID	col:status	col:scientificName	col:authorship	col:rank	col:notho	col:originalSpelling	col:uninomial	col:genericName	col:infragenericEpithet	col:specificEpithet	col:infraspecificEpithet	col:cultivarEpithet	col:combinationAuthorship	col:combinationAuthorshipID	col:combinationExAuthorship	col:combinationExAuthorshipID	col:combinationAuthorshipYear	col:basionymAuthorship	col:basionymAuthorshipID	col:basionymExAuthorship	col:basionymExAuthorshipID	col:basionymAuthorshipYear	col:namePhrase	col:nameReferenceID	col:namePublishedInYear	col:namePublishedInPage	col:namePublishedInPageLink	col:gender	col:genderAgreement	col:etymology	col:code	col:nameStatus	col:accordingToID	col:accordingToPage	col:accordingToPageLink	col:referenceID	col:scrutinizer	col:scrutinizerID	col:scrutinizerDate	col:extinct	col:temporalRangeStart	col:temporalRangeEnd	col:environment	col:species	col:section	col:subgenus	col:genus	col:subtribe	col:tribe	col:subfamily	col:family	col:superfamily	col:suborder	col:order	col:subclass	col:class	col:subphylum	col:phylum	col:kingdom	col:ordinal	col:branchLength	col:link	col:nameRemarks	col:remarks	col:modified	col:modifiedBy	clb:merged
    8JM4K			2317	8HRST		synonym	Taberinha	Linnavuori, 1959	genus			Taberinha						Linnavuori				1959							c89b49d1-9f78-45ad-b78a-494c571dbf6a		9					zoological																																				false
    8L3XD			1146	8LJHX	8LF38	synonym	Bembidion littorale	(Olivier, 1795)	species				Bembidion		littorale								Olivier				1795	junior homonym								zoological	established																																			false
    
    

    Well, it's a table of 73 columns and 5,382,966 rows. Happily, we don't need all columns and all rows.

    This is a Canis lupus (wolf) record without unnecessary properties:

    col:ID             : QLXL
    col:parentID       : 3GTH
    col:status         : accepted
    col:scientificName : Canis lupus
    col:genericName    : Canis
    col:authorship     : Linnaeus, 1758
    col:rank           : species
    col:code           : zoological
    col:extinct        : false
    

    We are interested in ID and parentID columns. Each taxon has a link to it's parent. By these links we can build entire tree while importing it to database.

    After discarding records with status "synonym" or "misapplied" we are left with 2,686,187 nodes. Now we can make several queries to database to better understand it's structure.

    Here are nodes which do not have a parent:

    n.id  n.scientificName n.depth n.rank   n.descendants
    ----  ---------------- ------- ------   -------------
    CS5HF Eukaryota              0 domain         2631744
    CRLT8 Archaea                0 domain            1045
    L2TCC Viruses                0 unranked         20845
    CRRY6 Bacteria               0 domain           32549
    

    Each of them is a root of it's own tree. Depth of a node is a count of nodes between it and a root node. For Voronoi TreeMap visualization I've took only Eukaryota domain.

    Let's count how many nodes there are at each depth level:

    depth  count
    -----  -----
        0      4
        1     52
        2    237
        3   3266
        4   8835
        5  14203
        6  43211
        7 233669
        8 321627
        9 339333
       10 456165
       11 485906
       12 264157
       13 276720
       14 168828
       15  55316
       16  10931
       17   2452
       18    987
       19    263
       20     25
    

    Most populated depth is 11 with 485906 nodes.

    And how many ranks there are? Here is a count of taxa for each rank:

    rank                 count
    ----                 -----
    realm                    7
    domain                   3
    kingdom                 24
    subkingdom               2
    phylum                 147
    subphylum               35
    infraphylum              5
    parvphylum               2
    superclass               9
    gigaclass                2
    megaclass                1
    class                  491
    subclass               107
    infraclass              25
    subterclass             13
    superorder              45
    order                 1889
    suborder               448
    infraorder             171
    parvorder               36
    nanorder                 4
    superfamily           1507
    epifamily                6
    family               14956
    subfamily             7260
    supertribe              23
    tribe                 5461
    subtribe              1552
    infratribe              53
    genus               217802
    subgenus             13529
    section botany          11
    section zoology         17
    subsection zoology       2
    series                   8
    species            2245825
    subspecies          148451
    variety              25083
    form                  1146
    natio                    1
    unranked                27
    other                    1
    

    Alternatives

    Last four are also made by me.

     

    Interactive map: https://podbrushkin.github.io/col-tree-of-life.html

    Images: Phylums, Classes, Orders.

    It's a full Eukaryota domain (2,631,744 taxa) from Catalogue of Life database. Taxonomic hierarchy represented as a set of nested polygons generated by Voronoi Treemap algorithm written by Arlind Nocaj. At each zoom level polygons of certain rank (e.g. phylum) are filled with glass pebble effect and black labels are applied to them.

    Dataset overview

    Catalogue of Life - is a taxonomy database, you can download it's data here.

    ColDP Base release is a 1gb ZIP archive. Among other files it contains NameUsage.tsv text file, which is 1.7gb uncompressed, here are first lines of it:

    col:ID	col:alternativeID	col:nameAlternativeID	col:sourceID	col:parentID	col:basionymID	col:status	col:scientificName	col:authorship	col:rank	col:notho	col:originalSpelling	col:uninomial	col:genericName	col:infragenericEpithet	col:specificEpithet	col:infraspecificEpithet	col:cultivarEpithet	col:combinationAuthorship	col:combinationAuthorshipID	col:combinationExAuthorship	col:combinationExAuthorshipID	col:combinationAuthorshipYear	col:basionymAuthorship	col:basionymAuthorshipID	col:basionymExAuthorship	col:basionymExAuthorshipID	col:basionymAuthorshipYear	col:namePhrase	col:nameReferenceID	col:namePublishedInYear	col:namePublishedInPage	col:namePublishedInPageLink	col:gender	col:genderAgreement	col:etymology	col:code	col:nameStatus	col:accordingToID	col:accordingToPage	col:accordingToPageLink	col:referenceID	col:scrutinizer	col:scrutinizerID	col:scrutinizerDate	col:extinct	col:temporalRangeStart	col:temporalRangeEnd	col:environment	col:species	col:section	col:subgenus	col:genus	col:subtribe	col:tribe	col:subfamily	col:family	col:superfamily	col:suborder	col:order	col:subclass	col:class	col:subphylum	col:phylum	col:kingdom	col:ordinal	col:branchLength	col:link	col:nameRemarks	col:remarks	col:modified	col:modifiedBy	clb:merged
    8JM4K			2317	8HRST		synonym	Taberinha	Linnavuori, 1959	genus			Taberinha						Linnavuori				1959							c89b49d1-9f78-45ad-b78a-494c571dbf6a		9					zoological																																				false
    8L3XD			1146	8LJHX	8LF38	synonym	Bembidion littorale	(Olivier, 1795)	species				Bembidion		littorale								Olivier				1795	junior homonym								zoological	established																																			false
    
    

    Well, it's a table of 73 columns and 5,382,966 rows. Happily, we don't need all columns and all rows.

    This is a Canis lupus (wolf) record without unnecessary properties:

    col:ID             : QLXL
    col:parentID       : 3GTH
    col:status         : accepted
    col:scientificName : Canis lupus
    col:genericName    : Canis
    col:authorship     : Linnaeus, 1758
    col:rank           : species
    col:code           : zoological
    col:extinct        : false
    

    We are interested in ID and parentID columns. Each taxon has a link to it's parent. By these links we can build entire tree while importing it to database.

    After discarding records with status "synonym" or "misapplied" we are left with 2,686,187 nodes. Now we can make several queries to database to better understand it's structure.

    Here are nodes which do not have a parent:

    n.id  n.scientificName n.depth n.rank   n.descendants
    ----  ---------------- ------- ------   -------------
    CS5HF Eukaryota              0 domain         2631744
    CRLT8 Archaea                0 domain            1045
    L2TCC Viruses                0 unranked         20845
    CRRY6 Bacteria               0 domain           32549
    

    Each of them is a root of it's own tree. Depth of a node is a count of nodes between it and a root node. For Voronoi TreeMap visualization I've took only Eukaryota domain.

    Let's count how many nodes there are at each depth level:

    depth  count
    -----  -----
        0      4
        1     52
        2    237
        3   3266
        4   8835
        5  14203
        6  43211
        7 233669
        8 321627
        9 339333
       10 456165
       11 485906
       12 264157
       13 276720
       14 168828
       15  55316
       16  10931
       17   2452
       18    987
       19    263
       20     25
    

    Most populated depth is 11 with 485906 nodes.

    And how many ranks there are? Here is a count of taxa for each rank:

    rank                 count
    ----                 -----
    realm                    7
    domain                   3
    kingdom                 24
    subkingdom               2
    phylum                 147
    subphylum               35
    infraphylum              5
    parvphylum               2
    superclass               9
    gigaclass                2
    megaclass                1
    class                  491
    subclass               107
    infraclass              25
    subterclass             13
    superorder              45
    order                 1889
    suborder               448
    infraorder             171
    parvorder               36
    nanorder                 4
    superfamily           1507
    epifamily                6
    family               14956
    subfamily             7260
    supertribe              23
    tribe                 5461
    subtribe              1552
    infratribe              53
    genus               217802
    subgenus             13529
    section botany          11
    section zoology         17
    subsection zoology       2
    series                   8
    species            2245825
    subspecies          148451
    variety              25083
    form                  1146
    natio                    1
    unranked                27
    other                    1
    

    Alternatives

    Last four are also made by me.

    [–] [S] 2 points 6 months ago (1 child)

    Why do you think Gephi is using Graphviz? I think it does not. In graphviz there is no Giant Component filter and no centrality statistics, which are part of graph theory. Gephi is closer to graph theory than graphviz is. Graphviz does have some good node placement algorithms, but in general these apps have different scope. Graphviz is a no go for this purpose.

    Gephi, NetworkX or iGraph - pick single one of these and it will be a single tool you need to repeat steps in the post and achieve similar result. But latter two are programming libraries. Managing to get and launch Gephi probably worth the hassle.

  • source
  • parent
  • context
  • [–] [S] 2 points 6 months ago

    I suspect there were no issue in the first place. A lot of time ago, if torrent client encountered files are missing, you had to run long process of verification for them to become available for seeding.

    Now, if torrents switched to "files are missing" you can restart torrent client and seed like if nothing happened. No need for categories even. Also, function "Set location" can be used to move torrent to external storage.

  • source
  • parent
  • context
  •  

    OGDF C++ library provides some graph generators, I made it possible to use them from terminal, not by writing C++ client code. Got some pleasant pictures, here they are.

    1. Graphs of ~32 nodes, FMMM layout.
    2. Graphs of ~512 nodes, FMMM layout.
    3. Graphs of ~512 nodes, ForceAtlas2 layout.

    Each node is labeled by it's degree - count of incoming/outgoing edges. Colored accordingly, from blue to red.

    Powershell code for creating these pictures goes like that:

    # define params for each generator
    $genLines = @'
    complement --n 32 --directed false --allowSelfLoops false
    regularLatticeGraph --n 32 --k 4
    regularTree --n 32 --children 2
    completeGraph --n 32
    completeBipartiteGraph --n 16 --m 16
    wheelGraph --n 32
    cubeGraph --n 5
    globeGraph --meridians 8 --latitudes 4
    suspension --s 32
    gridGraph --n 8 --m 4 --loopN false --loopM false
    petersenGraph --n 16 --m 2
    emptyGraph --nodes 32
    randomRegularGraph --n 32 --d 4
    randomGraph --n 32 --m 100
    randomSimpleGraph --n 32 --m 100
    randomSimpleGraphByProbability --n 32 --pEdge 0.2
    randomSimpleConnectedGraph --n 32 --m 50
    randomBiconnectedGraph --n 32 --m 60
    randomPlanarConnectedGraph --n 32 --m 60
    randomPlanarBiconnectedGraph --n 32 --m 60 --multiEdges false
    randomPlanarBiconnectedDigraph --n 32 --m 60 --p 0.0 --multiEdges false
    randomUpwardPlanarBiconnectedDigraph --n 32 --m 60
    randomPlanarCNBGraph --n 32 --m 60 --b 5
    randomTriconnectedGraph --n 32 --p1 0.5 --p2 0.5
    randomPlanarTriconnectedGraph --n 32 --m 80
    randomPlanarTriconnectedGraph --n 32 --p1 0.3 --p2 0.3
    randomTree --n 32
    randomTree --n 32 --maxDeg 4 --maxWidth 10
    randomDigraph --n 32 --p 0.1
    randomSeriesParallelDAG --edges 60 --p 0.5 --flt 0.0
    randomGeometricCubeGraph --nodes 32 --threshold 0.3 --dimension 2
    randomWaxmanGraph --nodes 32 --alpha 0.5 --beta 0.2 --width 1.0 --height 1.0
    preferentialAttachmentGraph --nodes 32 --minDegree 2
    randomWattsStrogatzGraph --n 32 --k 4 --probability 0.3
    randomHierarchy --n 32 --m 3 --planar true --singleSource true --longEdges false
    pruneEdges --max_edges 60 --min_deg 2
    '@
    
    # generate graphs and layout/render with GephiCommander
    $genLines | % {
    $genCode = $_ -replace '\s+'
    $outFile = Join-Path (gi ./img/) "$genCode$(Get-Date -Format FileDateTime).png"
    $generatorArgs = $_ -split ' '
    $expr = /bin/echo `& $ogdfCli --generate @generatorArgs --out-file delme.dot
    Invoke-Expression $expr
    @(
      @{op='import'; file='delme.dot' }
      @{op='preview'; 'background-color'='#171717'; 'nodeLabelShow'=$true; }
      @{op='colorNodesBy';column='degree'; mode='ranking'}
      @{op='labelNodesBy';column='degree'; }
      @{op='layouts'; values=@(
        @{name='ForceAtlas2'; steps=200}
        @{name='Expansion'; 'Density'=5000; steps=1;  }
      )}
      @{op='export';file=$outFile; timestamp=$false; resolution=@(512,512); }
    ) | ConvertTo-Json -d 9 | java -jar $gephiCommander -
    $cmdEscaped = $generatorArgs -join ' '
    magick $outFile -gravity SouthWest -undercolor "rgba(0,0,0,0.5)" -fill white -pointsize "%[fx:int(h*0.04)]" -annotate +10+10 $cmdEscaped $outFile
    }
    
    # Put all pngs into $files var and combine them into a grid
    magick montage $files -tile "${cols}x${rows}" -geometry "400x400+2+2" -background "black" "img/grid_output$(Get-Date -Format FileDateTime).png"
    
     

    Each packet received by a node has two numeric values - SNR and RSSI. Big values mean good connection, small values mean bad connection.

    You can collect all packets for some period of time and check SNR and RSSI they had. Presumably, they will represent quality of connection between your node and mesh network.

    Can you look at the table below and tell if connection between my node and network is good or bad? Do you think this is a good method to measure quality of connection?

    received         fromId rxSnr  rxRssi portNum
    --------         ------ -----  ------ -------
    2026-04-03 13:48 46e8   -4.5   -117   POSITION_APP
    2026-04-03 13:49 dca4   -8.5   -121   NODEINFO_APP
    2026-04-03 13:49 dca4   -17    -128   
    2026-04-03 13:49 dca4   -0.5   -112   POSITION_APP
    2026-04-03 13:50 c8dc   -15    -120   NODEINFO_APP
    2026-04-03 13:55 5564          -111   POSITION_APP
    2026-04-03 13:57 d77e   -0.5   -111   NODEINFO_APP
    2026-04-03 13:57 0fe0   -14.5  -120   TEXT_MESSAGE_APP
    2026-04-03 13:57 0fe0   1      -110   TEXT_MESSAGE_APP
    2026-04-03 14:02 d390   -18.25 -128   TELEMETRY_APP
    2026-04-03 14:02 c8dc   -9     -121   TELEMETRY_APP
    2026-04-03 14:04 dca4   -0.5   -112   POSITION_APP
    2026-04-03 14:06 5564   -2.75  -111   POSITION_APP
    2026-04-03 14:10 30bc   1.25   -110   TELEMETRY_APP
    2026-04-03 14:10 dd18   -1     -110   POSITION_APP
    2026-04-03 14:10 30bc   -9     -121   
    2026-04-03 14:11 a54c   -10.5  -121   POSITION_APP
    2026-04-03 14:11 a54c   -10.25 -122   
    2026-04-03 14:23 c8dc   -10    -122   TELEMETRY_APP
    2026-04-03 14:25 46e8   -15.25 -122   NODEINFO_APP
    2026-04-03 14:26 5564   -7.25  -119   TELEMETRY_APP
    2026-04-03 14:26 1f3c   0.75   -110   NODEINFO_APP
    2026-04-03 14:27 dd18   1      -110   NODEINFO_APP
    2026-04-03 14:29 e278   1.75   -109   POSITION_APP
    2026-04-03 14:33 0fe0   -12    -124   POSITION_APP
    2026-04-03 14:33 0fe0   -20.5  -127   
    2026-04-03 14:33 0fe0   -8.75  -121   TELEMETRY_APP
    2026-04-03 14:34 dca4   -10.75 -122   POSITION_APP
    2026-04-03 14:35 c994   -11.75 -123   NODEINFO_APP
    2026-04-03 14:38 5564          -110   POSITION_APP
    

    In 3 hours I've got 99 packets with average SNR ~= -6 and average RSSI ~= -117. Is it good or bad?

    How to get this data

    In case if anyone is curious on how to get this data, here's how I did it with Python and Powershell:

    1. Install Meshtastic Python library;
    2. Download this script: https://github.com/pdxlocations/Meshtastic-Python-Examples/blob/main/print-packets-json.py
    3. In script, change connection type to appropriate, e.g. to Bluetooth;
    4. Run script: python3 ./print-packets-json-and-send.py | Add-Content ./packets-all.json;

    This script will connect to your node and will start appending all packets in json format to packets-all.json file. Example of a packet (with some parts replaced with blabla):

    {
      "from": 2896903512,
      "to": 4294967295,
      "decoded": {
        "portnum": "NODEINFO_APP",
        "payload": "blabla",
        "bitfield": 1,
        "user": {
          "id": "!acab3d58",
          "longName": "blabla_basic",
          "shortName": "WuGb",
          "macaddr": "2IWsqz1Y",
          "hwModel": "HELTEC_V3",
          "role": "CLIENT_BASE",
          "publicKey": "Vkblabla",
          "isUnmessagable": true,
          "raw": "blabla"
        }
      },
      "id": 1719174,
      "rxTime": 1775212872,
      "rxSnr": -5.5,
      "hopLimit": 3,
      "rxRssi": -118,
      "viaMqtt": true,
      "hopStart": 6,
      "relayNode": 60,
      "transportMechanism": "TRANSPORT_LORA",
      "raw": "blabla",
      "fromId": "!acab3d58",
      "toId": "^all"
    }
    

    Now you can query this file from another terminal tab, there's no need to interrupt running Python script.

    1. This is powershell command I've used to create table above:
    $headers = 'received,exported,fromId,rxSnr,rxRssi,portNum,text' -split ','
    gc -Raw ./packets-all.json | sls -allm '(?smi)\n(\{.*?\n\})' | % Matches | % {$_.Groups[1].Value} | ConvertFrom-Json -de 99 | ? fromId -ne '!myOwnId' | % {
    $received = [DateTimeOffset]::FromUnixTimeSeconds([int]$_.rxtime).ToLocalTime().LocalDateTime.ToString('yyyy-MM-dd HH:mm');
    $exported = $_.exportedtime ? [DateTimeOffset]::FromUnixTimeSeconds([int]$_.exportedtime).ToLocalTime().LocalDateTime.ToString('yyyy-MM-dd HH:mm:ss') : $null;
    $from = $_.fromId ? $_.fromId.substring(5,4) : '????'
    $received,$exported,$from,$_.rxSnr,$_.rxRssi,$_.decoded.portNum,$_.decoded.text -join "`t"
    } | ConvertFrom-Csv -delim "`t" -hea $headers | select -Last 30 -excl exported,text | Format-Table
    
    [–] [S] 3 points 7 months ago (2 children)

    Thank you for this clarification, I will try to exit qbit and launch it again when HDD is accessible. Maybe it will reset those error statuses. I think it didn't work some years ago (error status remained, had to start verification).

  • source
  • parent
  • context
  • [–] [S] 4 points 7 months ago (7 children)

    I can move, but next time when I will launch qbt without external HDD accessible, those torrents will gain error status "Files not found" and will require a long verification process. This is what I'm trying to avoid.

    I will check how categories can help managing this, thx

  • source
  • parent
  • context
  •  

    My torrent client downloads files to internal SSD. When I'm low on storage (often), I remove some torrents from qbittorrent and move files to external HDD. It means I can't seed them anymore.

    I want to be able to seed HDD torrents periodically. What workflow can I employ? I can think of:

    1. Use 2 different torrent clients. One with "external" torrents only. It will never be launched when external HDD is not plugged in, therefore old torrents will not be marked as "missing files" and will not require verification every now and then;

    2. Use single torrent client which can accept CLI commands to start/stop specific torrents. Before detaching external HDD I will run a script to stop all external torrents. I will resume them back again only when HDD is accessible.

    Any other ideas?

     
    1. Power on your node in the morning. It is not connected to any smartphone or PC via BT/USB/HTTP;
    2. In the evening, connect to it via BT/USB/HTTP;
    3. Access all messages received in Primary channel and/or DMs.

    Is it possible? How many messages does a node store in it's internal memory? How to access them via terminal? If node is restarted, are they erased?

    I have a Heltec V3. In Meshtatsic CLI there's --listen option, but it's about receiving new packages in real time.

     

    cross-posted from: https://mander.xyz/post/49700074

    On Mastodon, if you have an account on instance X, you can follow someone who is on instance Y. It creates a connection: X -> Y. If there are a lot of such follows, weight of this edge will increase, attractive force between points will be higher.

    Original explanation on the page of Kaggle dataset:

    "active users" graphs: For each instance, we consider the set of the 10K most recently active users. Then, for each user of an instance X, we consider the list of the users they follow, and add 1 to the edge from X to Y where Y is the instance the followed users. The weight of the edge from X to Y thus encodes how much the content seen on instance X is generated in instance Y. Note that this graph thus contains self loops.

    I've tried to layout this dataset in Gephi, but it was a classic hairy ball - everyone is connected to everyone, amount of edges is too high comparing to number of nodes. Then, I've filtered out all EN instances and suddenly got a meaningful picture:

    graph

    What can we see? If English-speaking instances are ignored, German, French and Japanese languages are most common across Mastodon. Japan and Korea don't hang around much with other folks, while French, German and Spanish instances are quite interconnected between each other.

    Size of nodes depends on centrality, post about centrality of Peertube instances is here.

    Gephi table

    Same, but Fruchterman-Reingold algorithm instead of ForceAtlas 2:

    FR

    Mastodon active users dataset can be downloaded here: https://www.kaggle.com/datasets/marcdamie/fediverse-graph-dataset-reduced

     

    On Mastodon, if you have an account on instance X, you can follow someone who is on instance Y. It creates a connection: X -> Y. If there are a lot of such follows, weight of this edge will increase, attractive force between points will be higher.

    Original explanation on the page of Kaggle dataset:

    "active users" graphs: For each instance, we consider the set of the 10K most recently active users. Then, for each user of an instance X, we consider the list of the users they follow, and add 1 to the edge from X to Y where Y is the instance the followed users. The weight of the edge from X to Y thus encodes how much the content seen on instance X is generated in instance Y. Note that this graph thus contains self loops.

    I've tried to layout this dataset in Gephi, but it was a classic hairy ball - everyone is connected to everyone, amount of edges is too high comparing to number of nodes. Then, I've filtered out all EN instances and suddenly got a meaningful picture:

    graph

    What can we see? If English-speaking instances are ignored, German, French and Japanese languages are most common across Mastodon. Japan and Korea don't hang around much with other folks, while French, German and Spanish instances are quite interconnected between each other.

    Size of nodes depends on centrality, post about centrality of Peertube instances is here.

    Gephi table

    Same, but Fruchterman-Reingold algorithm instead of ForceAtlas 2:

    FR

    Mastodon active users dataset can be downloaded here: https://www.kaggle.com/datasets/marcdamie/fediverse-graph-dataset-reduced

     

    cross-posted from: https://mander.xyz/post/49566880

    This is a graph of Peertube instances following each other. There are 942 nodes and 10067 edges.

    Eigenvector centrality

    On Peertube, an instance X can follow an instance Y to let its users see all the videos posted on Y. This graph is a directed graph.

    Color and size of nodes depends on how big their Eigenvector centrality is. Nodes which have 0 centrality are blue and small, nodes with bigger centrality are big and red.

    What centrality represents? Instances which are not followed by anyone have 0 centrality. Instances (A) with a lot of followers (B) have bigger centrality. If those followers (B) themselves have followers (C), it means centrality of A will be even higher.

    Does it mean anything in context of Peertube? I'm not sure. Considering chain of three instances: (A) <- (B) <- (C), when (A) posts a video, does it appear in (C)? Probably not. But if it was so, then centrality would've mean this: Videos posted on instances with high centrality spread across entire network, while videos posted on instances with 0 centrality are not visible anywhere else.

    Here are top 10 instances and their centrality:

    How to repeat this graph visualization

    1. Download latest Peertube instances.csv and interactions.csv files here: https://www.kaggle.com/datasets/marcdamie/fediverse-graph-dataset-reduced
    2. Import them to Gephi;
    3. Apply Giant Component filter to remove nodes which are not connected to biggest network;
    4. Apply ForceAtlas 2 layout;
    5. Run Eigenvector centrality Statistics (directed). It will add a new column to nodes table;
    6. Apply Nodes - Color - Ranking - Eigenvector centrality;
    7. Apply Nodes - Size - Ranking - Eigenvector centrality;
    8. Configure Preview and export.

    Gephi

    P.S. On colorful image used as thumbnail of this post nodes are colored by Modularity (community detection).

     

    This is a graph of Peertube instances following each other. There are 942 nodes and 10067 edges.

    Eigenvector centrality

    On Peertube, an instance X can follow an instance Y to let its users see all the videos posted on Y. This graph is a directed graph.

    Color and size of nodes depends on how big their Eigenvector centrality is. Nodes which have 0 centrality are blue and small, nodes with bigger centrality are big and red.

    What centrality represents? Instances which are not followed by anyone have 0 centrality. Instances (A) with a lot of followers (B) have bigger centrality. If those followers (B) themselves have followers (C), it means centrality of A will be even higher.

    Does it mean anything in context of Peertube? I'm not sure. Considering chain of three instances: (A) <- (B) <- (C), when (A) posts a video, does it appear in (C)? Probably not. But if it was so, then centrality would've mean this: Videos posted on instances with high centrality spread across entire network, while videos posted on instances with 0 centrality are not visible anywhere else.

    Here are top 10 instances and their centrality:

    How to repeat this graph visualization

    1. Download latest Peertube instances.csv and interactions.csv files here: https://www.kaggle.com/datasets/marcdamie/fediverse-graph-dataset-reduced
    2. Import them to Gephi;
    3. Apply Giant Component filter to remove nodes which are not connected to biggest network;
    4. Apply ForceAtlas 2 layout;
    5. Run Eigenvector centrality Statistics (directed). It will add a new column to nodes table;
    6. Apply Nodes - Color - Ranking - Eigenvector centrality;
    7. Apply Nodes - Size - Ranking - Eigenvector centrality;
    8. Configure Preview and export.

    Gephi

    P.S. On colorful image used as thumbnail of this post nodes are colored by Modularity (community detection).

     

    Every single tracker displays how many seeders/peers each torrent have, but not ABB. Why?

    Imagine being able to sort search results by seeders count. Or getting a table of top 200 audiobooks. Or finding valuable torrents which are on the verge of dying and supporting them.

    In source of "Recent audiobooks" HTML page there's a trace of hidden "Seeds" column, maybe some time before it was possible to see these counts.

    Are there any other way to get this data?

    I've seen a torrent tracker which mirrors all torrents from ABB (adds them to its own catalog), seeds counts have been available for these torrents, but I don't remember what was this tracker, also it wasn't possible to find all torrents by source (ABB in this case).

    EDIT: Probably I was talking about 1337x tracker, it does have some overlapping content with ABB, but it doesn't mirror everything. There's a table of all audiobooks which can be sorted by seeds, but you can't search through this category only.

    view more: next ›