#Код

Доработка Лиспублики. Версия 2

40
Читалка

Продолжаю тему кастомного допиливания дизайна Лиспублики. Напоминаю, что я использую дополнение Stylus, которое доступно для декстопных версий браузеров на базе Chrome, а также для Firefox. Для Safari есть аналог - Stylish. Сразу после выхода нового дизайна, я предложил несколько простых правок для изменения гаммы как светлой, так и тёмной темы. В основном они касались рыжих ссылок и кнопок, которые, стоит предположить, были сделаны именно такими для того, чтобы подчеркнуть "лисичность" нашего сайта, но в итоге вызвали сомнения. В общем, "не нравится - сделай сам", я и сделал. А заодно осуществил ещё несколько правок по аналогии с доработкой старого дизайна.

Предлагаю вашему вниманию скриншот:

Из ключевых изменений структуры: расширена основная зона контента (скриншот сделан на 2к разрешении), но при этом немного увеличен шрифт - опять же для комфорта на больших мониторах. Эту часть обладатели базового HD, то есть 1920х1080 могут проигнорировать, так как для них изменения будут не столь значимыми, но, в то же время, для понимания основной концепции модифицирования они будут полезны. В любом случае, в коде я сделал отметки какая часть за что отвечает.

Возвращаясь к изменениям: я решил передвинуть боковую панель вправо - мне так банально удобнее и не возникает ощущения "скованности", а также изменить формат блока с объявлениями, дабы он не кушал место, отведённое для контента. Этот блок теперь расположен сбоку, имеет вертикальную ориентацию и при этом продолжает нормально функционировать - кнопка "развернуть" всё также увеличивает картинки. И это ещё не всё...

Вчера в "лолке" зашёл разговор о форме комментирования, мол можно ли убрать фон сборку от неё. Я решил немного поколдовать и в итоге соорудил доработку, которую вы можете видеть на картинке выше. Форма ответа стала одновременно уже и шире... как так? Самое поле ввода сообщения увеличилось по ширине относительно занимаемой зоны, но при этом убрана заливка справа и слева от неё, что, исключительно на мой субъективный взгляд, создаёт эффект лёгкости. Особого прикладного смысла в этом нет: форма всё равно закрывает контент. Разве что боковую панель она теперь не перекрывает. Кстати, это единственное место, которое требует небольшого допиливания в зависимости от разрешения: в правиле для .v2-editor-panel в коде ниже указаны цифры для обычного разрешения, в то время как у меня стоят left: 13%; width: 61%;

В общем, вот код всех этих правок целиком:

:root {
--accent: #6770B1;

/* Блок правил для ширины */
--feed-max-width: 60%;
--content-max-width: 100%;
}

/* Правила, связанные с гаммой */

