Всем привет. Разумеется, это шутка — я своих родственников очень люблю, уважаю и никоим образом их не притеснял и не планирую. Более точная формулировка — отсортировал в целях построения генеалогического древа. Об алгоритме построения, сортировки, визуализации фамильного древа и будет эта статья.

Собственно, с чего всё началось. Мой папа и я имели огромное желание создать генеалогическое древо рода. Меня, конечно, больше влекла визуальная составляющая — знаете, все эти средневековые полотна с некрасивыми мужчинами, бледными дамами в париках, золотые рамки, даты жизни римскими цифрами, деревья с узловатыми ветвями и зелёными листьями и т. д.? Вот это вот всё. Папа кропотливо собирал какие-то бумаги, обзванивал родных, вёл записи.

Однажды я пообещал ему нарисовать древо на компьютере, т. к. попытки набросать его вручную на куске ватмана не увенчались успехом — в этот момент я понял, что герольды, живущие при дворе, не зря кушали свой хлебушек. Было несколько подходов: попытки освоить специализированный софт, потом что-то написать своё, но всё время результат был недостижим. Время шло — папу унёс ковид, а обещание так и осталось висеть на моей совести.

Всё изменилось, когда пришла пора моей дочке писать диплом. Мы сразу отмели все темы из ассортимента вуза и заявили собственную — построение генеалогического древа. Отступать стало некуда.

Для начала немного погрузимся в специфику задачи — рекомендую несколько местных статей:
краткий обзор софта «Программы для генеалогического дерева» и пара реализаций «Bonsai: фамильный вики-движок», «Как я древо семьи строил».

Интерфейсная часть с реализацией ведения персон в базе данных вещь, на мой взгляд, довольно тривиальная и была реализована весьма быстро, демонстрировать здесь не вижу смысла.

Алгоритм визуализации древа — вот что самое интересное и заставляет серьёзно загрузить голову. Про него и буду рассказывать. Для нетерпеливых сразу скажу, что исходники пока не выкладываем, но есть демонстрационный сайт, куда можно загрузить своё древо в формате GEDCOM — ссылка ближе к концу статьи.

Принципы построения древа неплохо описаны в статье «Как я древо семьи строил», мы приняли их почти все, за исключением различных вариантов имбридинга — наше фамильное древо пока этим не отягощено.

И хочу сразу уведомить — генеалогия это в чистом виде биология с наложением различных видов семейных связей: официальный (государственный), церковный, гражданский браки. И именно биология жёстко указывает, что дети рождаются только у мальчика и девочки, а также не существует других полов, кроме «М» и «Ж».


▍ Подглядываем за конкурентами. Неудачные попытки промышленного шпионажа.


Как говорила одна моя хорошая знакомая: главное в решении задачи — это найти её полный аналог. План следующий: ищем в интернетах и интегрируем в проект готовый компонент, а сэкономленное время посвящаем просмотру сериальчиков.

Посмотрели источник «Bonsai: фамильный вики-движок» — описание толковое, в конце есть ссылка на демосайт с практически нулевой ценностью. Я серьёзно — расписать суперкрутой алгоритм, но не дать возможности проверить его работу на более-менее реальном объёме данных? Импорт из GEDCOM реализовать несложно, а вводить вручную своё древо (почти 300 персон) мы не решились.

Источник «Как я древо семьи строил». Хорошо описаны принципы построения и алгоритм. Есть демка с довольно большим объёмом данных. Но! В визуализации месиво и реализация отходит от описанных правил построения. Видимо, сам алгоритм некорректный или не полностью реализован. Для очистки совести сгенерировали и загрузили свои данные, итог — твёрдое нет. Древо получилось не планарное, навигация неудобная, часть родственников потеряли связи, часть и вовсе испарилась. Вдобавок можно двигать людей по вертикали.


Вспомнил я, что когда-то пробовал вести древо на сайте genway.ru и он даже понравился своим интерактивным методом построения древа. Сразу проблема — хоть сайт и живой, но всё реализовано на флеше. Достал свой древний «атомный» ноут с виндой XP и прорвался-таки туда! Стащил с него все флешевские файлы, пихнул в декомпилятор ныне уже мёртвого языка. Результат весьма недурственный — в наличии имена переменных, названия функций, даже комментарии. Попытались погрузиться, но в итоге отодвинули в сторону. Некромансеры из нас так себе.

Есть ещё один сайт, свеженький, на JavaScript, и ввод совсем как на генвее. Терзают смутные сомнения, что автор генвея рецидивист и взялся за старое. Но, помимо отсутствия импорта GEDCOM, у него есть фатальный недостаток — абсолютно всё там реализовано на JavaScript. Объём большой, мы к этому не готовы. В общем, тут тоже тупик.

Параллельно отсмотрели ещё много всяких библиотек, но уже не помню причин, по которым их не приняли «в производство». Но причины были весомые.

▍ Приступаем к собственной реализации


«Лайтовенькие» на первый взгляд варианты отвалились, придётся делать всё самим. Сразу прикинули, что без JavaScript не обойтись, посему будем привлекать библиотеку vis.js. Выбор был обусловлен наличием положительного опыта её использования в одном pet-проекте. Не исключено, что если бы выбрали другую, аналогичную библиотеку, статья получилась бы значительно короче :). Как пользоваться vis.js я решил тут не показывать — на сайте есть огромное количество демонстрационных примеров.

Vis.js очень хорошо умеет рисовать графы, и самое главное — иерархические. Прикинули быстренько: чтобы получить нашу эталонную картинку, потребуется завести ещё одну ноду — «семья». Эта концепция позволяет не потерять родственников, не имеющих детей (прямых кровных связей). Выглядит это примерно вот так:


Как решили, так и сделали. Пока без программирования, просто в html вставили персоны, граф настроен на иерархию. На одной семье результат отличный (картинка выше), только линии связей «из коробки» не совсем то, что нам хочется, но подобрали более-менее приемлемые варианты, тюнинг на потом отложим.

Шустро написали на PHP скрипт, генерирующий страничку на весь объём базы — это примерно 300 человек. Не забываем создавать парную безымянную персону для матерей/отцов-одиночек.


Результат удручающий — система пытается построить дерево, где из одной вершины идут ветви, а нам надо, чтобы вершин было две (термин «генеалогическое древо» вводит в заблуждение, т. к. реально это «генеалогический граф»). Но зато древо получилось с прикольным «желейным» поведением при перемещении нод.

Пробуем поиграть со штатными методами сортировки — sortMethod и shakeTowards — вроде как добились того, что родителей двое, всё ещё не то. Системе просто невозможно объяснить, что между родителем и ребёнком должно быть ровно два уровня (с учётом семьи). Пытается выровнять по верхнему или нижнему краю — внуки оказываются на одном уровне с прапрадедушкой и наоборот, плюс неоптимальные перекрёстные связи.


Это просто кошмар — не фамильное древо благопристойной семьи, а карта преступных связей на стене детектива.

Ладно, у vis.js есть возможность вручную прописать уровни, и мы ей воспользуемся.

▍ Сортировка персон


Мы манипулируем двумя видами объектов: персона и семья. Объект персона имеет связь с семьёй, где она родилась, и связи с семьями, где она является одним из родителей. Соответственно, объект семья имеет связь «папа» к персоне отцу и связь «мама» к матери. Также объект семья может иметь связи к каждому ребёнку, рождённому в данной семье. Написал может, т. к. мы отображаем и просто супружеские пары, без детей.

