Тестирую синхронизацию объектов на перемещение и атаку между NPC и игроком и немного намусорил. Дроп, который падает, показывает текущее местоположение объекта на стороне сервера. Каждый n-ный тик происходит синхронизация. Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.
Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.
GIF
GIF
C(client) – двигается плавно из одной точки в другую. S(server) – делает прирост координат по таймеру.
Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/ и многое наследуется. В том числе и передвижение персонажа.
В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.
Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.
GIF
На коротких расстояниях проблема незаметна. Нога наступает точно в монету.
GIF
На длинных расстояниях действие атака начинается раньше, чем персонаж добегает до цели.
GIF
А если выкрутить скорость на максимум (900) то проблема расхождения очевидна. Это связанно с тем, что помимо скорости бега есть скорость ходьбы.
Как работает передвижение персонажа на сервере.
За основу взяты базовые характеристики персонажа. Скорость бега 126.
126 — это количество внутренних unit’ов за секунду.
На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:
// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат.
const distance = 1500;
const playerSpeed = 126;
const ticks = distance / playerSpeed; // 11.90
const time = ticks * 1000; // 11900mc
setTimeout(() => {
// действие персонажа после бега
}, time);
GIF
На коротких расстояниях.
GIF
На длинных расстояниях.
Расхождения на коротких расстояниях.
Расхождения на длинных расстояниях.
Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.
Рост скорости при развитии персонажа.
126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.
Данные о характеристиках персонажа передаются от сервера к клиенту.
Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.
GIF
Нога персонажа достигает правильной конечной точки.
Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.
Сколько же персонаж успевает пройти перед тем, как начинает бежать?
Надо поймать момент когда ходьба переходит в бег. Для этого передадим в клиент данные, где скорость ходьбы будет больше скорости бега. Из-за этой разницы будет виден переход и можно будет рассчитать пройденное расстояние при ходьбе.
runSpeed: 10
walkSpeed: 600
GIF
Ходьба быстрее бега.
При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.
600 / 250 = 2.4
700 / 291 = 2.4
800 / 333 = 2.4
Из этого вывод, что персонаж перед тем, как начать бежать успевает пройти расстояние в 2.4 раза меньше, чем его скорость ходьбы.
Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.
88 / 2.4 = 36
Первое деление — это начало движения (ходьба) а следующие деления — это бег.
Помните как мы бегали по горам и не придавали значение тому как быстро спускались или поднимались на них?
Как мы знаем в реальной жизни перемещаясь на плоскости горизонтальная скорость у нас постоянная.
Как только мы начинаем преодолевать горы и другие неровности то горизонтальная скорость у нас будет меньше.
Но не в мире Lineage 2 где горизонтальная скорость всегда постоянная и нее зависит от неровностей.
Связанно это с тем чтобы было проще синхронизировать персонажа на сервере и клиенте.
Ведь на сервере нет точной модели мира, а лишь примерное очертание называемое geodata.
А из-за того, что geodata приблизительно повторяет ландшафт клиента то было бы невозможно синхронизировать персонажа по Z оси.
Поэтому синхронизация идет только по X и Y оси.
Видео:
1) Горизонтальная скорость на плоскости постоянная.
2) Как было бы в жизни. Взбираясь на гору горизонтальная скорость падает.
3) Как сделано в игре. Горизонтальная скорость постоянная.
4) Демонстрация из игры. Бежит словно нет никаких гор.
У проекта появилась чёткая архитектура управления сущностями. Теперь NPC, игроки, питомцы и другие объекты взаимодействуют в мире через систему менеджеров — рассказываю, как это работает.
В игровом мире есть разные типы сущностей: NPC, игроки (Player), питомцы (Pet) и другие. Каждая из них имеет свои состояния (движение, атака, бездействие) и требует управления.
Основные сущности и их поведение
• NPC – управляет собой (перемещение, атака, idle).
• Player – управляется игроком (те же состояния: ходьба, атака и т. д.).
• Pet – похож на NPC, но принадлежит игроку.
Менеджеры и их задачи
1. NpcManager – создаёт NPC, реагирует в случае смерти NPC.
2. PlayersManager – отвечает за вход игроков в мир.
3. PetsManager – управляет питомцами (аналогично NPC, но с привязкой к игроку).
4. EntitiesManager – главный координатор:
o Управляет NpcManager и PlayersManager.
o Обрабатывает взаимодействия (например, если игрок подошёл к NPC, оба получают информацию друг о друге).
5. VisibilityManager– отвечает за видимость объектов:
o Определяет, кто кого видит.
o Периодически обновляет списки видимости для оптимизации.
6. MovingManager – обновляет позиции всех подвижных объектов в мире.
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
При добавлении SoulShot функционала не добавил проверку не только на наличие оружия, но и кто атакует — игрок или NPC.
Как итог теперь все атакуют с помощью SoulShot.
Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.
Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.
GIF
GIF
C(client) – двигается плавно из одной точки в другую. S(server) – делает прирост координат по таймеру.
Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/И многое наследуется. В том числе и передвижение персонажа.
В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.
Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.
GIF
На коротких расстояниях проблема незаметна. Нога наступает точно в монету.
GIF
На длинных расстояниях действие атака начинается раньше, чем персонаж добегает до цели.
GIF
А если выкрутить скорость на максимум (900) то проблема расхождения очевидна. Это связанно с тем, что помимо скорости бега есть скорость ходьбы.
Как работает передвижение персонажа на сервере.
За основу взяты базовые характеристики персонажа. Скорость бега 126.
126 — это количество внутренних unit’ов за секунду.
На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:
// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат. const distance = 1500; const playerSpeed = 126; const ticks = distance / playerSpeed; // 11.90 const time = ticks * 1000; // 11900mc
setTimeout(() => { // действие персонажа после бега }, time);
GIF
На коротких расстояниях.
GIF
На длинных расстояниях.
Расхождения на коротких расстояниях.
Расхождения на длинных расстояниях.
Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.
Рост скорости при развитии персонажа.
126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.
Данные о характеристиках персонажа передаются от сервера к клиенту.
Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.
GIF
Нога персонажа достигает правильной конечной точки.
Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.
Сколько же персонаж успевает пройти перед тем, как начинает бежать?
Надо поймать момент когда ходьба переходит в бег. Для этого передадим в клиент данные, где скорость ходьбы будет больше скорости бега. Из-за этой разницы будет виден переход и можно будет рассчитать пройденное расстояние при ходьбе.
runSpeed: 10
walkSpeed: 600
GIF
Ходьба быстрее бега.
При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.
600 / 250 = 2.4
700 / 291 = 2.4
800 / 333 = 2.4
Из этого вывод, что персонаж перед тем, как начать бежать успевает пройти расстояние в 2.4 раза меньше, чем его скорость ходьбы.
Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.
88 / 2.4 = 36
Первое деление — это начало движения (ходьба) а следующие деления — это бег.
Она - автор нового развлекательного проекта "Капибара". Проект уже успел наделать шуму. И по большей части благодаря комьюнити. Как все началось? Это история для сериала. У айтишницы было две работы, ипотека и колоссальная нагрузка. Сломаться, устать можно по "щелчку Таноса". Отдыхала глазами на "Пикабу". Читала, постила. Пока политика сайта не пошла вразрез с ее личными убеждениями. Дальше был вихрь.
- Это название выбрали пользователи. Сначала устраивали мозговой штурм. Потом голосовали в два этапа за понравившиеся варианты. Потом откатывались, чтобы обоснование сделать: почему тот вариант, а не другой. В целом, это полностью инициатива самих участников. Когда задала финальный вопрос: «Название «Капибара» всех устраивает?», больше 500 человек ответили: «Да!»
- А где проводили это голосование?
- В чате. Он создался в первые секунды жизни идеи. Там есть специальный топик: выбираем имя для проекта. В нем и провели голосование буквально через 3-4 дня после его создания. 24 июля обновился «Пикабу». В этот же день мною был создан тот самый пост, тут же был создан чат и все понеслось…
Капибара - герой мемов
О причинах популярности капибар (ссылка на материал в Тинькофф журнал)
- Все-таки изначально идею предложили вы? Это связано с модой на капибар?
- Идея названия – полностью пользовательская. Я изначально дала только рабочее название Vortex. Нужно было заводить репозиторий, называть документы, папки. В общем, я автор только служебного названия. Но я не взяла на себя ответственность, что так будет называться весь проект. А Vortex потому, что у меня сложился такой ассоциативный ряд. Как «Капибара» началась вихреобразно, так все и понеслось.
- Вихреообразно – имеете ввиду, что началось все эмоционально?
Мы как-то очень неожиданно, очень импульсивно стартовали. Когда вышло обновление на «Пикабу», то от меня был всего один эмоциональный пост
- Стоп. Ольга, что за пост, с которого все началось?
Я написала «С этим «Пикабу» все понятно, если никто не начнет делать новый, то это начну делать я»
Триггером стал выход обновления на «Пикабу». Отмена отображения минусов. То есть в «горячее» с прошлого обновления стали попадать посты с отрицательным рейтингом. Это оказалось не багом: они что-то сделали с алгоритмами и не будут «чинить» рейтинговую систему, а будут маскировать продвигаемые посты под видимость обычных.
Я поняла, что того, что я любила на «Пикабу», больше не будет. Я была не согласна с тем, что нет альтернативы. Мол, есть «Пикабу», он единственный, терпите. Альтернатива нужна! Тогда еще не было известно ни про «Вомбат» ни про другие новые проекты.
Когда я создавала этот эмоциональный пост, думала, что впишусь в какую-нибудь команду разработчиков. О том, что я возглавлю, я даже не подозревала.
А, да, на «Пикабу» мой профиль забанили за упоминание «Капибары». Моему аккаунту было 8 лет и больше 100 000 рейтинга. Это не топ, но очень неплохие цифры для «Пикабу».
— Вы создали пост и получили обратную связь от пользователей?
- Да, посыпались комментарии: «Фронтенд-разработчик у тебя есть! Я разработчик с четырнадцатилетним опытом – я с тобой!»
Я создала отдельный чат в телеграм: ну пусть будет, и ушла работать.
Через два часа возвращаюсь, а в чате 3,5 тысячи человек
Ольга получила сильную поддержку сообщества
Я включила людям топики, темы они создавали сами, какие-то голосования начали вести. Посмотрев на это, я поняла, что надо стартовать разработку прямо сейчас, потому что люди уже начали голосованием выбирать базу данных, языки программирования и прочие технические вещи. Но это не те вещи, которые выбираются голосованием…
- То есть в чатах народ взял власть в свои руки?
- Абсолютно. Но оно пошло не в том направлении, в каком имело хоть какие-то шансы развиться. Поэтому к вечеру следующего дня я написала, каких именно компетенций нужны специалисты.
Мне ответили: «Давайте не будет как с народным Авито!» «Народное Авито» — это проект «Мой торг», тоже проект пикабушников, которые решили создать свой «Авито». Один из ребят из той команды сказал мне: «Блин, мы за полгода ни строчки кода не написали. Давай здесь не будет также…»
Про энтузиазм и конфликты
- Проект, абсолютно построенный на UGC – это, наверное, какой-то идеал, к которому вы стремитесь?
- Есть огромная разница, между тем как строить проект и как им пользоваться. Как им пользоваться — не вопрос. Мы все делаем для того, чтобы это была UGC-платформа с минимальным вмешательством со стороны администрации. То есть это действительно полностью власть пользователей. Люди сами решают, какой контент годный, что будет в тренде, что будет в топе, а чему нужно утонуть в минусах. Это полностью их вотчина.
Но при постройке самого проекта, при создании архитектуры, кодовой базы, дизайна такая демократия невозможна.
- А вы не думаете, что проекты, созданные на эмоциях, долго не живут?
Если в проекте только одна эмоция – я полностью согласна. Но «Капибара» разогналась до достаточно приличной скорости. Ее притормозить просто так не получится. У проекта колоссальная поддержка коммьюнити. Идея жива. Продукт людям нужен.
Даже если меня завтра собьёт автобус – «Капибар» легко восстановить, потому что исходники в открытом доступе.
У команды есть доступы, и базы данных «Капибары» могут поднять на соседнем домене. Я диверсифицировала риски.
- Что «Капибар» сегодня из себя представляет?
- Это платформа с честной регуляцией и алгоритмами, прозрачной рейтинговой системой, саморегуляцией контента пользователей и приятной площадкой для авторов.
Получается – основные отличия «Капибары» как UGC -платформы от сотен других соцсетей в том, что человек настраивает не только свою ленту – игнором тегов, подписками на теги, но и он влияет на то, что в трендах. У «Капибара» нет информационного пузыря. Здесь ценится то, что ты делаешь и пишешь.
Ленты «Тренды, Топ и Авторское» — это отдельные ленты, на которые ты не подписывался. Подписка — отдельная лента. Каждый человек влияет своими оценками на то, что попадает в тренды.
- Какие цифры у «Капибары» сейчас?
На сегодня Капибара — это 1 890 зарегистрированных верифицированных пользователей, постов за все время – 3 550, комментариев – 24 000.
Незарегистрированных пользователей мы еще не особо умеем считать. Пока здесь надежда на Google метрики, Яндекс-аналитику и Similarweb. Он, кстати, говорит, что у нас 192 000 посетителей за месяц.
- Для вас это больше цифры?
- Сложно сказать. Наверное, большие.
- Вы говорите, что 1, 8 тысяч зарегистрированных пользователей. Но если сравнивать с подписчиками какого-нибудь крупного паблика – это не очень большая цифра
- Капибар вышла в публичный доступ 1 января. Это отдельный сайт без раскрутки. Получается, что для проекта, который в доступе чуть больше 2 месяцев – это очень хороший показатель.
Саму разработку мы начинали летом. В ноябре вышли в закрытый альфа тест. Туда можно было заходить по приглашениям. Человек заходил со всеми дисклеймерами: понимал, что это тест, понимал, что еще куча багов. Но, таким образом, мы авторов запускали.
— Команда капибар. Кто это?
- Динамический состав команды. Часть разработчиков пришла со старта. Часть после. Часть присоединилась недавно. Это высококвалифицированные специалисты. С коммерческим опытом работы больше четырех лет. Я не могла позволить себе взять команду джунов. Потому что это оттягивало бы ресурс остальных разработчиков.
Все спецы очень высокого грейда. Все это истинные герои и энтузиасты. Идейные люди. Очень самостоятельные. С комплексным видением с умением цельно видеть весь продукт и проект. Что редкое качество.
- Сколько денег потратили на запуск проекта?
- Честно — не считала. Расходы на регистрации доменов, ботов для упрощения модерации в канале, инфраструктуру – это все совершенно не сравнимые цифры с тем, сколько бы я потратила на разработку, если проект был бы коммерческий.
-???
- Можно посмотреть на HeadHunter среднюю зарплату разработчиков. У нас 10 человек – костяк команды, а в целом в команде разработки было до 40 человек.
У нас динамический характер команды. Если бы все эти люди были на зарплате, то на проект уже бы потратили восьмизначные суммы.
(От автора)Чтобы посчитать возможные затраты на проект, я возьму среднюю зарплату программиста middle уровня в РФ – 120 000 рублей (hh. ru). Костяк команды «Капибара» — 10 человек. В итоге, ежемесячно на проект Ольга тратила бы 1, 2 млн. рублей. Учитывая, что с момента разработки прошло уже больше 7 месяцев, то затраты составили бы около 10 млн. руб только на постоянных участников проекта, не считая тех, кто нерегулярно привлекается к задачам.
«Капибара» едет на энтузиазме. Люди горят идеей, чтобы этот проект был. Чтобы существовала альтернатива. Поэтому open source код и затраты только на инфраструктуру (облачные сервера).
- Понимаю – проект молодой. Но были ли конфликты с пользователями?
- Да, конфликты случаются. Связано в первую очередь с тем, что «Капибара» – пока без политики. И мы об этом рассказывали до старта проекта, и повторяли не раз. Это записано в правилах и повторяется самими пользователями.
У некоторых были ожидания, что проект станет местом, где можно обсуждать и двигать свои политические идеи. Те, которые не проходят модерацию на «Пикабу».
Я не готова рисковать проектом, который могут «роскомнадзорнуть» за чье-то высказывание. И я не хочу, чтобы «Капибара» превращалась в агитплощадку. Потому что это очень непростая тема, на которую даже близкие люди могут переругаться. А на огромном сайте…
Конечно, есть не согласные с этим.
«Капибара» делалась как обитель авторского контента. Того, которому не придется сражаться за доступ к читателю пробиваясь через «баяны» и рекламу десятков тысяч телеграм-каналов. У всех были свои ожидания, и есть люди, которые ждали, что там будет свобода вообще во всем.
Отмечу, что мы ограничены законодательством всех стран технического контакта. Большинство пользователей из России, а значит, надо соблюдать закон РФ. Это мы делаем в добровольном порядке. Мы соблюдаем закон.
Главный фейл и инсайт Ольги в этом вихре "Капибара" я по-традиции опубликовал в своем телеграм-канале "Стас смотрит рекламу"
Про несогласие с отсутствием альтернативы на рынке
- «Капибар», «Вомбат», «Пипмай», есть, думаю, еще ряд проектов, о которых пока мы не знаем. Почему вдруг люди начали делать подобные проекты. В чем причина?
- Я думаю, несогласие с отсутствием альтернативы. В воздухе висит такое: «Хочешь альтернативу? Иди на «Reddit». Там англоязычные люди из далекого зарубежья и их посты тебе не «откликаются». Это не про тебя. Да, есть «Yaplakal. com» – там своя специфика. Есть «Fishki. net» – но это не замена «Пикабу».
- В чем отличия?
- По функционалу, по темам, по аудитории, по специфике.
- А чем аудитория отличается?
- Я взяла агрегированные данные. Читала немало постов на тему, почему это не аналог, но сама эту аналитику не проводила. Если вкратце – это не замена. Все аналогичные проекты, о которых говорили выше, стартовали, чтобы у людей был выбор
- У проекта есть бизнес-цель или это пока хобби?
Это точно не хобби. Это уже слишком серьезно.
Но цели «зашибать» там миллионы мы не ставили. Если финансово взлетит, то, конечно, отказываться от денег не будем. Цель минимум — вывести проект на «самоподдержание».
- А в целом, сколько времени у вас отнимает работа над «Капибарой»?
- Все свободное время. У меня стандартная восьмичасовая пятидневка. А «Капибар» это уже не просто «поработать». Я ею живу! У меня каждое утро начинается с «Капибар». Появляется минута на обеде – «Капибар». Свободный вечер – «Капибар».
- Как сейчас продвигается проект?
- SЕО продвижение. Страницы "Капибары" очень хорошо индексируются google и Яндексом. Ну, и конечно, сарафанное радио. Сообщество рассказывает о «Капибаре». Плюс, у нас есть страницы в ВК, откуда приходят люди. Но если верить Similarweb, то основное количество людей идет через Телеграм. Люди делятся статьями, пересылают их, рассказывают о них. Плюс у нас регулярные публикации на других ресурсах.
Например, первая статья на Хабре удачно выстрелила, есть статьи на vc, на tenchat, на реддите.
- То есть пока вы не заходите в такие инструменты как Яндекс. Директ и т. д.?
- Пока нет такой необходимости. Для этого нам нужно SEO ядро. Человек, который умеет это делать, чтобы не сливать бюджет.
«Все! Не могу больше…»
- Возвращаясь к Пикабу. Есть мнение из комментариев к одному моему интервью, что клонов у этого сайта десятки. Что можете ответить на это?
Могу ответить: «Пожалуйста, не бросайте начатое. Альтернативы — это прекрасно. Свободный рынок – это двигатель развития, прогресса. Нам нужно разнообразие. Чем больше создается таких площадок, тем выше шанс, что через 10-15 лет кто-то из нас будет еще существовать».
- То есть вы говорите о том, что если крупные площадки закроются, то вся масса пользователей останется без контента?
- Нет, без контента, конечно же, не останется. Но вопрос в качестве этого контента. Быстро, легко, смешно, листай-листай-листай… Посмотрите на рилсы в Инстаграме*, на клипы в ВК, перепосты «хохотачей» с Одноклассников, сотни тысяч телеграм-каналов с мемами. «Пикабу» взял тот же ориентир. Площадок с качественным авторским контентом все меньше.
- Есть еще мнение конспирологическое. Якобы за созданием «Вомбата» и «Капибар» стоит один человек. И якобы это сайд-проекты «Пикабу».
- Впервые слышу такое мнение. «Вомбаты» и «Капибары» в коллабе. Мы поддерживаем друг друга. У нас совместные активности и конкурсы. Тот же «Анонимный Дед мороз» или конкурс на 14 февраля. У них под тегом – #любовьморковь , у нас #расскажи мне о любви. И призы были совместные. Хлопнули по лапкам и помогаем в развитии друг другу.
Нет, никто не из администрации «Пикабу». Мы все — бывшие пользователи «Пикабу».
- Ольга, когда хотелось бросить проект? Ну, вот: «Все, не могу больше…»
«Капибара» началась, когда в моей жизни было одновременно две работы, и я только-только влезла в ипотеку. Представляете уровень нагрузки?! И тут появляется третья бесплатная работа — «Капибара».
Она забирает время и деньги. Конечно, я была близка к выгоранию! И, например, через месяц руки уже опускались!
Взяла выходные. Провела их как нормальные люди и снизила нагрузку. Тут мне очень помогли модераторы, команда проекта, активисты чата. Они взяли на себя многое из того, чем занималась я. И за чатом смотрели, и обновления сами выкатывали, и конкурсы сами проводили, и различные мероприятия/игры для поддержания активности пользователей, и объявления раскидывали, и с текстами помогали, и авторов звали. Стало проще.
- Ваша большая нагрузка была угрозой проекту?
- Это сложно назвать угрозой. Потому что я заложила очень сильный фундамент в «Капибару». У нее высокая автономность. Даже если бы я выпала на 3 месяца из проекта, то я сделала в команде высокую ставку на самоорганизованность.
- Что это значит?
- Каждый понимает, что он делает. И делает, не спрашивая разрешения. У нас есть функциональные требования и общее понимание того, во что целимся. В виде прототипа — тот же «Пикабу». И мне не нужно расписывать людям в деталях: сделай так или так. Команда высокопрофессиональная и на высоком уровне организованности.
Даже если все пропадет по щелчку Таноса – исходники находятся в открытом доступе. Кто-нибудь обязательно возьмет и продолжит…
*Meta – запрещенная на территории РФ организация
Мы проговорили с Ольгой несколько часов. Материала много. Она высококлассный специалист и не попросить ее поделиться лайфхаками было бы глупо. Она поделилась: как использует нейросети в работе над проектом. Нейронки пишут код, ищут ошибки, забирают рутину. Но, это уже вторая часть интервью, которая выйдет позже. Проанонсирую в своем канале: Стас смотрит рекламу
Я до этого выпускал курс «Python для тупых», многим такой формат понравился. Думаю пройтись по всем популярным языкам так — разжёвывать, давать простые задачки с решениями. В этот раз часть задачек с решениями будут платными, чтобы мне больше мотивации было не забросить.
Вообще этот курс должен был бы называться «...для чайников», «...для начинающих», но слишком много курсов, которые называются так, а на деле совсем не для чайников или начинающих.
В общем, если есть кто знакомый, кто осилил HTML/CSS, а в JavaScript совсем въехать не получатся, то вот оно.
Видео будут долгими, нудными, с повторениями одно по одному несколько раз, в каждом материала будет немного с точки зрения профессионала. И не будет монтажа. Местами будут даже ошибки и оговорки, но они в следующих видео будут закрываться. Чтобы ориентироваться в них, тайм-коды ниже. А вот ссылки на задачи и решения к первому занятию:
00:00 Всё мне ясно стало теперь 00:12 Что за курс, для кого и как организован 3:15 Кто я, мой опыт преподавания и создания курсов 5:40 Первый проект на JS 10:04 Теоретическое объяснение 19:20 Второй проект — скрипт отдельно 26:19 Третий проект — больше кнопок и абзацев
Для тех, кто Ютуб не может смотреть, вот вам ВК-шечка:
Герой интервью - Александр. После очередного бунта на «Пикабу» он решил сделать свой проект в развлекательной нише. Он рассказал, как продвигает «Вомбат» в нише, где есть монополист, как «Пикабу» банил за упоминание «Вомбата» и кто финансирует проект.
- Александр, «Неолурк» пишет, что «Вомбат» - это тусовка бывших «пикабушников». Почему бывших?
- Большая часть нашей аудитории - это пользователи, пришедшие с «Пикабу». Я сам был активным пикабушником до того, как там убрали минусы. И при создании своего проекта я ориентировался на тот самый «Пикабу», который был несколько лет назад. Сайт Вомбат такого же формата. Это UGC. User generated content. Кто-то из авторов в итоге полностью к нам перебрался. Кто-то обитает на обоих проектах и помогает Вомбату контентом.
- Проект «Вомбат» появился давно?
- Проект появился в сети в сентябре. Сегодня у нас около 4 000 зарегистрированных пользователей. Ежедневно к нам заходит от тысячи до полутора тысяч посетителей. За время существования проекта было написано больше восьми тысяч постов. Из них свыше 2,5 тысяч авторских. За все время оставлено больше 42 тысяч комментариев. В неделю это около 450 постов и 2000 комментариев. Пик активности пришелся на ноябрь-декабрь. Т.е. мы запустились в сентябре, а в октябре понемногу наращивали аудиторию. Сейчас снова подбираемся к пиковым значениям. Люди возвращаются из отпусков. Количество постов и комментариев начало снова расти.
Меня зовут Стас Бендиченко. Я журналист и PRщик. Исследую PR, маркетинг и цифровые медиа. Пишу интервью с экспертами и авторами цифровых продуктов. Мониторю российские и зарубежные источники. Больше контента в моем телеграм-канале "Стас смотрит рекламу"
- Как оцениваете динамику роста?
- Рост пока скачкообразный. Мы видим растущие цифры. Тот же Similarweb нам показывал в октябре 33 тысячи визитов, а в декабре уже 93 тысячи. По авторам и комментариям рост более плавный. Так как многие авторы приглашаются на сайт индивидуально, и этот процесс не такой быстрый.
ПРО ПРОДВИЖЕНИЕ: РЕКЛАМА, БАНЫ, MVP
- Александр, есть «Пикабу», который был референсом «Реддит». Появился ваш – Вомбат. Вы его создавали как MVP. Минимально жизнеспособный продукт. Но ,у пользователя в вашей нише всегда есть Top of Mind – Пикабу. Сложно продвигаться при таком конкуренте. Как вы продвигались?
- Да, Пикабу практически монополист в этой нише на российском вебе. У него почти не осталось конкурентов. Он самый огромный. Но в этом и проблема. Если пользователь недоволен какими-то действиями администрации, функционалом или количеством рекламы, то ему некуда уйти. Потому что нет больше проектов подобного размера.
- То есть Пикабу в своей нише «как вода в кране»? Монополист?
- Да, все так. По поводу продвижения. Первое время мы пытались дать рекламу на самом Пикабу. Написать, что появился такой проект. И нас практически сразу стали банить за любые упоминания «Вомбата». На самом деле, с тех постов, которые успели выйти, у нас пришло довольно большое количество людей. Дальше включилось «сарафанное радио».
- То есть Пикабу очень ревностно к этому относится и не дает рекламироваться на их ресурсах?
- Да, абсолютно. Любые упоминания «Вомбата» сейчас банят и удаляют. Банят даже аккаунты, которые были замечены в подобных сообщениях. Сейчас же мы пытаемся напрямую выходить на каких-то пикабушников, которые имеют большую аудиторию. Какие-то паблики. И стараемся рекламироваться уже у них.
- Сейчас можно сказать, что есть какая-то война конкурентов между вами?
- Сейчас мы абсолютно точно не конкурент Пикабу. Из-за их и нашего размера. Но говорить о том, что мы пытаемся конкурировать за их аудиторию – отчасти правда. Другой вопрос, что аудитории не обязательно сидеть на одном сайте. Я говорил,что многие продолжают постить на два проекта.
Продолжая идею продвижения. Мы уже вышли на уровень, когда начали делать мерч. У нас периодически проходят конкурсы на лучший пост. В призах наш мерч.
ПРО ИДЕЮ: Я АВТОР!
- Кто автор идеи проекта «Вомбат»?
- Я. Во время очередного бунта на Пикабу кто-то написал в комментариях: «Запилите уже новый сайт с блэкджеком и понятными алгоритмами, и минусами». Мне это показалось хорошей идеей. А с учетом моего опыта программирования и технического архитектора не пришлось и исполнителя искать. Я взял и написал. Правда, наличие основной работы внесло свои коррективы. Наш MVP вышел через два месяца после принятия решения о создании проекта. Но я решил запустить и «допиливать» сайт в процессе получения опыта пользователей. Следующие несколько месяцев доработка проекта велась все свободное время. На текущий момент мы сделали уже около 15 релизов с обновлениями. Все это исходя из просьб авторов и пользователей. Там уже появились подписки, игнор-лист, автобан по рейтингу, загрузка видео, дополнительные фильтры и в целом много полезного.
- А что стало настоящим триггером: «Сделаю свой проект!»
- Отмена минусов на «Пикабу». Это сильно триггернуло. Очень многих. Я был очень активным пикабушником почти восемь лет. А эти изменения привели к тому, что авторские посты стали быстро тонуть в тоннах другого копипастного контента с других ресурсов. Стало понятно – качество контента будет падать на ресурсе. Многие захотели куда-то уйти. Я понял, что пора бы начать что-то свое пилить.
ПРО КОМАНДУ: ЕХИДНА И ВОМБАТОЛОГ
- Сколько человек в команде «Вомбат» и какие у них функции?
- В начале разработки я был один. После запуска я предложил своей бывшей коллеге взять роль Product Owner, совмещенную с поддержкой юзеров и привлечением новых авторов. Универсальный специалист. Это очень сильно меня разгрузило. Позже предложил помощь один разработчик, который заинтересовался проектом… Сегодня в команде четыре человека. Я, Product Owner, «вомбатолог» и «ехидна» - девушка, которая занимается всем ,что касается развития проекта и связями с общественностью.
ПРО ПЛАНЫ: УКЛОН В АВТОРСКИЙ КОНТЕНТ
- Александр, какие планы по развитию Вомбата сейчас? Только развлекательный контент по аналогии с Пикабу или …?
- Сейчас вектор развития Пикабу сместился на аудиторию, потребляющую быстрый контент. Авторские посты уже не выходят часто в горячее как раньше. При этом умная читающая аудитория, которая любит длиннопосты или иной контент, никуда не делась. В том числе, для таких авторов и читателей мы и готовы предоставить площадку на Вомбате. Мы будем придерживаться развлекательного контента, но с уклоном в авторский. Не копипаста из сети. В целом планов сейчас больше чем времени. У меня в разработке, например, список задач на 70 пунктов. Ачивки, награды, переработка системы рейтинга. И еще столько же по каким-то мелким багам.
Что касается не технической части, то это привлечение авторов. Чем больше, тем лучше. Иногда некоторые пользователи просят позвать кого-то, кого они читали на других ресурсах. Иногда сами находим интересные паблики или аккаунты. Главная задача – получить стабильный поток контента на разные темы.
- Переманиваете топовых авторов с Пикабу?
- Это сложно назвать переманиванием. Мы просто сообщаем пользователям, что появилась новая площадка. Дальше они сами решают – поддерживать новый проект или нет. Многие авторы сегодня тоже страдают от изменений на Пикабу. Но в целом к нам стабильно приходят. У нас публикуют посты такие известные ребята как Deathman, Мама Лада, Гена Инженерский, Хрусталев и еще ряд крупных авторов. «Сарафан» хорошо работает. Многие о нас слышали и приходят посмотреть, что за проект.
- У некоторых ваших коллег прямо в описании в телеграм-аккаунтах стоит: «Вомбат - у нас можно ставить минусы». Т.е. вы сделали противопоставление Пикабу своим позиционированием. Это настолько было важно пользователям?
- Это оказалось важным по той причине, что минусы очень хорошо фильтруют контент. Поддерживать его на определенном уровне. Если вспомнить «рыцарей свежего» (группа пользователей, которая ставит оценки новым постам) на Пикабу, то они всегда фильтровали новый контент. Они ставили минусы контенту не лучшего качества. В «Горячее» в итоге выходили хорошие посты. Когда минусы отменили, то «рыцари свежего» остались не у дел и качество контента стало падать. Минусы очень хороший инструмент, когда он работает вместе с автоматическим баном по рейтингу. Если аккаунт ушел в большой минус, то он получает автоматический бан. На Пикабу это тоже отменили.
- Но ведь были и те, кто был доволен отменой минусов? Не было противостояния двух групп? Одни «за» отмену. Другие «против»…
- Скажу так: по отмене минусов высказывают чаще негативное мнение. Позитива мало. В целом, позитивно реагировали те, кто имеет внешние ресурсы. Например, те, кто дает ссылку на свой телеграм-канал в постах и ведет туда свою аудиторию. При этом эти посты стали простой копипастой. Я помню, когда в горячее выходили посты с отрицательным рейтингом. Это можно было увидеть в мобильном приложении. Там отображение минусов отключили позже, чем в веб-версии. Соответственно, в «горячем» можно было видеть посты, которые по факту имели отрицательный рейтинг.
- Это же не первый бунт на Пикабу? И пару лет назад пользователи выступали против каких-то нововведений. Насколько в России развито сообщество авторов и потребителей контента, которое уходит и создает свои отдельные проекты? Я говорю о сплоченности сообщества.
- Конечно, эти сообщества существуют, и все проявления недовольства связаны с действиями администрации ресурса. В основном, отсутствие обратной связи на реакцию пользователей. Часто это происходит из-за странного толкования администрацией своих же правил. Например, «клубничный бунт».
- Что это?
- Модератор удалила фотографию, которая, по ее мнению, являлась эротическим контентом. Хотя на фото была девушка в одежде. Тогда люди конкретно взбунтовались и начали требовать более четких правил. Четкого описания, что можно публиковать, а что нет.
ПРО ДЕНЬГИ: КТО ФИНАНСИРУЕТ?
- А как финансируется сейчас проект «Вомбат»?
- Сегодня проект не имеет никакого внешнего финансирования. Только донаты. Все сервера, рекламу, платные сервисы – я оплачиваю. На сайте рекламы сейчас тоже нет.
Несколько пользователей взяли на себя шефство над призовыми фондами. Конкурсы, которые проходят у нас. То есть мерч ,который можно выиграть за пост, частично покрывается их донатами.
- То есть уже есть определенное коммьюнити?
- Да, стараемся
- А возможность донатов авторам?
- Да, мы планируем такую возможность, как нарастим аудиторию.
ПРО НЕЙМИНГ: ЛЕГКО СКАЗАНО!
- Александр, я погуглил и нашел еще сайт в вашей нише «Капибар». Откуда эта мода в нейминге на животных и почему, собственно, «Вомбат»?
- Да, есть такие ребята «Капибар». Мы с ними даже проводили совместную активность на Новый год. Обменивались подарками.
Почему «Вомбат»? У меня на поиск названия было минимум времени. Хотел что-то простое в произношении. Легкое на слух. Но доступное для регистрации в качестве доменного имени… Но четкого ответа нет.
ВАС ПЫТАЛИСЬ КУПИТЬ?
- А Пикабу не пытались с вами связаться? Возможно, купить. Чтобы вы не развивали свою активность.
Короткий познавательный пост, основанный на моей больной фантазии. Все совпадения случайны.
Обратился как-то один человек на профильном форуме с вопросом, как запустить (не сказать чтобы старую) игру на Windows 10. Игра (хотя я бы назвал это технодемо) была разработана на легендарном XNA 4.0 (земля пухом) и планировалась к выпуску через Steam Greenlight (и ему земля пухом) еще в далеком 2012, после чего заброшена и убрана со всех магазинов.
Игра была куплена тем человеком еще в тот момент, когда она легально продавалась. А спустя годы она просто перестала подавать признаки жизни. $5 за полную версию уплочены, а поиграть нельзя. Обидно.
Так как типовые решения по типу установки XNA Redistributable не помогли, то был предложен единственно возможный выход из ситуации - отладка через dnSpy.
Внимание: обратная разработка хоть прямо и не запрещена законодательно, но разрешенные случаи весьма ограниченны. В других странах разрешен явный запрет любых манипуляций через лицензию, превращающий это занятие во вполне наказуемое. Не повторяйте дома.
Так как ПО было приобретено легально и оно не работает, то этот теоретический случай допустим в соответствии со статьей 1280 гражданского кодекса.
Демонстрировать буду на бесплатной демоверсии, скачать можно здесь.
dnSpy
Театр начинается с вешалки, а программа на C# с атрибутов сборки. Они нам сейчас не сильно интересны, поэтому пытаемся сразу запускать отладку. С неизвестными программами лучше использовать виртуальную машину, так как может быть встроена какая-нибудь пакость для кулхацкеров, но мне можно и так.
Ошибка. Открываем стек вызовов и ищем место, где произошел провальный запрос в сеть.
А вот и виновник торжества. По сообщению из исключения можно сделать вполне однозначный вывод, что проблемой является скупердяйство и непредусмотрительность автора, который решил перестать платить за домен и хостинг, а вместе с этим случайно (а может и намеренно) сделал запуск игры невозможным без интернета. Так как на сайте заявлено отсутствие DRM, то это явно недосмотр.
Что тут происходит?
Если почитать документацию на XNA, то этот метод предназначен для загрузки контента и вызывается автоматически при запуске игры. Первым делом выполняется инициализация некоторых вещей, после чего открывается файл настроек (options.xml) и начинает последовательно считываться. Как только считываются параметры аккаунта для таблицы рекордов, то происходит отправка логина+пароля на официальный сайт и попытка получить ID. Если сервер возвращает Failure, то открывается диалог входа, который можно пропустить. Если сервер возвращает число, то игра запускается. А вот если сервер недоступен, то вылетает исключение, которое никак не обрабатывается и приводит к молчаливому вылету.
Диалог входа официально можно пропустить.
На этом этапе есть 2 варианта действий:
Вручную отредактировать настройки и убрать пункт об аккаунте. Тогда игра будет всегда запускаться без входа.
Физически убрать запрос на несуществующий сайт.
Нормальные герои всегда идут в обход, так что переходим к написанию небольшого патча. (На самом деле, о первом варианте я додумался не сразу. Более того, полная версия зависает при убирании этого пункта из настроек).
Выделяем строчку с запросом и нажимает "Изменить инструкции IL". Открывается окно с заголовком "Изменение тела метода".
Это - язык MSIL. Он очень прост и сильно напоминает Forth, на самом деле, но новичка может отпугнуть.
Ключевым элементом является стек. Что такое стек я уже когда-то рассказывал. Это некоторое место, на вершину которого можно последовательно добавлять значения (числа, строки и прочие объекты), а так же снимать их в обратном порядке.
Не эти стеки, но суть та же. Можно добавлять и снимать сверху.
ldloc.2: Значение локальной переменной под номером 2 (с типом строки)
ldstr: Строку "&p=".
ldloc.3: Значение локальной переменной под номером 3 (тоже строка).
Потом мы вызываем String::Concat(), принимающий в себя 4 строки и соединяющий их вместе. При вызове метода будут сняты 4 верхние строки со стека и добавлена новая строка.
Вызов следующего метода (WebClient::DownloadString()) снимает строку, полученную от String::Concat(), и веб-клиент. В результате должна остаться только 1 строка, возвращенная WebClient::DownloadString().
Следующим этапом мы должны снять эту строку со стека и сохранить её в локальную переменную 1, но этого не произойдет, так как WebClient::DownloadString() всегда будет проваливаться и выбрасывать исключение. Исключение, если его не обработать сразу, будет раз за разом проваливаться глубже по стеку вызовов, пока не достигнет обработчика или дна. Так как никаких обработчиков по пути нет, то исключение достигает дна и приводит к вылету.
Чтобы избежать получения исключения, мы можем убрать всё, что предназначено для запроса в сеть. Примерно вот так:
8 инструкций превратились в 2: загрузка строки с числом (которое может быть любым) и сохранение в локальную переменную под номером 1.
Сохраняем и проверяем результат.
Было.
Стало.
Из декомпилированного кода полностью исчез кусок с запросом. Осталась лишь загрузка константной строки и сравнение с "Failure", которое всегда будет успешным.
Сохраняем модуль и пытаемся запускать опять.
Жопиздан!
С этой задачей успешно справился человек, который не смыслит в программировании вообще ничего. По его словам, он джва года ждал эту игру!
Но не всё так просто. Если попытаться пройти любой уровень, то вылетит то же самое исключение.
Для исправления точно так же выделяем строку и опять редактируем инструкции в теле метода. Но так как отправка статистики нонче ни на что не влияет, то просто удаляем выделенные инструкции без остатка.
А для надежности выделяем WebClient, нажимаем "Анализировать" и смотрим, где еще может ждать нас подлянка.
В Finish.Update() мы ошибку только что исправили, в Game1.LoadContent() исправили в самом начале, а Login.button1_Click(), Program.Main() и Title.Update() нас не интересуют, так как достаточно просто не делать того, что приведет к обращению в сеть (а конкретно: не открывать диалог входа, не указывать никакие аргументы при запуске и не пытаться авторизоваться через главное меню (вроде бы не реализовано)).
Большинству пользователей известно, почему возник Вомбат. На этом я не стану заострять внимание.
А хочу обратить внимание на сложность разработки подобных сайтов. Даже на уровне MVP (минимально жизнеспособный продукт).
Даже если есть готовые наработки, то в любом случае надо продумать: модель, то есть схему базы данных, дизайн веб-морды, общее взаимодействие, то есть бизнес-модель,...
Независимо от всего разрабатываю своего бобра (это скорее будет что-то вроде Хабра, а не очередной аналог Пикабу). И уже раз десять сносил БД из-за невозможности внести изменения (миграции). Ну, может я такой рукожоп и просто не знаю как правильно сделать. 🤷♂️
Нужно продумать внешний вид сайта. Тут сильно помогает такой инструмент как Figma. Да, дизайнеры Figm-ой занимаются. 🙃После пары настроек пользоваться одно удовольствие. Но мало задизайнить. Надо это ещё и в код перенести. А это уже вёрстка. Довольно нудное занятие.
В общем, чего хотел сказать, захотите сделать свой Пикабу с блекджеком и плюхами, то готовьтесь к тому, что заебётесь...
Всем доброго времени! Наткнулся я не так давно на вот такое изображение:
И решил порассуждать не тему того, а плоха ли такая ситуация и как вообще бывает, как идет разработка backend и frontend в вещах которыми я занимался, возможно кому то будет интересно, а кому то захочется подискутировать со мной)
Во первых о понятиях, что такое "Бекенд" и "Фронтенд", я работал с разными разработчиками и даже студиями и понял что иногда эти понятия отличаются у разных людей (особенно когда речь идет о том как HR их понимает), по этому поясню что я в них вкладываю:
Frontend - "передний конец", это весь визуал который видит человек пользуясь программным обеспечением, а так же скрипты которые исполняются на стороне (на устройстве) пользователя.
на примере сайта, это его верстка, а так же javascript который перелистывает слайды, раскрывает выплывающие окна и т.д.
Backend - "задний конец", это всё что исполняется "под капотом" программы, в случае сайта это на сервере, в случае какой то настольной программы, внутрипрограмные механизмы, например обращающиеся к каким то функциям операционной системы и производя какие то расчеты и действия
на примере сайта, это его серверная часть, механизмы которые к примеру работают с базой данных, получают из неё пост для страницы на которой находится пользователь, и к примеру комментарии для этого поста и т.д.
А теперь как раз о том, что разрабатывается первее и почему.
Возьмём вебсайт, вы например хотите что бы вам сделали интернет магазин, обычно этапы разработки выглядят так:
- Создание и утверждение дизайна
- Верстка дизайна
- Подключение к верстке т.н. "Движка" или cms или "системы управления контентом", или же что очень редко и индивидуально, написания этой самой системы с нуля в порядке индивидуальной разработки и внедрения её в вёрстку.
т.е. по сути тут выходит что разработка Бекенда идёт после Фронтенда - и получается что как будто то что показано в меме это естественный ход событий и ни каких вопросов это не может вызывать?
Стоит сказать что последовательность работ которую я описал, это обычно усреденная разработка, где люди не сильно запаиваются составлением подробных ТЗ. По ней выходит то что когда готов дизайн, и на основе него вёрстка, это всё передается программисту работающему над Бэекендом, и он сразу видит, что и где ему нужно будет подключать и в каком виде: "Здесь у нас поиск, с возможностью сортировки и выбору диапазона дат постов", "Тут мы выводим чат, который обновляется каждые пару секунд" и т.д. Программист сразу визуально видит какие данные в какие элементы интерфейса ему нужно выводить, от чего ему более понятен план работ, по тому что он "визуален".
Но предположим что сроки разработки сжаты, и требуется что бы разработка обоих частей проходила одновременно, в таком случае необходимо очень точное техническое задание, где будет подробно прописано то как будет работать бэекенд, какова будет структура базы данных, какие данные при каких обстоятельствах будут из неё извлекаться, каким образом обрабатываться, в каком виде перезаписываться обратно и в какой части условного ещё не созданного даже в виде дизайна интерфейса отображаться.
Это довольно фантастический план, так как обычно не бывает заказчиков которые чётко знают как должен выглядеть их сервис\сайт\по и даже не всегда представляют себе точный его функционал.
Это всё зачастую формируется как раз во время разработки и утверждения дизайна, и по этому программист который с самого старта одновременно с дизайном начал разрабатывать свой бекенд, чаще всего обречен по ходу появления дизайна и вёрстки вносить коррективы в свою работу, а иногда даже переписывать её часть.
Но есть например аспекты которые можно на мой взгляд проработать и без дизайна, например структуру базы данных и её таблиц, создать какие то общие функции, провести базовую настройку движка или фреймфорка с которым будет работа.
Но всё же когда дизайн утверждён и верстка окончена и принята заказчиком, это уже гарантирует стабильность разработки. (при условии конечно если заказчику не взбредёт в голову что то на ходу изменять, но такие вещи должны быть учтены в договоре и проходить за дополнительную оплату)
Примерно то же самое происходит и при разработке приложения для телефона.
Программисту всегда проще подключать бекенд к чему то готовому, чем прорабатывать так называемые API (простым языком объясняя это точки доступа через которые интерфейс получает данные из бекенда) почти в слепую или по скупому ТЗ (я просто ещё не видел по настоящему подробных ТЗ за исключением тех которые в своей педантично душной манере составлял).
По этому становится очевидно что это вполне себе нормальная ситуация, когда Фронтенд давно готов, на него можно посмотреть, потыкать, а Бекенд ещё только подключается, а то ещё и вовсе в стадии разработки.
Но есть один сценарий когда бекенд идёт первее фронтенда - это когда разрабатывается какое то техническое программное обеспечение у которого изначально вовсе нет интерфейса, например какой нибудь локальный сервер - пишется собственно сама програмина, а её настройка и в целом взаимодействие с ней происходит через терминал\консоль\командную строку.
В данном случае интерфейс появляется уже после того как ПО было разработано, зачастую таким программным обеспечением можно пользоваться и без интерфейса через всё тот же терминал, отправляя команды которые ты вводишь в него вручную (прям как хакер из кинофильма), а графический интерфейс создаётся уже потом(иногда очень сильно потом) просто для удобства пользователя и отображает все стандартные и часто используемые опции (для более тонких настроек за частую используется всё равно командная строка) и по сути графический интерфейс, отправляет те же самые команды что вы бы вводили в терминал, просто делает это по нажатию на кнопочки.
На этом всё, надеюсь кому то было интересно почитать эти возможно сумбурные рассуждения, сейчас попробую выловить все грамматические ошибки в этом опусе, перед тем как нажать кнопку "опубликовать пост"😅
В первой главе мы с вами узнали, как и где создавались первые "шахматные автоматы", которые были всего лишь имитаторами программируемых шахматных роботов. Сегодня знакомство с первыми настоящими шахматными алгоритмами и программами.
*** Глава 2. Как роботы научились играть в шахматы ***
Чтение советской и американской прессы 70-х годов прошлого XX-го века оставляет приятное послевкусие.
Конечно, нельзя было говорить о дружбе между СССР и США, но отношения явно улучшились по сравнению с послевоенными годами.
В американской прессе мелькают сообщения о смягчении давления американской бюрократии на Коммунистическую партию США. В частности, в 1973 году федеральный окружной суд в Аризоне постановил, что большая часть закона против американских коммунистов неконституционна, и Аризона должна допустить КП США к участию в голосовании на всеобщих выборах ("Блавис против Болина").
В советской прессе насмешки над убогим мещанским западным (в основном американским) образом жизни продолжались (в духе Михаила Задорнова "ну, тупые"). Но при этом явно начала изменяться эмоциональная окраска этих насмешек. Злая язвительная сатира потихоньку менялась на добродушный юмор с весёлыми приколами.
Вот мы читаем сообщение о нищем, который обитает на богатой парижской помойке. Ничего особо интересного в этом факте нет. Не было никакого секрета в том, что на этом Западе нищих огромное количество, как блох на бродячей собаке. Но именно в этом нищем была интересная изюминка. На своём плакате, ниже стандартного объявления "подайте плиз, кто сколько может жертве холокоста, бюрократии и бездушия", нищий сделал странную и наглую приписку "доллары США не принимаю".
Не знаю, придумал журналист эту хохму, или реально зафиксировал нечто подобное, но эта короткая заметка порождает у читателей множество мыслей, начиная от надежд, что долларовая долговая пирамида скоро рухнет до желания дать нищему полезный совет: "бери, дурачок, что дают, потом ненужное выбросишь".
Учёные экономисты по обе стороны океана начинают осторожно высказывать идеи о возможности "конвергенции" капитализма и социализма. При этом, в США должны усилиться социальные гарантии для трудящихся, а в СССР для "деловых людей" должны быть предоставлены возможности для полезных экономических частных инициатив (типа строительства личных дач и не только).
Самое главное, что в такой атмосфере о прямом военном конфликте не могло быть и речи. Решались вопросы о возможностях сотрудничества в разных областях.
В 1972 году в Москве председатель Совета министров СССР Алексей Косыгин и президент США Ричард Никсон подписывают "Соглашение о сотрудничестве в исследовании и использовании космического пространства в мирных целях". В 1975 году в рамках этого соглашения был реализован совместный полёт советского и американского пилотируемых космических кораблей со стыковкой на орбите (знаменитый проект "Союз - Аполлон").
Вот в таких условиях мирной конкуренции и делового сотрудничества СССР и США с явным желанием обеих сторон уйти от прямых военных столкновений в 1974 году состоялось грандиозное событие для всех любителей шахмат и прикладного программирования: первый в мире чемпионат мира среди шахматных программ.
Состоялось это мероприятие в Стокгольме во время конгресса ИФИП (IFIP, International Federation for Information Processing).
Лидерами в области шахматного программирования были американцы. В США было 50 действующих шахматных программ, во всем остальном мире (Европа + СССР) около 20. Также в США уже был богатый опыт проведения внутренних чемпионатов. Последний чемпионат США стал отборочным к первому чемпионату мира. Лучшими оказались программы: "Чесс-4.0", "Теч-2", "Хаос" и "Острич". Они и представляли США на этом турнире.
Что же касается нашей страны, то у нас в боевом режиме была единственная программа "Каисса" и ещё несколько программ в стадиях подготовки и перспективной разработки. Именно "Каисса" и представляла СССР на этом турнире. По итогам турнира "Каисса" заняла первое место и завоевала золотую медаль весом 110 грамм.
После окончания турнира "Каисса" в виде бонусного трека сыграла дополнительную товарищескую партию с лучшей американской программой "Чесс-4.0". После долгой и упорной борьбы партия завершилась вничью.
Насколько сильно играли лучшие компьютерные программы в 1974 году? Мне представляется, если бы они играли в сегодняшних (2025 год) турнирах для людей, например, на популярном шахматном сайте "ЛиЧесс", то изначально показывали бы рейтинг в диапазоне 1800-2000 в блице с контролем 5+0. Для сравнения сегодняшние лучшие гроссмейстеры показывают здесь рейтинги 3000+ или, как минимум, около того. А если бы обсчитывали рейтинги современных лучших компьютерных программ типа "Стокфиш" и "АльфаЗирро" при их играх с людьми, то мы увидели бы рейтинги 4000+ или даже 5000+. Короче, эти современные роботы били бы всех людей без малейших шансов для последних. Примечание. При условии взаимной честной игры, но это уже совсем другая тема.
После первого чемпионата разработчики упорно работали над усовершенствованием своих программ.
В 1977 году состоялся второй чемпионат мира среди компьютерных программ в канадском городе Торонто.
Наша "Каисса" приняла участие и в этом чемпионате. Уже в первом туре чемпионка преподнесла неожиданный сюрприз для всех, включая зрителей, своих разработчиков и присутствовавших на турнире гроссмейстеров и мастеров.
Позиция из партии: "Duchess" - "Каисса", Торонто, 1977. Тур: 1.
"Каисса" до этого игравшая неплохо в этой чуть лучшей позиции вдруг делает ряд странных ходов, начиная отсюда: 29. … а5?
30. g4 Фe6
31. Лc6 a4?
32. Ф:а4 Лd6
33. Л:d6 Ф:d6
34. Фа8+
Здесь все ожидали естественного хода 34. … Крg7
Но "Каисса" вдруг ставит под бой ладью 34. … Лe8 и затем постепенно проигрывает без каких-либо шансов.
После партии, когда Каиссу спросили, в чем дело, она объяснила, что ход 34. ... Крg7 гораздо хуже, чем сделанный ею ход 34. ... Лe8.
В доказательство "Каисса" показала такой вариант:
34. ... Крg7 35.Фf8+! Крxf8 36. Сh6+ Сg7 37. Лc8+
"Каисса" демонстрирует вариант, которые не увидели даже гроссмейстеры
37. … Фd8 38. Л:d8+ Лe8 39. Л:e8X.
Специалисты, среди них были гроссмейстеры Ботвинник, Эдуард Ласкер, Ганс Берлинер, канадский международный мастер Леон Пиасетский эту комбинацию не обнаружили и объясняли народу этот заскок Каиссы "несовершенством шахматных программ".
В конечном результате турнира Каисса разделила 2—3 места с программой Duchess. Победила в чемпионате программа "Чесс-4.0".
До сих пор идут диспуты, а увидела бы программа Duchess во время партии этот выигрывающий ход 35.Фf8+
Далеко не факт, учитывая, ограниченность времени на обдумывание в турнирной партии.
В любом случае, если ход 34. ... Лe8 объективно сильнее (т.к. затягивал поражение на много ходов), то никто не будет спорить, что практических шансов больше у скромного хода 34. ... Крg7
Мне стало любопытно, а как бы в критической позиции пошла бы современная программа: 34. ... Лe8 или 34. ... Крg7 - ?
Я задал этот вопрос "Стокфишу" и получил ответ: 34. ... Лe8
Вот так!
Такие тонкие психологические моменты не понимали шахматные программы в 1977-м году, не понимают их они и сейчас, в 2025-м.
Возьмем этот факт на заметку, он нам пригодится для дальнейших рассуждений.
А как вообще роботы научились играть в шахматы? Точнее говоря, кто был их первым учителем?
Вообще говоря, много умнейших людей брались за эту интереснейшую проблему и решали её с разной степенью успеха.
Традиционно считается, что самым первым шахматным программистом в мире был Алан Тьюринг. В 1951 году он написал алгоритм Turochamp, с помощью которого машина могла бы играть в шахматы. Самое забавное, что это был чисто теоретический труд. У Алана не было компьютера, чтобы проверить свою программу на практике.
Тем не менее, его идеи были использованы другими учёными, а идеи тех, в свою очередь, новыми учёными, и вот, что мы имеем в сухом остатке.
Попробуем набросать примерный алгоритм игры в шахматы.
Что нам нужно сделать? Написать программу, которая умеет находить сильнейший ход в любой позиции.
Немного подумав, почитав разных полезных статей, становится ясно, что тут есть 2 принципиальных краеугольных камня.
Функция, которая оценивает позицию (оценочная функция).
Функция, которая как-то умеет определять максимальную глубину просмотра.
Давайте, попробуем набросать функцию, которая оценивает позицию.
Для простоты пока сделаем глубину просмотра равную одному полуходу и анализировать будем начальную позицию.
Примечание. Пусть будет 0.1 балл за одно свободное поле под атакой.
Премия за очередь хода. Пусть пока будет 0. Не уверен, что это вообще хорошая идея.
Проверку на мат проводим. Вообще, вряд ли кому-то будет мат в начальной позиции или после первого полухода. Но проверять надо.
Оценка позиции = Белые - Черные = (38.2+18)-(38.2+18) = 56.2-56.2 = 0
Теперь нам надо подобным образом оценить все позиции после всех возможных ходов.
Оценка позиции после 1-го хода белых
Ход Баллы
a3 0.0
a4 0.2
b3 0.2
b4 0.2
c3 0.2
c4 0.3
d3 0.6
d4 0.7
e3 0.9
e4 0.9
f3 0.0
f4 0.1
g3 0.2
g4 0.2
h3 0.0
h4 0.2
Кa3 0.1
Кc3 0.3
Кf3 0.3
Кh3 0.1
Получается следующий результат. Если применять данную оценочную функцию и использовать глубину расчета на 1 полуход, то в данной позиции получаются лучшие ходы: e3 или е4.
Теперь мы можем уточнить оценку начальной позиции. Если изначально она была равна 0, то после первого полухода стала равной 0.9.
Разумеется, если мы посмотрим чуть глубже (т.е. оценим все позиции после всех возможных 2-х полуходов), то оценка начальной позиции опять изменится. Наверное, она опять станет равной 0, например, после 1. e4 e6.
А если посмотреть немного глубже, хотя бы на 20 полуходов? Все это, конечно, можно сделать, посвятив этому процессу месяц или два, но это уже всё сделано до нас.
Комментарии