eylenburg / eylenburg.github.io

https://eylenburg.github.io/
Creative Commons Attribution Share Alike 4.0 International
142 stars 11 forks source link

OS family tree: Visually distinguish decades for improved comprehension #92

Open GfEW opened 1 week ago

GfEW commented 1 week ago

First off, the OS family tree is just awesome! I really appreciate the sisyphean work behind those comparisons and presentations.

By this issue, I'm suggesting a minor improvement to the family tree graph that would, however, greatly improve its "ease of comprehension" - by indicating temporal relations more locally.

The Problem

Currently, the vertical lines look all the same (aside from the horizontal gradient), so it's rather difficult to tell the year you're looking at - unless you scroll all the way up (or down), and then again, all the way back to the spot you're interested in, each time you've lost track. This becomes even more of a nuisance the more you're zoomed in.

That difficulty would vanish if decades were locally recognizable.

Suggested Solutions

Two ideas come to mind:

Additional Remarks

Whilst (a) might be simpler to implement, (b) would be more expressive, allowing to fully recognize decades without scrolling. Actually, you could even combine (b) with (a), as especially the 5 mod 10 lines would further improve reading within each decade. - Anyway, the family tree can be made more easily comprehensible by either solution.

Thanks a lot for considering!

eylenburg commented 1 week ago

I would really like to do this but I don't think the tool I'm using (gnuclad) supports it...

For reference, this is the documentation on configuration options (below is the default config file):