Алгоритм несложный, рекурсивный — всем персонам устанавливаем поколение (далее для простоты — уровень) 0, а семьям 1. Выбираем одного человека и присваиваем ему уровень 1. От этого человека рекурсивно движемся по семейным связям — ушли в родительскую связь и данной семье присвоили уровень на единицу меньше (0), ушли в связи, где он родитель — в данных семьях уровень +1 относительно этого человека. Аналогично с семьями — уходим к маме или папе — им уровень на 1 меньше, чем уровень данной семьи, провалились к детям — уровень повышается.

Чтобы рекурсия завершилась, не заглядываем туда, откуда пришли. Кроме того, учитываем, что непросмотренные люди имеют уровень 0, а семьи 1. В итоге у нас получится, что люди разместились на нечётных уровнях, а семьи на чётных.


Уже намного лучше. Только вот в этом месиве по-прежнему не разобрать где свои, а где другие свои.

Начнём зачистку. Навскидку сразу можно убрать со схемы объект семья. Ставим атрибут невидимости и снова генерируем древо. Вроде и стало чище, а на самом деле кошмар — мы можем двигать персоны, а семьи остаются на месте. Они невидимы во всех смыслах, их и мышкой не захватить. Ок, сделаем их видимыми, но размером 1 или 2 или 3. Вроде чище, но тоже нехорошо, а всё потому, что у нас осталась штатная сортировка в пределах уровня. Вернее отсутствие сортировки. Автоматом ничего не распутывается.

Дело в том, что в vis.js реализован движок hierarchicalRepulsion, который работает примерно так (утрированно) — каждая нода имеет некоторую гравитацию, которая притягивает их всех в центр друг к другу, но вместе с тем они имеют одинаковый заряд, который не даёт им сближаться слишком близко (они как бы отталкиваются). На определённом расстоянии гравитация и силы отталкивания уравновешивают друг друга, и положение нод стабилизируется.

Также имеются связи между некоторыми нодами, которые представляют собой своего рода пружинки. Поведение аналогичное, как между несвязанными нодами, только более сильное и притяжение с расстоянием увеличивается. Всё это считается итеративно, позволяя получать шикарный желейный эффект при различных манипуляциях с древом.

Ну и есть ещё некоторые нюансы — например, это ноды, которые не участвуют в симуляции. Они либо имеют атрибут с запретом на физическую симуляцию, либо являются невидимыми объектами.

Всё это худо-бедно работает на плоскости, в двумерном пространстве, но когда ноды находятся на прямой, разойтись они не могут. Подкрутка коэффициентов ничего не даст — пробовали. Также ничего не даст добавление дополнительных связей между родителями, между родителем и ребёнком. Всё потому, что в иерархическом графе ноды могут двигаться только по горизонтали. И сила отталкивания одноимённых зарядов между нодами довольно сильная, даже пружинка не может её преодолеть. И даже две, три пружинки :) Вот и получается, что если vis.js поставил между мамой и папой условного троюродного дядю, то им не быть больше вместе. Это печально. Воссоединить их может только пользователь, приложив значительные усилия к движению мыши (если можно так выразиться), захватив ноду и резко перемещая её вправо или влево.

▍ Рисуем красивое


Ладно, оставим пока всё как есть, переключимся на визуализацию. У нас есть объекты родители, дети и семья, которых мы хотим видеть так, а пока штатно можно получить вот так, и навскидку надеемся сделать вот так (нарисовано вручную в графическом редакторе):


Для наглядности связь между двумя нодами (семья и сын) изобразил зелёным цветом. Все остальные связи идентичны.

Т. е. нам надо добавить один незамысловатый вид связи между нодами. Скачиваем с гитхаба исходники vis.js, смотрим. Первая мысль — надо закачать обратно. Не готовы мы лопатить такие объёмы!

В который раз изучаем возможности vis.js. И тут в примерах глаз цепляется за обработчики beforeDrawing/afterDrawing. Суть идеи — штатные связи-пружинки оставляем, но только не показываем. Необходимые видимые связи отрисуем в функции beforeDrawing. Читаем, как добраться до нод и их атрибутов через api DataSet, и в итоге рожаем такую функцию:

    network.on("beforeDrawing", function (ctx) {
    
        ctx.strokeStyle = "#ff3333";
        ctx.lineWidth = 1;
        ctx.beginPath();
        ctx.moveTo(0, 0);

        for(const Node1 of nodes.get()) {

            var Pos1 = network.getPositions([Node1.id])[Node1.id];

            for(const Node2 of network.getConnectedNodes(Node1.id, "to")) {

                var Pos2 = network.getPositions([Node2])[Node2];

                ctx.moveTo(Pos1.x, Pos1.y);
                ctx.lineTo(Pos1.x, Pos1.y + 50);
                ctx.lineTo(Pos2.x, Pos1.y + 50);
                ctx.lineTo(Pos2.x, Pos2.y);
            }
        }

        ctx.moveTo(0, 0);
        ctx.closePath();
        ctx.stroke();
    });

И результат её применения к тестовой семье (оставил прямые связи между нодами для наглядности) и ко всему древу.


Вроде всё как хотели, но на полном объёме результат ещё хуже. Раньше хоть по плавным изгибам можно было предположить направление связи, а сейчас стало намного запутаннее — все горизонтальные связи слились в одну линию, вертикальные заходят под прямым углом.

И вот примерно на этом этапе нам пришло одно очень важное понимание. Древо должно строиться не по всему объёму людей в базе, а только по тем персонам, которые имеют «кровные связи» с конкретным человеком. Это логично и соответствует биологическому понятию родства, но почему-то в источниках по построению деревьев мне данная мысль в чистом виде не встречалась. Возможно, тривиальные вещи просто считается стыдным разжёвывать?

Реализация простая до безобразия. Вспоминаем рекурсивный алгоритм распределения людей по уровням: когда мы зашли в семью со стороны одного из родителей, то его супругу мы присваиваем уровень и отобразим на схеме, но дальше к его родительской семье не идём и все они остаются на 0-м уровне. Затем, при генерации данных для vis.js мы пропустим персоны с уровнем 0. Однако пользователю необходимо показать, что за этим человеком есть ещё родители/семья/клан, поэтому здесь можно добавить на картинку какой-нибудь атрибут, например веточку (стрелку, звёздочку).

В данном случае древо было построено для человека, который был выбран самым первым узлом при расчёте уровня. Несложно в готовом графе vis.js сделать выбор мышкой произвольного узла (персоны) и произвести перестроение древа для данного человека. Сделали.

Вернёмся опять к визуализации (если обратили внимание — пишу в порядке хронологии, выглядит сумбурно и бессистемно, придётся потерпеть :) Типичная ситуация — родители слева, семья справа, дети слева. У другой семьи может быть аналогичная, но зеркальная раскладка.


Как мы уже понимаем, семьи автоматически между собой не поменяются местами, а ведь они у нас являются ключевым объектом при построении связей. А что, если отойти от концепции рисования связей между нодами, а отрисовывать связи в пределах семьи? Для ключевой точки «А» высчитываем координату х между родителями, координата у берётся от объекта семья. Немного отступов туда, сюда и вот финальный результат (функцию не привожу, только картинка):


Для наглядности оставлено отображение связей с семьёй, справа они скрыты атрибутом hidden.

Ещё разок посмотрим на схему – явно лишний объект «семья». Теперь он не имеет визуальных связей и вообще может находиться в неизвестных местах. Возникла мысль — а может ну её нафиг, эту семью? Я имею в виду не свободу нравов, а ноду, через которую идёт связь детей с родителями.

