Spyke

Posts

How to add new item to KDE Application Launcher from terminal?

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.

View original on mander.xyz
84

Taxonomic map - Catalogue of Life

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.

View original on mander.xyz
5
meshtastic·Meshtasticbypodbrushkin

Measure SNR and RSSI of all incoming packets

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
View original on mander.xyz
3
meshtastic·Meshtasticbypodbrushkin

Do you have to be always connected to your node?

  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.

View original on mander.xyz
15

Mastodon - Graph of Non-English Instances [17MB]

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:

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.

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

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

View original on mander.xyz
109

Graph of Peertube - Centrality

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.

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.

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

View original on mander.xyz
47
audiobookbay·Audiobook Baybypodbrushkin

Why there's no seeders/peers counts in ABB?

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 original on mander.xyz
5
audiobookbay·Audiobook Baybypodbrushkin

No one downloads from me

Doesn't seem like I'm doing much keeping this files alive on my PC.

Can it be related to me not having public IP address? Or living in a place where not many people speak english (language of audiobooks)?

If connecting to me is troublesome because of dynamic IP, then why there's green globe at the bottom, what does it mean? Initially it's a fire icon. I did some port forwarding in wifi router settings, but I'm not sure if it have any meaning when you don't have public IP.

View original on mander.xyz
10

NSFW should be completely hidden by default in Pixelfed

I've just created an account and in no more than two minutes a huge vagina appeared on my screen. This is problem.

Not that I have something against vaginas on my screen, but usually it takes some effort and commitment to make them available for observation. This time it was...

Well, ok, I did switch to Global feed, and there was a sensitive content warning, and I did click "See post", but still it was too fast. It was a huge blurred square on my screen, obviously I had to unveil this mystery.

Now I can't recommend Pixelfed to anyone in real life, because these pictures are just a few clicks away.

How I think it should be: when you create an account, "Hide NSFW content" option is enabled by default and such posts do not appear in your feeds or search results. If you wish, you can go to settings and enable it. "Blur NSFW content" is another checkbox enabled by default.

Right now there are no such settings at all. All I've found - is a quest of just six simple steps of creating a new filter. A quest should be needed to enable these images, not to disable them.

View original on mander.xyz
-11

List of Fediverse instances

After all, why not? Why shouldn't I post it here?

It's a list of lists of Fediverse instances. Also, it contains some other lists of lists like this one. And a couple of miscellaneous resources. Tor tips can be ignored, they are region-specific.




Originally, I was trying to find a dataset, where for each instance there's a list of other instances it blocked/federated/defederated. In the process of trying to find this data I've compiled this list. Do you happen to know where I can find such data?

View original on mander.xyz
82

Blu-ray is readable with duct tape on it

I've put a tiny piece of blue tape on Blu-ray disc with data, and, surprisingly, it was still fully readable (reading speed dropped at this place, that's all).

Next, I've put a slightly bigger piece of tape on it, and it made ~15% of disc unreadable. Reading "damaged" areas is quite slow, so I interrupted ddrescue/dvdisaster when data reading speed dropped too low, and it was around 15%.

Both results are strange to me. First is almost too good to believe, second is too bad. Maybe data behind little piece of tape have been recovered by internal Error Correction Code? And big piece, sure it didn't cover 15% of readable surface. Maybe full "recover" by ddrescue would have copied a lot more data, but I doubt it.

Why do you put tape on your disc?

I was trying to proof DVDisaster application works and will be able to recover missing data. I've failed to do so.

View original on mander.xyz
15

Put screen time in your bash prompt

Paste this into Bash:

get_screen_time() {
since=${1:-today}
until_opt=${2:+--until "$2"}

journalctl --output json -u systemd-logind --since "$since" $until_opt | \
jq -r 'select(.MESSAGE_ID and .__REALTIME_TIMESTAMP) |
if (.MESSAGE | test("Lid opened|Starting systemd-logind|Operation .suspend. finished")) then
  .__REALTIME_TIMESTAMP + " start"
elif (.MESSAGE | test("Lid closed|Stopping systemd-logind|system will suspend")) then
  .__REALTIME_TIMESTAMP + " stop"
else
  empty
end' | \
awk -v current_time=$(date +%s%6N) '
{
    if ($2 == "start") {
        last_start = $1
    } else if ($2 == "stop" && last_start != 0) {
        total += ($1 - last_start) / 1000000
        last_start = 0
    }
}
END {
    if (last_start != 0) {
        total += (current_time - last_start) / 1000000
    }
    seconds = int(total)
    hours = int(seconds/3600)
    minutes = int((seconds%3600)/60)
    printf "%02d:%02d", hours, minutes
}'
}
PS1='$(get_screen_time) '$PS1

