Тестирую синхронизацию объектов на перемещение и атаку между 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 (простым языком объясняя это точки доступа через которые интерфейс получает данные из бекенда) почти в слепую или по скупому ТЗ (я просто ещё не видел по настоящему подробных ТЗ за исключением тех которые в своей педантично душной манере составлял).
По этому становится очевидно что это вполне себе нормальная ситуация, когда Фронтенд давно готов, на него можно посмотреть, потыкать, а Бекенд ещё только подключается, а то ещё и вовсе в стадии разработки.
Но есть один сценарий когда бекенд идёт первее фронтенда - это когда разрабатывается какое то техническое программное обеспечение у которого изначально вовсе нет интерфейса, например какой нибудь локальный сервер - пишется собственно сама програмина, а её настройка и в целом взаимодействие с ней происходит через терминал\консоль\командную строку.
В данном случае интерфейс появляется уже после того как ПО было разработано, зачастую таким программным обеспечением можно пользоваться и без интерфейса через всё тот же терминал, отправляя команды которые ты вводишь в него вручную (прям как хакер из кинофильма), а графический интерфейс создаётся уже потом(иногда очень сильно потом) просто для удобства пользователя и отображает все стандартные и часто используемые опции (для более тонких настроек за частую используется всё равно командная строка) и по сути графический интерфейс, отправляет те же самые команды что вы бы вводили в терминал, просто делает это по нажатию на кнопочки.
На этом всё, надеюсь кому то было интересно почитать эти возможно сумбурные рассуждения, сейчас попробую выловить все грамматические ошибки в этом опусе, перед тем как нажать кнопку "опубликовать пост"😅
Решил немного попробовать себя в авторском контенте, а за одно и рассказать о своём видении расширений для браузера.
Многие из нас знакомы с расширениями(плагинами) для браузеров которыми они пользуются, в основном это блокировщики рекламы, вроде Адблока или Юблока. В наше время, как по мне блокировщик рекламы в браузере, это прям вещь необходимая, так как я лично на многие сайты просто зайти не могу без морального потрясения когда нет блокировщика. Серьёзно! Я понимаю что владелец сайта хочет заработать, но некоторый типа фандома, откровенно жадничают, количество рекламных блоков просто зашкаливает! Но суть не в этом.
Что такое вообще расширение для браузера? В примитиве это небольшой скрипт который производит некие манипуляции на странице сайта. В случае адблока, скрипт пробегает по странице сайта и скрывает все блоки которые в его "списке" помечены как рекламные.
Есть более сложные расширения такие как ВПН, которые взаимодействуют не просто со страницей, а уже с настройками браузера и т.д., но речь сегодня не о них.
Мне больше нравится сама идея того что есть возможность расширить или модифицировать свой браузер эдаким изящным апплетом.
Например когда на ютюбе скрыли дизлайки, некто написал расширение которое при загрузке страницы улавливает параметр количества дизлайков ил "потрохов" сайта и не смотря на то что администрация ютюба это дело скрыла, плагин сам генерирует кусочек html кода и через JavaScript вставляет его в нужное место!
В этом мне нравится сама идея избавления от каких то идей которые нам хочет так или иначе навязать администрация сайта! (Цифровая диктатура как сейчас модно говорить)
Самое простое что можно сделать через расширения это скорректировать дизайн того или иного сайта под себя (или сразу всех), создать какую то свою интересную тему. Например заменить общий фон тела страницы на какой то узор, и сделать цвет текста мягче.
Работа расширений как и их создание (и размещение) очень просты, всем управляет JavaScript, а какие то вещи вроде меню настроек которые открываются при нажатии на его иконку, это просто небольшая html страничка.
По сути расширение это такая папочка с файлами, которая в случае firefox запаковывается в zip, после чего расширение у файла с zip меняется xpi и расширение готово к установке в браузер. В случае с браузерами на движке Chromium (chrome,opera,eadge,yandex e.t.c.) ничего запаковывать и вовсе не нужно, в настройках можно выбрать установку расширения из папки.
А что в папке?
Во первых файл manifest.json - это грубо говоря "паспорт" расширения, документ в котором написано, что это за расширение, кем создано, какая версия, какая у него иконка стоит, какие оно запрашивает разрешения у браузера (например возможность работать как раз с контентом страницы), указания того что за страничка будет открываться при нажатии на иконку, а так же указание какой скрипт нужно выполнять на сайтах при работе.
Далее естественно сама страничка index.html - которая показывается при нажатии на иконку, там обычно размещают какие то настройки, переключатели состояния. Это все легко верстается на html тэгах, а стили задаются в отдельному css файлике, ну или если лень то прям среди html тэгов.
Ну и раз есть настройки то нажатие на них нужно как то регистрировать? Здесь нам поможет файлик main.js - в котором мы пропишем логику того что будет происходить когда пользователь нажимает например на наши кнопочки в меню. Грубо говоря там будут инструкции в стиле "нажал на кнопку > происходит следующее"
И если мы пишем расширение которое работает с чем то на открытых нами сайтах то и скрипт background.js - в котором будут уже инструкции о том что будет расширение делать на открытых нами сайтах.
Так же тут находятся сопутствующие папочки вроде img или icons где у нас лежат какие то изображения и графика которую мы используем и иконка самого расширения.
по итогу у нас получается примерно такая вот структура:
Как это работает: человек кликает на иконку приложения в шапке окна браузера, ему показывается index.html в котором какие то настройки, при клике по настройкам файл main.js их обрабатывает, например сохраняет их значение в память браузера. А далее файл background.js который запускается на каждом открытом нами сайте, в начале получает из памяти браузера настройки которые натыкал пользователь, а затем на их основе проводит какие то манипуляции, например заменяет все изображения на странице на фото Николаса Кейджа, с той прической которая похожа на птицу.
Самое интересное для меня что в теории любой может на досуге попробовать в плане "поиграть", написать что то подобное для себя. В сети полно бесплатных мануалов и уроков, да и сейчас тот же chatGpt если задавать правильные вопросы может наглядно показывать подробные примеры кода и объяснять их работу.
Я постарался максимально простым языком описать работу расширений, без лишней терминологии что бы любой заинтересованный (надеюсь) смог примерно понять как это работает)
Надеюсь было интересно, за ошибки прошу прощения, я больше по части языков на котором говорят машины😁
Комментарии