• Замыкания в чем конкретно разница?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не работает, потому что к тому времени, когда функция onclick будет вызвана, переменная i дойдет до самого конца цикла. И будет использоваться именно это, последнее значение.

    В первом варианте переменная i используется в конкретной итерации, т.е. берется photos[i] и это значение дальше передаётся, а сама переменная i больше не используется, так что в целом пофиг, как там она дальше будет изменяться.

    Ведь в первом варианте вызов addThumbnailClickHandler(thumbnails[i], photos[i]) происходит прямо в цикле, сразу, без промедлений, а не откладывается на потом. В этот момент конкретные значения передаются в качестве параметров. И далее из-за замыкания они так и остаются висеть в памяти и ссылаться на то, что нужно.

    Немного изменим код, и он снова перестанет работать :)
    var i;
    
    var addThumbnailClickHandler = function (thumbnail) {
      thumbnail.addEventListener('click', function () {
        fullPhoto.src = photos[i]; // i === thumbnails.length
      });
    };
    
    for (i = 0; i < thumbnails.length; i++) {
      addThumbnailClickHandler(thumbnails[i]);
    }
    Ответ написан
    Комментировать
  • Сервер на python3?

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

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

    Может быть, вы хотите передавать новые координаты фишки в двух случаях: 1) при изменении координат, но 1 раз в секунду 2) сразу же после того, как фишка поставлена. На втором клиенте движение сглаживается с учетом того, что траектория не особо важна. Это будет ваша оптимизация, и только ваша. Поэтому сокеты.
    Ответ написан
    Комментировать
  • Как по ссылке понять, что это сайт интернет-магазин?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно по ключевым словам, признакам и т.д.

    Если по-модному, то нужно обучить нейронную сеть на распознавание магазинов.

    Понятное дело, что в пару строчек кода не получится. И готовое решение вряд ли кто-то предложит.
    Ответ написан
  • Как внести изменения и сделать deploy в код PWA приложение?

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

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

    Вообще попробуйте банально location.reload();
    Ответ написан
    Комментировать
  • Разработка игр.Как начать?

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

    Если вы знаете С++, то скорее всего вам зайдет другой движок - Unreal, так что можете начать с него. Он не такой модный, потому что порог вхождения выше, как раз из-за С++, но вы-то его знаете. И он вполне годный. В чем-то даже лучше Unity - меньше готовых решений (которые ограничивают ваши хотелки) и больше свободы, настроек, возможностей. Красиво устроен внутри. Продуманный. Вообще он для серьезных бородатых людей, а Unity нынче может даже школьник освоить.

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

    Короче, нужно помнить два основных момента:
    1. Геймдев - это сложно. Реально сложно. Одному человеку, как правило, не под силу. Конечно, если это не пятнашки или тетрис, а также если ваша конечная цель - прибыль.
    2. Геймдев и любовь к играм - это не одно и то же. Совсем. Разница примерно такая же, как ездить на машине и чинить машину (и тем более, проектировать ее). Поэтому если вы просто игроман и хотите применить навыки программирования к играм, то делайте моды (Lua) и не касайтесь сферы геймдева.

    Готовы спуститься в ад? Тогда добро пожаловать в геймдев. :) И удачи! Она вам понадобится.

    P.S. Родственник явно далёк от геймдева. Но если очень хочется, вот вам исходники игр.
    Ответ написан
    Комментировать
  • Где вести блог о разработке своей игры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Я бы ещё добавил про фейсбук, если вы, как и многие коммерчески нацеленные игроделы, ориентируетесь на запад и сша.

    Фидбек - дело тонкое. Его лучше получать от тестеров. Вы же не собираетесь прогибаться под любые капризы игроков? Проблема в том, что они, как правило, сами не знают, что хотят. И если реализовывать все их желания, то игра может скатиться в треш. А обычным путём вы и так получите фидбек после альфы.

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

    И не забывайте, что блог (форум, соц. сеть) - это время. В идеале для работы с аудиторией нужен КМ, т.е. отдельный человек. А если ваш проект сложный и долгий, то людей и времени, как я понимаю, у вас не так много. Так что до первой альфы я бы на вашем месте вообще не занимался маркетингом. Кстати, долго ждать никто не любит, имейте это в виду. Если разработка больше года, то вы почти гарантированно начнете терять потом и кровью собранную аудиторию. Желательно за полгода выйти в ранний доступ, а дальше уже полноценно работать с аудиторией. И, опять-таки, нынче "ранний доступ" это полноценный продукт с небольшими огрехами, т.е. за короткие сроки желательно сделать всю игру.
    Ответ написан
    1 комментарий
  • Видел кто-нибудь быстрый алгоритм динамической генерации бесконечного пещерного лабиринта?

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

    А дальше начинаются оптимизационные моменты, которые зависят от нюансов задачи. К примеру, в 2D вам, скорее всего, нужно заполнить экран и немного за экраном. А в 3D прямой коридор придется делать бесконечно, пока он наконец не повернет, ведь пользователь от первого лица должен увидеть конец коридора, а не пустоту, каким бы длинном он ни был.

    Далее не понятно, как вы данные храните. Если у вас нет поля заданного размера, то хоть какое-то поле есть? Или каждая клетка/комната/соединение у вас представлены отдельным объектом в куче? И лабиринт по сути не сетка, а граф? От этого алгоритм тоже зависит.
    Ответ написан
  • Почему не работает регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если же убрать символы начала и конца строки, то все работает

    Очевидно, что-то есть в начале или в конце. Например, символ новой строки. Ну или ещё есть вариант, что весь текст склеивается в строку или что-то в этом роде (вряд ли).
    ^total processes:[ \t]+([0-9]+)[\r\n]$

    Для проверки попробуйте банально понять, что же там такое:
    total processes:[ \t]+[0-9]+(.*)$
    ^(.*)total processes:[ \t]+[0-9]+
    Ответ написан
  • Когда язык может стать узким местом?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала в Гугле можно набрать python vs go slant

    Далее, почему Go, а не Erlang, например? Обычно выбор конкретного инструмента зависит от конкретной задачи. Так что в вопросе не лишним было бы описать (хотя бы внутри спойлера), что за проект, на что акцент и т.д., если это не секрет, конечно.
    Ответ написан
    1 комментарий
  • Как организовать структуру файлов при работе с проектом многостраничного сайта?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вопрос про удобство. Вы не знаете, как вам удобнее?

    Я бы не делил на css/js/и т.д., потому что всегда можно отсортировать по расширению, если очень надо. А вот по логике и функциональности делить более осмысленно. Так что папочка libs (возможно, с подпапками) имеет смысл, имхо, остальное зависит от логики проекта. Думаю, до 200к текста удобнее всё в одной папке в виде отдельных файлов с правильными именами, чтобы сортировка по имени создавала группы согласно здравому смыслу. Ну а так зависит от предметной области и архитектуры.
    Ответ написан
    Комментировать
  • Как уйти от использования async в js?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "ajax.txt", false);
    xhr.send(); //Скрипт остановится до получения ответа
    document.getElementById("demo").innerHTML = xhr.responseText;
    Ответ написан
    Комментировать
  • Есть ли смысл маскировать админку под 404?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если вам важно, чтобы юзер знал, что по этому адресу что-то есть, но у него нет прав (но в теории права могут появиться), то 403 или даже что-то более вразумительное, иначе можно 404.

    Если вы защищаетесь от взлома и от лишней нагрузки на сайт, то лучше сделать админку с другим именем. Хотя в плане безопасности это так себе решение.

    Так что ответ - нет, не имеет смысла.
    Ответ написан
    Комментировать
  • Почему используется половина памяти в пустую?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Ответ написан
    Комментировать
  • Кто и когда придумал секцию комментариев на сайтах?

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

    А до форумов были гостевые книги - т.е. комментарии к сайту.

    До этого (до интернета) были маркетинговые исследования, опросы (бумажные), анкеты (тоже бумажные), но это не совсем комментарии. Результаты опроса видят только организаторы, а комментарии друг друга видят вообще все. Поэтому те комментарии, к которым мы привыкли, появились только с появлением интернета (по крайней мере, медиа типа радио).
    Ответ написан
    Комментировать
  • Как сократить выражение в условном операторе?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вообще быстрее будет не перебором массива, пусть и встроенной функцией, а поиск по хешу. Да и в целом, думаю, красивее, хотя дело вкуса:
    const hashes = [ DIV:1, P:1, SPAN:1, ... ];
    if (hashes[el.nextSibling.nodeName]) {
      ...

    Хотя это и экономия на спичках. Но если проверок сотни и тысячи, то хеш-таблица однозначно выгоднее.
    Ответ написан
    7 комментариев
  • Как сделать симку вечной и избежать блокировки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Раз в 3 месяца слать смс, увы.
    Иметь соответствующего оператора (у меня МТС).

    А вообще наблюдается тенденция, что активные сим-карты (т.е. просто подключенные к сети) не будут блокироваться. Если вынуть из устройства и положить на полку, то через некоторое время заблокируются, от этого уже не уйти, т.к. люди умирают, а цифр мало на всех.
    Ответ написан
  • Будет ли улучшение производительности, если выводить статьи не в php коде, а передавать их в ajax?

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

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

    Ну и главное, это наличие у каждой статьи своего уникального URL. Говорю на всякий случай, потому что если вы додумались до того, что смена статьи будет происходить через ajax без смены адреса, то это однозначно плохо. Скорее всего, вы это и так понимаете, поэтому ответ прежний - в общем случае практически без разницы php или ajax.

    P.S. Что реально лучше перекладывать на клиента, точнее давать в виде дополнительной фичи - так это сортировку таблиц с данными в статье. Опять-таки, таблицы должны отображаться без JS. Но при наличии JS их можно сортировать сразу плюс давать пользователю кнопки сортировки, которая будет происходить локально, без перезагрузки страницы. Это и приятно, и снимает нагрузку с сервера (по количеству соединений).
    Ответ написан
    2 комментария
  • Фильмы в YouTube законны?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если фильм не ваш, то формально вы не можете его выкладывать, это будет противозаконно. Разве что правообладатель дал лично вам разрешение.

    Сам правообладатель (условно, автор) может выкладывать свои произведения абсолютно законно. Так что если вы попали на официальный канал и там нашли фильм, то ничего удивительного.

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

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

    И если у вас есть стойкое желание пиратить, то Ютуб - не ваш выбор. Для этого есть отдельные пиратские сайты с фильмами, а также всеми любимые торренты. Это абсолютно не законно, но там и поймать сложно.
    Ответ написан
    Комментировать
  • Как блокировать рекламу?

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

    1) Установка блокировщика на каждое устройство. Благо их у вас не так много. К слову, не всех раздражает реклама, так что вы можете поставить блокировщик себе, а остальным по желанию. С ноутом и компом очевидно - uBlock Origin. С планшетами решайте сами. На iOS себя хорошо показывает платный AdGuard Pro (убирает рекламу во всех приложениях).

    2) Фильтрация рекламы на уровне DNS. Сам роутер при этом у вас должен являться DNS. По идее он у вас и DHCP по совместительству, так что не проблема указывать самого себя сервером DNS во время раздачи настроек каждому устройству. Хорошее решение, по-моему, платный SkyDNS. Но можно также самостоятельно сделать (скачать и далее править самому) файл hosts, в котором бы было перечислено всё рекламное. Минус файла hosts в том, что нельзя задавать маску, так что для максимальной гибкости вам понадобится более умное решение - умный dns или firewall. Что вам удобнее и в чем вы разбираетесь (и сколько у вас лишних денег) я не знаю.
    Ответ написан
    Комментировать
  • В чем/как/где записывать сжетные лини квеста?

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

    P.S. https://www.draw.io/
    Ответ написан
    Комментировать