Now you have screen time for today in your prompt:

00:21 user@asus:~/Documents$ 
00:21 user@asus:~/Documents$ cd ../Pictures/
00:21 user@asus:~/Pictures$

Cool?

View original on mander.xyz
56

[OC] Full Tree of Life (NCBI edition)

NCBI Tree of Life

Felt cute, might delete later.

Entire taxonomy tree visible at once, 1M+ taxa. Based on NCBI database, layout made with Voronoi Treemap.

  • Now with smooth zooming;
  • Can switch between higher/lower scaling;
  • Pale prerendered labels from higher zoom level;
  • Thin stroke of polygons from lower zoom level;
  • Without unclassified taxa;
  • NCBI provides very detailed hierarchy.

Previous versions:

Dataset is here: taxdmp.zip.

View original on mander.xyz
29

How to change screen saturation?

Ubuntu, Gnome, Wayland, nVidia, Intel integrated graphics.

I have a wide-gamut OLED screen. When regular sRGB is mapped to it, it leads to oversaturation. I can use color profiles in color managed applications to get accurate colors, but it's not system-wide and it have no effect on most of the apps. On Windows 11, I was able to change hue/saturation both in Intel Command Center and in ASUS preinstalled bloatware. On Linux, I've spent a lot of time, built below markdown file and I still have no suitable saturation control. Did I miss something?

If you're using KDE and you have a swappedRedAndGreen.icc color profile preinstalled in your color management settings, can you enable it to check if it affects whole system or only color managed applications (like some of image viewers)? If you have SDR Color Intensity in your KDE Display settings and it works, can you check if CTM is supported by your system (xrandr --properties | grep ctm)?

Gnome Extensions

There are some saturation extensions which work nice for X11 but bad for Wayland+fractional scaling, they degrade performance in any case: https://extensions.gnome.org/ https://github.com/zb3/gnome-saturation-extension

nVidia Settings

In some systems nVidia control panel has color settings:

nvidia-settings

Should look like this: https://askubuntu.com/a/664299 but no such option for me. Maybe switching between Open/Proprietary nvidia drivers will enable color settings? When I switch Primary GPU from Intel to nVidia and reboot, new props appear, but no color props. ctm doesn't appear in xrandr either. xrandr display id changes to eDP-1-1. Performance and heat issues appear. Mouse lags a little bit.

xrandr and xcalib

X11 only.

# You can make white less white, but can't change black in xrandr with gamma/brightness props:
xrandr --output eDP-1 --gamma ('{0}:{0}:{0}' -f 1.9) --brightness 0.5

# This one changes black point!
xcalib -brightness 10 -alter 

xcalib defaults: gamma=1.0 brightness=0.0 and contrast=100.0.

To reset xcalib use one of these:

  • Restart PC;
  • Alt+F2 -> xcalib -clear -> Enter;
  • Ctrl+Alt+Delete and wait for 60s or press Right, Enter

xrandr BroadcastRGB

# Check Broadcast RGB available values (default: Automatic):
xrandr --props | sls 'Broadcast RGB' -Context 0,1 | select -f 1
#>       Broadcast RGB: Limited 16:235
#                supported: Automatic, Full, Limited 16:235

# Change to Limited:
xrandr --output eDP-1 --set "Broadcast RGB" "Limited 16:235"
# Black is now less black, white is less white, screen is softer.
# Will reset to default after reboot.

libvibrant

X11 only https://github.com/libvibrant/libvibrant https://unix.stackexchange.com/a/730078

git clone --depth 1 https://github.com/libvibrant/libvibrant.git
# sudo apt install cmake
# sudo apt install libx11-dev libxrandr-dev libxext-dev libxi-dev
# sudo apt install nvidia-settings libxnvctrl-dev
cmake ..
& ./build/cli/vibrant-cli --version

# FAIL
# CTM should be supported by driver/display for libvibrant to work:
# xrandr --properties | sls ctm

For non-laptop screens there are ddcutil and ddccontrol. They should work as if you're changing your settings using physical buttons on your display.

KDE has saturation settings? https://zamundaaa.github.io/wayland/2023/12/18/update-on-hdr-and-colormanagement-in-plasma.html "SDR Color Intensity" option. Maybe it relies on CTM?

KDE can affect whole screen appearance with regular ICC profiles without VCGT tag?