Вот взять и сделать таким образом:


Налицо сплошные плюсы — связи между супругами явные, детишки тянут свои ручонки прямо к папе и маме, а полосочки мы и так мимо семьи рисуем.

Посмотрели код, прикинули, откуда что берётся — вот и не получится от семьи избавиться. Нужна семья как источник данных, но как узел древа лишняя. И мы подобный подход отметили как недостаток при рассмотрении алгоритма статьи «Как я древо семьи строил»

Значит будем информацию по семьям отдавать отдельно от данных vis.js. После очередной переделки всё стало даже быстрее бегать — это вызовы DataSet отбирали изрядное количество ресурсов. Из дополнительных плюшек — бездетные семьи отображаем прямыми линками без спуска на уровень ниже.

▍ Опять сортируем


С визуализацией закончили (ну почти — есть замечания, но об этом позже), пора опять возвращаться к сортировке людей на уровне. Мы уже внутренне смирились, что придётся делать её самостоятельно. И тут возникает очередной вопрос — нафига нам этот vis.js? Ах да, это клёвое желе %)

Итак, делаем простейшую сортировку вручную и наслаждаемся результатом. Это мы сначала так думали. На самом деле хоть засортируйся — узлы будут идти в случайном порядке. И только путём невероятных поисков на форумах удалось выяснить (не одни мы по этим граблям прошлись) – надо использовать версию vis.js 4.8.1. Дескать, работает по-человечески, отображает узлы в порядке появления слева направо. Нашли, скачали, вставили. Всё нормально — порядок наш сохранён, прочая функциональность на месте.

Далее пишем функцию сортировки. Опять некорректное название — это функция сравнения двух объектов, которую использует штатная библиотечная функция сортировки. Сортировка осуществляется на нашем бэкенде, поэтому пишем на PHP.

Кратенько внутреннюю модель данных я упоминал. Что нам надо знать, чтобы сделать эту функцию сравнения:

  1. Т. к. сортируем начиная с предков, то уровни выше уже отсортированы. Доступ к объектам верхнего уровня мы имеем через связь с объектом типа семья. Через эту связь мы можем разместить детей под родителями.
  2. Новые люди (без родителей) появляются максимально справа. Это хорошо на первом этапе, но есть планы переделать.
  3. Объект семья сортируется крайне просто — сортируем в порядке следования глав (отцов) семейств.
  4. Супругов размещаем рядышком. Это значит, что мужчину придвигаем на ближайший к семье женщины край, а женщина покидает семью и становится рядом с мужем, связи с семьёй не разрываем. Такова её женская доля :) Всё это доступно через связь с семьёй (семьями) нижнего уровня.
  5. Если супруг без родителей, то рисуется рядом со второй половинкой.

Вот коротенько все критерии сортировки, которые умещаются на один экранчик кода.

Финал близко, на несложных схемах выглядит шикарно. Осталась одна проблема — горизонтальная полоса на насыщенных уровнях. Скриншот не привожу, т. к. эти артефакты отлично видно на скриншоте, где впервые применён собственный метод отрисовки связей. Лечится довольно просто — где мы формируем псевдообъект «семья» для нашего фронтенда, нам в каждую семью необходимо добавить небольшой атрибут — смещение. Это небольшое смещение по оси ординат, которое мы будем добавлять, когда рисуем горизонтальные линии связей в семьях.

Мы у себя считаем его следующим образом — после сортировки уровня с семьями делается ещё один проход, и семье добавляется смещение, равное количеству детей, умноженное на 3 (пикселя). Если смещение предыдущей семьи такое-же, то накидываем ещё 3. Визуально семьи расходятся по уровню, становится очень симпатично.


Сортировка есть, она работает, но не идеально. По прежнему есть места, которые после ручной оптимизации выглядят намного лучше. Основной источник проблем — критерий сортировки номер 2. Тут я вижу только формирование оценки упорядоченности, например, количество внутренних пересечений связей между семьями, и далее перебором мест размещения новой персоны искать минимальное значение этого показателя.

▍ Демо


Демонстрационную версию, вырванную из диплома, я разместил на серверочке от RUVDS. Находится оно здесь — gtree2. Можно глянуть наше обезличенное древо либо загрузить своё в формате GEDCOM. Загруженные файлы хранятся сутки, потом крон их удаляет. Хост слабенький, но буду иногда заглядывать и поднимать.

Что там можно с этим уже делать:

  • загружать и визуализировать собственное древо в формате GEDCOM;
  • скрывать/отображать связи между родителями и детьми;
  • отключать/включать «физику». При отключении удобно двигать людей вручную в пределах уровня, а затем опять автоматически выравнивать их относительно друг друга;
  • дважды кликнув по персоне перестроить древо для этой персоны.

▍ Разглядываем сторонние деревья


У кого нет собственных деревьев в формате GEDCOM, могут поискать их в интернете. Ниже привожу ссылки.

Здесь можно скачать древо «The English and British Kings and Queens» и древо «The Kennedy Family of the United States».

Древо английской короны ужасно. Большое в плане глубины поколений. Почему-то в некоторых записях FAM неполных семей, мужчины обозначены как WIFE, а женщины как HUSB. Кривое древо потребовало для себя корявый код :(

Древо Kennedy — ничего примечательного. Персон немного, требует минимум ручного вмешательства.

Вот ещё один ресурс с некоторым количеством доступных GEDCOM файлов.

Royal92.ged европейские монархи — у меня строится очень долго. Само древо большое — вероятно, восходит к неандертальцам. Тут наши алгоритмы сдаются, т. к. царствующих особ невероятно много и у них были весьма популярны близкородственные связи.

Shakespeare — простенькое древо. Здесь я узнал, что Вильям был женат и у него было трое детей.

Bronte — древо писательниц Бронте. Тут мне потребовалось беглое обращение к Википедии. Само древо скромное.

Pres2020 — «An excellent collection of the presidents of the US, with their ancestors and descendants». Ещё одно гадкое древо. Вернее не древо, а набор не связанных между собой деревьев. Чтобы добраться до какого-либо президента, нужно заглянуть в GED-файл и узнать его идентификатор. Далее вбиваем в URL в таком виде http://176.119.159.132/gtree2/index.php?root=@I0006@. Ну и для пробы Кеннеди — @I1509@ (можно сравнить с предыдущим ресурсом), Рузвельт — @I1466@, Обама — @I2194@, Трамп — @I2185@. А вот Байден, ака «самоходный дед», пока отсутствует — не ищите.

Скриншоты приводить не стал — проще скачать самостоятельно и смотреть на сайте.

▍ Финал


Дочка диплом защитила на «отлично» и у нашего рода появилось полноценное фамильное древо. Возможно, мы созреем и соберём общедоступный релиз для самостоятельного развёртывания на персональных ресурсах, но это не точно :)

???? Голосуй за нас на премии «ЦОДы РФ»!

