Ответы пользователя по тегу Веб-разработка
  • Блокировщик трекеров браузера отрубает GTM и искажает скрипты сайта, что с этим поделать?

    dollar
    @dollar
    Правильным будет прекратить отслеживать пользователя, который не хочет, чтобы его отслеживали.

    Как определить блокировщик, легко гуглится. Хотя даже без гугла не вижу проблемы - можно легко догадаться проверить наличие/видимость баннера, например. А если баннеров нет, то происследовать результат работы блокировщика, он же на виду.
    Ответ написан
  • Абсолютная защита от выкачки файлов с сайта?

    dollar
    @dollar
    Никак.

    То, что показано на экране, можно легко снять с экрана и записать в отдельный файл. Например, с помощью OBS Studio. И подобных программ для снятия экрана много. И не важно, каким именно способом картинка (видео) отображается на экране.
    Ответ написан
  • Как сделать переадресацию на другой сайт, если основной недоступен?

    dollar
    @dollar
    Это невозможно.

    Разве что сделать переадресацию непосредственно в голове пользователя. То есть нужно заранее объявить всем, что у сайта есть зеркало по такому-то адресу. Частоблокируемые сайты именно так и поступают. Плюс они имеют какую-нибудь группу в ВК, или вики, или блог, или твиттер, где пишут новости о том, доступен ли сайт, какие сейчас проблемы, и как скоро починят.
    Ответ написан
  • Как использовать 1 localstorage на 2 js файла?

    dollar
    @dollar
    Контент скрипт расширения работает как часть сайта, то есть отдельно от самого расширения. Поэтому используется localStorage сайта. Причем, у каждого сайта свой localStorage, и контент скрипт может быть привязан к нескольким или ко всем сайтам. Интересно, какой логикой должен руководствоваться браузер, чтобы связать localStorage какого-то одного сайта из многих и localStorage браузерного расширения воедино?

    В общем, чтобы обмениваться информацией между контент скриптом и расширением, нужно использовать сообщения. Для этого нужно добавить в расширение фоновую страницу, и там сделать обработчик сообщений. Таким образом, фоновая страница выступает как бы сервером, а каждый контент скрипт на любом сайте - клиентом.
    Ответ написан
  • Может ли Роскомнадзор блокировать сайты в зонах OpenNIC?

    dollar
    @dollar
    Роскомнадзор может запретить доступ к сайту. Причем, на уровне провайдеров, а не конечных пользователей. То есть людям можно заходить на любые сайты (на свой страх и риск).

    Как блокировать - это уже отдельная тема. Например, можно запретить OpenNIC, внеся в реестр соответствующие адреса, а дальше уже дело техники (так что ответ - да, может).

    Поэтому конкретно для васв вашем доме (офисе) блокировку будет осуществлять конкретно ваш провайдер, а не Роскомнадзор. И как он это будет делать и будет ли вообще - конкретно ваш случай. Однозначно ответить не просто.
    Ответ написан
  • Как сделать, чтобы при переходе между страницами язык сохранялся?

    dollar
    @dollar
    Что значит "при переходе"?
    • Если вы генерируете страничку с уже готовыми ссылками по типу www.domen/lang/..., то и язык в них уже есть. Собственно, это самый правильный путь с вашей моделью. То есть на страничке /en/ все ссылки должны быть /en/, на страничке /ru/ все ссылки с /ru/ и т.д. Сам контент может быть en (когда ru нет), но адрес и все ссылки на странице - ru в соответствии с адресом странички.
    • Если же у вас ссылки голые www.domen/home.... или с языком по умолчанию, то вот вам и ответ. Ошибка в этом.
    Ответ написан
  • Определение уровня программиста по фрагменту кода?

    dollar
    @dollar
    Предположим, есть некий Вася, который пилит мобильные приложения в одиночку. Пилит хорошо, в его коде нет ни одного бага. Ну, просто он гений, да и перепроверяет свой код по сотне раз перед публикацией. Делает на этом большие деньги.

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

    Вопрос в том, какой уровень у программиста Васи. Как это определить? Плохой он программист или хороший? И плохой для кого? Лично Васе - норм, денег хватает на еду, яхту и на загородный особняк. Можно ли вообще по коду понять его "уровень"? Это же не игра какая-нибудь, где можно качать свой левел, который отображается в углу в виде цифры.

    Вот вам вилка для примера:
    • Код может быть кривым, но круто оптимизированным. То есть работает настолько быстро, насколько это вообще возможно на использованных технологиях.
    • Или же наоборот, код красиво оформлен, с комментариями, разбит на кучу мелких функций для удобства понимания, но в нем есть как бы ошибка в самой архитектуре. Типа сортировки пузырьком.
    Ответ написан
  • Как правильно выполнить запрос перед закртием/загрузкой другой страницы?

    dollar
    @dollar
    А других официальных вариантов и нет. Только синхронно.

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

    Более правильно не выполнять запрос вообще. Вместо этого нужно записать куда-нибудь в куки или localStorage информацию, и при следующем посещении сайта отправлять её туда-сюда, сколько угодно раз. Если же нужно детектить именно само закрытие, то можно раз в N секунд делать ajax или другим способом поддерживать соединение, и по таймауту считать пользователя "отвалившимся".

    Код, который может помочь
    window.addEventListener("beforeunload", e => {
    	if (is_test_passed) {
    		return;
    	}
    	let message = "Вы уверены, что хотите закончить тест?";
    	if (typeof e == "undefined") {
    		e = window.event;
    	}
    	if (e) {
    		e.returnValue = message;
    	}
    	return message;
    }
    Ответ написан
  • Как сделать таймер при помощи команды на сервере игре, чтобы он появился на Сайте?

    dollar
    @dollar
    Веб-сайт в данном случае тоже сервер, и для понимания введем понятия:
    • Игровой сервер (или просто сервер)
    • Веб-сервер (бекенд)
    • Браузер пользователя или клиент или фронтенд


    Далее задачу можно разделить на два (три) этапа:

    Этап первый

    Вам нужно, чтобы ваш сервер отсылал на веб-сервер информацию о начале и конце. Это делается по протоколу HTTP или HTTPS, что-то типа java.net.HttpUrlConnection, но я точно не знаю, что вам лучше подойдет для этой цели.

    Соответственно, на веб-сервере у вас должен быть свой скрипт на любом языке, обычно это PHP. Этот скрипт сохраняет информацию в базу (обычно MySQL).

    Чтобы хранить таймер, который всё время меняется, нужно хранить неизменные его части. А именно - начало и конец, или начало и продолжительность, или просто время окончания (timestamp) с точностью до секунды.

    Этап второй
    Это общение веб-сервера и браузера (клиента). И тут есть свои тонкости.

    Во-первых, сразу вилка на функционал - либо у вас таймер появляется по нажатию по F5 (обновить страницу). То есть вы обновляете страницу, браузер запрашивает новые данные с веб-сервера, и после этого показывает таймер. Либо у вас страница веб-сайта открыта, и там в реальном времени вдруг появляется таймер. Сам! Это можно сделать по-разному, но самый банальный способ - чтобы веб-страница (то есть браузер) делала запрос каждые 10 секунд в фоне (ajax), и если вдруг появляются новые данные, то страница преображается.

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

    В остальном всё просто. Информация из базу тупо посылается на клиент, то есть время окончания, и дальше на клиенете скрипт работает локально. Он показывает отсчет времени до старта игры. Собственно, написание этого мини скрипта на JavaScript можно считать третьим этапом.
    Ответ написан
  • Какими способами и технологиями можно реализовать сайт строительной компании?

    dollar
    @dollar
    Backend здесь будет тупо базой данных с минимальной логикой.
    Вся красота ложится на frontend, и здесь уже используется такая технология, как JavaScript. Если точнее, то WebGL, хотя можно и старый добрый Canvas. В любом случае, это всё JavaScript. И других вариантов, в общем-то, нет.

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

    И дальше это всё дело нужно грамотно соединить с бизнес процессами, чтобы бронь квартиры одним пользователем не позволяла сделать то же другому пользователю, который одновременно с первым смотрит ту же самую квартиру. Чтобы сама бронь (покупка) происходила быстра и без гемора. Чтобы систему не смогли абузить конкуренты, по крайней мере, чтобы это было не просто. И так далее.

    Таким образом, всё упирается не в технологию, а в специалистов, которые будут это всё разрабатывать и реализовывать. Тяп-ляп любой вам сделает, недорого, даже я могу (но не буду). А вот, чтобы клиентам нравилось, это нужно подойти с умом к подбору людей, которые будут воплощать эти удобства в жизнь.

    Так что вам нужно смотреть, в первую очередь, дизайн (в смысле, проектирование), маркетинг, контроль качества. Либо просто выбрать исполнителя за вменяемые деньги, который все тонкости возьмет на себя.
    Ответ написан
  • Sublime вместо кириллицы показывает это РћРЎРљРђР. В чем ошибка?

    dollar
    @dollar
    Сразу видно, что это текст в UTF-8, который хотят отобразить в кодировке Windows-1251.

    Для начала надо понять, в какой кодировке сам файл. То, что вы сюда скопипастили, ничего не говорит о файле. Желательно использовать именно UTF-8 в файле. Далее, сервер в HTTP-заголовке должен отдавать сообщение о том, что файл именно в этой кодировке. И если сервер не умеет или вам лень его настраивать, то можно в самом HTML указать, что файл в этой кодировке. Как-то так:
    <meta charset="UTF-8">

    В конце концов последнее слово за бразуером. Если он по каким-то причинам не захочет отображать в нужной кодировке, то проблема в нём.
    Ответ написан
  • Как правильно использовать if else?

    dollar
    @dollar
    Скобки обязательны:
    if (условие) действие;

    Если больше одного действия, то они оформляются в блок:
    if (условие) { действие; действие; }

    С else всё то же самое, только нет условия.
    if (условие) действие; else действие;

    Хотя в качестве действия снова может быть ветвление. Каждое условие в скобках, иначе интерпретатор не сможет понять, где кончается условие и начинается действие.
    if (условие) действие; else if (условие) действие;
    Ответ написан
  • Как бороться с ботами, которые тратят бюджет сайта?

    dollar
    @dollar
    Пользователь должен отправить боту смс. За свой счёт, естественно.

    Ещё можно, чтобы бот бросал трубку сразу, не дожидаясь ответа пользователя. Номер всё равно останется у пользователя в неотвеченных. А за попытку набрать номер деньги разве берут?
    Ответ написан
  • Общая таблица учеников онлайн школы. Есть готовые решения?

    dollar
    @dollar
    Google Doc, а точнее Google Sheets (гуг таблицы) решают вашу проблему.

    Для этого нужно расшарить её не по ссылке, а выдать доступ каждому индивидуально, по e-mail с правом на редактирование. Далее, если кто-то всё удалит за 2 секунды, то в истории документа (таблицы) вы сможете посмотреть, кто именно это сделал. Можно откатить изменения.

    Далее есть такая штука, как Google Forms. Вы можете создать форму типа формы регистрации, только простую - вводишь свои ФИО и дату занятия (к примеру). Эту форму можно сконнектить с гугл таблицей, куда будут поступать данные. Саму таблицу открыть только для чтения или вообще не открывать (лишь преподавателю нужно будет ее смотреть).

    Вот вам и база данных + UI. Дешево и сердито.

    Я уж молчу про то, что там можно и скрипты прикрутить, если будет необходимость. Можно защищать отдельные диапазоны таблицы и т.д. Собственно, думаю, вам всё же понадобится скрипт в случае использования Google Forms. Во-первых, нужно посылать письмо, что место забронировано или что места кончились. Ведь может быть так, что два человека регистрируются одновременно, а место осталось одно. Плюс когда места кончились, нужно автоматически менять форму, чтобы она была закрыта и превращалась просто в уведомление "мест больше нет".

    PWA - тоже выход. Понадобится один фрилансер (программист, желательно с уклоном в UI/UX) для создания приложения и немного денег на хостинг (12 руб в месяц). Готовых решений нет.
    Ответ написан
  • Можно ли получить данные с сервера, имитировав post запрос?

    dollar
    @dollar
    Зависит от продуманности защиты сервера.
    Если защиту проектировали любители, то там будет много дыр, не обязательно именно эта. Надо щупать, чтобы понять, какие дыры есть. Но вам это может аукнуться постфактум.
    Ответ написан
  • Как снять блокировку сайта в opendns?

    dollar
    @dollar
    1. Нужно написать в суппорт opendns и выяснить точную причину блокировки.
    2. Устранить причину.
    3. Снова написать и попросить разблокировать.
    4. Ждать и молиться. Если ни по какому закону они не обязаны вас разблокировать, то они могут этого и не делать (вечно).

    К примеру, этот вопрос модератор может удалить. Просто так. Может указать причину и уведомить вас, а может и не делать этого. В соглашении сказано, что вам никто ничего не обязан. Вы можете пожаловаться на беспредел по вашему мнению, и вопрос даже могут восстановить. Но не потому, что вам должны или что так справедливо и правильно, а потому что захотят (по своим личным соображениям добра и морали). Такие правила.
    Ответ написан
  • Как сделать подмену размера экрана?

    dollar
    @dollar
    Нужно запустить виртуальную машину. В ней вы настраиваете размер (виртуального) экрана штатными средствами, а далее в ней можно запускать браузер. Также есть всякие новомодные онлайн сервисы, но это такое себе решение, не для всех задач.
    Ответ написан
  • Что означает "?v=1" при подключении .css?

    dollar
    @dollar
    Означает, что какая бы ни была кеширующая система на сервере и на клиенте, добавление такой фигни форсирует кеш (почти) без вариантов, потому что это как бы другой файл. То есть если что-то изменили в css, можно это добавить, и в новой страничке загрузится новая версия css, а не из кеша.
    Ответ написан
  • Какие языки нужны для написания игр и приложений на Android?

    dollar
    @dollar
    Для начала немного не по теме вопроса:
    • Чтобы стать разработчиком игр, нужно знать не только языки. Причем, языки составляют где-то 10% от всех знаний.
    • Разрабатывать игры в одиночку почти невозможно. Конечно, если это не пятнашки без особых фич. Средние игры, и даже хорошие игры с оригинальной идеей будут приносить околонулевой доход. Игра должна быть отличной, чтобы шанс на успех был выше нуля. А для этого нужен широкий спектр знаний и навыков, которые одном человеку освоить сложно (долго).

    По теме вопроса:
    • Делать игры лучше на Unity, поэтому язык C#. Но Unity это не только язык, это ещё и движок конкретно для игр, который на сегодня (2019), можно сказать, победил все остальные движки. Он имеет большие возможности, производителен, удобен в использовании, и всё это в купе с простотой освоения (низкий порог вхождения).
    • Для собственного сайта подойдёт почти любой язык, но выбор зависит от игры. Ведь вам нужен не столько сайт, сколько игровой сервер (бэкенд). И реализация будет зависеть от специфики игры. Если у вас игра сама как сайт, т.е. переходы по страницам через кнопки, то можно игровой сайт поместить в приложение. В этом случае и PHP подойдёт. Если игра в реальном времени (типа шутера или гонок), при этом огромное число пользователей, то узким местом станет нагрузка на сервер, да и вообще стабильность. Так что бэкенд придется делать на высокопроизводительном языке, таком как C/C++. Ну или, например, Elixir (Erlang). Если у вас что-то среднее между этим, то подойдёт, опять-таки, любой язык, умеющий работать с сокетами и поддерживать сессию игрока. Как я и говорил в преамбуле, всё это сложно, и даже для выбора и реализации архитектуры сервера желателен отдельный специалист.
    Ответ написан
  • Насколько сложно защитить веб-приложение от основных видов атак?

    dollar
    @dollar
    Зависит от того, что за конкретное приложение и кому может понадобиться его ломать, сколько он готов будет вложить времени и денег. Ответ на это определит возможный вектор атак и соответствующие меры и стоимость защиты.

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

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