.sidebar-profile { background: #1f2131; }

.sidebar-nav { background: #1f2131; }

.post-card-panel { background: #1f2131; }

.post-collapse-toggle {
min-height: 42px;
background: linear-gradient(180deg,rgb(var(--bg-card-rgb)/0) 20%,rgb(var(--bg-card-rgb)/.7) 62%,var(--bg-card) 100%);
}

.post-content-shell.is-collapsed::after { display: none; }

.btn-primary { background: #444864; }

.v2-tabs--pill .v2-tabs__item.active {
color: var(--text-bright);
background: #444864;
border: none;
}

.v2-comment__body { background: #1f2131; }

.sidebar-quick-settings__input:checked ~ .sidebar-quick-settings__track {
background: #444864;
border-color: #fff0;
}

.nav-tab.active { background: none; }

.nav-menu-item.active {
background: #323548;
color: white;
}

.post-collapsible-content.is-collapsed::after {background:unset;}

/* Правила, связанные с шириной контента */

.content { margin: 0 auto; }

.v2-profile { max-width: unset; }

/* Размер шрифта в постах */

.post-content {font-size: 115%;}

/* Правила, связанные с объявлениями */

.v2-pinned__list {display: flex !important;
flex-direction: column !important;
gap: 8px !important;
flex: 1 !important;
overflow-y: auto !important;
margin: auto;
padding: unset;}

.v2-pinned {margin-top: 15px;
position: fixed !important;
top: 70px !important;
left: 20px !important;
max-height: calc(100vh - 120px) !important;
overflow-y: auto !important;
z-index: 999 !important;
border-radius: 12px !important;
padding: 12px !important;
display: flex !important;
flex-direction: column !important;}

.v2-pinned.is-collapsed {width: 100px !important;}

.v2-pinned:not(.is-collapsed) { width: 150px !important;}

.v2-pinned__title {display: none;}

.v2-pinned__header {flex-shrink: 0 !important;
font-size: 14px !important;
padding-bottom: 8px !important;
margin-bottom: 8px !important;
border-bottom: 1px solid var(--border-color, #e0e0e0) !important;
cursor: default !important;
display: unset;
padding: unset;}

.v2-pinned__toggle {padding: unset;}

/* Правила, связанные с формой комментирования */

.v2-editor-panel__inner {max-width:unset}

.v2-editor-panel {left: 11%; width: 60%; box-shadow: 0 0 6px rgb(0, 0, 0); background: #23263e;}

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

Допиливаем сайт своими руками

30
Читалка

В своём посте о покупке нового монитора я пожаловался на то, что в 2К разрешении основной блок контента Лиспублики превратился в узенькую полоску. Правда, там же я гордо заявил о том, что эту проблему сам и поправил - на локальном компьютере. Затем я пошёл немного дальше и внёс ещё несколько правок. Поэтому лично у меня сайт сейчас выглядит так:

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

В основе лежит аддон Stylus. Он доступен и для Хрома и для Firefox (про другие браузеры не знаю). Он позволяет настраивать так называемые таблицы стилей, они же CSS. Именно CSS по большей части основа "лица" современных сайтов и за счёт правки стилей можно поменять очень многое: другой шрифт, другой цвет фона, ширина колонок, отступы и многое другое. При этом разметка CSS в целом достаточно простая и изучить её крайне просто.

Например, я хочу увеличить размер основной ленты. Нахожу в консоли разработчика браузера (кнопка F12) нужный мне элемент - FeedBlock и прописываю в специальном правиле для домена lispublica.ru переопределение класса:
.FeedBlock { width: 1500px; }

Сохраняю правило. Всё, теперь ширина основного блока - 1100 пикселей.

Для человека, который вообще не связан с Web дизайном, выглядит как урок "нарисуй лису", однако порог вхождения здесь довольно невысок. Всё, что нужно - это умение выявлять нужные элементы и править их. С первым помогает подсветка элементов во вкладке "инспектор" инструментов разработчика. Они доступны в браузере по умолчанию, а подсветка позволяет графически находить нужный элемент. Затем просто гуглим что означают все эти width, line-height и прочие padding и всё...

Однако, в некоторых случаях для достижения нужных результатов один лишь стиль поменять мало. Тогда в действие вступает тяжёлая артиллерия: Violentmonkey для Firefox и Tampermonkey для Chrome. Это менеджер пользовательских скриптов, который позволяет сделать гораздо больше, чем просто изменить внешний вид: в принципе, с помощью данного дополнения можно изменить логику поведения самого сайта. В теории, например, можно на некоторых сайтах отключить какой-нибудь ненужный функционал. В нашем случае Violentmonkey позволило мне изменить структуру блоков, чтобы переместить интерфейс оценки постов (только лишь через CSS нормально это не сделаешь). Опять же, всё локально.

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

Как я "написал" веб-версию Алиаса

40

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

Если вы помните, некоторое время назад я закидывал удочку насчёт совместных сессий в умные игры, в частности Алиас. В принципе, сайт с таким функционалом уже есть, но мне неудержимо захотелось получить собственную версию, не завязанную на чужой хостинг и с тем функционалом, какой хочу лично я. При этом, если PHP я хотя бы немного знаю, а в JS фрагментарно ориентируюсь, в остальных веб-языках вообще ноль. Поэтому задачей было сделать игру максимально простым способом: чтобы я мог хотя бы примерно понимать структуру проекта и в случае чего указывать нейросети где искать ошибки. В итоге, вооружившись openrouter (он позволяет через единый интерфейс давать задачи сразу разным сетям), я приступил к проектированию.

Для "Алиаса" по сути чего-то особо сложного и ненужно: игра просто должна выводить слова на экран для ведущего, а его команда угадывает их. Но команды меняются и ведущие в командах тоже меняются - это первое условие. Время на объяснение нужно ограничить - это вторая деталь. Угаданные слова нужно считать и суммировать очки за них - три. Наконец, 20 очков и более - это победа. Кажется, всё просто, однако далее начинаются хитрые детали.

В базе нас должна быть возможность пропустить слово и перейти к следующему - тут я решил извратиться и сделать две кнопки, чтобы ведущий мог сразу отмечать верно ли угадано слово или пропустить его. Кроме того, логично, что у других игроков должна быть возможность не просто видеть историю слов, но и отмечать их "угадывание" в обратное направление - на случай если ведущий ошибся кнопкой или нарушил правила. Система при этом должна работать параллельно, поэтому над структурой базы данных для хранения пришлось подумать самостоятельно. Я решил использовать две основные таблицы: комнаты и история слов. В таблице комнат содержится основная информация - список участников, количество очков, статус. В словах - собственно, все слова за игровую сессию. Хранить их все до окончания игры (а не только за отдельный раунд) нужно ещё и для того, чтобы контролировать неповторяемость слов.

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

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

В итоге с перерывами на работу на создание работающего прототипа с большинством хотелок ушло около 3 дней. Результат вот он: https://alias.onlyfox.ru/alias.html

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