Комментарии (64)


  1. UksusoFF
    00.00.0000 00:00

    А еще есть https://webtrees.net/
    И для него можно писать плагины: https://github.com/UksusoFF/webtrees-faces

    В текущей реализации не особо очевидно что значат связи. Однако выглядит красиво, можно попробовать адаптировать под webtrees.


  1. AlexGorky
    00.00.0000 00:00
    +2

    Открыл для себя AgelongTree. Повезло и наткнулся на бесплатную раздачу. Пользуюсь ей, рекомендую.


  1. Pochemuk
    00.00.0000 00:00
    +7

    Интересно, с какими сложностями придется столкнуться, если будет, допустим, женщина, которая побывала замужем за тремя братьями и от каждого родила по ребенку?

    Или если мужчина женился на молодой женщине, а его сын от первого брака женился на ее матери. На каком уровне будут отображаться их дети?


    1. Akr0n
      00.00.0000 00:00
      +3

      Вот тоже хотел написать, что автор учитывает только простейшие варианты. Каждый, кто занимался генеалогией и построением древа знает, что различных нюансов внутри множество и для каждого нужен какой-то костыль как его размещать в графе, простой лесенкой и паравозиком уже не отделаешься. Авторы хорошего софта по этой теме не зря свой хлеб едят.


      1. Pochemuk
        00.00.0000 00:00
        +25

        Ты думаешь, у тебя семейные проблемы? Послушай про мою ситуацию: Несколько лет назад я встретил молодую вдову со взрослой дочерью, и мы поженились. Недавно мой отец женился на моей падчерице. Это сделало мою падчерицу моей мачехой, а мой отец стал моим пасынком. Кроме того, моя жена стала тещей собственного свекра. Идем дальше, у дочери моей жены (моей мачехи) родился сын. Этот мальчик мне единокровный брат, потому что он сын моего отца, но он также сын дочери моей жены, что делает его внуком моей жены. Это делает меня дедушкой моего единокровного брата. Это было бы еще терпимо, пока у нас с женой не родился сын. Теперь сестра моего сына, моя теща, стала еще и бабушкой. Это делает моего отца шурином моего ребенка, сводная сестра которого — жена моего отца. Я шурин моей мачехи, моя жена — тетя ее собственного ребенка, мой сын — племянник моего отца, а я свой собственный дедушка, а ты тут жалуешься на семейные проблемы!

        © Марк Твен, «Как я стал дедушкой самому себе».


    1. alef13 Автор
      00.00.0000 00:00

      это несложно проверить нарисовав вручную GEDCOM-файл


      1. novoselov
        00.00.0000 00:00
        +1

        Как алгоритм справится с родословной Клеопатры

        https://en.wikipedia.org/wiki/Ptolemaic_dynasty#Ptolemaic_family_tree

        Или с этим деревом

        https://dark.netflix.io/en/family-tree


        1. Pochemuk
          00.00.0000 00:00

          Родословная Клеопатры — просто прелесть :) Сплошной инцест: «Игра Престолов» отдыхает. Женились на своих племянницах, двоюродных и даже родных сестрах.


        1. Hlad
          00.00.0000 00:00
          +1

          Можно попрактиковаться на более близком примере - династии Габсбургов.


  1. itGuevara
    00.00.0000 00:00

    Хотелось бы чтобы

    1) это был ZettelKasten с поддержкой LinkedData или подобного.

    Ввел строку – тройку RDF и добавился объект \ связь. Можно не через строчку, а через заполнение таблички.

    2) схема кликабельная и можно проваливаться в карточки объектов (персон и др.) с переходами между карточками объектов.

    3) кроме схемы древа было бы еще нечто «Детективной доски», например, групповые фото (фото не обязательно персон, а, например, их дома или вещи) или некие события, к которым привязаны персоны.

    4) информацию по объектам, в том числе, персонам и событиям можно было просто добавлять, например, через интеграцию с Excel (надстройка к Excel). Конечно нужен экспорт в Excel.

    5) вся графика экспортировалась бы в какой-то известный векторный редактор, drawio или visio.

    6) бесплатное, open source, on premise (а лучше портабельное).  

    Что-то похожее есть?


    1. Akr0n
      00.00.0000 00:00
      +3

      За такие функции Вам ещё и денег разработчикам жалко? Долго будете искать.


      1. itGuevara
        00.00.0000 00:00

        Полагаю, что если такой проект кто-то начнет, то многие к нему присоединятся. Это скорее вопрос, нет ли уже такого? При этом тут не важна тематика "родословной", т.к. родословность определяет лишь двух родителей. В других темах, "родителей" (просто предшественник, например в схемах бизнес-процессов) может быть иное число, например, в орг-диаграмме (любой иной классической структурной схеме) - одна, и тот же visio имеет штатный мастер построения из Excel, который (мастер) многие выше указанные вещи содержит уже "в коробке", включая встраивание фото и т.п.

        Моих шесть тезисов - это базовый набор для любого универсального ZettelKasten "следующего поколения" (родословная - это только один из вариантов / конфигураций его использования), а они развиваются сейчас быстро, включая obsidian и loqseq. Видимо в классический ZettelKasten достаточно лишь добавить что-то типа dot (graphviz) - чтобы выравнивать графические объекты (плюс разные графические примитивы под разные типы объектов) и LD на замену (в дополнение) MD\wiki - ссылок. В целом: не так страшен черт, как его малютка.


    1. ebt
      00.00.0000 00:00

      Давным-давно я разрабатывал кое-что похожее как туториал по RDF и OWL: http://blokhin.github.io/genealogical-trees


    1. IlyaER
      00.00.0000 00:00

      Есть: Gramps
      Я тоже, как автор хотел разрабатывать своё, но вовремя увидел что всё уже сделано до нас.,


  1. LeXaNe
    00.00.0000 00:00
    +1

    Круто!!!

    А как отображается шведская семья? - В том смысле, что если женщина( или мужчина) имела несколько браков и от каждого есть ребенок. Или тут кто последний, тот и папа?


    1. Didimus
      00.00.0000 00:00

      Бывают родители биологические, бывают приёмные. Надо это тоже учитывать, с версионированием


  1. Keks650
    00.00.0000 00:00
    +1

    Круто!
    На новогодних праздниках задался то-же задачей, остановился на компоненте https://www.npmjs.com/package/family-chart
    Идеей было сделать сервис по составлению деревьев, доступ к которым можно было бы шарить на всех членов семьи. В итоге получился проект выходного дня https://zuevy.ru (php/symfony) с возможностью добавления анкет и прикрепления разных документов/фото.


    1. alef13 Автор
      00.00.0000 00:00

      выглядит хорошо, только импорт GEDCOM нужен. Ну и мне легко удалось добавить персоне 3-х отцов, без мамы разумеется :)


  1. DikiyA
    00.00.0000 00:00

    Теперь самое время добавлять болезни (если, конечно, Вы не собираетесь доказывать свое право над тварями дрожащими)


  1. Rumidu
    00.00.0000 00:00

    Можно попробовать geni.com (https://www.geni.com/platform/developer/help) Там можно создавать древо (а том числе) с помощью своих родственников, зарегистрированных на сайте.


  1. anonymous
    00.00.0000 00:00

    НЛО прилетело и опубликовало эту надпись здесь


  1. GospodinKolhoznik
    00.00.0000 00:00
    +3

    Ок, мужчина это тот у кого угол в бедренных костях равен 90 градусов, женщина, у кого этот угол равен 120. А как быть тем, у кого угол строго больше 90 и строго меньше 120?


    1. dipierro
      00.00.0000 00:00

      не говоря уже о том, что определять пол только лишь по костям довольно часто точно не получается


    1. Didimus
      00.00.0000 00:00
      +2

      Например, 105


  1. belch84
    00.00.0000 00:00

    Пользовался бесплатной версией генеалогической системы MyHeritage. Система показалась мне очень удобной. Информация сохраняется в виде карточек, создаваемых для одной персоны, с указанием родственных связей. Можно хранить фото (в т.ч. групповые), на которых отмечено, где кто. Разумеется, можно выводить всевозможные диаграммы и отчеты. Занес туда информацию о приблизительно ста известных мне родственниках (начиная с XIX века)

    Вертикальная и горизональная диаграммы для генеалогического дерева
    image

    image


    1. Tomasina
      00.00.0000 00:00
      +1

      Визуально весьма посредственнно, как "от программиста для программиста" . Да, связи есть, но нечитаемо не подготовленным человеком.

      Ожидалось вот такое, более классическое, как слева:


      1. belch84
        00.00.0000 00:00

        Все там нормально, шесть поколений, каждое на своём уровне как в горизонтальной, так и в вертикальной диаграмме. Конечно, картинки я уменьшил, но при печати на А4 (ладно, горизонтальную распечатывал на А3) все видно и все понятно. Про связи не очень понял — что необходимо для чтения неподготовленным человеком, кроме тонкой линии, соединяющей супругов, а также предков и потомков?


      1. alef13 Автор
        00.00.0000 00:00

        собственно по тексту можно понять что здесь только "выжимка" алгоритма из финального продукта (диплома). И основной интерес для меня представлял результат в виде планарного графа со связями, который можно взять как основу для размещения персон на ватмане и ручной отрисовки древа. Карандашами, кисточками и красками.


    1. artoym
      00.00.0000 00:00

      Всё бы хорошо, но бесплатная версия даёт только 250 человек внести, а платная - 80 евро в год - кусается.


      1. belch84
        00.00.0000 00:00
        +1

        У вас действительно есть данные о более чем 250-ти родственниках? Завидую, у меня столько не нашлось


        1. da-nie
          00.00.0000 00:00
          +1

          Я знаю людей с тысячами известных (до 1500 года и раньше).
          Ну а у меня самого 450 пока что указано до 1800 года по некоторым веткам. Увы, метрические книги не всегда можно так просто получить. Скажем, Барнаульский архив хрен даст скачать даже оцифрованное — приходите в читальный зал с фотоаппаратом в Барнауле. Мда.


        1. medicyber
          00.00.0000 00:00

          Большое дерево получается, если найти там же на MyHeritage каких-нибудь дальних-дальних родственников и добавить их деревья к себе.

          Еще один кейс для деревьев 250+ - это когда вам надо среди жителей нескольких деревень найти "своих". Крестьян, например, в метрических книгах записывали в основном только по имени-отчеству. Поэтому, узнать, просто глядя на запись, является ли некий Иван сын Иванов, родившийся в тысяча восемьсот лохматом году, вашим предком, вы никак не можете. Оно и с фамилией-то не гарантировано, а без неё - вообще не за что зацепиться, на первый взгляд. Но если построить и собрать воедино деревья для всех крестьян этой деревни (и соседних) по метрикам за несколько десятков лет - картинка становится четче. В таком "мега-дереве" человека можно идентифицировать уже не только по имени и дате рождения, но по всему "фингерпринту" его отношений с другими персонами. А это - несколько сотен, а то и тысяч человек.


  1. dmlogv
    00.00.0000 00:00
    +1

    Вели с девушкой свои фамильные деревья в «Семейной летописи», от которой у меня (как у читателя почившего ныне «Мира ПК») был ключ.

    Потом выяснилось, что версия морально устарела, экспорта в адекватные форматы (навроде GEDCOM) нет, да и вообще, родословные пришло время объединять, если вы понимаете, о чем я.

    После продолжительно гуглежа, экспериментов и пары миграций данных, выбор пал на Gramps.

    Понятно, что на наших масштабах — это как из пушки по воробьям. Зато туда можно внести вообще всё: смены имён-фамилий, всякие документы, ссылки на источники (и сами источники затолкать). Есть плагины на Python, много встроенных и не очень диаграмм, всякие проверки (на возраста или подозрительные родственные связи, например).

    Выглядит, конечно, ну, это, как типичный Open Source с UI :D, иногда вылетает (автобэкапы — лучши друг грамповода), пользоваться на первых пора непросто — часто требует больше телодвижений, чем более user friendly-аналоги, но профессиональный подход требует человеческих жертв.


  1. dipierro
    00.00.0000 00:00
    +13

    Мне сложно понять, зачем было включать в статью что-то про несуществующие гендеры и скриншот твита про определение пола по скелету (которое, кстати, не всегда работает).

    Но раз уж автор не удержался, и воткнул в текст упоминание гендера, когда, наверное, хотел сказать про пол, то я напомню, что даже исключая небинарные и трансгендерные идентичности, кроме "М" и "Ж" существуют еще и люди, рожденные с какой-нибудь из ~40 интерсекс-вариаций. И об этом говорит "биология в чистом виде".


    1. iingvaar
      00.00.0000 00:00

      Ключевое противоречие в гендерах связано с неполным соответствием генотипа и фенотипа. В качестве курьеза могу привести историю, связанную с 23andMe. Там есть возможность выгрузки родственников в csv с кучей полей. Один из моих дедушек подарил мне "этнический фон", благодаря которому у меня более 1500 тысяч родственников в стране, где я ни разу не был. Такое бывает не со всеми этносами, а только с теми, которые прошли бутылочное горлышко, как ашкенази. И это дает богатый материал для статистики. Так вот, еще 4 года назад одним из полей в csv был пол. Впоследствии его исключили, но я успел сделать несколько выгрузок. К моему удивлению, у 10% людей, идентифицирующих себя как женщины, была Y-хромосома. Некоторых из них я нашел по ФБ, это действительно женщины. Естественно, я не общался ни с кем из них. Думаю, такого рода исследования запрещены на текущем этапе развития человечества, но результат мне показался удивительным. Я не знаю чем объяснить такой высокий процент несоответствия.


      1. dipierro
        00.00.0000 00:00
        +1

        Почему запрещены? Нет никакой проблемы провести подобное исследование, если все его участники разрешат использовать свой кариотип, данные будут анонимизированы, а выборка достаточно большой и репрезентативной.

        btw, 1500 тысяч родственников?


        1. Didimus
          00.00.0000 00:00

          Китай?


          1. iingvaar
            00.00.0000 00:00

            Нет, США и ашкенази. Так получилось исторически, что все европейские евреи родственники.


        1. iingvaar
          00.00.0000 00:00

          Ошибка, конечно, прошу прощения. Полторы тысячи.


        1. Hlad
          00.00.0000 00:00

          "Ген Чингисхана" - несколько десятков миллионов человек очень далёких родственников.


      1. alef13 Автор
        00.00.0000 00:00

        мне кажется кто-то пробирки плохо моет :)


      1. da-nie
        00.00.0000 00:00
        +5

        К моему удивлению, у 10% людей, идентифицирующих себя как женщины, была Y-хромосома.


        Есть одна книжка… Так вот, там написано вот такое:
        В предшествующих главах мы детально останавливались на разнообразных механизмах детерминации пола у беспозвоночных и некоторых позвоночных животных (рыб, амфибий, рептилий). Обратимся теперь к вопросу о том, каким образом происходит формирование пола человека в процессе его индивидуального развития. Процесс этот сложен и многоступенчат. Любые сбои и отклонения от видовой нормы могут приводить к парадоксальным в глазах непосвященного наблюдателя результатам. В ряде случаев расхождения между генетическими факторами (например, имеется генотип XY) и внешними морфологическими признаками пола (женская внешность) проходят незамеченными. Женщина может прожить всю жизнь, так и не узнав, что ее генетический пол — мужской, а мужчина — никогда не узнать, что в его клетках содержится лишняя женская хромосома. Однако в медицинской и судебной практике то и дело возникает необходимость объективной оценки половой принадлежности конкретного человека, и эта насущная потребность заставила сексологов (специалистов по вопросам пола) разработать набор четких критериев, позволяющих четко идентифицировать половую принадлежность каждой личности.

        Часто женский пол у человека рассматривают как базовый и более устойчивый к воздействию внешней среды, чем мужской (в дальнейшем мы еше не раз обратимся к этому факту). Х-хромосома более активна, чем Y, и несет на себе множество генов, необходимых для нормального функционирования как женского, так и мужского организма. Поскольку у женщин две XX, то в литературе часто задавался вопрос, каким образом у них происходит регуляция выработки продуктов, определяемых генами половой хромосомы. Сравнительно недавно, в 1995 г., Н. Вильямс показал, что в генотипе человека присутствует механизм компенсации дозы, уравнивающий экспрессию генов Х-хромосомы у мужчин и женщин (подробнее мы останавливались на этом в главе 2).
        Следует, правда, заметить, что последние исследования в области строения Y-хромосомы показали, что ранние представления о ней оказались во многом ошибочны. Во-первых, в ее структуре насчитывается не 40, а 79 генов, во-вторых, мужская хромосома изобилует так называемыми зеркальными полями (комплексами, дублирующими строение активных участков каждого гена). Они позволяют «ремонтировать» участки генов, поврежденных мутациями. Такой механизм обеспечивает устойчивость мужского организма, нейтрализуя действие генетических аномалий на Y-хромосоме. По сути дела, зеркальные поля играют ту же компенсаторную роль, что и парный (неповрежденный) ген на второй Х-хромосоме, если первая оказывается с дефектом.

        Наличие набора из XX или XY-хромосом определяет хромосомный пол человека. Однако это обстоятельство вовсе нс предполагает, что из зиготы (оплодотворенной яйцеклетки) с данным набором половых хромосом разовьется индивид по внешним признакам соответствующий данному полу. Известны примеры (например, синдром нехватки дигидротестостерона), когда на свет появлялась девочка, а в период полового созревания с ней происходили бурные морфологические преобразования, и девочка превращалась в полноценного молодого мужчину (см. об этом ниже).

        В дальнейшем активную роль в формировании мужской или женской внешности начинают играть гормоны. Третьей критической составляющей пола в схеме Дж. Мани значится гормональный баланс плода. Половые органы зародыша продуцируют половые гормоны: первичный тестостерон в семенниках и эстрагены в яичниках. Кроме того, семенники секретируют специфический антимюллеровский гормон. У мужчин тестостерон и его производные обеспечивают развитие внешних и внутренних мужских гениталий. Функция же антимюллеровский гормона состоит в том, что он запускает механизмы обратного развития (редукцию) примитивных внутренних женских гениталий. Необходимость наличия двух гормонов для развития мужского эмбриона называют «принципом Адама».

        Для дальнейшего развития женских половых органов и всей репродуктивной системы не требуется выработки какого-либо специфического гормона. Регрессия первичных внутренних мужских органов и развитие женских гениталий происходит автоматически. При отсутствии гена SRY зародышевые половые железы преобразуются в матку, фаллопиевы трубы и влагалище, а в отсутствие тестостерона исчезают вольфовы протоки. Отсутствие специфической гормональной стимуляции при развитии женского эмбриона называется «принципом Евы».

        Поскольку для реализации правильного развития в мужском случае необходимы более сложные генетические и биохимические взаимодействия, считается, что мужской путь развития более уязвим, и что мужские эмбрионы более чувствительны к изменениям в окружающей среде и стрессам, которые испытывает женщина в период беременности.

        Мужские половые гормоны играют также существенно большую роль в дифференцировке пола во внутриутробном периоде, чем женские половые гормоны. Воздействие мужских половых гормонов (андрогенов) на плод ведет к его маскулинизации. В медицинской практике известен следующий случай. Несколько беременных женщин получали гормональные препараты, препятствующие выкидышу. В результате на свет появились девочки с выраженными маскулинными (типично мужскими) признаками: у них были увеличены клиторы, а у некоторых даже имелись пенисы. Поведение таких девочек также больше смахивало на мальчишечье. Они росли сорванцами, предпочитали активные и силовые игры, носили брюки, не интересовались куклами и не видели себя в роли матерей и домохозяек. Сходное влияние могут оказывать на плод и некоторые синтетические гормоны, использовавшиеся для лечения ряда заболеваний у беременных женщин.

        Как бы ни иронизировали над этим оппоненты, но различия между мужским и женским мозгом существуют и оказывают значимое влияние на психологию индивида, его сексуальную ориентацию и гендерную идентификацию. Пятым признаком пола является дифференцированное, мужское или женское, строение мозга. К концу третьего месяца жизни, максимум, в начале четвертого месяца, зародышевые гормоны оказывают существенное воздействие на развитие мозга. В результате отдельные структуры мозга, в частности гипоталамус, формируются различным образом у мужчин и женщин. Важно заметить, что в функции гипоталамуса входит контроль деятельности гипофиза. А гипофиз, в свою очередь, оказывает контролирующее воздействие на гормональную секрецию всех остальных желез внутренней секреции у человека. Хотя сам гипоталамус секретирует лишь несколько гормонов, но, по сути, регулирует всю гормональную активность организма человека благодаря контролю над гипофизом. Следствием дифференцированного развития гипоталамуса по женскому типу является циклическое производство и выброс женских половых гормонов в зрелом возрасте. Дифференциация гипоталамуса по мужскому типу приводит к отсутствию месячной цикличности в продукции мужских половых гормонов.
        Важнейшей функцией гипоталамуса является преобразование неосознанных физиологических потребностей в выраженные психологические мотивации типа голода, жажды или полового влечения. Каждая из базовых мотиваций регулируется конкретными участками гипоталамуса, которые называют ядрами. Установлено, что общее сексуальное влечение у мужчин и женщин запускается вследствие активации разных ядер. Для мужчин это медиальное предоптическое ядро, для женщин — вентромедиальное ядро. Кроме того, сексуальное поведение мужчин и женщин связано с деятельностью третьего, промежуточного ядра передней доли гипоталамуса. Его размеры у мужчин больше, чем у женщин. Это обстоятельство, возможно, объясняет большую сексуальную активность мужчин.

        Отдельным компонентом пола выступает гендерная идентичность (тот гендер, которым индивид себя ошушает). Гендерная идентичность формируется в два этапа: ее развитие начинается в возрасте двух лет и заканчивается к четырем годам.
        В четыре года дети не только хорошо осознают свою половую принадлежность, но и начинают связывать ее однозначно с физическими характеристиками — строением собственных гениталий. В этом возрасте они окончательно понимают, что их пол является фиксированной характеристикой и его нельзя изменить, нарядившись в одежду представителей противоположного пола, изменив имя или детали поведения. Второй критический период приходится на время достижения половой зрелости.
        Долгое время в психологии считалось очевидным, что гендерная идентичность формируется в течение продолжительного времени, и ее следует считать продуктом воспитания. Однако, если вспомнить, что пренатальные гормоны воздействуют на мозг плода еще в утробе матери и определяют его развитие по мужскому или женскому типу, то абсолютизация роли воспитания выглядит, по меньшей мере, сомнительной. Не случайно же, многие эксперименты по воспитанию кастрированных в раннем младенчестве мальчиков в женской идентичности терпят неудачу (к этому обстоятельству мы еще вернемся чуть позднее).

        В рамках онтогенетической концепции полаДж. Мани полноценный мужчина или женщина должны в своем индивидуальном развитии демонстрировать все восемь признаков пола. Если же естественный ход событий нарушается на каком-либо этапе, то развитие происходит по аномальному типу и в дальнейшем индивида ожидают проблемы, связанные с определением собственной половой принадлежности и гендерной идентификацией.
        Рассмотрим наиболее типичные нарушения полового развития и выясним, каким образом подобная аномалия накладывает определенный отпечаток на жизненный путь своего обладателя (рис. 5.1). Итак, в типичном случае оплодотворенная яйцеклетка или зигота, из которой развивается впоследствии новый организм, содержит две половые хромосомы и представлена комбинацией XX (женский вариант) или XY (мужской вариант). Однако, в ряде случаев происходит развитие эмбрионов с аномальным набором половых хромосом: XXX, XYY, XXY или даже ХО.
        Эти нарушения не являются гибельными для зародыша, и в большинстве случаев из зигот с такими генотипами рождаются младенцы, которые вполне успешно могут существовать и во взрослом состоянии. Генотип Y0, вероятно, не совместим с жизнью, и индивиды с таким набором половых хромосом никогда не встречаются.

        Хромосомные аномалии вовсе не всегда заметны невооруженным глазом. Часть из них практически никак не проявляется в фенотипе носителя и может остаться тайной для него самого и окружающих. Например, трисомия по Х-хромосоме редко диагностируется в клинических условиях, потому что для нормального развития организма требуется активность лишь одной Х-хромосомы, в противном случае мужские эмбрионы с генотипом XY не могли бы успешно развиваться. Как известно в настоящее время, в женском организме лишь одна из двух Х-хромосом функционирует в каждой клетке. Трисомия по Х-хромосоме практически не причиняет женщине никаких неудобств и не рассматривается как аномалия с медицинской точки зрения.
        XYY-синдром (его называют синдромом избыточной Y-хромосомы) так же редко удается выявить клинически, потому что лишь одна из Y-хромосом запускает развитие семенников. Мужчины с лишней Y-хромосомой порой отличаются более высоким ростом, у них могут возникать проблемы с повышенным потоотделением и неприятным запахом пота. В ряде случаев отмечается, что мужчины с лишней Y-хромосомой могут обладать пониженным интеллектом. В психологической литературе некоторое время было распространено представление, что лишняя Y-хромосома сопряжена с повышенной агрессивностью. Именно этим обстоятельством объяснялись случаи повышенной вероятности попадания лиц с лишней Y-хромосомой в тюрьму. Внимательный анализ типов преступлений, совершенных мужчинами с нормальным генотипом и мужчин с лишней Y-хромосомой, однако, не подтвердил это предположение. В действительности, мужчины с нормальным генотипом сидели за совершение более тяжких преступлений, сопряженных с актами насилия, много чаше, чем лица с лишней Y-хромосомой. По-видимому, мужчины с лишней Y-хромосомой чаше попадают в тюрьму в силу того, что полиции бывает легче их вычислить, так как они, обладая пониженным интел лектом, не умеют заметать следы, а высокий рост делает их более заметными для окружающих.
        Синдром Клайнфельтера (генотип XXY) чаще определяется клинически, чем трисомия по Х-хромосоме или лишняя Y-хромосома у мужчин. Мужчины с синдромом Клайнфельтера обладают более женственной внешностью. У них более узкие плечи и более широкие бедра по сравнению с нормой, менее развит волосяной покров нателе, наблюдается жироотложение по женскому типу, и может развиваться грудь. Хотя у некоторых мужчин с данным синдромом наблюдается незначительное снижение умственных способностей, многие их них воспринимаются окружающими как совершенно нормальные мужчины. Однако мужчины с синдромом Клайнфельтера не могут иметь детей.
        До сих пор мы рассматривали случаи, когда индивиды выживали и достаточно успешно существовали, имея в своем хромосомном наборе лишнюю половую хромосому. Однако причуды природы на этом не исчерпываются. Оказывается, что индивид может выжить и при наличии у него лишь одной половой хромосомы при условии, что этой единственной хромосомой оказывается X, а не Y-хромосома (выше уже говорилось, что у многих видов, в частности, насекомых, самцы отличаются от самок именно тем, что имеют не две, а одну Х-хромосому).
        Вариант ХО у человека называют синдромом Шерешевского-Тернера. Внешне люди, страдающие этой аномалией, воспринимаются как женщины. Для них типичен маленький рост и укороченная шея. Лингвистические способности таких женщин находятся в рамках нормы, однако они плохо ориентируются в пространстве. У лиц с синдромом Шерешевского-Тернера отсутствуют яичники и, следовательно, они бесплодны. В ряде случаев они страдают умственной отсталостью. В отличие от самок насекомых с генотипом ХО, способных давать потомство, индивиды с таким генотипом у человека не только бесплодны, но их с большой натяжкой можно считать представительницами женского пола, потому что по нескольким основным критериям пола (внутренний морфологический пол), они таковыми не являются.

        Несовпадение генетического и внешнего морфологического пола могут иметь место и по ряду других причин. Типичный случай такого рода известен под названием синдрома андрогенной нечувствительности. Эта аномалия сопряжена с нечувствительностью к тестостерону на клеточном уровне. В результате у эмбриона с нормальным мужским генотипом XV и с развитыми семенниками формируются женские наружные половые органы. Такой индивид не только внешне выглядит как женщина, но и ведет себя по-женски. Имеющиеся в наличии полноценные семенники не оказывают никакого влияния на жизнь и активность ребенка. До наступления периода созревания и родители, и сам ребенок не испытывают ни малейшего дискомфорта. Однако в пубертатный период у девочки не приходят месячные, родители начинают бить тревогу и обращаются к врачу. Если опытный врач устанавливает истинную причину данной аномалии, то производится хирургическая операция: семенники удаляются, и в дальнейшем девушка продолжает вести нормальный образ жизни, свойственный ее полу, не испытывая проблем с гендерной идентичностью. К сожалению, такая женщина оказывается бесплодной. По данным Мани и Эрхарта 80% индивидуумов с синдромом андрогенной нечувствительности имеют исключительно гетеросексуальную ориентацию и ни один не демонстрировал лесбийских предрасположенностей во взрослом состоянии. Таким образом, несмотря на мужской генотип XV, мужчины развиваются в женщин. Они демонстрируют чувствительность к феминизирующему влиянию эстрогенов, секретируемых семенниками в период полового созревания. Из-за этого у таких мужчин развиваются грудь и женские формы тела.
        Еще более редкая и чрезвычайно любопытная, в русле наших рассуждений о роли природы и воспитания, генетическая аномалия носит название дефицита 5-альфа редуктазы. Именно этот случай мы имели в виду, говоря, что внешний морфологический пол человека в редких случаях может самопроизвольно меняться на противоположный под действием внутренней гормональной активности. Аномалия описана всего для нескольких семей, проживающих в Доминиканской Республике (18 случаев) и в Папуа Новой Гвинее (несколько случаев). Мутация проявляется только у мужчин и только при условии, что индивид наследует две копии рецессивного гена, что ведет к нарушению нормальных процессов метаболизма тестостерона. В результате у плода не происходит преобразование первичного тестостерона в д и гидротестостерон. Хотя развитие семенников происходит, они не опускаются в мошонку, а остаются внутри тела. Внешние половые органы такого новорожденного ребенка больше напоминают женские. Не удивительно поэтому, что родители и окружающие видят в нем девочку и воспитывают соответствующе. Правда, такие девочки ведут себя неподобающим, с точки зрения гендерных стереотипов, образом. Они почти всегда растут сорванцами, стремятся к повышенной двигательной активности, силовым играм и конкурентности, редко интересуются играми в куклы и дочки-матери и предпочитают играть с мальчиками, несмотря на уговоры и запреты огорченных родителей.

        В период полового созревания д и гидротестостерон теряет свою ведущую значимость в качестве полового гормона, и его место занимает тестостерон. А его воздействие на клетки организма у лиц с данным синдромом протекает совершенно нормальным образом. Поэтому в организме «девочки» начинают Проходить бурные перестройки: вырастает пенис, семенники смешаются вниз в сформировавшуюся мошонку, происходит рост волосяного покрова по мужскому типу, голос становится более низкий, расширяются плечи, изменяется характер жироотложения. Любопытно, что в дальнейшем юноша не испытывает никаких проблем не только с половой, но и с гендерной идентичностью. Он обзаводится семьей и может иметь здоровых детей.

        Марина Бутовская «Тайны пола»
        (Мари́на Льво́вна Буто́вская (род. 27 июня 1959, Черкассы, Украинская ССР, СССР) — советский и российский этолог-приматолог, социальный, культурный и физический антрополог, этнограф. Доктор исторических наук (1995), профессор (2004), член-корреспондент РАН (2019). )


        1. iingvaar
          00.00.0000 00:00
          +1

          Спасибо за подробный ответ. Я читал о механизмах дифференциации пола (например, синдроме Свайера), и у меня сформировалось мнение, что во-первых нарушения формирования пола достаточно редки, а во вторых, они приводят к настолько тяжелым поражениям организма, что человек в лучшем случае оказывается бесплоден. Систематических исследований на больших выборках я не нашел, скорее всего, их и не было. То есть здесь возможна типичная "ошибка выжившего" - тяжелые нарушения фиксировались только у обратившихся, но неизвестно, сколько существует необследованных женщин с генотипом XY, у которых никаких нарушений развития нет. Сейчас, с появлением коммерческих тестов и огромных баз ДНК такие исследования стали возможны, но никто их не проводит по другим причинам. Эти 10% могут показывать реальное положение вещей. А могут и что-то другое, например, они могут быть аккаунтами матерей, втайне сделавших ДНК-тест своих сыновей.


        1. myhambr
          00.00.0000 00:00

          XYY-синдром (его называют синдромом избыточной Y-хромосомы) - Мужчины с лишней Y-хромосомой порой отличаются более высоким ростом. В психологической литературе некоторое время было распространено представление, что лишняя Y-хромосома сопряжена с повышенной агрессивностью.

          Киркоров и Пётр I ?


    1. alef13 Автор
      00.00.0000 00:00

      в ссылке на интерсекс-вариации, самая первая строчка содержит  "термины, касающиеся нарушения полового развития организма.". Ключевое слово нарушения


      1. dipierro
        00.00.0000 00:00
        +3

        это не отменяет того, что интерсекс-люди существуют и продолжат существовать. Или вы не считаете их людьми?


        1. alef13 Автор
          00.00.0000 00:00
          +3

          Когда в результате эволюции/естественного отбора это станет нормой - подходите, я исправлю модель данных.


          1. Koioes
            00.00.0000 00:00
            +5

            а какая разница? если какой-то признак не преобладает в популяции, то его нужно сразу выкидывать? да и, в конечном счете, может просто люди сами разберутся, как себя определять? и нам остается просто уважать их выбор, и это подразумевает учитывание отличий, ведь все-таки гендер определяет не только как человек себя сам определяет, но и его отношения с внешним миром.


            1. zuek
              00.00.0000 00:00

              Там, по дереву выше, привели очень развёрнутый комментарий про "альтернативную половую принадлежность" - я склонен согласиться с указанной классификацией, в которой используются термины "девушка"/"женщина" и "молодые люди"/"мужчины". При том, что "женщиной" может называться носитель семенников (неработающих, впрочем, из-за общей невосприимчивости к тестостерону), а многие "мужчины" бесплодны в силу генетических особенностей, но там же и уточняется, что в подавляющем большинстве случаев самоидентификация совпадает с особенностями физиологии и генома.


  1. mshiryaev
    00.00.0000 00:00
    +1

    Вот довольно простой, но функциональный сайт.
    Бесплатный, много полей для заполнения, GEDCOM экспорт/импорт есть, можно шарить ссылки для совместного заполнения.
    https://www.familyecho.com


  1. Didimus
    00.00.0000 00:00

    Я правильно понял, что решается проблема визуализации графа? Как по мне, вполне можно вести в виде записей реляционной БД


    1. redfox0
      00.00.0000 00:00

      Что-то в этом есть: одна табличка с полями: id человека, id мамы и id папы.


  1. goodlion
    00.00.0000 00:00
    -1

    А есть функция: родитель номер 1, родитель номер 2?????


    1. alef13 Автор
      00.00.0000 00:00
      -3


  1. da-nie
    00.00.0000 00:00
    +1

    А мне нравится, как Древо Жизни строит. У меня правда, только на 9 поколений дерево и всего около 500 человек. Может, когда большое дерево эта программа тоже плохо строит. Не знаю. Но то, что сейчас получается, меня устраивает.


    1. Akr0n
      00.00.0000 00:00

      В следующей мажорной версии разработчики уже несколько лет обещают красивые деревья, которые не стыдно распечатать и на стену повесить, вот только дождемся ли...


  1. itrus
    00.00.0000 00:00

    1) Мне понравился бесплатный редактор GEDKeeper. Работает под Win/Linux. Отличный встроенный функционал, включающий сохранение GEDCOM файлов.
    2) Для быстрого просмотра созданного или чужого GEDCOM файла использую TOPOLA (https://pewu.github.io/topola-viewer/#/).


  1. RobertLis
    00.00.0000 00:00
    +1

     И именно биология жёстко указывает, что дети рождаются только у мальчика и девочки, а также не существует других гендеров кроме «М» и «Ж».

    Вы перепутали понятия пола и гендера. Это не синонимы.

    Биология и археология не оперируют термином "гендер".


    1. alef13 Автор
      00.00.0000 00:00
      -1

      согласен. Но главное чтобы все, кроме М и Ж держались подальше от меня и моих детей


      1. RobertLis
        00.00.0000 00:00

        Раз согласны — может быть, поправите текст статьи, чтобы не вводить читателей в заблуждение?


        1. alef13 Автор
          00.00.0000 00:00

          поправил. Половина комментариев потеряла смысл :)


  1. Andruh
    00.00.0000 00:00

    Получилось вроде похоже на GenoPro.
    Кстати, не факт что одно поколение должно быть на одном уровне - в одной ветви могут рожать чаще, в другой реже. Было бы здоровски если по вертикали было реальное время, человек располагался в той точке, где ему было min(30, возраст смерти), а при наведении на него ещё рисовался столбик всей продолжительности жизни. Тогда можно было бы понимать как соотносились возраст и время жизни родственников.


    1. alef13 Автор
      00.00.0000 00:00

      я думал об этом. Но, к примеру, в моём древе поколения 3-4 назад даже нет приблизительных дат жизни, а привязываться к средней продолжительности жизни для определённых эпох так себе идея


  1. dyadyaSerezha
    00.00.0000 00:00

    Диаграма с черными человечками на картинке в заголовке - это же зарождение человечества. Сверху Адам и Ева.