Предыдущий день | Следующий день

{{Источник информации}} — новодельный форк широко употребляемого шаблона {{Source}}. Единственное возможное (неочевидное) преимущество нового — более строгое соблюдение россйиского ГоСта на цитирование. Leopold XXIII 16:51, 8 мая 2023 (UTC)[ответить]

ИМХО если википедия в ближайшие годы не загнётся, то использование источников из викиданных будет только шириться. Лично я собираюсь продолжать заливать и поддерживать в актуальном состоянии всякую астрономическую инфу в викиданных. И я бы очень хотел иметь возможность прийти к кому-то и спросить «какого хрена отображение 64 источников в Список экзопланет в созвездии Большой Медведицы отъедает 475 из 500 доступных вызовов „дорогих“ функций»?
На мой взгляд, рациональным выходом из этой ситуации было бы:
  1. Выделение общего модуля (безразлично на основе чего), который наиболее эффективным способом вытаскивает все нужные для источника данных из ВД
  2. Написание как можно более простых рендереров «как в Sources» и «по ГОСТу с-возможностью-переопределения-любого-параметра-даже-без-указания-Qxxx».
Ghuron (обс.) 07:39, 9 мая 2023 (UTC)[ответить]
  • Тут ещё стоит упомянуть нижележащие модули Модуль:WDBackend и Модуль:WDFormat.
    WDBackend получает выборку из Викиданных, здесь я попытался сделать максимально удобный интерфейс для получения информации из иерархии элементов для последующей их обработки (по внешнему виду нечто вроде SPARQL, только NOSQL-версия). В идеале в будущем такой интерфейс можно было бы интегрировать в Lua, сериализовывать запрос и отправлять в Викиданные в сериализованном Виде. Соответственно, ответ был бы тоже сериализованным, содержал бы сразу все элементы Викиданных. Так можно избавиться от "дорогих" обращений к Викиданным. Скорее всего реализуется несложно, вопрос только в том, чтобы разобраться с внутренним устройством всего этого в движках. Получение выборки для CiteGost для примера: Модуль:WDSource.
    А WDFormat задумывался как универсальная форматировалка текста по выборке из Викиданных. Ему скармливается представление (как что и в какой последовательности будет форматироваться) и выборка элементов из Викиданных. На выходе получается готовый викитекст. То есть реализована классическая MVC.
    Вот тут есть некоторые эксперименты по теме: Модуль:Песочница/D6194c-1cc/MedInfobox/Модуль:Песочница/D6194c-1cc/WDMedCondition, Модуль:Песочница/D6194c-1cc/MedResources/Модуль:Песочница/D6194c-1cc/WDMedResources (мои черновики). Собственно, да, за исключением представления CiteGost это всё вот тот самый шаблон {{источник информации}}. Для доработки этих шаблонов мне не хватает рендера источников, но с ним я пока ещё не определился (тут всё очень интересно для тех, кто хорошо разбирается в программировании, поскольку рендер у меня бы предполагался через шаблон, который через эту же схему данные и получает). Это текущая задача-блокер. D6194c-1cc (обс.) 08:50, 9 мая 2023 (UTC)[ответить]
    • Для понимания, исправления ошибок и фичи реализуются через редактирование WD*-модуля получения выборки и модуля представления. Там знания программирования практически не требуются, интерфейс больше декларативный. D6194c-1cc (обс.) 08:52, 9 мая 2023 (UTC)[ответить]
    • Мне до известной степени безразлично как именно оно реализовано. Придется лезть внутрь — разберусь.
      Но да, например, если ваш backend можно было бы научить компактно (ибо есть ограничения по памяти!) кешировать запрашиваемые элементы — это было бы офигенно. У mw.wikibase.getEntity() есть кеш, но он похоже совсем дубовый. Подозреваю что именно поэтому в том списке на загрузку 195 уникальных элементов викиданных уходит 475 вызовов getEntity (вроде других дорогих вызовов там нет). Ghuron (обс.) 10:02, 9 мая 2023 (UTC)[ответить]
      • Кеширование тут вообще не причём. Это цена автоматизации. Я не нашёл другого способа узнать, есть ли в других языковых разделах статьи, кроме как обращаться напрямую к элементу Викиданных. Чинится простым убиранием одной из функции в представлении. Тестировал на черновике: Участник:D6194c-1cc/Черновик/Шаблон:Источник информации.
        То есть просто убрав ссылку на Викиданные для отдельный частей библиографии или сделав её постоянной, "дорогие" вызовы уходят. D6194c-1cc (обс.) 12:52, 9 мая 2023 (UTC)[ответить]
      • А вот безразличие по части того, как что-то устроено, вызывает недоумение. Ценность программы в исходном коде, а не в том, как она внешне работает или выглядит. Вот, например: [1], попробуйте разберитесь, а ведь задачу-то свою код исполняет. D6194c-1cc (обс.) 12:56, 9 мая 2023 (UTC)[ответить]
        • У меня не было намерения обесценить вашу работу, уверен что внутри все сделано замечательно.
          Это вопрос того, кто на чём фокусируется и от чего абстрагируется. Вас не интересуют подробности того, как загружается информация по источникам в викиданные, хотя вы, несомненно, смогли бы в этом разобраться. Главное чтобы источники были понятной структуры, а не кто во что горазд. Меня не интересует как именно источники рендерятся в статьях, хотя, конечно, я смог бы разобраться в коде. Главное чтобы сноски выглядели нормально и всё вместе помещалось в технологические лимиты. Ghuron (обс.) 13:46, 9 мая 2023 (UTC)[ответить]
          • Я раньше о лимитах не знал, плюс не было теста на очень большом объёме источников. Про Викиданные я с самого начала делал бекэнд с расчётом его будущей миграции в движок Википедии, потом выдвину такое предложение.
            Сейчас по большей части поправил ошибки, спасибо за наводку. Остальные лимиты легко исправляются отключением викификации авторов и отключением сокращения их имён до инициалов. Вопрос в том, стоит ли это делать, поскольку делает визуальное отображение хуже. D6194c-1cc (обс.) 13:54, 9 мая 2023 (UTC)[ответить]
          • Ещё по излишней назгрузке, во многом разница между моим шаблоном и source будет в реализованных фичах, например:
            Источник информации: Кон М.[d] Agile : оценка и планирование проектов / Пер.: В. Ионов; ред.: С. Турко[d]. — М. : Альпина Паблишер, 2018. — 418 с. — ISBN 978-5-9614-6947-9. — WD Q115960141.
            source: Кон М. Agile: оценка и планирование проектов / под ред. С. ТуркоМ.: Альпина Паблишер, 2018. — 418 с. — ISBN 978-5-9614-6947-9.

            Можно заметить, что делается пометка, что издание переводное, а это требует доступа к ещё одному элементу Викиданных. Естественно, что чем больше фич будет, тем больше нагрузка на шаблон будет. Тут следует выбираться какой-то баланс. Как вариант, можно позиционировать мой шаблон как максималку, а source - как легковесный. Потому как сокращать фичи не хочется (но ввести параметр легковесности могу). Грубо говоря, можно сделать второй WDSource, легковесный, и подгружать его, если задан определённый параметр. D6194c-1cc (обс.) 14:11, 9 мая 2023 (UTC)[ответить]
            • Зоопарк шаблонов — это всегда плохо. Лучше всего иметь один шаблон, но нормально реализованный и нормально поддерживаемый, с возможностью включения и выключения тех или иных фичей (первый предложенный вами вариант оформления ссылки в здравом уме никто использовать не будет). Leopold XXIII 14:26, 9 мая 2023 (UTC)[ответить]
              • Я поэтому и написал про параметр. Надо иметь ввиду, что за бесконтрольно увеличивающуюся статью при наличии лимитов в любом случае придётся платить убиранием фич. Но это не мешает оставить эти фичи в другой статье. Например, в статье про Владимира Путина, скорее всего, ни один из двух шаблонов для работы с Викиданными не подойдёт (в плане перевода всех источников на него). А вот в статье про почку млекопитающего никакие лимиты не превышаются. И статья уже достаточно полная, а запас примерно 2x, если верить сообщениям. D6194c-1cc (обс.) 19:12, 9 мая 2023 (UTC)[ответить]
              • А про зоопарк, – в теории, конечно, можно заменить кучу шаблонов оформления шаблоном источника информации или другой версией представления CiteGost, но многие привыкли к книге, к публикации, к Cite Web (именно к их параметрам, названиям, принципу работы), а некоторые шаблоны полезны при переводе англоязычных статей. D6194c-1cc (обс.) 19:23, 9 мая 2023 (UTC)[ответить]
            • Поправка, оказывается легковесный как раз мой шаблон. Ошибка, которая выскакивает, – это совсем другая ошибка. Чуть позже её гляну. Сейчас сравнил два шаблона, они по количеству элементов почти равноценны, а по использованию дорогих функций шаблон source сильно проигрывает. D6194c-1cc (обс.) 21:35, 9 мая 2023 (UTC)[ответить]
  • Парадоксальная ситуация. В указанной статье про большую медведицу я прошерстил источники и в Викиданных для авторов указал прямые ссылки на Викиданные. У шаблона source выскочила ошибка. Я заменил на шаблон источник информации, ошибка исчезла. Но если использовать только один из шаблонов, то ошибка есть. В случае шаблона источника информации ругается на один из элементов по поводу доступа к слишком большому количеству элементов. Что это и откуда ноги растут - я пока не понимаю. D6194c-1cc (обс.) 21:52, 9 мая 2023 (UTC)[ответить]
    • Так, излишнее количество обращений исправил (как ни странно, гигантскую нагрузку создавала функция викификации, ибо промахивалась мимо кеша), ошибок более не выскакивает в статье Список экзопланет в созвездии Большой Медведицы в предварительном просмотре при попытке замены на {{Источник информации}}. В песочнице я попробовал ещё оптимизации, но они уже делают менее удобным программирование. Поэтому я не знаю, стоит ли их делать или нет. В Участник:D6194c-1cc/Черновик/Тесты я накинул 100 источников, ошибок нет. Поэтому запас по количеству источников, полагаю, хороший. Нужна новая статья, побольше, где бы можно было всё протестировать на большем количестве источников. Теперь можно и спать пойти, наконец. D6194c-1cc (обс.) 23:28, 13 мая 2023 (UTC)[ответить]
  • Поскольку лимиты никуда не денутся, а получать информацию из Викиданных очень удобно, я добавил подстановку параметров шаблона из Викиданных через subst. Механизм универсальный, будет работать и для других обёрток над модулем CiteGost, если сделать прослойку-адаптер в пространстве имён шаблона map: (так тестировал в черновике). Например,
    {{subst:Источник информации|Q92544321}}
    

    выдаст:
    {{Источник информации|авторы=M.&nbsp;A.&nbsp;Abdalla<sup>[[d:Q118210006|&#91;d&#93;]]</sup>|заглавие=Anatomical features in the kidney involved in water conservation through urine concentration in dromedaries (Camelus dromedarius)|ссылка=https://www.sciencedirect.com/science/article/pii/S2405844019367982|архив=https://web.archive.org/web/20220726192143/https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6948238/pdf/main.pdf|дата архивирования=2022-07-26|издание=Heliyon|язык издания=en|дата=2020-01-02|том=6|выпуск=1|статья=e03139|doi=10.1016/J.HELIYON.2019.E03139|pmid=31922050|s2sic=210118541|pmc=6948238|issn=2405-8440|язык=en|qid=Q92544321|офлайн=1}}
    


    Если превышен общий лимит, можно просто источник из числа первых перевести в офлайн-режим. В теории это вполне способен делать и бот. В частности, бот мог бы заменять и source-ref в таких случаях на subst:источник информации+тег ref информации. D6194c-1cc (обс.) 10:36, 12 мая 2023 (UTC)[ответить]
  • Обновил Модуль:Sources, как и стоило бы сделать изначально, больше «дорогие» функции не вызываются. — putnik 00:23, 15 мая 2023 (UTC)[ответить]
  • @D6194c-1cc, планируется ли объединение по итогу тестирования этих двух модулей? Почему для тестирования не использовать песочницу? В чем радикальное отличие функционала для конечного пользователя? Iniquity (обс.) 01:34, 14 мая 2023 (UTC)[ответить]
    • То, что может что-то глобально сломать, я стараюсь тестировать как раз в песочнице (но без CI/CD-бота с автоматическим deploy это не очень удобно). Публичное тестирование (если речь про это) – потому как глобальных архитектурных исправлений не планировалось (но глобальные изменения ещё будут в нижележащих модулях), а на всех основных примерах шаблон работал. Сейчас остаются частные случаи.
      По объединению – не мне решать. Но это будет не объединение в понимании Википедии, а подмена одного шаблона на другой. Я лично сторонник просто объявления модулей устаревшими. Подмена одного модуля на другой может выявить какие-либо ошибки в отдельных статьях, а фиксить их в срочном порядке может оказаться некому.
      По конечному функционалу для обычных пользователей – в {{Источник информации}}:
      1. возможность как получать все данные из Викиданные, так и полностью или частично задавать их вручную (в любой статье можно обойтись лишь одним шаблоном для оформления источников);
      2. возможность подстановки информации из Викиданных через subst (например, в случае превышения лимитов);
      3. поддержка оформления источников по QID тем (например, для формирования ссылок на статьи из БРЭ или Британники), смотрит квалификаторы к идентификатору издания в элементе темы;
      4. поддержка переводов и параллельных заглавий;
      5. поддержка получения главного редактора;
      6. поддержка получения иллюстраторов;
      7. более проработанное получение информации о томах многотомных изданий;
      8. обозначения контрибьюторов делаются без склонения, поэтому отсутствует ошибка склонения;
      9. ограниченная поддержка получения серии из Викиданных;
      10. поддержка отображения номера статьи (он не должен отображаться через параметр страниц);
      11. поддержка указания дополнительной информации с титульного или обратного листа в Викиданных (например, для обозначения учебного пособия);
      12. поддержка получения даты начала публикации и даты конца (например, для Большая российская энциклопедия (печатное издание 2004-2017 годов) (Q118220282))
      13. отображается полученная из Викиданных ссылка на архивную копию;
      14. поддержка значений, установленных в "неизвестно";
      15. викифицируются авторы, редакторы, иллюстраторы;
      16. номер издания отображается через строковый параметр, поэтому более соответствует источнику;
      17. автоматическая вставка неразрывных пробелов везде, где требуется и где можно их автоматически вставить (например, между фамилией и инициалами);
      18. нет прямых ссылок на Викиданные, все ссылки на Викиданные являются надстрочными, а отображаются они, если нет возможности сделать викиссылку;
      19. автоматический выбор между формированием прямой ссылки, ссылки на Викиданные или ссылки на Wikisource, если ссылка не задана явно;
      20. можно указывать ссылку и на статью, и на издание;
      21. автоматическая ссылка на Google Books, если не удалось сформировать другой ссылки;
      22. дополнительные идентификаторы вроде s2sic не отображаются, если задан QID (всё можно в Викиданных посмотреть), вместо этого идёт автоматическая попытка сформировать прямую ссылку на источник;
      23. если элемент Викиданных не задан, то отображаются все заданные дополнительные идентификаторы;
      24. отображается (пока нет поддержки отображения для изданий, но поправлю) код со ссылкой на Викиданные по аналогии с англоязычным CiteQ, легче вносить исправления, смотреть примеры использования и смотреть дополнительную информацию;
      25. не использует другие шаблоны через expandTemplate, не использует ресурсоёмкие функции, кроме функций для работы с Викиданными;
      26. нет чёрных ссылок;
      27. не даются ссылки на иновики;
      28. если не удаётся получить соответствующую языку информацию, рядом с таком информацией появляется ссылка на Викиданные в виде вопроса;
      29. вероятно, слегка большая проработанность по части соответствия ГОСТ, в частности, в конце ставится точка, "iss." пишется с маленькой буквы, ISSN разделяется через запятую, после ISSN тоже ставится точка, язык указывается в квадратных скобках.
    • Это из той разницы, что сейчас по-быстрому смог выяснить путём экспериментов. D6194c-1cc (обс.) 08:53, 14 мая 2023 (UTC)[ответить]
      • Правильно ли я понимаю, что это модуль просто с большими возможностями? И из отсутствующего функционала в нем только то, что не даются ссылки на иновики? Iniquity (обс.) 10:10, 14 мая 2023 (UTC)[ответить]
        • Да, набор модулей с большими возможностями (на уровне CiteGost находится 3 модуля: CiteGost, мапинг для подстановки и WDSource).
          По ссылке на иновики, даётся ссылка на Викиданные, откуда можно в любую Вики попасть. Фактически прямые ссылки на иновики у нас и не принято делать. Этого функционала быть и не должно.
          Ещё не планируется делать аналог source-ref, поскольку выяснилось, что он физически дублирует вызовы к источникам, поэтому создаёт излишнюю нагрузку на Викиданные. Способов узнать, был ли уже на странице сгенерирован тег с заданным id я не нашёл (можно только заявить свой id через хеширование уже сгенерированного текста или через хеширование аргументов). Выгоднее использовать тег ref.
          Из отсутствующего – пока не делаются ссылки на arxiv (в source вроде их видел, но может просто сама ссылка такой была), но нужны ли они вообще, я не знаю, мне пока не требовались, хотя с научными статьями я работал много (добавить можно достаточно быстро). Отсутствует ли что-то ещё я не знаю, могу сказать только то, что увидел в ходе сравнительного тестирования. Изучать исходники другого модуля у меня сейчас времени нет. D6194c-1cc (обс.) 11:06, 14 мая 2023 (UTC)[ответить]
        • Вспомнил ещё кое-что. Вот тут: Модуль:Sources/utils я видел что-то отдельное касающееся указов президента и законов, возможно, source хорошо заточен под законы РФ, не проверял. D6194c-1cc (обс.) 11:29, 14 мая 2023 (UTC)[ответить]