View original on mander.xyz
23

Can you get Clipboard History on Gnome+Wayland?

I wanted a simple clipboard history on Win+V.

I've installed CopyQ - it's ugly, starts with a lag and doesn't quite work on Super+V shortcut. I've switched to Wayland and it silently stopped working altogether.

Next, I've installed Gnome Clipboard History Extension - it looks good, fast, works on Super+V, but for some reason it can't paste into Kate text editor.

Is it possible to get a reliable clipboard history manager on Gnome+Wayland, or should I stop wasting my time? Maybe someone has a working solution?

I am a little but frustrated by the obstacles I encounter trying to get this simple feature.

View original on mander.xyz
30

[OC] Full Tree of Life (ITIS edition)

ITIS Tree of Life

Just finished another visualization of entire taxonomy tree. Previous is buried here: GBIF ToL.

Main concept is very simple: each taxon is a point, and each taxon has a clockwise-bent arc from it's parent taxon.

Trick is to place those points in a meaningful way. At first, I was using force-directed algorithm to do it. In general, it succeeded in grouping points by clades, but introduced a lot of branch overlapping (check how purple Echinodermata is "intruded" into Arthopoda in GBIF version).

Force-directed algorithms can layout not only trees, but basically any graph, and I thought: maybe tree-specific algorithm will produce a better result? I've found out there is a cool Voronoi Treemap algorithm which for any given tree can build a set of nested polygons, a polygon for each node in a tree. Not only it eliminates branch overlapping problem, but also it ensures those branches fit into convex polygons and you can even add gaps between adjacent branches. So I've built a CLI wrapper around a Java implementation I've found on GitHub.

At first, I've used it for NCBI database, but I didn't use gaps and haven't published interactive version yet (but there are PNGs in Wikimedia Commons). Then, I've made a treemap for ITIS. Points are points and polygons have been used for mouse hover feature. When I was making force-directed GBIF, I had to separately compute those polygons for each clade of given ranks. Now both points and polygons are computed by an algorithm, which is nice.

What do you think?

View original on mander.xyz
39

Linux terminal with text selection

In all GUI text editors, web browsers and IDE's you can move a cursor:

  • left/right arrows - move by char;
  • ctrl+left/right - move by word;
  • home/end - move to start/end of line.

Add Shift to any of above combination and everything you jumped through now is selected and you can: Ctrl+C, Ctrl+X,Delete to copy/cut/delete selection.

Also, you can Ctrl+Delete and Ctrl+Backspace to delete a next/previous word.

Also, you can Ctrl+Home/End to jump to start of first line or end of last line.

I want this to work when I type in a command in my Terminal.

Is it possible in Linux? It's a vanilla experience in Windows+Powershell, thanks to default PSReadlLine extension. It works both in conhost.exe and in Windows Terminal, but doesn't work in WT + cmd.exe, which makes me think it's PSReadLine which is responsible for this technological perfection.

"But you can't copy with Ctrl+C, it's..." - You can. When something is selected It copies selection to clipboard, otherwise it sends SIGINT.

I'm not bound to any distro or terminal application, but right now I don't see these incredible text editing techniques working even in Ubuntu+Powershell+PSReadLine, to say nothing about the Bash. I've tried installing WezTerm, but it doesn't have text selection either, at least by default. And I'm inclined to think it has nothing to do with terminal emulators at all, since it works in conhost.exe+Powershell.

View original on mander.xyz
138
analog·Film Photographybypodbrushkin

Where to look at analog photographs?

For me, best known source of analog photos is lomography.com, but maybe something else is available? I know of Flickr, but when I’ve tried to use it for this purpose, experience was very poor.

In earlier days analog photography was the only choice, therefore photo archives have been compiled only with film photos. All professional photographers have been working with film. Using internet to look at images was troublesome, and I remember I had a CD with photos of tigers, and nature, and stuff (because how else would you look at a tiger on PC when you don’t have internet connection?). Maybe similar compilation is available to browse/download somewhere?

I feel like this CD is gaining its value again.

View original on mander.xyz
10

[Suggestion] Custom filtering of feed by keywords

I'd like to tweak my feed by hiding all posts containing certain key words, e.g. 'democracy, leftists, murder, liberals, fbi, market' etc.

Basic use case: Don't like what you see? Select keyword -> click RMB -> "Fitler for a week". Now you won't see any posts with this keyword on any Lemmy instance.

Is it possible somehow? Maybe a client with this functionality exists? Does it sound useful to anyone but me?

View original on mander.xyz
11