Открыть главное меню

Вики LessWrong.ru β

Изменения

Обсуждение:Сайт LessWrong.ru

9778 байт добавлено, 14:18, 22 января 2019
Новая страница: «== Всё переписать == ~~~~ Рассматриваю вариант переписать lesswrong.ru (ту часть, которая не вики)…»
== Всё переписать ==
[[Участник:Berekuk|Berekuk]] ([[Обсуждение участника:Berekuk|обсуждение]]) 17:17, 22 января 2019 (MSK)

Рассматриваю вариант переписать lesswrong.ru (ту часть, которая не вики) на [https://www.djangoproject.com/ Django] и [https://wagtail.io/ Wagtail].

=== Rationale ===
Зачем:
* Мало людей, умеющих в Drupal 7 (ожидается, что Python в LW-сообществе знает большее число людей, чем PHP)
* Мало людей, хотящих в Drupal 7 (низкий статус PHP как языка для разработки в LW-сообществе)
* Drupal 7 устарел, миграция на Drupal 8 затратна
* Drupal 8 тоже не очень популярен и вряд ли это изменится
* текущий код и конфигурация сайта хранятся в файлах и в базе, а не на github'е - нельзя отвечать "присылайте pull request'ы" (это можно было бы исправить, но требует кого-то, кто разбирается в Drupal)
* Больше возможностей в Django для продвинутых фич без борьбы против фреймворка

Что могло бы быть вместо Django / альтернативные решения:
* аналогичные фреймворки: Laravel (PHP), Rails (Ruby)
** оба эти варианта хорошие, но с PHP остаётся проблема низкого статуса, а Ruby, кажется, постепенно теряет популярность
* более современные языки и фреймворки: что-то на Go, Rust, Elixir, и т.д.
** менее зрелые экосистемы
** больше вероятности, что язык быстрее станет менее популярен, а мы останемся с legacy
* Meteor
** умирает и ненавидим нормальными разработчиками (хотя это не помешало сделать на нём lesswrong.com)
* Node + Express + isomorphic React или что-то в этом духе
** из плюсов: продвинутые технологии, раздолье для перфекционизма
** минусы: потребует гораздо больше усилий (под ноду нет аналогов Django/Rails/Laravel, насколько я знаю)
* Static Site Generator (Hugo/Jekyll) + самописная админка
** больше ограничений для написания простых фич
** больше усилий на написание кастомной админки
** медленный деплой новых фич (например, Gatsby + Netlify CMS - круто, но любая правка требует полной пересборки сайта за несколько минут, инкрементальную сборку всё ещё не завезли)
** высокий порог вхождения, если требовать хранение всего на github и принимать правки через pull request'ы (в ЛВ много программистов, но далеко не все)
* [https://github.com/LessWrong2/Lesswrong2 Движок lesswrong.com]
** нет i18n, добавить будет ооочень непросто
** все минусы по высокому порогу входа в разработку
* Wordpress
** не очень разбираюсь, возможно что это не ужасно, но опять же PHP

=== Как выглядел бы переезд / что надо сделать ===

Drupal-часть LessWrong.ru - это в первую очередь переводы и инфраструктура вокруг них. На новом движке можно было бы сделать больше функционала, но заведомо известно, что на Django это будет решаемо, так что задача сводится к "сделать сайт на Django/Wagtail с переводами, убедиться, мы не потеряли никаких важных сценариев использования, и перенести существующую базу переводов".

Учитывая то, что проект достаточно большой, мне кажется разумным при этом не менять дизайн или структуру сайта. Это можно будет сделать позже.

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

Что должен включать новый сайт и что для этого надо будет сделать:
* база переводов - иерархическая структура страниц с теми же полями, как было в drupal
** поля: заголовок, текст, переводчики, ссылка на оригинал, номер в книге
** этот пункт, кажется, легко отображается на wagtail
* UI для отображения базы переводов - страница [https://lesswrong.ru/w /w] и навигация в футере каждого перевода, навигация в левой колонке
* общая обвязка сайта - верхнее меню, меню в левой колонке, стили, главная страница
** для воспроизведения стилей можно пользоваться шаблонами из текущей [https://github.com/lesswrong-ru/drupal-theme-ng drupal-темы]
*** но вообще в drupal итоговый html/css является смесью из темы и из родных drupal-стилей; текущая тема достаточно минималистичная (я её писал с нуля), но без родных drupal-стилей она работать не будет
*** поэтому потребуется немало доработки напильником
* авторизация
** и перенос в базу пользователей пользователей из друпала
*** возможно ли это вообще, если все пароли зашифрованы? вероятно, нет, все пароли придётся сбросить и просить вести новый при первом логине. или как?
* воркфлоу для правок и премодерации
** прямо сейчас на сайте есть возможность править любые тексты даже без регистрации (но без регистрации правки уходят на премодерацию)
** у модераторов должна быть возможность поменять структуру цепочек и книг (но вроде эта задача решается через wagtail без проблем)
* очень важно не потерять историю ревизий
** в wagtail история ревизий есть, её надо будет сделать публичной
** по-хорошему, надо будет импортировать все ревизии из старой базы, а не только последнюю - они могут пригодиться
* импорт всех текстов
** тексты в markdown'е (99% из них, по крайней мере; есть некоторые с html'ем, но не переводы, а другие вспомогательные страницы)
** но не совсем в markdown'е, потому что там есть несколько расширений типа [https://www.drupal.org/project/freelinking freelinking'а] и mathjax'а
** поэтому эта задача может оказаться сложнее, чем кажется, и может оказаться даже наиболее сложной и муторной во всём проекте
* поддержка всех старых ссылок и редиректов
** например, у всех переводов есть короткая ссылка (пример: https://lesswrong.ru/225), их надо сохранить
** ещё у многих переводов есть несколько адресов, потому что при переименовании страницы сохранялся редирект (все эти адреса можно выгрузить из базы)
** в общем, эта задача тоже может оказаться очень муторной, хотя её не обязательно делать 100% идеально (на некоторые редко посещаемые урлы можно забить; например, мне не кажется важным поддерживать ссылку на историю ревизий
*** для проверки можно будет, например, взять все логи nginx и проверить, что по всем посещённым за последние N месяцев урлам отдаётся что-то осмысленное