W3A

Истории, помеченные тегами в категориях информатики: W3A
Категория посвященная этому сайту

  1. 4
    Проанализировал Lobsters и W3A, вот что обнаружилось Помимо фич, важно понимать философию проекта, которая делает его уникальным: Закрытая регистрация по приглашениям — нет случайных людей, выше качество Никакой рекламы и трекеров — уважение к приватности Минимум JavaScript — работает даже без JS…

    Проанализировал Lobsters и W3A, вот что обнаружилось

    Помимо фич, важно понимать философию проекта, которая делает его уникальным:

    1. Закрытая регистрация по приглашениям — нет случайных людей, выше качество
    2. Никакой рекламы и трекеров — уважение к приватности
    3. Минимум JavaScript — работает даже без JS (прогрессивное улучшение)
    4. Сообщество само себя модерирует — флаги, карма, прозрачность
    5. Качество важнее количества — лучше 10 хороших обсуждений, чем 1000 комментариев мусора

    В w3a многие из этих принципов уже реализованы (карма, флаги, ванильный JS, модульность).

    Вот чего нет

    По соотношению польза / сложность реализации:

    Фича Польза Сложность Рекомендация
    User Muting ⭐⭐⭐⭐⭐ Легко В первую очередь
    Story Hiding ⭐⭐⭐⭐ Легко В первую очередь
    Saved Stories ⭐⭐⭐⭐ Легко В первую очередь
    RSS Feeds ⭐⭐⭐⭐ Очень легко В первую очередь
    Duplicate Detection ⭐⭐⭐⭐⭐ Средне Стоит сделать
    Moderation Log ⭐⭐⭐⭐ Средне Стоит сделать
    Hats ⭐⭐⭐⭐⭐ Средне Если есть официальные пользователи
    Merge Stories ⭐⭐⭐⭐ Сложно Только если есть проблема дубликатов
    Keyboard Nav ⭐⭐⭐ Средне Для гиков-пользователей
    Edit History ⭐⭐⭐ Сложно Есть Suggestions — возможно, избыточно

    Социальные фичи

    User Muting (Игнорирование пользователей)

    Можно полностью скрыть комментарии определённых пользователей из своей ленты. Они не удаляются — просто не показываются вам.

    Story Hiding (Скрытие историй)

    Кнопка "скрыть" на каждой истории — она исчезает из вашей ленты, но остаётся на сайте. Отличается от удаления — это персональная настройка.

    Зачем: "Не интересно, не хочу видеть" без жалоб и модерации.

    Saved Stories (Закладки)

    Возможность сохранить историю в личный список "почитать позже". Отдельная страница /saved.

    Ещё при создание и редактирование постов странный редирект. Например, при создание логично отправлять в пост и при редактирование тоже.

  2. 4
    Возможно так достал ИИ, что он посчитал, что лучше дифирамбы спеть. Взял и выдал: W3A — это образец того, как нужно писать современные PHP-приложения без использования "тяжелых" фреймворков. Архитектура HMVC реализована грамотно, код безопасен, чист и использует лучшие практики PHP 8.1+. Проект…

    Возможно так достал ИИ, что он посчитал, что лучше дифирамбы спеть. Взял и выдал:

    W3A — это образец того, как нужно писать современные PHP-приложения без использования "тяжелых" фреймворков. Архитектура HMVC реализована грамотно, код безопасен, чист и использует лучшие практики PHP 8.1+. Проект полностью готов к продакшену и служит отличным примером для изучения того, как устроены фреймворки "под капотом".

    А я только упрощать начал. )

  3. 3
    За неделю проект развивался в 4 ключевых направлениях: Улучшение контента — модуль Suggestions для коллективного улучшения Документация — Wiki-модуль для создания справочных страниц UX/UI — сворачивание комментариев, сортировка по автору Интеграция — OpenGraph для соцсетей, система…

    За неделю проект развивался в 4 ключевых направлениях:

    1. Улучшение контента — модуль Suggestions для коллективного улучшения
    2. Документация — Wiki-модуль для создания справочных страниц
    3. UX/UI — сворачивание комментариев, сортировка по автору
    4. Интеграция — OpenGraph для соцсетей, система уведомлений

    Всего за неделю сделано 17 коммитов, из которых:

    • 10 новых функций (ADD)
    • 1 исправление (FIX)
    • 6 технических улучшений (DEV/EDIT)

    https://github.com/evgip/w3a

  4. 3
    Lobster (и его современные форки) — платформа для агрегации, обсуждения и хранения ссылок. Её сила — в живом сообществе и качестве контента. Но у любой агрегаторной системы есть ахиллесова пята: информация со временем устаревает. Ссылки бьются, заголовки теряют актуальность, теги не отражают суть,…

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

    Раньше править мог только автор или администратор. Теперь — любой зарегистрированный пользователь. Модуль Suggestions закрывает эту лакуну, превращая пассивных читателей в сокураторов платформы, сохраняя при этом контроль качества, прозрачность и защиту от вандализма.


    🔄 Как это работает: поток предложения

    1. Создание предложения
      На странице истории пользователь нажимает «Предложить правку». Доступны поля: заголовок, URL, описание, теги. Данные проходят строгую валидацию до сохранения.

    2. Мгновенное применение (для модераторов)
      Если предложение оставляет модератор или администратор — оно применяется немедленно. Правка фиксируется в логе, старые предложения к этому посту удаляются.

    3. Кворум сообщества
      Для обычных пользователей работает правило трёх: три идентичных предложения автоматически применяются к посту. Система нормализует JSON (сортирует ключи и массивы), поэтому {title: "A", tags: [1,2]} и {tags: [2,1], title: "A"} считаются одним предложением.

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

    5. Применение изменений
      При одобрении или достижении кворума запускается транзакция:

      • Обновляются поля поста (title, url, description)
      • Атомарно пересинхронизируются теги (DELETE + INSERT в taggings)
      • Удаляются все активные предложения к этому посту
      • Диспатчится событие ContentUpdated
      • Записывается лог в content_logs / audit_logs

    💡 Зачем это Lobster?

    Проблема Решение через Suggestions
    Посты «замораживаются» после ухода автора Сообщество поддерживает актуальность без бюрократии
    Модераторы тонут в рутинных правках Кворум фильтрует очевидные случаи, модераторы работают только со спорными
    Непрозрачные изменения Каждый правка логируется с указанием автора, причины и старых/новых значений
    Вандализм и спам-теги Лимиты предложений на пользователя, валидация тегов, проверка доменов, квоты
    Дублирование валидации Единые Validator-классы для всех точек входа (create, update, suggest)

    🧩 Технический стек и решения

    Модуль построен по принципу Service-Driven Architecture:

    • SuggestionController — только маршрутизация и работа с запросом
    • SuggestionService — вся бизнес-логика, кворум, применение правок, логирование
    • Модели (Suggestion, ContentLog, Story) — только CRUD и параметризованные SQL
    • Валидаторы — чистые классы без состояния, легко покрываются юнит-тестами

    Особое внимание уделено безопасности PDO: исправлена ошибка с повторением именованных параметров в INSERT ... VALUES (...), заменена на позиционные плейсхолдеры. Все транзакции явно коммитятся/откатываются, ошибки логируются без проброса внутренних деталей наружу.


    🔮 Что дальше?

    Модуль Suggestions — фундамент для более сложных механизмов курирования:

    • Версионирование контента: возможность откатить правку к предыдущему состоянию
    • Репутационная система: вес голоса пользователя зависит от истории успешных предложений
    • Автоматические проверки: битые ссылки, дубликаты, NSFW-контент через внешние API
    • API для ботов: Telegram/Matrix-интеграции для модерации без входа в админку

    ✅ Итог

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

    В экосистеме, где контент — это валюта, такой модуль становится не опцией, а необходимостью. И он уже работает.

  5. 4
    Исправил все найденный ошибки. Основная задача архивирования кода, перед достаточно крупным обновлением, а именно: хочу ввести сортировку комментариев по алгоритму уверенности (confidence), основанному на интервале Вильсона (Wilson score interval) . Как работает формула Формула Вильсона вычисляет…

    Исправил все найденный ошибки. Основная задача архивирования кода, перед достаточно крупным обновлением, а именно: хочу ввести сортировку комментариев по алгоритму уверенности (confidence), основанному на интервале Вильсона (Wilson score interval) .

    Как работает формула

    Формула Вильсона вычисляет нижнюю границу доверительного интервала для биномиального распределения:

             p + z²/(2n) - z√[(p(1-p)/n + z²/(4n²)]
    confidence = ─────────────────────────────────────
                        1 + z²/n

    Где:

    • p — доля положительных голосов (ups / n)
    • n — общее количество голосов
    • z — Z-score для желаемого уровня доверия (1.28155 для 80%)

    Ключевые особенности:

    1. Комментарии с малым количеством голосов получают низкий confidence, даже если все голоса положительные
    2. Чем больше голосов, тем ближе confidence к реальной доле положительных
    3. Флаги учитываются как "даунвоты" для расчёта

    Эта формула решает проблему "быстрого старта" — когда первые комментарии с 1-2 голосами не получают неоправданно высокий рейтинг.

  6. 3
    На основе анализа обоих репозиториев, я составил таблицу того, что необходимо реализовать в w3a для достижения функционального паритета с Lobsters. Функция Статус в w3a Статус в Lobsters Приоритет Stories, Comments, Votes ✅ Есть ✅ Есть — Tags, Taggings ✅ Есть ✅ Есть — Users, Auth ✅…

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

    Функция Статус в w3a Статус в Lobsters Приоритет
    Stories, Comments, Votes ✅ Есть ✅ Есть
    Tags, Taggings ✅ Есть ✅ Есть
    Users, Auth ✅ Есть ✅ Есть
    Messages ✅ Есть ✅ Есть
    Notifications ✅ Есть ✅ Есть
    HiddenStory, SavedStory ❌ Нет ✅ Есть 🔴 Высокий
    Tag Filters ❌ Нет ✅ Есть 🔴 Высокий
    Flags ❌ Нет ✅ Есть 🔴 Высокий
    ModMail ❌ Нет ✅ Есть 🔴 Высокий
    Moderations Log ❌ Нет ✅ Есть 🔴 Высокий
    Invitations ❌ Нет ✅ Есть 🔴 Высокий
    Hats ❌ Нет ✅ Есть 🟡 Средний
    Suggestions ❌ Нет ✅ Есть 🟡 Средний
    Categories ⚠️ Частично ✅ Есть 🟡 Средний
    Cabinet ❌ Нет ✅ Есть 🟡 Средний
    Domains ❌ Нет ✅ Есть 🟡 Средний
    StoryImage ❌ Нет ✅ Есть 🟢 Низкий
    ReadRibbon ❌ Нет ✅ Есть 🟢 Низкий
    Stats ❌ Нет ✅ Есть 🟢 Низкий
    MastodonApp ❌ Нет ✅ Есть 🟢 Низкий

    Lobsters оказался не таким простым сообществом, как думал )

  7. 5
    W3A — это философия веб‑разработки, основанная на аскетичном подходе: отказе от избыточных абстракций, минимизации зависимостей и возврате к основам веба. Ключевая идея: «Веб должен быть простым, понятным и предсказуемым. Код — читаемым без документации, рендеринг — лёгким, архитектура —…

    W3A — это философия веб‑разработки, основанная на аскетичном подходе: отказе от избыточных абстракций, минимизации зависимостей и возврате к основам веба.

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

    Основные принципы W3A

    1. Категорический отказ от «магических абстракций»

      • Никаких фреймворков с неявным поведением.
      • Отсутствие «чёрных ящиков»: разработчик всегда понимает, что происходит под капотом.
      • Явное управление состоянием и рендерингом.
    2. Минимализм кода

      • Минимизация строк кода без потери функциональности.
      • Отказ от избыточных библиотек и инструментов.
      • Предпочтение нативным возможностям браузера.
    3. Отсутствие тяжёлого фронтенд‑рендеринга

      • Серверный рендеринг (SSR) или статическая генерация (SSG) вместо SPA.
      • Минимальный JavaScript или его полное отсутствие там, где можно обойтись без него.
      • Приоритет HTML и CSS для базовой функциональности.
    4. Прозрачность и предсказуемость

      • Код должен быть понятен разработчику любого уровня.
      • Поведение элементов всегда очевидно.
      • Отладка не требует специальных инструментов.
    5. Высокая производительность «из коробки»

      • Малый размер бандла (< 10 KB для типовых страниц).
      • Быстрая загрузка даже на слабом соединении.
      • Минимальное потребление памяти.
    6. Доступность и инклюзивность

      • Соответствие стандартам WCAG по умолчанию.
      • Нативная доступность HTML‑элементов без дополнительных усилий.
      • Поддержка скринридеров и клавиатурной навигации без настроек.
    7. Долговечность и стабильность

      • Использование стабильных, проверенных технологий.
      • Отсутствие зависимости от быстро меняющихся трендов.
      • Код остаётся рабочим годами без рефакторинга.

    Практические правила W3A‑разработки

    Что делать:

    • Использовать чистый HTML, CSS и минимальный JavaScript.
    • Применять семантическую разметку.
    • Оптимизировать изображения и медиа.
    • Кэшировать статические ресурсы.
    • Писать понятный, самодокументирующийся код.

    Сравнение с традиционными подходами

    Критерий Традиционный подход W3A
    Размер бандла 1–5 MB < 50 KB
    Время загрузки 2–10 с < 1 с
    Зависимости 50+ пакетов 0–2 пакета
    Сложность отладки Требует инструментов Достаточно DevTools
    Доступность Часто требует доработки Встроена по умолчанию
    Обучение Долгий старт Быстрое освоение

    Позиционирование:

    W3A (World Wide Web Ascetic) — философия веб‑разработки для тех, кто ценит простоту, производительность и прозрачность. Мы отказываемся от избыточных абстракций в пользу чистого HTML, лёгкого CSS и осознанного использования JavaScript. Наш веб — быстрый, доступный и долговечный.