# gnuclad config file

     # This configuration file has been generated by gnuclad 0.2.2

     # If you comment or delete an option,
     # gnuclad will use the built-in defaults.
     # Allowed syntax is:
     #   option=value
     #   option = value
     #   option= 'value'
     #   option ="value"
     #   option = three word value
     #   option = "three word value"
     #   ...

     # Show debug information when running gnuclad. (0 = off, 1 = on)
     debug = 0

     # Modify the appearance of your info box
     # To disable the box:
     # Set both font size parameters to 0, set the width and height to 0
     infoBoxTitle = Title
     infoBoxTitleSize = 18
     infoBoxText = Lorem ipsum dolor sit amet,
     infoBoxText = consectetuer adipiscing elit
     infoBoxTextSize = 12
     infoBoxFont = Liberation Sans, Arial, Helvetica
     infoBoxFontColor = #000
     infoBoxColor1 = #51b1f1
     infoBoxColor2 = #3181f1
     infoBoxX = 10
     infoBoxY = 45
     infoBoxWidth = 166
     infoBoxHeight = 60

     # Slice one node name with children, ignore the rest.
     slice =

     # Correction factor for font pixel width/height.
     # It is normalised for Liberation Sans (= Arial) and will
     # affect the alignment of all text in your output. Since this
     # one option affects all text instances, it's recommended
     # to use 'similarly spaced' fonts throughout your settings.
     fontCorrectionFactor = 1

     # Orientation of the timeline
     # 0 = left to right, 1 = top to bottom
     # 2 = right to left, 3 = bottom to top
     orientation = 0

     # The layout of the tree
     # 0 = branch to both sides
     # 1 = branch only on lower side
     # 2 = branch only on lower side, inverse (good for CSV output)
     treeMode = 0

     # Chose: 0 = don't presort, 1 = by name, 2 = by date
     sortKey = 0

     # Set optimisation between 0 and 99. See manual for details.
     # First digit: isolated nodes. Second digit: trees.
     optimise = 99

     # This guesses if optimisation should overlap in some rare cases
     # 1 = forbid overlaps, 0 = allow overlaps (better optimisation)
     strictOverlaps = 0

     # How much space (in offsets) to add before/after trees
     treeSpacing = 1

     # How big (total children) a tree has to be before it gets spaced
     treeSpacingBiggerThan = 5

     # Background color in hexadecimal RGB (#abc or #abcdef)
     mainBackground = #fff

     # Customise the background lines separating the years and months
     rulerWidth = 2
     rulerColor = #ddd
     rulerMonthWidth = 1
     rulerMonthColor = #eee

     # Width of all node lines
     lineWidth = 2

     # Number of pixels between node lines (== 1 offset)
     offsetPX = 20

     # Set to 0 if you want 'dying' lines to stop abruptly
     stopFadeOutPX = 30

     # When optimising, gnuclad will inline nodes if possible. This sets
     # the minimum time distance between the stop of one node and the
     # start of another which will allow the latter to get appended.
     # Format: 'y.m.d' or 'y.m' or 'y' (year, month, day)
     stopSpacing = 0.2

     # How many pixels one year should have
     yearPX = 100

     # Customise the node labels
     labelFont = Liberation Sans, Arial, Helvetica
     labelFontSize = 16
     labelFontColor = #000

     # An experimental feature you might want to use with derivType > 1
     # Opacity takes values between 0 (transparent) and 100 (opaque).
     # It DOES NOT work flawlessly with SVG 1.1 output.
     # (hoping for v1.2 or CSS3 ...)
     labelBGOpacity = 0

     # This sets the heuristic used for determining label background width
     # 0 = standard, will sometimes generate suboptimal width values
     # 1 = improved, but only if the majority of your characters fall into
     #               the ASCII charset and you use a fairly standard font
     #               playing around with fontCorrectionFactor might help
     asciiStrings = 0

     # Useful if you want to use the renames only as version bumps.
     # 0 = rename above the dot to the right, like the first name
     # 1 = rename centered within the dot
     nameChangeType = 0

     # Set the way the lines should derive from the parent.
     # 0 = orthogonal, 1 = from parent's starting point
     # 2 = diagonal (45 degrees)
     # 3 = curved (1 year wide curves), 4 = curved (quadratic scaling)
     # 5 = curved (from parent's starting point)
     derivType = 0

     # The size of the node dots
     dotRadius = 10
     smallDotRadius = 5

     # Determines how the dots look.
     # 0 = full dots, 1 = circles
     # Circles might be useful together with nameChangeType = 1
     dotType = 0

     # Specifies the amount a node's line thickness should increase
     # relative to the count of it's children. (recommended 0.0 - 1.0)
     bigParent = 0

     # Adds small half-circles to connector starting points
     connectorDots = 1

     # 1 = connectors have a dashed stroke
     # 0 = connectors are full lines
     connectorsDashed = 1

     # Customise the year line encompassing the cladogram.
     yearLinePX = 40
     yearLineColor1 = #037
     yearLineColor2 = #37d
     yearLineFont = Liberation Sans, Arial, Helvetica
     yearLineFontSize = 28
     yearLineFontColor = #fff

     How many (empty) years to append at the end
     appendYears = 0

     How many (empty) years to prepend at the beginning
     prependYears = 0

     # Remember to adjust your input data after changing these averages.
     daysInMonth = 30
     monthsInYear = 12

     # Not setting endOfTime will use the current date.
     #endOfTime = 2012.12

     # How the description field should be used.
     # 0 = ignore
     # 1 = weblink URL
     descriptionType = 0

     # When parsing direcories, show dot (hidden) files (0 = off, 1 = on)
     dir_showDotFiles = 0

     # Color of files, directories and links
     dir_colorFile = 0ff
     dir_colorDir = 00f
     dir_colorLink = 0f0

     # Directories with greater than specified size will get a domain of
     # the given intensity (0-100). Set size = 0 to turn off.
     dir_domainSize = 0
     dir_domainIntensity = 3
GfEW commented 1 week ago

I would really like to do this but I don't think the tool I'm using (gnuclad) supports it...

OIC! - I've never used gnuclad before, so you certainly know it much better. Regardless, I might try some ideas by myself (takes time, don't hold your breath), based on your gnuclad config. Thanks for sharing it!